019c0ea9-e35a-710a-b93e-e2ba664180fb
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 42248 | artifact.fetch | complete | 1 / 3 | 2 months ago |
| 42249 | proxy.resolve | complete | 1 / 3 | 2 months ago |
| 42250 | tool.cast_disasm | complete | 1 / 3 | 2 months ago |
| 42251 | analysis.bundle | complete | 1 / 3 | 2 months ago |
| 42252 | capability.graph | complete | 1 / 3 | 2 months ago |
| 42253 | detector.run | complete | 1 / 3 | 2 months ago |
| 42254 | validation.fork | complete | 1 / 3 | 2 months ago |
| 42484 | report.consolidate | complete | 1 / 6 | 2 months ago |
| 42485 | tool.slither | complete | 1 / 2 | 2 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-2yugzs_x)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-2yugzs_x)
TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) uses arbitrary from in transferFrom in combination with permit: IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom-used-with-permit
TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285) ignores return value by IERC20(usdc).transfer(relayer,uint256(balance - 1)) (contracts/TruthBridge.sol#279-283)
TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) ignores return value by IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)
TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329) ignores return value by IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)
TruthBridge.uniswapV3SwapCallback(int256,int256,bytes) (contracts/TruthBridge.sol#341-349) ignores return value by IERC20(usdc).transfer(msg.sender,uint256(amount0Delta)) (contracts/TruthBridge.sol#349)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer
Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304):
External calls:
- IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s) (contracts/TruthBridge.sol#296)
- IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
State variables written after the call(s):
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)
- relayerBalance[msg.sender] = 1 (contracts/TruthBridge.sol#472)
TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:
- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)
- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)
- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)
- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)
- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)
- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)
Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304):
External calls:
- IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s) (contracts/TruthBridge.sol#296)
- IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)
State variables written after the call(s):
- relayerBalance[msg.sender] = balance (contracts/TruthBridge.sol#301-303)
TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:
- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)
- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)
- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)
- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)
- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)
- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)
Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329):
External calls:
- IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
State variables written after the call(s):
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)
- relayerBalance[msg.sender] = 1 (contracts/TruthBridge.sol#472)
TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:
- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)
- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)
- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)
- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)
- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)
- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)
Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329):
External calls:
- IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)
State variables written after the call(s):
- relayerBalance[msg.sender] = balance (contracts/TruthBridge.sol#326-327)
TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:
- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)
- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)
- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)
- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)
- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)
- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1
TruthBridge.__refundRelayer(address,int256) (contracts/TruthBridge.sol#544-565) ignores return value by (None,amount1) = IUniswapV3Pool(pool).swap(address(this),true,balance,MIN_SQRT_RATIO + 1,) (contracts/TruthBridge.sol#550-553)
ERC1967Utils.upgradeToAndCall(address,bytes) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#67-76) ignores return value by Address.functionDelegateCall(newImplementation,data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#72)
ERC1967Utils.upgradeBeaconToAndCall(address,bytes) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#157-166) ignores return value by Address.functionDelegateCall(IBeacon(newBeacon).implementation(),data) (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#162)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return
TruthBridge.__refundRelayer(address,int256).relayer (contracts/TruthBridge.sol#544) lacks a zero-check on :
- (success,None) = relayer.call{value: ethAmount}() (contracts/TruthBridge.sol#562)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation
Reentrancy in TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476):
External calls:
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
State variables written after the call(s):
- relayerBalance[msg.sender] = 1 (contracts/TruthBridge.sol#472)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2
Reentrancy in TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476):
External calls:
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
Event emitted after the call(s):
- LogRefundFailed(msg.sender,balance) (contracts/TruthBridge.sol#474-476)
Reentrancy in TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285):
External calls:
- IERC20(usdc).transfer(relayer,uint256(balance - 1)) (contracts/TruthBridge.sol#279-283)
Event emitted after the call(s):
- LogRelayerDeregistered(relayer) (contracts/TruthBridge.sol#285)
Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304):
External calls:
- IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s) (contracts/TruthBridge.sol#296)
- IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
Event emitted after the call(s):
- LogLiftedToPredictionMarket(usdc,deriveT2PublicKey(user),amount) (contracts/TruthBridge.sol#303-304)
- LogRefundFailed(msg.sender,balance) (contracts/TruthBridge.sol#474-476)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)
Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329):
External calls:
- IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)
- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)
Event emitted after the call(s):
- LogRefundFailed(msg.sender,balance) (contracts/TruthBridge.sol#474-476)
- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)
- LogRelayerLowered(lowerId,amount) (contracts/TruthBridge.sol#327)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
TruthBridge.corroborate(uint32,uint256) (contracts/TruthBridge.sol#425-431) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp > expiry (contracts/TruthBridge.sol#431)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp
Ownable2StepUpgradeable._getOwnable2StepStorage() (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#35-39) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#36-38)
OwnableUpgradeable._getOwnableStorage() (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#30-34) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#31-33)
Initializable._getInitializableStorage() (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#232-237) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#234-236)
PausableUpgradeable._getPausableStorage() (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#27-31) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#28-30)
ReentrancyGuardUpgradeable._getReentrancyGuardStorage() (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#49-53) uses assembly
- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#50-52)
TruthBridge.checkLower(bytes) (contracts/TruthBridge.sol#358-398) uses assembly
- INLINE ASM (contracts/TruthBridge.sol#390-391)
TruthBridge._extractLowerData(bytes) (contracts/TruthBridge.sol#476-488) uses assembly
- INLINE ASM (contracts/TruthBridge.sol#482-488)
TruthBridge._recoverAuthorId(bytes32,uint256,uint256) (contracts/TruthBridge.sol#532-544) uses assembly
- INLINE ASM (contracts/TruthBridge.sol#537-539)
TruthBridge.__refundRelayer(address,int256) (contracts/TruthBridge.sol#544-565) uses assembly
- INLINE ASM (contracts/TruthBridge.sol#563-565)
TruthBridge._verifyConfirmations(bool,bytes32,bytes) (contracts/TruthBridge.sol#574-632) uses assembly
- INLINE ASM (contracts/TruthBridge.sol#593-594)
SafeERC20._safeTransfer(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#176-200) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#179-199)
SafeERC20._safeTransferFrom(IERC20,address,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#212-244) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#221-243)
SafeERC20._safeApprove(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#255-279) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#258-278)
LowLevelCall.callNoReturn(address,uint256,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#19-23) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#20-22)
LowLevelCall.callReturn64Bytes(address,uint256,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#38-48) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#43-47)
LowLevelCall.staticcallNoReturn(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#51-55) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#52-54)
LowLevelCall.staticcallReturn64Bytes(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#62-71) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#66-70)
LowLevelCall.delegatecallNoReturn(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#74-78) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#75-77)
LowLevelCall.delegatecallReturn64Bytes(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#85-94) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#89-93)
LowLevelCall.returnDataSize() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#97-101) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#98-100)
LowLevelCall.returnData() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#104-111) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#105-110)
LowLevelCall.bubbleRevert() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#114-120) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#115-119)
LowLevelCall.bubbleRevert(bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#122-126) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#123-125)
StorageSlot.getAddressSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#66-70) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#67-69)
StorageSlot.getBooleanSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#75-79) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#76-78)
StorageSlot.getBytes32Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#84-88) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#85-87)
StorageSlot.getUint256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#93-97) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#94-96)
StorageSlot.getInt256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#102-106) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#103-105)
StorageSlot.getStringSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#111-115) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#112-114)
StorageSlot.getStringSlot(string) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#120-124) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#121-123)
StorageSlot.getBytesSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#129-133) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#130-132)
StorageSlot.getBytesSlot(bytes) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#138-142) uses assembly
- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#139-141)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage
7 different versions of Solidity are used:
- Version constraint ^0.8.20 is used by:
-^0.8.20 (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#4)
-^0.8.20 (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#4)
-^0.8.20 (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#4)
-^0.8.20 (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#4)
-^0.8.20 (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#4)
-^0.8.20 (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#4)
-^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)
-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Errors.sol#4)
-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#4)
-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
- Version constraint ^0.8.22 is used by:
-^0.8.22 (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#4)
- Version constraint 0.8.30 is used by:
-0.8.30 (contracts/TruthBridge.sol#1-2)
-0.8.30 (contracts/interfaces/IChainalysis.sol#1-2)
-0.8.30 (contracts/interfaces/IChainlinkV3Aggregator.sol#1-2)
-0.8.30 (contracts/interfaces/ITruthBridge.sol#1-2)
-0.8.30 (contracts/interfaces/IUniswapV3Callback.sol#1-2)
-0.8.30 (contracts/interfaces/IUniswapV3Pool.sol#1-2)
-0.8.30 (contracts/interfaces/IWETH9.sol#1-2)
- Version constraint >=0.6.2 is used by:
->=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
- Version constraint >=0.4.16 is used by:
->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol#4)
->=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
- Version constraint >=0.4.11 is used by:
->=0.4.11 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)
- Version constraint ^0.8.21 is used by:
-^0.8.21 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#4)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used
ContextUpgradeable.__Context_init() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#18-19) is never used and should be removed
ContextUpgradeable.__Context_init_unchained() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#21-22) is never used and should be removed
ContextUpgradeable._contextSuffixLength() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#31-33) is never used and should be removed
ContextUpgradeable._msgData() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#27-29) is never used and should be removed
Initializable._getInitializedVersion() (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#208-210) is never used and should be removed
Ownable2StepUpgradeable.__Ownable2Step_init_unchained() (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#46-47) is never used and should be removed
PausableUpgradeable.__Pausable_init_unchained() (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#80-81) is never used and should be removed
ReentrancyGuardUpgradeable._reentrancyGuardEntered() (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#104-107) is never used and should be removed
UUPSUpgradeable.__UUPSUpgradeable_init_unchained() (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#68-69) is never used and should be removed
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code
Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- VerbatimInvalidDeduplication
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess.
It is used by:
- ^0.8.20 (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#4)
- ^0.8.20 (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#4)
- ^0.8.20 (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#4)
- ^0.8.20 (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#4)
- ^0.8.20 (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#4)
- ^0.8.20 (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#4)
- ^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)
- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Errors.sol#4)
- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#4)
- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
Version constraint ^0.8.22 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- VerbatimInvalidDeduplication.
It is used by:
- ^0.8.22 (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#4)
Version constraint >=0.6.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- MissingSideEffectsOnSelectorAccess
- AbiReencodingHeadOverflowWithStaticArrayCleanup
- DirtyBytesArrayToStorage
- NestedCalldataArrayAbiReencodingSizeValidation
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching
- EmptyByteArrayCopy
- DynamicArrayCleanup
- MissingEscapingInFormatting
- ArraySliceDynamicallyEncodedBaseType
- ImplicitConstructorCallvalueCheck
- TupleAssignmentMultiStackSlotComponents
- MemoryArrayCreationOverflow.
It is used by:
- >=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
Version constraint >=0.4.16 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- DirtyBytesArrayToStorage
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching
- EmptyByteArrayCopy
- DynamicArrayCleanup
- ImplicitConstructorCallvalueCheck
- TupleAssignmentMultiStackSlotComponents
- MemoryArrayCreationOverflow
- privateCanBeOverridden
- SignedArrayStorageCopy
- ABIEncoderV2StorageArrayWithMultiSlotElement
- DynamicConstructorArgumentsClippedABIV2
- UninitializedFunctionPointerInConstructor_0.4.x
- IncorrectEventSignatureInLibraries_0.4.x
- ExpExponentCleanup
- NestedArrayFunctionCallDecoder
- ZeroFunctionSelector.
It is used by:
- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol#4)
- >=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
Version constraint >=0.4.11 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- DirtyBytesArrayToStorage
- KeccakCaching
- EmptyByteArrayCopy
- DynamicArrayCleanup
- ImplicitConstructorCallvalueCheck
- TupleAssignmentMultiStackSlotComponents
- MemoryArrayCreationOverflow
- privateCanBeOverridden
- SignedArrayStorageCopy
- UninitializedFunctionPointerInConstructor_0.4.x
- IncorrectEventSignatureInLibraries_0.4.x
- ExpExponentCleanup
- NestedArrayFunctionCallDecoder
- ZeroFunctionSelector
- DelegateCallReturnValue
- ECRecoverMalformedInput
- SkipEmptyStringLiteral.
It is used by:
- >=0.4.11 (lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol#4)
Version constraint ^0.8.21 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- VerbatimInvalidDeduplication.
It is used by:
- ^0.8.21 (lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol#4)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in TruthBridge.__refundRelayer(address,int256) (contracts/TruthBridge.sol#544-565):
- (success,None) = relayer.call{value: ethAmount}() (contracts/TruthBridge.sol#562)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Function Ownable2StepUpgradeable.__Ownable2Step_init() (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#43-44) is not in mixedCase
Function Ownable2StepUpgradeable.__Ownable2Step_init_unchained() (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#46-47) is not in mixedCase
Constant Ownable2StepUpgradeable.Ownable2StepStorageLocation (@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol#33) is not in UPPER_CASE_WITH_UNDERSCORES
Function OwnableUpgradeable.__Ownable_init(address) (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#51-53) is not in mixedCase
Function OwnableUpgradeable.__Ownable_init_unchained(address) (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#55-60) is not in mixedCase
Constant OwnableUpgradeable.OwnableStorageLocation (@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol#28) is not in UPPER_CASE_WITH_UNDERSCORES
Function UUPSUpgradeable.__UUPSUpgradeable_init() (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#65-66) is not in mixedCase
Function UUPSUpgradeable.__UUPSUpgradeable_init_unchained() (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#68-69) is not in mixedCase
Variable UUPSUpgradeable.__self (@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol#22) is not in mixedCase
Function ContextUpgradeable.__Context_init() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#18-19) is not in mixedCase
Function ContextUpgradeable.__Context_init_unchained() (@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol#21-22) is not in mixedCase
Function PausableUpgradeable.__Pausable_init() (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#77-78) is not in mixedCase
Function PausableUpgradeable.__Pausable_init_unchained() (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#80-81) is not in mixedCase
Constant PausableUpgradeable.PausableStorageLocation (@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol#25) is not in UPPER_CASE_WITH_UNDERSCORES
Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init() (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#60-62) is not in mixedCase
Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init_unchained() (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#64-67) is not in mixedCase
Constant ReentrancyGuardUpgradeable.ReentrancyGuardStorageLocation (@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol#47) is not in UPPER_CASE_WITH_UNDERSCORES
Parameter TruthBridge.initialize(address,address[],bytes32[],bytes32[],bytes32[],address)._truth (contracts/TruthBridge.sol#113) is not in mixedCase
Function TruthBridge.__refundRelayer(address,int256) (contracts/TruthBridge.sol#544-565) is not in mixedCase
Constant TruthBridge.feed (contracts/TruthBridge.sol#49-52) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TruthBridge.pool (contracts/TruthBridge.sol#52-53) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TruthBridge.usdc (contracts/TruthBridge.sol#53-54) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TruthBridge.weth (contracts/TruthBridge.sol#54-55) is not in UPPER_CASE_WITH_UNDERSCORES
Constant TruthBridge.sanctions (contracts/TruthBridge.sol#55-56) is not in UPPER_CASE_WITH_UNDERSCORES
Function IERC20Permit.DOMAIN_SEPARATOR() (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol#89) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
TruthBridge._unused (contracts/TruthBridge.sol#73) is never used in TruthBridge (contracts/TruthBridge.sol#28-632)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable
TruthBridge._unused (contracts/TruthBridge.sol#73) should be constant
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant
. analyzed (27 contracts with 100 detectors), 95 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.8.30",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.8.30",
"install_stderr": null,
"install_stdout": "Version '0.8.30' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-2yugzs_x --include-path /tmp/slither-2yugzs_x/lib --include-path /tmp/slither-2yugzs_x/lib/openzeppelin-contracts --allow-paths /tmp/slither-2yugzs_x,/tmp/slither-2yugzs_x/lib,/tmp/slither-2yugzs_x/lib/openzeppelin-contracts,/tmp/slither-2yugzs_x/src",
"remappings": [
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/"
],
"source_files": [
"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol",
"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol",
"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol",
"@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
"@openzeppelin/contracts/interfaces/IERC1363.sol",
"@openzeppelin/contracts/interfaces/IERC165.sol",
"@openzeppelin/contracts/interfaces/IERC1967.sol",
"@openzeppelin/contracts/interfaces/IERC20.sol",
"@openzeppelin/contracts/proxy/beacon/IBeacon.sol",
"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol",
"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol",
"@openzeppelin/contracts/token/ERC20/IERC20.sol",
"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
"@openzeppelin/contracts/utils/Address.sol",
"@openzeppelin/contracts/utils/Errors.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/StorageSlot.sol",
"contracts/interfaces/IChainalysis.sol",
"contracts/interfaces/IChainlinkV3Aggregator.sol",
"contracts/interfaces/ITruthBridge.sol",
"contracts/interfaces/IUniswapV3Callback.sol",
"contracts/interfaces/IUniswapV3Pool.sol",
"contracts/interfaces/IWETH9.sol",
"contracts/TruthBridge.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 95,
"workspace_hash": "739e28e954d3bc5de4ec537aebe6eb6a3df9a3bdca6da69ca441a5b30b0743df",
"duration_seconds": 1.9355134963989258,
"solc_version_requested": "0.8.30"
}
{"no_findings":false,"summary":"Found a high-severity reentrancy in the relayer refund flow and replayable author/lower signatures; also noted pause bypass, oracle safety gaps, and unchecked transfer returns.","findings":[{"severity":"high","category":"reentrancy","title":"Relayer refund can be reentered to withdraw multiple times","exploit_scenario":"A registered relayer calls relayerLower or relayerLift with triggerRefund=true. During __refundRelayer, the contract sends ETH to the relayer via a low-level call; the relayer reenters relayerLower/relayerLift before relayerBalance is reset, triggering another refund using the same outstanding balance. This can be repeated to drain USDC from the contract via repeated swaps.","recommendation":"Apply checks-effects-interactions: update relayerBalance before any external calls. Add nonReentrant to relayerLift/relayerLower and/or to the refund path, or move refunds to a pull-based withdrawal function.","evidence":"_attemptRelayerRefund calls this.__refundRelayer(...) and only then sets relayerBalance to 1 on success; __refundRelayer sends ETH to relayer via call, enabling reentrancy before state update.","locations":["contracts/TruthBridge.sol:relayerLift","contracts/TruthBridge.sol:relayerLower","contracts/TruthBridge.sol:_attemptRelayerRefund","contracts/TruthBridge.sol:__refundRelayer"]},{"severity":"medium","category":"auth","title":"Author confirmations and lower proofs lack domain separation (replayable signatures)","exploit_scenario":"Signatures used for addAuthor/removeAuthor/publishRoot and lower proofs are over raw payloads without chainId or contract address. If the same author keys are used on another deployment or chain, signatures can be replayed to add/remove authors or claim lowers on this contract as long as t2TxId/lowerId are unused.","recommendation":"Use EIP-712 typed data with a domain separator including chainId and verifying contract, or include contract address + chainId + nonce in the signed payloads.","evidence":"msgHash is keccak256(abi.encode(...)) of payload only, then prefixed with ESM_PREFIX; no domain fields are included before _verifyConfirmations.","locations":["contracts/TruthBridge.sol:addAuthor","contracts/TruthBridge.sol:removeAuthor","contracts/TruthBridge.sol:publishRoot","contracts/TruthBridge.sol:_processLower","contracts/TruthBridge.sol:_verifyConfirmations"]},{"severity":"low","category":"access_control","title":"Pause bypass for relayer operations","exploit_scenario":"When the contract is paused, relayerLift and relayerLower remain callable, allowing funds to be moved despite an emergency pause.","recommendation":"Add whenNotPaused to relayerLift and relayerLower or explicitly document/guard why they should bypass pause.","evidence":"relayerLift/relayerLower lack whenNotPaused while other state-changing entrypoints are paused.","locations":["contracts/TruthBridge.sol:relayerLift","contracts/TruthBridge.sol:relayerLower"]},{"severity":"low","category":"oracle","title":"Chainlink price used without sanity or staleness checks","exploit_scenario":"If the feed returns stale/zero/negative data, usdcEth can become zero or huge due to unchecked casting/division, leading to division-by-zero reverts or mispriced relayer costs/refunds.","recommendation":"Use latestRoundData(), verify updatedAt/answeredInRound, ensure answer > 0, and handle feed decimals explicitly.","evidence":"usdcEth casts latestAnswer() to uint256 and divides by 1e6 without any validation.","locations":["contracts/TruthBridge.sol:usdcEth"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer return values","exploit_scenario":"If USDC (or a token with non-reverting failure) returns false on transfer, the contract will continue execution: lowers may be marked claimed and relayer balances updated even though funds were not transferred.","recommendation":"Use SafeERC20.safeTransfer/safeTransferFrom and handle failures explicitly.","evidence":"Raw IERC20.transfer used without checking the return value.","locations":["contracts/TruthBridge.sol:deregisterRelayer","contracts/TruthBridge.sol:relayerLower","contracts/TruthBridge.sol:uniswapV3SwapCallback"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-ftzyw675
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019c0f9f-f214-7a52-993d-b237da789140
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
exec
/bin/bash -lc 'cat /tmp/codex-ftzyw675/AUDIT_BUNDLE.txt' in /tmp/codex-ftzyw675 succeeded in 7ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/TruthBridge.sol
================================================================================
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
/**
* @dev Bridging contract between Truth Network and Ethereum.
* Enables Author nodes to periodically publish T2 transactional state.
* Allows Authors to be added and removed from participation in consensus.
* "lifts" tokens from Ethereum addresses to Truth Network accounts.
* "lowers" tokens from Truth Network accounts to Ethereum addresses.
* Enables gasless lifting of USDC funds via relayers.
* Accepts optional ERC-2612 permits for lifting.
* Proxy upgradeable implementation utilising EIP-1822.
*/
codex
{"no_findings":false,"summary":"Found a high-severity reentrancy in the relayer refund flow and replayable author/lower signatures; also noted pause bypass, oracle safety gaps, and unchecked transfer returns.","findings":[{"severity":"high","category":"reentrancy","title":"Relayer refund can be reentered to withdraw multiple times","exploit_scenario":"A registered relayer calls relayerLower or relayerLift with triggerRefund=true. During __refundRelayer, the contract sends ETH to the relayer via a low-level call; the relayer reenters relayerLower/relayerLift before relayerBalance is reset, triggering another refund using the same outstanding balance. This can be repeated to drain USDC from the contract via repeated swaps.","recommendation":"Apply checks-effects-interactions: update relayerBalance before any external calls. Add nonReentrant to relayerLift/relayerLower and/or to the refund path, or move refunds to a pull-based withdrawal function.","evidence":"_attemptRelayerRefund calls this.__refundRelayer(...) and only then sets relayerBalance to 1 on success; __refundRelayer sends ETH to relayer via call, enabling reentrancy before state update.","locations":["contracts/TruthBridge.sol:relayerLift","contracts/TruthBridge.sol:relayerLower","contracts/TruthBridge.sol:_attemptRelayerRefund","contracts/TruthBridge.sol:__refundRelayer"]},{"severity":"medium","category":"auth","title":"Author confirmations and lower proofs lack domain separation (replayable signatures)","exploit_scenario":"Signatures used for addAuthor/removeAuthor/publishRoot and lower proofs are over raw payloads without chainId or contract address. If the same author keys are used on another deployment or chain, signatures can be replayed to add/remove authors or claim lowers on this contract as long as t2TxId/lowerId are unused.","recommendation":"Use EIP-712 typed data with a domain separator including chainId and verifying contract, or include contract address + chainId + nonce in the signed payloads.","evidence":"msgHash is keccak256(abi.encode(...)) of payload only, then prefixed with ESM_PREFIX; no domain fields are included before _verifyConfirmations.","locations":["contracts/TruthBridge.sol:addAuthor","contracts/TruthBridge.sol:removeAuthor","contracts/TruthBridge.sol:publishRoot","contracts/TruthBridge.sol:_processLower","contracts/TruthBridge.sol:_verifyConfirmations"]},{"severity":"low","category":"access_control","title":"Pause bypass for relayer operations","exploit_scenario":"When the contract is paused, relayerLift and relayerLower remain callable, allowing funds to be moved despite an emergency pause.","recommendation":"Add whenNotPaused to relayerLift and relayerLower or explicitly document/guard why they should bypass pause.","evidence":"relayerLift/relayerLower lack whenNotPaused while other state-changing entrypoints are paused.","locations":["contracts/TruthBridge.sol:relayerLift","contracts/TruthBridge.sol:relayerLower"]},{"severity":"low","category":"oracle","title":"Chainlink price used without sanity or staleness checks","exploit_scenario":"If the feed returns stale/zero/negative data, usdcEth can become zero or huge due to unchecked casting/division, leading to division-by-zero reverts or mispriced relayer costs/refunds.","recommendation":"Use latestRoundData(), verify updatedAt/answeredInRound, ensure answer > 0, and handle feed decimals explicitly.","evidence":"usdcEth casts latestAnswer() to uint256 and divides by 1e6 without any validation.","locations":["contracts/TruthBridge.sol:usdcEth"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer return values","exploit_scenario":"If USDC (or a token with non-reverting failure) returns false on transfer, the contract will continue execution: lowers may be marked claimed and relayer balances updated even though funds were not transferred.","recommendation":"Use SafeERC20.safeTransfer/safeTransferFrom and handle failures explicitly.","evidence":"Raw IERC20.transfer used without checking the return value.","locations":["contracts/TruthBridge.sol:deregisterRelayer","contracts/TruthBridge.sol:relayerLower","contracts/TruthBridge.sol:uniswapV3SwapCallback"]}]}
tokens used
22,340
{
"codex": {
"ran_at": "2026-01-30T16:01:28.460270+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 28,
"import_count": 31,
"first_party_contracts_count": 7
},
"summary": "Found a high-severity reentrancy in the relayer refund flow and replayable author/lower signatures; also noted pause bypass, oracle safety gaps, and unchecked transfer returns.",
"raw_final": {
"summary": "Found a high-severity reentrancy in the relayer refund flow and replayable author/lower signatures; also noted pause bypass, oracle safety gaps, and unchecked transfer returns.",
"findings": [
{
"title": "Relayer refund can be reentered to withdraw multiple times",
"category": "reentrancy",
"evidence": "_attemptRelayerRefund calls this.__refundRelayer(...) and only then sets relayerBalance to 1 on success; __refundRelayer sends ETH to relayer via call, enabling reentrancy before state update.",
"severity": "high",
"locations": [
"contracts/TruthBridge.sol:relayerLift",
"contracts/TruthBridge.sol:relayerLower",
"contracts/TruthBridge.sol:_attemptRelayerRefund",
"contracts/TruthBridge.sol:__refundRelayer"
],
"recommendation": "Apply checks-effects-interactions: update relayerBalance before any external calls. Add nonReentrant to relayerLift/relayerLower and/or to the refund path, or move refunds to a pull-based withdrawal function.",
"exploit_scenario": "A registered relayer calls relayerLower or relayerLift with triggerRefund=true. During __refundRelayer, the contract sends ETH to the relayer via a low-level call; the relayer reenters relayerLower/relayerLift before relayerBalance is reset, triggering another refund using the same outstanding balance. This can be repeated to drain USDC from the contract via repeated swaps."
},
{
"title": "Author confirmations and lower proofs lack domain separation (replayable signatures)",
"category": "auth",
"evidence": "msgHash is keccak256(abi.encode(...)) of payload only, then prefixed with ESM_PREFIX; no domain fields are included before _verifyConfirmations.",
"severity": "medium",
"locations": [
"contracts/TruthBridge.sol:addAuthor",
"contracts/TruthBridge.sol:removeAuthor",
"contracts/TruthBridge.sol:publishRoot",
"contracts/TruthBridge.sol:_processLower",
"contracts/TruthBridge.sol:_verifyConfirmations"
],
"recommendation": "Use EIP-712 typed data with a domain separator including chainId and verifying contract, or include contract address + chainId + nonce in the signed payloads.",
"exploit_scenario": "Signatures used for addAuthor/removeAuthor/publishRoot and lower proofs are over raw payloads without chainId or contract address. If the same author keys are used on another deployment or chain, signatures can be replayed to add/remove authors or claim lowers on this contract as long as t2TxId/lowerId are unused."
},
{
"title": "Pause bypass for relayer operations",
"category": "access_control",
"evidence": "relayerLift/relayerLower lack whenNotPaused while other state-changing entrypoints are paused.",
"severity": "low",
"locations": [
"contracts/TruthBridge.sol:relayerLift",
"contracts/TruthBridge.sol:relayerLower"
],
"recommendation": "Add whenNotPaused to relayerLift and relayerLower or explicitly document/guard why they should bypass pause.",
"exploit_scenario": "When the contract is paused, relayerLift and relayerLower remain callable, allowing funds to be moved despite an emergency pause."
},
{
"title": "Chainlink price used without sanity or staleness checks",
"category": "oracle",
"evidence": "usdcEth casts latestAnswer() to uint256 and divides by 1e6 without any validation.",
"severity": "low",
"locations": [
"contracts/TruthBridge.sol:usdcEth"
],
"recommendation": "Use latestRoundData(), verify updatedAt/answeredInRound, ensure answer > 0, and handle feed decimals explicitly.",
"exploit_scenario": "If the feed returns stale/zero/negative data, usdcEth can become zero or huge due to unchecked casting/division, leading to division-by-zero reverts or mispriced relayer costs/refunds."
},
{
"title": "Unchecked ERC20 transfer return values",
"category": "other",
"evidence": "Raw IERC20.transfer used without checking the return value.",
"severity": "low",
"locations": [
"contracts/TruthBridge.sol:deregisterRelayer",
"contracts/TruthBridge.sol:relayerLower",
"contracts/TruthBridge.sol:uniswapV3SwapCallback"
],
"recommendation": "Use SafeERC20.safeTransfer/safeTransferFrom and handle failures explicitly.",
"exploit_scenario": "If USDC (or a token with non-reverting failure) returns false on transfer, the contract will continue execution: lowers may be marked claimed and relayer balances updated even though funds were not transferred."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x02f6 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8da5cb5b 00000019: GT 0000001a: PUSH2 0x018f 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xdacfa8d2 00000024: GT 00000025: PUSH2 0x00e1 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xe6f4b533 0000002f: GT 00000030: PUSH2 0x008a 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xea4bc53e 0000003a: GT 0000003b: PUSH2 0x0064 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xea4bc53e 00000045: EQ 00000046: PUSH2 0x09c8 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x09f5 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xfa461e33 0000005b: EQ 0000005c: PUSH2 0x0a15 0000005f: JUMPI 00000060: PUSH1 0x00 00000062: DUP1 00000063: REVERT 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0xe6f4b533 0000006b: EQ 0000006c: PUSH2 0x0948 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xe8b744f4 00000076: EQ 00000077: PUSH2 0x097b 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xe8fed1d6 00000081: EQ 00000082: PUSH2 0x099b 00000085: JUMPI 00000086: PUSH1 0x00 00000088: DUP1 00000089: REVERT 0000008a: JUMPDEST 0000008b: DUP1 0000008c: PUSH4 0xe37347e6 00000091: GT 00000092: PUSH2 0x00bb 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xe37347e6 0000009c: EQ 0000009d: PUSH2 0x08cb 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xe51d0921 000000a7: EQ 000000a8: PUSH2 0x08eb 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xe69fadb4 000000b2: EQ 000000b3: PUSH2 0x091b 000000b6: JUMPI 000000b7: PUSH1 0x00 000000b9: DUP1 000000ba: REVERT 000000bb: JUMPDEST 000000bc: DUP1 000000bd: PUSH4 0xdacfa8d2 000000c2: EQ 000000c3: PUSH2 0x0815 000000c6: JUMPI 000000c7: DUP1 000000c8: PUSH4 0xdf643512 000000cd: EQ 000000ce: PUSH2 0x0835 000000d1: JUMPI 000000d2: DUP1 000000d3: PUSH4 0xe30c3978 000000d8: EQ 000000d9: PUSH2 0x08b6 000000dc: JUMPI 000000dd: PUSH1 0x00 000000df: DUP1 000000e0: REVERT 000000e1: JUMPDEST 000000e2: DUP1 000000e3: PUSH4 0xad3cb1cc 000000e8: GT 000000e9: PUSH2 0x0143 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0xb6851152 000000f3: GT 000000f4: PUSH2 0x011d 000000f7: JUMPI 000000f8: DUP1 000000f9: PUSH4 0xb6851152 000000fe: EQ 000000ff: PUSH2 0x07a5 00000102: JUMPI 00000103: DUP1 00000104: PUSH4 0xb9b17e7f 00000109: EQ 0000010a: PUSH2 0x07c5 0000010d: JUMPI 0000010e: DUP1 0000010f: PUSH4 0xc7ea5dc7 00000114: EQ 00000115: PUSH2 0x07f5 00000118: JUMPI 00000119: PUSH1 0x00 0000011b: DUP1 0000011c: REVERT 0000011d: JUMPDEST 0000011e: DUP1 0000011f: PUSH4 0xad3cb1cc 00000124: EQ 00000125: PUSH2 0x0719 00000128: JUMPI 00000129: DUP1 0000012a: PUSH4 0xb4d034d6 0000012f: EQ 00000130: PUSH2 0x076f 00000133: JUMPI 00000134: DUP1 00000135: PUSH4 0xb5169f6f 0000013a: EQ 0000013b: PUSH2 0x0785 0000013e: JUMPI 0000013f: PUSH1 0x00 00000141: DUP1 00000142: REVERT 00000143: JUMPDEST 00000144: DUP1 00000145: PUSH4 0x961946d8 0000014a: GT 0000014b: PUSH2 0x0174 0000014e: JUMPI 0000014f: DUP1 00000150: PUSH4 0x961946d8 00000155: EQ 00000156: PUSH2 0x065f 00000159: JUMPI 0000015a: DUP1 0000015b: PUSH4 0x9e9f51d2 00000160: EQ 00000161: PUSH2 0x06cc 00000164: JUMPI 00000165: DUP1 00000166: PUSH4 0xa8f37db4 0000016b: EQ 0000016c: PUSH2 0x06f9 0000016f: JUMPI 00000170: PUSH1 0x00 00000172: DUP1 00000173: REVERT 00000174: JUMPDEST 00000175: DUP1 00000176: PUSH4 0x8da5cb5b 0000017b: EQ 0000017c: PUSH2 0x062a 0000017f: JUMPI 00000180: DUP1 00000181: PUSH4 0x8ebd7265 00000186: EQ 00000187: PUSH2 0x063f 0000018a: JUMPI 0000018b: PUSH1 0x00 0000018d: DUP1 0000018e: REVERT 0000018f: JUMPDEST 00000190: DUP1 00000191: PUSH4 0x3f4ba83a 00000196: GT 00000197: PUSH2 0x0248 0000019a: JUMPI 0000019b: DUP1 0000019c: PUSH4 0x66beb4cb 000001a1: GT 000001a2: PUSH2 0x01fc 000001a5: JUMPI 000001a6: DUP1 000001a7: PUSH4 0x8456cb59 000001ac: GT 000001ad: PUSH2 0x01d6 000001b0: JUMPI 000001b1: DUP1 000001b2: PUSH4 0x8456cb59 000001b7: EQ 000001b8: PUSH2 0x05d2 000001bb: JUMPI 000001bc: DUP1 000001bd: PUSH4 0x872d7d57 000001c2: EQ 000001c3: PUSH2 0x05e7 000001c6: JUMPI 000001c7: DUP1 000001c8: PUSH4 0x8c552978 000001cd: EQ 000001ce: PUSH2 0x05fd 000001d1: JUMPI 000001d2: PUSH1 0x00 000001d4: DUP1 000001d5: REVERT 000001d6: JUMPDEST 000001d7: DUP1 000001d8: PUSH4 0x66beb4cb 000001dd: EQ 000001de: PUSH2 0x0578 000001e1: JUMPI 000001e2: DUP1 000001e3: PUSH4 0x715018a6 000001e8: EQ 000001e9: PUSH2 0x05a8 000001ec: JUMPI 000001ed: DUP1 000001ee: PUSH4 0x79ba5097 000001f3: EQ 000001f4: PUSH2 0x05bd 000001f7: JUMPI 000001f8: PUSH1 0x00 000001fa: DUP1 000001fb: REVERT 000001fc: JUMPDEST 000001fd: DUP1 000001fe: PUSH4 0x52d1902d 00000203: GT 00000204: PUSH2 0x022d 00000207: JUMPI 00000208: DUP1 00000209: PUSH4 0x52d1902d 0000020e: EQ 0000020f: PUSH2 0x050c 00000212: JUMPI 00000213: DUP1 00000214: PUSH4 0x56f1612f 00000219: EQ 0000021a: PUSH2 0x0521 0000021d: JUMPI 0000021e: DUP1 0000021f: PUSH4 0x5c975abb 00000224: EQ 00000225: PUSH2 0x0541 00000228: JUMPI 00000229: PUSH1 0x00 0000022b: DUP1 0000022c: REVERT 0000022d: JUMPDEST 0000022e: DUP1 0000022f: PUSH4 0x3f4ba83a 00000234: EQ 00000235: PUSH2 0x04e4 00000238: JUMPI 00000239: DUP1 0000023a: PUSH4 0x4f1ef286 0000023f: EQ 00000240: PUSH2 0x04f9 00000243: JUMPI 00000244: PUSH1 0x00 00000246: DUP1 00000247: REVERT 00000248: JUMPDEST 00000249: DUP1 0000024a: PUSH4 0x1796f00c 0000024f: GT 00000250: PUSH2 0x02aa 00000253: JUMPI 00000254: DUP1 00000255: PUSH4 0x239c5907 0000025a: GT 0000025b: PUSH2 0x0284 0000025e: JUMPI 0000025f: DUP1 00000260: PUSH4 0x239c5907 00000265: EQ 00000266: PUSH2 0x0474 00000269: JUMPI 0000026a: DUP1 0000026b: PUSH4 0x279f8892 00000270: EQ 00000271: PUSH2 0x04a4 00000274: JUMPI 00000275: DUP1 00000276: PUSH4 0x3c9c27e7 0000027b: EQ 0000027c: PUSH2 0x04c4 0000027f: JUMPI 00000280: PUSH1 0x00 00000282: DUP1 00000283: REVERT 00000284: JUMPDEST 00000285: DUP1 00000286: PUSH4 0x1796f00c 0000028b: EQ 0000028c: PUSH2 0x03cc 0000028f: JUMPI 00000290: DUP1 00000291: PUSH4 0x17a691aa 00000296: EQ 00000297: PUSH2 0x03ec 0000029a: JUMPI 0000029b: DUP1 0000029c: PUSH4 0x18b3d210 000002a1: EQ 000002a2: PUSH2 0x0454 000002a5: JUMPI 000002a6: PUSH1 0x00 000002a8: DUP1 000002a9: REVERT 000002aa: JUMPDEST 000002ab: DUP1 000002ac: PUSH4 0x0d238f9e 000002b1: GT 000002b2: PUSH2 0x02db 000002b5: JUMPI 000002b6: DUP1 000002b7: PUSH4 0x0d238f9e 000002bc: EQ 000002bd: PUSH2 0x0344 000002c0: JUMPI 000002c1: DUP1 000002c2: PUSH4 0x10a0d8a2 000002c7: EQ 000002c8: PUSH2 0x0389 000002cb: JUMPI 000002cc: DUP1 000002cd: PUSH4 0x146b3b52 000002d2: EQ 000002d3: PUSH2 0x03ac 000002d6: JUMPI 000002d7: PUSH1 0x00 000002d9: DUP1 000002da: REVERT 000002db: JUMPDEST 000002dc: DUP1 000002dd: PUSH4 0x0664c0ba 000002e2: EQ 000002e3: PUSH2 0x0302 000002e6: JUMPI 000002e7: DUP1 000002e8: PUSH4 0x0caa9948 000002ed: EQ 000002ee: PUSH2 0x0324 000002f1: JUMPI 000002f2: PUSH1 0x00 000002f4: DUP1 000002f5: REVERT 000002f6: JUMPDEST 000002f7: CALLDATASIZE 000002f8: PUSH2 0x02fd 000002fb: JUMPI 000002fc: STOP 000002fd: JUMPDEST 000002fe: PUSH1 0x00 00000300: DUP1 00000301: REVERT 00000302: JUMPDEST 00000303: CALLVALUE 00000304: DUP1 00000305: ISZERO 00000306: PUSH2 0x030e 00000309: JUMPI 0000030a: PUSH1 0x00 0000030c: DUP1 0000030d: REVERT 0000030e: JUMPDEST 0000030f: POP 00000310: PUSH2 0x0322 00000313: PUSH2 0x031d 00000316: CALLDATASIZE 00000317: PUSH1 0x04 00000319: PUSH2 0x47fe 0000031c: JUMP 0000031d: JUMPDEST 0000031e: PUSH2 0x0a35 00000321: JUMP 00000322: JUMPDEST 00000323: STOP 00000324: JUMPDEST 00000325: CALLVALUE 00000326: DUP1 00000327: ISZERO 00000328: PUSH2 0x0330 0000032b: JUMPI 0000032c: PUSH1 0x00 0000032e: DUP1 0000032f: REVERT 00000330: JUMPDEST 00000331: POP 00000332: PUSH2 0x0322 00000335: PUSH2 0x033f 00000338: CALLDATASIZE 00000339: PUSH1 0x04 0000033b: PUSH2 0x488a 0000033e: JUMP 0000033f: JUMPDEST 00000340: PUSH2 0x0b83 00000343: JUMP 00000344: JUMPDEST 00000345: CALLVALUE 00000346: DUP1 00000347: ISZERO 00000348: PUSH2 0x0350 0000034b: JUMPI 0000034c: PUSH1 0x00 0000034e: DUP1 0000034f: REVERT 00000350: JUMPDEST 00000351: POP 00000352: PUSH2 0x0374 00000355: PUSH2 0x035f 00000358: CALLDATASIZE 00000359: PUSH1 0x04 0000035b: PUSH2 0x48e4 0000035e: JUMP 0000035f: JUMPDEST 00000360: PUSH1 0x00 00000362: PUSH1 0x20 00000364: DUP2 00000365: SWAP1 00000366: MSTORE 00000367: SWAP1 00000368: DUP2 00000369: MSTORE 0000036a: PUSH1 0x40 0000036c: SWAP1 0000036d: KECCAK256 0000036e: SLOAD 0000036f: PUSH1 0xff 00000371: AND 00000372: DUP2 00000373: JUMP 00000374: JUMPDEST 00000375: PUSH1 0x40 00000377: MLOAD 00000378: SWAP1 00000379: ISZERO 0000037a: ISZERO 0000037b: DUP2 0000037c: MSTORE 0000037d: PUSH1 0x20 0000037f: ADD 00000380: JUMPDEST 00000381: PUSH1 0x40 00000383: MLOAD 00000384: DUP1 00000385: SWAP2 00000386: SUB 00000387: SWAP1 00000388: RETURN 00000389: JUMPDEST 0000038a: CALLVALUE 0000038b: DUP1 0000038c: ISZERO 0000038d: PUSH2 0x0395 00000390: JUMPI 00000391: PUSH1 0x00 00000393: DUP1 00000394: REVERT 00000395: JUMPDEST 00000396: POP 00000397: PUSH2 0x039e 0000039a: PUSH2 0x0d3e 0000039d: JUMP 0000039e: JUMPDEST 0000039f: PUSH1 0x40 000003a1: MLOAD 000003a2: SWAP1 000003a3: DUP2 000003a4: MSTORE 000003a5: PUSH1 0x20 000003a7: ADD 000003a8: PUSH2 0x0380 000003ab: JUMP 000003ac: JUMPDEST 000003ad: CALLVALUE 000003ae: DUP1 000003af: ISZERO 000003b0: PUSH2 0x03b8 000003b3: JUMPI 000003b4: PUSH1 0x00 000003b6: DUP1 000003b7: REVERT 000003b8: JUMPDEST 000003b9: POP 000003ba: PUSH2 0x0322 000003bd: PUSH2 0x03c7 000003c0: CALLDATASIZE 000003c1: PUSH1 0x04 000003c3: PUSH2 0x48fd 000003c6: JUMP 000003c7: JUMPDEST 000003c8: PUSH2 0x0dda 000003cb: JUMP 000003cc: JUMPDEST 000003cd: CALLVALUE 000003ce: DUP1 000003cf: ISZERO 000003d0: PUSH2 0x03d8 000003d3: JUMPI 000003d4: PUSH1 0x00 000003d6: DUP1 000003d7: REVERT 000003d8: JUMPDEST 000003d9: POP 000003da: PUSH2 0x0322 000003dd: PUSH2 0x03e7 000003e0: CALLDATASIZE 000003e1: PUSH1 0x04 000003e3: PUSH2 0x49a4 000003e6: JUMP 000003e7: JUMPDEST 000003e8: PUSH2 0x103d 000003eb: JUMP 000003ec: JUMPDEST 000003ed: CALLVALUE 000003ee: DUP1 000003ef: ISZERO 000003f0: PUSH2 0x03f8 000003f3: JUMPI 000003f4: PUSH1 0x00 000003f6: DUP1 000003f7: REVERT 000003f8: JUMPDEST 000003f9: POP 000003fa: PUSH2 0x042f 000003fd: PUSH2 0x0407 00000400: CALLDATASIZE 00000401: PUSH1 0x04 00000403: PUSH2 0x48e4 00000406: JUMP 00000407: JUMPDEST 00000408: PUSH1 0x04 0000040a: PUSH1 0x20 0000040c: MSTORE 0000040d: PUSH1 0x00 0000040f: SWAP1 00000410: DUP2 00000411: MSTORE 00000412: PUSH1 0x40 00000414: SWAP1 00000415: KECCAK256 00000416: SLOAD 00000417: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000042c: AND 0000042d: DUP2 0000042e: JUMP 0000042f: JUMPDEST 00000430: PUSH1 0x40 00000432: MLOAD 00000433: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000448: SWAP1 00000449: SWAP2 0000044a: AND 0000044b: DUP2 0000044c: MSTORE 0000044d: PUSH1 0x20 0000044f: ADD 00000450: PUSH2 0x0380 00000453: JUMP 00000454: JUMPDEST 00000455: CALLVALUE 00000456: DUP1 00000457: ISZERO 00000458: PUSH2 0x0460 0000045b: JUMPI 0000045c: PUSH1 0x00 0000045e: DUP1 0000045f: REVERT 00000460: JUMPDEST 00000461: POP 00000462: PUSH2 0x0322 00000465: PUSH2 0x046f 00000468: CALLDATASIZE 00000469: PUSH1 0x04 0000046b: PUSH2 0x4a14 0000046e: JUMP 0000046f: JUMPDEST 00000470: PUSH2 0x12a9 00000473: JUMP 00000474: JUMPDEST 00000475: CALLVALUE 00000476: DUP1 00000477: ISZERO 00000478: PUSH2 0x0480 0000047b: JUMPI 0000047c: PUSH1 0x00 0000047e: DUP1 0000047f: REVERT 00000480: JUMPDEST 00000481: POP 00000482: PUSH2 0x0374 00000485: PUSH2 0x048f 00000488: CALLDATASIZE 00000489: PUSH1 0x04 0000048b: PUSH2 0x48e4 0000048e: JUMP 0000048f: JUMPDEST 00000490: PUSH1 0x07 00000492: PUSH1 0x20 00000494: MSTORE 00000495: PUSH1 0x00 00000497: SWAP1 00000498: DUP2 00000499: MSTORE 0000049a: PUSH1 0x40 0000049c: SWAP1 0000049d: KECCAK256 0000049e: SLOAD 0000049f: PUSH1 0xff 000004a1: AND 000004a2: DUP2 000004a3: JUMP 000004a4: JUMPDEST 000004a5: CALLVALUE 000004a6: DUP1 000004a7: ISZERO 000004a8: PUSH2 0x04b0 000004ab: JUMPI 000004ac: PUSH1 0x00 000004ae: DUP1 000004af: REVERT 000004b0: JUMPDEST 000004b1: POP 000004b2: PUSH2 0x0322 000004b5: PUSH2 0x04bf 000004b8: CALLDATASIZE 000004b9: PUSH1 0x04 000004bb: PUSH2 0x4a78 000004be: JUMP 000004bf: JUMPDEST 000004c0: PUSH2 0x1500 000004c3: JUMP 000004c4: JUMPDEST 000004c5: CALLVALUE 000004c6: DUP1 000004c7: ISZERO 000004c8: PUSH2 0x04d0 000004cb: JUMPI 000004cc: PUSH1 0x00 000004ce: DUP1 000004cf: REVERT 000004d0: JUMPDEST 000004d1: POP 000004d2: PUSH2 0x0322 000004d5: PUSH2 0x04df 000004d8: CALLDATASIZE 000004d9: PUSH1 0x04 000004db: PUSH2 0x4ad0 000004de: JUMP 000004df: JUMPDEST 000004e0: PUSH2 0x176f 000004e3: JUMP 000004e4: JUMPDEST 000004e5: CALLVALUE 000004e6: DUP1 000004e7: ISZERO 000004e8: PUSH2 0x04f0 000004eb: JUMPI 000004ec: PUSH1 0x00 000004ee: DUP1 000004ef: REVERT 000004f0: JUMPDEST 000004f1: POP 000004f2: PUSH2 0x0322 000004f5: PUSH2 0x1929 000004f8: JUMP 000004f9: JUMPDEST 000004fa: PUSH2 0x0322 000004fd: PUSH2 0x0507 00000500: CALLDATASIZE 00000501: PUSH1 0x04 00000503: PUSH2 0x4b29 00000506: JUMP 00000507: JUMPDEST 00000508: PUSH2 0x1943 0000050b: JUMP 0000050c: JUMPDEST 0000050d: CALLVALUE 0000050e: DUP1 0000050f: ISZERO 00000510: PUSH2 0x0518 00000513: JUMPI 00000514: PUSH1 0x00 00000516: DUP1 00000517: REVERT 00000518: JUMPDEST 00000519: POP 0000051a: PUSH2 0x039e 0000051d: PUSH2 0x195e 00000520: JUMP 00000521: JUMPDEST 00000522: CALLVALUE 00000523: DUP1 00000524: ISZERO 00000525: PUSH2 0x052d 00000528: JUMPI 00000529: PUSH1 0x00 0000052b: DUP1 0000052c: REVERT 0000052d: JUMPDEST 0000052e: POP 0000052f: PUSH2 0x0322 00000532: PUSH2 0x053c 00000535: CALLDATASIZE 00000536: PUSH1 0x04 00000538: PUSH2 0x4c30 0000053b: JUMP 0000053c: JUMPDEST 0000053d: PUSH2 0x198d 00000540: JUMP 00000541: JUMPDEST 00000542: CALLVALUE 00000543: DUP1 00000544: ISZERO 00000545: PUSH2 0x054d 00000548: JUMPI 00000549: PUSH1 0x00 0000054b: DUP1 0000054c: REVERT 0000054d: JUMPDEST 0000054e: POP 0000054f: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00000570: SLOAD 00000571: PUSH1 0xff 00000573: AND 00000574: PUSH2 0x0374 00000577: JUMP 00000578: JUMPDEST 00000579: CALLVALUE 0000057a: DUP1 0000057b: ISZERO 0000057c: PUSH2 0x0584 0000057f: JUMPI 00000580: PUSH1 0x00 00000582: DUP1 00000583: REVERT 00000584: JUMPDEST 00000585: POP 00000586: PUSH2 0x0374 00000589: PUSH2 0x0593 0000058c: CALLDATASIZE 0000058d: PUSH1 0x04 0000058f: PUSH2 0x48e4 00000592: JUMP 00000593: JUMPDEST 00000594: PUSH1 0x01 00000596: PUSH1 0x20 00000598: MSTORE 00000599: PUSH1 0x00 0000059b: SWAP1 0000059c: DUP2 0000059d: MSTORE 0000059e: PUSH1 0x40 000005a0: SWAP1 000005a1: KECCAK256 000005a2: SLOAD 000005a3: PUSH1 0xff 000005a5: AND 000005a6: DUP2 000005a7: JUMP 000005a8: JUMPDEST 000005a9: CALLVALUE 000005aa: DUP1 000005ab: ISZERO 000005ac: PUSH2 0x05b4 000005af: JUMPI 000005b0: PUSH1 0x00 000005b2: DUP1 000005b3: REVERT 000005b4: JUMPDEST 000005b5: POP 000005b6: PUSH2 0x0322 000005b9: PUSH2 0x1a16 000005bc: JUMP 000005bd: JUMPDEST 000005be: CALLVALUE 000005bf: DUP1 000005c0: ISZERO 000005c1: PUSH2 0x05c9 000005c4: JUMPI 000005c5: PUSH1 0x00 000005c7: DUP1 000005c8: REVERT 000005c9: JUMPDEST 000005ca: POP 000005cb: PUSH2 0x0322 000005ce: PUSH2 0x1a80 000005d1: JUMP 000005d2: JUMPDEST 000005d3: CALLVALUE 000005d4: DUP1 000005d5: ISZERO 000005d6: PUSH2 0x05de 000005d9: JUMPI 000005da: PUSH1 0x00 000005dc: DUP1 000005dd: REVERT 000005de: JUMPDEST 000005df: POP 000005e0: PUSH2 0x0322 000005e3: PUSH2 0x1af8 000005e6: JUMP 000005e7: JUMPDEST 000005e8: CALLVALUE 000005e9: DUP1 000005ea: ISZERO 000005eb: PUSH2 0x05f3 000005ee: JUMPI 000005ef: PUSH1 0x00 000005f1: DUP1 000005f2: REVERT 000005f3: JUMPDEST 000005f4: POP 000005f5: PUSH2 0x039e 000005f8: PUSH1 0x0a 000005fa: SLOAD 000005fb: DUP2 000005fc: JUMP 000005fd: JUMPDEST 000005fe: CALLVALUE 000005ff: DUP1 00000600: ISZERO 00000601: PUSH2 0x0609 00000604: JUMPI 00000605: PUSH1 0x00 00000607: DUP1 00000608: REVERT 00000609: JUMPDEST 0000060a: POP 0000060b: PUSH2 0x039e 0000060e: PUSH2 0x0618 00000611: CALLDATASIZE 00000612: PUSH1 0x04 00000614: PUSH2 0x48e4 00000617: JUMP 00000618: JUMPDEST 00000619: PUSH1 0x05 0000061b: PUSH1 0x20 0000061d: MSTORE 0000061e: PUSH1 0x00 00000620: SWAP1 00000621: DUP2 00000622: MSTORE 00000623: PUSH1 0x40 00000625: SWAP1 00000626: KECCAK256 00000627: SLOAD 00000628: DUP2 00000629: JUMP 0000062a: JUMPDEST 0000062b: CALLVALUE 0000062c: DUP1 0000062d: ISZERO 0000062e: PUSH2 0x0636 00000631: JUMPI 00000632: PUSH1 0x00 00000634: DUP1 00000635: REVERT 00000636: JUMPDEST 00000637: POP 00000638: PUSH2 0x042f 0000063b: PUSH2 0x1b10 0000063e: JUMP 0000063f: JUMPDEST 00000640: CALLVALUE 00000641: DUP1 00000642: ISZERO 00000643: PUSH2 0x064b 00000646: JUMPI 00000647: PUSH1 0x00 00000649: DUP1 0000064a: REVERT 0000064b: JUMPDEST 0000064c: POP 0000064d: PUSH2 0x0374 00000650: PUSH2 0x065a 00000653: CALLDATASIZE 00000654: PUSH1 0x04 00000656: PUSH2 0x4c90 00000659: JUMP 0000065a: JUMPDEST 0000065b: PUSH2 0x1b52 0000065e: JUMP 0000065f: JUMPDEST 00000660: CALLVALUE 00000661: DUP1 00000662: ISZERO 00000663: PUSH2 0x066b 00000666: JUMPI 00000667: PUSH1 0x00 00000669: DUP1 0000066a: REVERT 0000066b: JUMPDEST 0000066c: POP 0000066d: PUSH2 0x039e 00000670: PUSH2 0x067a 00000673: CALLDATASIZE 00000674: PUSH1 0x04 00000676: PUSH2 0x4c30 00000679: JUMP 0000067a: JUMPDEST 0000067b: PUSH1 0x40 0000067d: MLOAD 0000067e: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 0000069f: PUSH1 0x60 000006a1: DUP4 000006a2: SWAP1 000006a3: SHL 000006a4: AND 000006a5: PUSH1 0x20 000006a7: DUP3 000006a8: ADD 000006a9: MSTORE 000006aa: PUSH1 0x00 000006ac: SWAP1 000006ad: PUSH1 0x34 000006af: ADD 000006b0: PUSH1 0x40 000006b2: MLOAD 000006b3: PUSH1 0x20 000006b5: DUP2 000006b6: DUP4 000006b7: SUB 000006b8: SUB 000006b9: DUP2 000006ba: MSTORE 000006bb: SWAP1 000006bc: PUSH1 0x40 000006be: MSTORE 000006bf: DUP1 000006c0: MLOAD 000006c1: SWAP1 000006c2: PUSH1 0x20 000006c4: ADD 000006c5: KECCAK256 000006c6: SWAP1 000006c7: POP 000006c8: SWAP2 000006c9: SWAP1 000006ca: POP 000006cb: JUMP 000006cc: JUMPDEST 000006cd: CALLVALUE 000006ce: DUP1 000006cf: ISZERO 000006d0: PUSH2 0x06d8 000006d3: JUMPI 000006d4: PUSH1 0x00 000006d6: DUP1 000006d7: REVERT 000006d8: JUMPDEST 000006d9: POP 000006da: PUSH1 0x0b 000006dc: SLOAD 000006dd: PUSH2 0x042f 000006e0: SWAP1 000006e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006f6: AND 000006f7: DUP2 000006f8: JUMP 000006f9: JUMPDEST 000006fa: CALLVALUE 000006fb: DUP1 000006fc: ISZERO 000006fd: PUSH2 0x0705 00000700: JUMPI 00000701: PUSH1 0x00 00000703: DUP1 00000704: REVERT 00000705: JUMPDEST 00000706: POP 00000707: PUSH2 0x0322 0000070a: PUSH2 0x0714 0000070d: CALLDATASIZE 0000070e: PUSH1 0x04 00000710: PUSH2 0x4cdc 00000713: JUMP 00000714: JUMPDEST 00000715: PUSH2 0x1bfd 00000718: JUMP 00000719: JUMPDEST 0000071a: CALLVALUE 0000071b: DUP1 0000071c: ISZERO 0000071d: PUSH2 0x0725 00000720: JUMPI 00000721: PUSH1 0x00 00000723: DUP1 00000724: REVERT 00000725: JUMPDEST 00000726: POP 00000727: PUSH2 0x0762 0000072a: PUSH1 0x40 0000072c: MLOAD 0000072d: DUP1 0000072e: PUSH1 0x40 00000730: ADD 00000731: PUSH1 0x40 00000733: MSTORE 00000734: DUP1 00000735: PUSH1 0x05 00000737: DUP2 00000738: MSTORE 00000739: PUSH1 0x20 0000073b: ADD 0000073c: PUSH32 0x352e302e30000000000000000000000000000000000000000000000000000000 0000075d: DUP2 0000075e: MSTORE 0000075f: POP 00000760: DUP2 00000761: JUMP 00000762: JUMPDEST 00000763: PUSH1 0x40 00000765: MLOAD 00000766: PUSH2 0x0380 00000769: SWAP2 0000076a: SWAP1 0000076b: PUSH2 0x4d42 0000076e: JUMP 0000076f: JUMPDEST 00000770: CALLVALUE 00000771: DUP1 00000772: ISZERO 00000773: PUSH2 0x077b 00000776: JUMPI 00000777: PUSH1 0x00 00000779: DUP1 0000077a: REVERT 0000077b: JUMPDEST 0000077c: POP 0000077d: PUSH2 0x039e 00000780: PUSH1 0x09 00000782: SLOAD 00000783: DUP2 00000784: JUMP 00000785: JUMPDEST 00000786: CALLVALUE 00000787: DUP1 00000788: ISZERO 00000789: PUSH2 0x0791 0000078c: JUMPI 0000078d: PUSH1 0x00 0000078f: DUP1 00000790: REVERT 00000791: JUMPDEST 00000792: POP 00000793: PUSH2 0x0322 00000796: PUSH2 0x07a0 00000799: CALLDATASIZE 0000079a: PUSH1 0x04 0000079c: PUSH2 0x4ad0 0000079f: JUMP 000007a0: JUMPDEST 000007a1: PUSH2 0x1cb2 000007a4: JUMP 000007a5: JUMPDEST 000007a6: CALLVALUE 000007a7: DUP1 000007a8: ISZERO 000007a9: PUSH2 0x07b1 000007ac: JUMPI 000007ad: PUSH1 0x00 000007af: DUP1 000007b0: REVERT 000007b1: JUMPDEST 000007b2: POP 000007b3: PUSH2 0x0322 000007b6: PUSH2 0x07c0 000007b9: CALLDATASIZE 000007ba: PUSH1 0x04 000007bc: PUSH2 0x4d93 000007bf: JUMP 000007c0: JUMPDEST 000007c1: PUSH2 0x1ee8 000007c4: JUMP 000007c5: JUMPDEST 000007c6: CALLVALUE 000007c7: DUP1 000007c8: ISZERO 000007c9: PUSH2 0x07d1 000007cc: JUMPI 000007cd: PUSH1 0x00 000007cf: DUP1 000007d0: REVERT 000007d1: JUMPDEST 000007d2: POP 000007d3: PUSH2 0x0374 000007d6: PUSH2 0x07e0 000007d9: CALLDATASIZE 000007da: PUSH1 0x04 000007dc: PUSH2 0x48e4 000007df: JUMP 000007e0: JUMPDEST 000007e1: PUSH1 0x06 000007e3: PUSH1 0x20 000007e5: MSTORE 000007e6: PUSH1 0x00 000007e8: SWAP1 000007e9: DUP2 000007ea: MSTORE 000007eb: PUSH1 0x40 000007ed: SWAP1 000007ee: KECCAK256 000007ef: SLOAD 000007f0: PUSH1 0xff 000007f2: AND 000007f3: DUP2 000007f4: JUMP 000007f5: JUMPDEST 000007f6: CALLVALUE 000007f7: DUP1 000007f8: ISZERO 000007f9: PUSH2 0x0801 000007fc: JUMPI 000007fd: PUSH1 0x00 000007ff: DUP1 00000800: REVERT 00000801: JUMPDEST 00000802: POP 00000803: PUSH2 0x0322 00000806: PUSH2 0x0810 00000809: CALLDATASIZE 0000080a: PUSH1 0x04 0000080c: PUSH2 0x4df1 0000080f: JUMP 00000810: JUMPDEST 00000811: PUSH2 0x2164 00000814: JUMP 00000815: JUMPDEST 00000816: CALLVALUE 00000817: DUP1 00000818: ISZERO 00000819: PUSH2 0x0821 0000081c: JUMPI 0000081d: PUSH1 0x00 0000081f: DUP1 00000820: REVERT 00000821: JUMPDEST 00000822: POP 00000823: PUSH2 0x0322 00000826: PUSH2 0x0830 00000829: CALLDATASIZE 0000082a: PUSH1 0x04 0000082c: PUSH2 0x4e5f 0000082f: JUMP 00000830: JUMPDEST 00000831: PUSH2 0x255b 00000834: JUMP 00000835: JUMPDEST 00000836: CALLVALUE 00000837: DUP1 00000838: ISZERO 00000839: PUSH2 0x0841 0000083c: JUMPI 0000083d: PUSH1 0x00 0000083f: DUP1 00000840: REVERT 00000841: JUMPDEST 00000842: POP 00000843: PUSH2 0x0855 00000846: PUSH2 0x0850 00000849: CALLDATASIZE 0000084a: PUSH1 0x04 0000084c: PUSH2 0x4cdc 0000084f: JUMP 00000850: JUMPDEST 00000851: PUSH2 0x2704 00000854: JUMP 00000855: JUMPDEST 00000856: PUSH1 0x40 00000858: DUP1 00000859: MLOAD 0000085a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000086f: SWAP10 00000870: DUP11 00000871: AND 00000872: DUP2 00000873: MSTORE 00000874: PUSH1 0x20 00000876: DUP2 00000877: ADD 00000878: SWAP9 00000879: SWAP1 0000087a: SWAP9 0000087b: MSTORE 0000087c: SWAP8 0000087d: SWAP1 0000087e: SWAP6 0000087f: AND 00000880: SWAP7 00000881: DUP7 00000882: ADD 00000883: SWAP7 00000884: SWAP1 00000885: SWAP7 00000886: MSTORE 00000887: PUSH4 0xffffffff 0000088c: SWAP1 0000088d: SWAP3 0000088e: AND 0000088f: PUSH1 0x60 00000891: DUP6 00000892: ADD 00000893: MSTORE 00000894: PUSH1 0x80 00000896: DUP5 00000897: ADD 00000898: MSTORE 00000899: PUSH1 0xa0 0000089b: DUP4 0000089c: ADD 0000089d: MSTORE 0000089e: SWAP2 0000089f: ISZERO 000008a0: ISZERO 000008a1: PUSH1 0xc0 000008a3: DUP3 000008a4: ADD 000008a5: MSTORE 000008a6: SWAP1 000008a7: ISZERO 000008a8: ISZERO 000008a9: PUSH1 0xe0 000008ab: DUP3 000008ac: ADD 000008ad: MSTORE 000008ae: PUSH2 0x0100 000008b1: ADD 000008b2: PUSH2 0x0380 000008b5: JUMP 000008b6: JUMPDEST 000008b7: CALLVALUE 000008b8: DUP1 000008b9: ISZERO 000008ba: PUSH2 0x08c2 000008bd: JUMPI 000008be: PUSH1 0x00 000008c0: DUP1 000008c1: REVERT 000008c2: JUMPDEST 000008c3: POP 000008c4: PUSH2 0x042f 000008c7: PUSH2 0x2a1f 000008ca: JUMP 000008cb: JUMPDEST 000008cc: CALLVALUE 000008cd: DUP1 000008ce: ISZERO 000008cf: PUSH2 0x08d7 000008d2: JUMPI 000008d3: PUSH1 0x00 000008d5: DUP1 000008d6: REVERT 000008d7: JUMPDEST 000008d8: POP 000008d9: PUSH2 0x0322 000008dc: PUSH2 0x08e6 000008df: CALLDATASIZE 000008e0: PUSH1 0x04 000008e2: PUSH2 0x4c30 000008e5: JUMP 000008e6: JUMPDEST 000008e7: PUSH2 0x2a48 000008ea: JUMP 000008eb: JUMPDEST 000008ec: CALLVALUE 000008ed: DUP1 000008ee: ISZERO 000008ef: PUSH2 0x08f7 000008f2: JUMPI 000008f3: PUSH1 0x00 000008f5: DUP1 000008f6: REVERT 000008f7: JUMPDEST 000008f8: POP 000008f9: PUSH2 0x0374 000008fc: PUSH2 0x0906 000008ff: CALLDATASIZE 00000900: PUSH1 0x04 00000902: PUSH2 0x48e4 00000905: JUMP 00000906: JUMPDEST 00000907: PUSH1 0x08 00000909: PUSH1 0x20 0000090b: MSTORE 0000090c: PUSH1 0x00 0000090e: SWAP1 0000090f: DUP2 00000910: MSTORE 00000911: PUSH1 0x40 00000913: SWAP1 00000914: KECCAK256 00000915: SLOAD 00000916: PUSH1 0xff 00000918: AND 00000919: DUP2 0000091a: JUMP 0000091b: JUMPDEST 0000091c: CALLVALUE 0000091d: DUP1 0000091e: ISZERO 0000091f: PUSH2 0x0927 00000922: JUMPI 00000923: PUSH1 0x00 00000925: DUP1 00000926: REVERT 00000927: JUMPDEST 00000928: POP 00000929: PUSH2 0x039e 0000092c: PUSH2 0x0936 0000092f: CALLDATASIZE 00000930: PUSH1 0x04 00000932: PUSH2 0x48e4 00000935: JUMP 00000936: JUMPDEST 00000937: PUSH1 0x03 00000939: PUSH1 0x20 0000093b: MSTORE 0000093c: PUSH1 0x00 0000093e: SWAP1 0000093f: DUP2 00000940: MSTORE 00000941: PUSH1 0x40 00000943: SWAP1 00000944: KECCAK256 00000945: SLOAD 00000946: DUP2 00000947: JUMP 00000948: JUMPDEST 00000949: CALLVALUE 0000094a: DUP1 0000094b: ISZERO 0000094c: PUSH2 0x0954 0000094f: JUMPI 00000950: PUSH1 0x00 00000952: DUP1 00000953: REVERT 00000954: JUMPDEST 00000955: POP 00000956: PUSH2 0x0968 00000959: PUSH2 0x0963 0000095c: CALLDATASIZE 0000095d: PUSH1 0x04 0000095f: PUSH2 0x4e92 00000962: JUMP 00000963: JUMPDEST 00000964: PUSH2 0x2bb3 00000967: JUMP 00000968: JUMPDEST 00000969: PUSH1 0x40 0000096b: MLOAD 0000096c: PUSH1 0x00 0000096e: SWAP2 0000096f: SWAP1 00000970: SWAP2 00000971: SIGNEXTEND 00000972: DUP2 00000973: MSTORE 00000974: PUSH1 0x20 00000976: ADD 00000977: PUSH2 0x0380 0000097a: JUMP 0000097b: JUMPDEST 0000097c: CALLVALUE 0000097d: DUP1 0000097e: ISZERO 0000097f: PUSH2 0x0987 00000982: JUMPI 00000983: PUSH1 0x00 00000985: DUP1 00000986: REVERT 00000987: JUMPDEST 00000988: POP 00000989: PUSH2 0x0322 0000098c: PUSH2 0x0996 0000098f: CALLDATASIZE 00000990: PUSH1 0x04 00000992: PUSH2 0x4eae 00000995: JUMP 00000996: JUMPDEST 00000997: PUSH2 0x2c12 0000099a: JUMP 0000099b: JUMPDEST 0000099c: CALLVALUE 0000099d: DUP1 0000099e: ISZERO 0000099f: PUSH2 0x09a7 000009a2: JUMPI 000009a3: PUSH1 0x00 000009a5: DUP1 000009a6: REVERT 000009a7: JUMPDEST 000009a8: POP 000009a9: PUSH2 0x039e 000009ac: PUSH2 0x09b6 000009af: CALLDATASIZE 000009b0: PUSH1 0x04 000009b2: PUSH2 0x4c30 000009b5: JUMP 000009b6: JUMPDEST 000009b7: PUSH1 0x02 000009b9: PUSH1 0x20 000009bb: MSTORE 000009bc: PUSH1 0x00 000009be: SWAP1 000009bf: DUP2 000009c0: MSTORE 000009c1: PUSH1 0x40 000009c3: SWAP1 000009c4: KECCAK256 000009c5: SLOAD 000009c6: DUP2 000009c7: JUMP 000009c8: JUMPDEST 000009c9: CALLVALUE 000009ca: DUP1 000009cb: ISZERO 000009cc: PUSH2 0x09d4 000009cf: JUMPI 000009d0: PUSH1 0x00 000009d2: DUP1 000009d3: REVERT 000009d4: JUMPDEST 000009d5: POP 000009d6: PUSH2 0x039e 000009d9: PUSH2 0x09e3 000009dc: CALLDATASIZE 000009dd: PUSH1 0x04 000009df: PUSH2 0x4c30 000009e2: JUMP 000009e3: JUMPDEST 000009e4: PUSH1 0x0c 000009e6: PUSH1 0x20 000009e8: MSTORE 000009e9: PUSH1 0x00 000009eb: SWAP1 000009ec: DUP2 000009ed: MSTORE 000009ee: PUSH1 0x40 000009f0: SWAP1 000009f1: KECCAK256 000009f2: SLOAD 000009f3: DUP2 000009f4: JUMP 000009f5: JUMPDEST 000009f6: CALLVALUE 000009f7: DUP1 000009f8: ISZERO 000009f9: PUSH2 0x0a01 000009fc: JUMPI 000009fd: PUSH1 0x00 000009ff: DUP1 00000a00: REVERT 00000a01: JUMPDEST 00000a02: POP 00000a03: PUSH2 0x0322 00000a06: PUSH2 0x0a10 00000a09: CALLDATASIZE 00000a0a: PUSH1 0x04 00000a0c: PUSH2 0x4c30 00000a0f: JUMP 00000a10: JUMPDEST 00000a11: PUSH2 0x2e4d 00000a14: JUMP 00000a15: JUMPDEST 00000a16: CALLVALUE 00000a17: DUP1 00000a18: ISZERO 00000a19: PUSH2 0x0a21 00000a1c: JUMPI 00000a1d: PUSH1 0x00 00000a1f: DUP1 00000a20: REVERT 00000a21: JUMPDEST 00000a22: POP 00000a23: PUSH2 0x0322 00000a26: PUSH2 0x0a30 00000a29: CALLDATASIZE 00000a2a: PUSH1 0x04 00000a2c: PUSH2 0x4fa6 00000a2f: JUMP 00000a30: JUMPDEST 00000a31: PUSH2 0x2f04 00000a34: JUMP 00000a35: JUMPDEST 00000a36: PUSH2 0x0a3d 00000a39: PUSH2 0x2fed 00000a3c: JUMP 00000a3d: JUMPDEST 00000a3e: DUP4 00000a3f: DUP1 00000a40: TIMESTAMP 00000a41: GT 00000a42: ISZERO 00000a43: PUSH2 0x0a78 00000a46: JUMPI 00000a47: PUSH1 0x40 00000a49: MLOAD 00000a4a: PUSH32 0x7bbfb6fe00000000000000000000000000000000000000000000000000000000 00000a6b: DUP2 00000a6c: MSTORE 00000a6d: PUSH1 0x04 00000a6f: ADD 00000a70: PUSH1 0x40 00000a72: MLOAD 00000a73: DUP1 00000a74: SWAP2 00000a75: SUB 00000a76: SWAP1 00000a77: REVERT 00000a78: JUMPDEST 00000a79: PUSH1 0x00 00000a7b: DUP7 00000a7c: DUP2 00000a7d: MSTORE 00000a7e: PUSH1 0x06 00000a80: PUSH1 0x20 00000a82: MSTORE 00000a83: PUSH1 0x40 00000a85: SWAP1 00000a86: KECCAK256 00000a87: SLOAD 00000a88: PUSH1 0xff 00000a8a: AND 00000a8b: ISZERO 00000a8c: PUSH2 0x0ac1 00000a8f: JUMPI 00000a90: PUSH1 0x40 00000a92: MLOAD 00000a93: PUSH32 0x2c8a3b6e00000000000000000000000000000000000000000000000000000000 00000ab4: DUP2 00000ab5: MSTORE 00000ab6: PUSH1 0x04 00000ab8: ADD 00000ab9: PUSH1 0x40 00000abb: MLOAD 00000abc: DUP1 00000abd: SWAP2 00000abe: SUB 00000abf: SWAP1 00000ac0: REVERT 00000ac1: JUMPDEST 00000ac2: PUSH1 0x40 00000ac4: DUP1 00000ac5: MLOAD 00000ac6: PUSH1 0x20 00000ac8: DUP2 00000ac9: ADD 00000aca: DUP9 00000acb: SWAP1 00000acc: MSTORE 00000acd: SWAP1 00000ace: DUP2 00000acf: ADD 00000ad0: DUP7 00000ad1: SWAP1 00000ad2: MSTORE 00000ad3: PUSH4 0xffffffff 00000ad8: DUP6 00000ad9: AND 00000ada: PUSH1 0x60 00000adc: DUP3 00000add: ADD 00000ade: MSTORE 00000adf: PUSH2 0x0b05 00000ae2: SWAP1 00000ae3: PUSH1 0x00 00000ae5: SWAP1 00000ae6: PUSH1 0x80 00000ae8: ADD 00000ae9: PUSH1 0x40 00000aeb: MLOAD 00000aec: PUSH1 0x20 00000aee: DUP2 00000aef: DUP4 00000af0: SUB 00000af1: SUB 00000af2: DUP2 00000af3: MSTORE 00000af4: SWAP1 00000af5: PUSH1 0x40 00000af7: MSTORE 00000af8: DUP1 00000af9: MLOAD 00000afa: SWAP1 00000afb: PUSH1 0x20 00000afd: ADD 00000afe: KECCAK256 00000aff: DUP6 00000b00: DUP6 00000b01: PUSH2 0x3049 00000b04: JUMP 00000b05: JUMPDEST 00000b06: PUSH2 0x0b14 00000b09: DUP5 00000b0a: PUSH4 0xffffffff 00000b0f: AND 00000b10: PUSH2 0x32be 00000b13: JUMP 00000b14: JUMPDEST 00000b15: PUSH1 0x00 00000b17: DUP7 00000b18: DUP2 00000b19: MSTORE 00000b1a: PUSH1 0x06 00000b1c: PUSH1 0x20 00000b1e: MSTORE 00000b1f: PUSH1 0x40 00000b21: DUP1 00000b22: DUP3 00000b23: KECCAK256 00000b24: DUP1 00000b25: SLOAD 00000b26: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000b47: AND 00000b48: PUSH1 0x01 00000b4a: OR 00000b4b: SWAP1 00000b4c: SSTORE 00000b4d: MLOAD 00000b4e: PUSH4 0xffffffff 00000b53: DUP7 00000b54: AND 00000b55: SWAP2 00000b56: DUP9 00000b57: SWAP2 00000b58: PUSH32 0x43c04551f5c228dcd139615dac0f9d231bcca473808592eea9a62a8504eaf963 00000b79: SWAP2 00000b7a: SWAP1 00000b7b: LOG3 00000b7c: POP 00000b7d: POP 00000b7e: POP 00000b7f: POP 00000b80: POP 00000b81: POP 00000b82: JUMP 00000b83: JUMPDEST 00000b84: PUSH2 0x0b8b 00000b87: PUSH2 0x2fed 00000b8a: JUMP 00000b8b: JUMPDEST 00000b8c: PUSH2 0x0b93 00000b8f: PUSH2 0x3340 00000b92: JUMP 00000b93: JUMPDEST 00000b94: PUSH1 0x40 00000b96: MLOAD 00000b97: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 00000bb8: DUP2 00000bb9: MSTORE 00000bba: CALLER 00000bbb: PUSH1 0x04 00000bbd: DUP3 00000bbe: ADD 00000bbf: DUP2 00000bc0: SWAP1 00000bc1: MSTORE 00000bc2: SWAP1 00000bc3: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 00000bd8: SWAP1 00000bd9: PUSH4 0xdf592f7d 00000bde: SWAP1 00000bdf: PUSH1 0x24 00000be1: ADD 00000be2: PUSH1 0x20 00000be4: PUSH1 0x40 00000be6: MLOAD 00000be7: DUP1 00000be8: DUP4 00000be9: SUB 00000bea: DUP2 00000beb: DUP7 00000bec: GAS 00000bed: STATICCALL 00000bee: ISZERO 00000bef: DUP1 00000bf0: ISZERO 00000bf1: PUSH2 0x0bfe 00000bf4: JUMPI 00000bf5: RETURNDATASIZE 00000bf6: PUSH1 0x00 00000bf8: DUP1 00000bf9: RETURNDATACOPY 00000bfa: RETURNDATASIZE 00000bfb: PUSH1 0x00 00000bfd: REVERT 00000bfe: JUMPDEST 00000bff: POP 00000c00: POP 00000c01: POP 00000c02: POP 00000c03: PUSH1 0x40 00000c05: MLOAD 00000c06: RETURNDATASIZE 00000c07: PUSH1 0x1f 00000c09: NOT 00000c0a: PUSH1 0x1f 00000c0c: DUP3 00000c0d: ADD 00000c0e: AND 00000c0f: DUP3 00000c10: ADD 00000c11: DUP1 00000c12: PUSH1 0x40 00000c14: MSTORE 00000c15: POP 00000c16: DUP2 00000c17: ADD 00000c18: SWAP1 00000c19: PUSH2 0x0c22 00000c1c: SWAP2 00000c1d: SWAP1 00000c1e: PUSH2 0x4ff9 00000c21: JUMP 00000c22: JUMPDEST 00000c23: ISZERO 00000c24: PUSH2 0x0c76 00000c27: JUMPI 00000c28: PUSH1 0x40 00000c2a: MLOAD 00000c2b: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 00000c4c: DUP2 00000c4d: MSTORE 00000c4e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c63: DUP3 00000c64: AND 00000c65: PUSH1 0x04 00000c67: DUP3 00000c68: ADD 00000c69: MSTORE 00000c6a: PUSH1 0x24 00000c6c: ADD 00000c6d: JUMPDEST 00000c6e: PUSH1 0x40 00000c70: MLOAD 00000c71: DUP1 00000c72: SWAP2 00000c73: SUB 00000c74: SWAP1 00000c75: REVERT 00000c76: JUMPDEST 00000c77: PUSH1 0x20 00000c79: DUP4 00000c7a: EQ 00000c7b: PUSH2 0x0cb0 00000c7e: JUMPI 00000c7f: PUSH1 0x40 00000c81: MLOAD 00000c82: PUSH32 0xf4fc87a400000000000000000000000000000000000000000000000000000000 00000ca3: DUP2 00000ca4: MSTORE 00000ca5: PUSH1 0x04 00000ca7: ADD 00000ca8: PUSH1 0x40 00000caa: MLOAD 00000cab: DUP1 00000cac: SWAP2 00000cad: SUB 00000cae: SWAP1 00000caf: REVERT 00000cb0: JUMPDEST 00000cb1: PUSH2 0x0cba 00000cb4: DUP4 00000cb5: DUP6 00000cb6: PUSH2 0x5016 00000cb9: JUMP 00000cba: JUMPDEST 00000cbb: DUP6 00000cbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cd1: AND 00000cd2: PUSH32 0x418da8f85cfa851601f87634c6950491b6b8785a6445c8584f5658048d512cae 00000cf3: PUSH2 0x0cfd 00000cf6: CALLER 00000cf7: DUP10 00000cf8: DUP8 00000cf9: PUSH2 0x33c1 00000cfc: JUMP 00000cfd: JUMPDEST 00000cfe: PUSH1 0x40 00000d00: MLOAD 00000d01: SWAP1 00000d02: DUP2 00000d03: MSTORE 00000d04: PUSH1 0x20 00000d06: ADD 00000d07: PUSH1 0x40 00000d09: MLOAD 00000d0a: DUP1 00000d0b: SWAP2 00000d0c: SUB 00000d0d: SWAP1 00000d0e: LOG3 00000d0f: POP 00000d10: PUSH2 0x0d38 00000d13: PUSH1 0x01 00000d15: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00000d36: SSTORE 00000d37: JUMP 00000d38: JUMPDEST 00000d39: POP 00000d3a: POP 00000d3b: POP 00000d3c: POP 00000d3d: JUMP 00000d3e: JUMPDEST 00000d3f: PUSH1 0x00 00000d41: PUSH3 0x0f4240 00000d45: PUSH20 0x986b5e1e1755e3c2440e960477f25201b0a8bbd4 00000d5a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d6f: AND 00000d70: PUSH4 0x50d25bcd 00000d75: PUSH1 0x40 00000d77: MLOAD 00000d78: DUP2 00000d79: PUSH4 0xffffffff 00000d7e: AND 00000d7f: PUSH1 0xe0 00000d81: SHL 00000d82: DUP2 00000d83: MSTORE 00000d84: PUSH1 0x04 00000d86: ADD 00000d87: PUSH1 0x20 00000d89: PUSH1 0x40 00000d8b: MLOAD 00000d8c: DUP1 00000d8d: DUP4 00000d8e: SUB 00000d8f: DUP2 00000d90: DUP7 00000d91: GAS 00000d92: STATICCALL 00000d93: ISZERO 00000d94: DUP1 00000d95: ISZERO 00000d96: PUSH2 0x0da3 00000d99: JUMPI 00000d9a: RETURNDATASIZE 00000d9b: PUSH1 0x00 00000d9d: DUP1 00000d9e: RETURNDATACOPY 00000d9f: RETURNDATASIZE 00000da0: PUSH1 0x00 00000da2: REVERT 00000da3: JUMPDEST 00000da4: POP 00000da5: POP 00000da6: POP 00000da7: POP 00000da8: PUSH1 0x40 00000daa: MLOAD 00000dab: RETURNDATASIZE 00000dac: PUSH1 0x1f 00000dae: NOT 00000daf: PUSH1 0x1f 00000db1: DUP3 00000db2: ADD 00000db3: AND 00000db4: DUP3 00000db5: ADD 00000db6: DUP1 00000db7: PUSH1 0x40 00000db9: MSTORE 00000dba: POP 00000dbb: DUP2 00000dbc: ADD 00000dbd: SWAP1 00000dbe: PUSH2 0x0dc7 00000dc1: SWAP2 00000dc2: SWAP1 00000dc3: PUSH2 0x5052 00000dc6: JUMP 00000dc7: JUMPDEST 00000dc8: DUP2 00000dc9: PUSH2 0x0dd4 00000dcc: JUMPI 00000dcd: PUSH2 0x0dd4 00000dd0: PUSH2 0x506b 00000dd3: JUMP 00000dd4: JUMPDEST 00000dd5: DIV 00000dd6: SWAP1 00000dd7: POP 00000dd8: SWAP1 00000dd9: JUMP 00000dda: JUMPDEST 00000ddb: PUSH2 0x0de2 00000dde: PUSH2 0x2fed 00000de1: JUMP 00000de2: JUMPDEST 00000de3: DUP4 00000de4: DUP1 00000de5: TIMESTAMP 00000de6: GT 00000de7: ISZERO 00000de8: PUSH2 0x0e1d 00000deb: JUMPI 00000dec: PUSH1 0x40 00000dee: MLOAD 00000def: PUSH32 0x7bbfb6fe00000000000000000000000000000000000000000000000000000000 00000e10: DUP2 00000e11: MSTORE 00000e12: PUSH1 0x04 00000e14: ADD 00000e15: PUSH1 0x40 00000e17: MLOAD 00000e18: DUP1 00000e19: SWAP2 00000e1a: SUB 00000e1b: SWAP1 00000e1c: REVERT 00000e1d: JUMPDEST 00000e1e: PUSH1 0x40 00000e20: DUP7 00000e21: EQ 00000e22: PUSH2 0x0e57 00000e25: JUMPI 00000e26: PUSH1 0x40 00000e28: MLOAD 00000e29: PUSH32 0x4b0218a800000000000000000000000000000000000000000000000000000000 00000e4a: DUP2 00000e4b: MSTORE 00000e4c: PUSH1 0x04 00000e4e: ADD 00000e4f: PUSH1 0x40 00000e51: MLOAD 00000e52: DUP1 00000e53: SWAP2 00000e54: SUB 00000e55: SWAP1 00000e56: REVERT 00000e57: JUMPDEST 00000e58: PUSH1 0x00 00000e5a: DUP9 00000e5b: DUP2 00000e5c: MSTORE 00000e5d: PUSH1 0x03 00000e5f: PUSH1 0x20 00000e61: SWAP1 00000e62: DUP2 00000e63: MSTORE 00000e64: PUSH1 0x40 00000e66: DUP1 00000e67: DUP4 00000e68: KECCAK256 00000e69: SLOAD 00000e6a: DUP1 00000e6b: DUP5 00000e6c: MSTORE 00000e6d: SWAP2 00000e6e: DUP4 00000e6f: SWAP1 00000e70: MSTORE 00000e71: SWAP1 00000e72: SWAP2 00000e73: KECCAK256 00000e74: SLOAD 00000e75: PUSH1 0xff 00000e77: AND 00000e78: PUSH2 0x0ead 00000e7b: JUMPI 00000e7c: PUSH1 0x40 00000e7e: MLOAD 00000e7f: PUSH32 0x157b051200000000000000000000000000000000000000000000000000000000 00000ea0: DUP2 00000ea1: MSTORE 00000ea2: PUSH1 0x04 00000ea4: ADD 00000ea5: PUSH1 0x40 00000ea7: MLOAD 00000ea8: DUP1 00000ea9: SWAP2 00000eaa: SUB 00000eab: SWAP1 00000eac: REVERT 00000ead: JUMPDEST 00000eae: PUSH1 0x00 00000eb0: DUP2 00000eb1: DUP2 00000eb2: MSTORE 00000eb3: PUSH1 0x20 00000eb5: DUP2 00000eb6: SWAP1 00000eb7: MSTORE 00000eb8: PUSH1 0x40 00000eba: SWAP1 00000ebb: KECCAK256 00000ebc: DUP1 00000ebd: SLOAD 00000ebe: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000edf: AND 00000ee0: SWAP1 00000ee1: SSTORE 00000ee2: PUSH1 0x09 00000ee4: SLOAD 00000ee5: PUSH1 0x04 00000ee7: LT 00000ee8: PUSH2 0x0f1d 00000eeb: JUMPI 00000eec: PUSH1 0x40 00000eee: MLOAD 00000eef: PUSH32 0x3a6a875c00000000000000000000000000000000000000000000000000000000 00000f10: DUP2 00000f11: MSTORE 00000f12: PUSH1 0x04 00000f14: ADD 00000f15: PUSH1 0x40 00000f17: MLOAD 00000f18: DUP1 00000f19: SWAP2 00000f1a: SUB 00000f1b: SWAP1 00000f1c: REVERT 00000f1d: JUMPDEST 00000f1e: PUSH1 0x00 00000f20: DUP2 00000f21: DUP2 00000f22: MSTORE 00000f23: PUSH1 0x01 00000f25: PUSH1 0x20 00000f27: MSTORE 00000f28: PUSH1 0x40 00000f2a: SWAP1 00000f2b: KECCAK256 00000f2c: SLOAD 00000f2d: PUSH1 0xff 00000f2f: AND 00000f30: ISZERO 00000f31: PUSH2 0x0f91 00000f34: JUMPI 00000f35: PUSH1 0x00 00000f37: DUP2 00000f38: DUP2 00000f39: MSTORE 00000f3a: PUSH1 0x01 00000f3c: PUSH1 0x20 00000f3e: MSTORE 00000f3f: PUSH1 0x40 00000f41: SWAP1 00000f42: KECCAK256 00000f43: DUP1 00000f44: SLOAD 00000f45: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000f66: AND 00000f67: SWAP1 00000f68: SSTORE 00000f69: PUSH1 0x09 00000f6b: DUP1 00000f6c: SLOAD 00000f6d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000f8e: ADD 00000f8f: SWAP1 00000f90: SSTORE 00000f91: JUMPDEST 00000f92: PUSH2 0x0fcc 00000f95: PUSH1 0x00 00000f97: DUP11 00000f98: DUP11 00000f99: DUP11 00000f9a: DUP11 00000f9b: DUP11 00000f9c: PUSH1 0x40 00000f9e: MLOAD 00000f9f: PUSH1 0x20 00000fa1: ADD 00000fa2: PUSH2 0x0faf 00000fa5: SWAP6 00000fa6: SWAP5 00000fa7: SWAP4 00000fa8: SWAP3 00000fa9: SWAP2 00000faa: SWAP1 00000fab: PUSH2 0x50e3 00000fae: JUMP 00000faf: JUMPDEST 00000fb0: PUSH1 0x40 00000fb2: MLOAD 00000fb3: PUSH1 0x20 00000fb5: DUP2 00000fb6: DUP4 00000fb7: SUB 00000fb8: SUB 00000fb9: DUP2 00000fba: MSTORE 00000fbb: SWAP1 00000fbc: PUSH1 0x40 00000fbe: MSTORE 00000fbf: DUP1 00000fc0: MLOAD 00000fc1: SWAP1 00000fc2: PUSH1 0x20 00000fc4: ADD 00000fc5: KECCAK256 00000fc6: DUP7 00000fc7: DUP7 00000fc8: PUSH2 0x3049 00000fcb: JUMP 00000fcc: JUMPDEST 00000fcd: PUSH2 0x0fdb 00000fd0: DUP6 00000fd1: PUSH4 0xffffffff 00000fd6: AND 00000fd7: PUSH2 0x32be 00000fda: JUMP 00000fdb: JUMPDEST 00000fdc: PUSH1 0x00 00000fde: DUP2 00000fdf: DUP2 00000fe0: MSTORE 00000fe1: PUSH1 0x04 00000fe3: PUSH1 0x20 00000fe5: MSTORE 00000fe6: PUSH1 0x40 00000fe8: DUP1 00000fe9: DUP3 00000fea: KECCAK256 00000feb: SLOAD 00000fec: SWAP1 00000fed: MLOAD 00000fee: PUSH4 0xffffffff 00000ff3: DUP9 00000ff4: AND 00000ff5: SWAP3 00000ff6: DUP13 00000ff7: SWAP3 00000ff8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000100d: AND 0000100e: SWAP2 0000100f: PUSH32 0xa8a7bc47477d28ccc711706cbda958b39da6fdb915d2746405866d89698f6de6 00001030: SWAP2 00001031: SWAP1 00001032: LOG4 00001033: POP 00001034: POP 00001035: POP 00001036: POP 00001037: POP 00001038: POP 00001039: POP 0000103a: POP 0000103b: POP 0000103c: JUMP 0000103d: JUMPDEST 0000103e: CALLER 0000103f: PUSH1 0x00 00001041: SWAP1 00001042: DUP2 00001043: MSTORE 00001044: PUSH1 0x0c 00001046: PUSH1 0x20 00001048: MSTORE 00001049: PUSH1 0x40 0000104b: SWAP1 0000104c: KECCAK256 0000104d: SLOAD 0000104e: PUSH1 0x01 00001050: DUP2 00001051: SLT 00001052: ISZERO 00001053: PUSH2 0x1088 00001056: JUMPI 00001057: PUSH1 0x40 00001059: MLOAD 0000105a: PUSH32 0x7378cebb00000000000000000000000000000000000000000000000000000000 0000107b: DUP2 0000107c: MSTORE 0000107d: PUSH1 0x04 0000107f: ADD 00001080: PUSH1 0x40 00001082: MLOAD 00001083: DUP1 00001084: SWAP2 00001085: SUB 00001086: SWAP1 00001087: REVERT 00001088: JUMPDEST 00001089: PUSH1 0x00 0000108b: DUP1 0000108c: PUSH1 0x00 0000108e: DUP1 0000108f: PUSH2 0x1098 00001092: DUP9 00001093: DUP9 00001094: PUSH2 0x35c8 00001097: JUMP 00001098: JUMPDEST 00001099: SWAP4 0000109a: POP 0000109b: SWAP4 0000109c: POP 0000109d: SWAP4 0000109e: POP 0000109f: SWAP4 000010a0: POP 000010a1: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000010b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010cb: AND 000010cc: DUP5 000010cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010e2: AND 000010e3: EQ 000010e4: PUSH2 0x1119 000010e7: JUMPI 000010e8: PUSH1 0x40 000010ea: MLOAD 000010eb: PUSH32 0xc1ab6dc100000000000000000000000000000000000000000000000000000000 0000110c: DUP2 0000110d: MSTORE 0000110e: PUSH1 0x04 00001110: ADD 00001111: PUSH1 0x40 00001113: MLOAD 00001114: DUP1 00001115: SWAP2 00001116: SUB 00001117: SWAP1 00001118: REVERT 00001119: JUMPDEST 0000111a: PUSH1 0x00 0000111c: PUSH2 0x1123 0000111f: PUSH2 0x0d3e 00001122: JUMP 00001123: JUMPDEST 00001124: PUSH2 0x112d 00001127: GASPRICE 00001128: DUP13 00001129: PUSH2 0x514a 0000112c: JUMP 0000112d: JUMPDEST 0000112e: PUSH2 0x1137 00001131: SWAP2 00001132: SWAP1 00001133: PUSH2 0x5161 00001136: JUMP 00001137: JUMPDEST 00001138: SWAP1 00001139: POP 0000113a: DUP4 0000113b: DUP2 0000113c: GT 0000113d: ISZERO 0000113e: PUSH2 0x1173 00001141: JUMPI 00001142: PUSH1 0x40 00001144: MLOAD 00001145: PUSH32 0x1fbaba3500000000000000000000000000000000000000000000000000000000 00001166: DUP2 00001167: MSTORE 00001168: PUSH1 0x04 0000116a: ADD 0000116b: PUSH1 0x40 0000116d: MLOAD 0000116e: DUP1 0000116f: SWAP2 00001170: SUB 00001171: SWAP1 00001172: REVERT 00001173: JUMPDEST 00001174: PUSH2 0x1181 00001177: DUP6 00001178: DUP6 00001179: DUP6 0000117a: DUP6 0000117b: DUP14 0000117c: DUP14 0000117d: PUSH2 0x3645 00001180: JUMP 00001181: JUMPDEST 00001182: PUSH1 0x40 00001184: MLOAD 00001185: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000011a6: DUP2 000011a7: MSTORE 000011a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011bd: DUP5 000011be: AND 000011bf: PUSH1 0x04 000011c1: DUP3 000011c2: ADD 000011c3: MSTORE 000011c4: SWAP4 000011c5: DUP2 000011c6: SWAP1 000011c7: SUB 000011c8: PUSH1 0x24 000011ca: DUP6 000011cb: ADD 000011cc: DUP2 000011cd: SWAP1 000011ce: MSTORE 000011cf: SWAP6 000011d0: DUP2 000011d1: ADD 000011d2: SWAP6 000011d3: SWAP4 000011d4: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000011e9: SWAP1 000011ea: PUSH4 0xa9059cbb 000011ef: SWAP1 000011f0: PUSH1 0x44 000011f2: ADD 000011f3: PUSH1 0x20 000011f5: PUSH1 0x40 000011f7: MLOAD 000011f8: DUP1 000011f9: DUP4 000011fa: SUB 000011fb: DUP2 000011fc: PUSH1 0x00 000011fe: DUP8 000011ff: GAS 00001200: CALL 00001201: ISZERO 00001202: DUP1 00001203: ISZERO 00001204: PUSH2 0x1211 00001207: JUMPI 00001208: RETURNDATASIZE 00001209: PUSH1 0x00 0000120b: DUP1 0000120c: RETURNDATACOPY 0000120d: RETURNDATASIZE 0000120e: PUSH1 0x00 00001210: REVERT 00001211: JUMPDEST 00001212: POP 00001213: POP 00001214: POP 00001215: POP 00001216: PUSH1 0x40 00001218: MLOAD 00001219: RETURNDATASIZE 0000121a: PUSH1 0x1f 0000121c: NOT 0000121d: PUSH1 0x1f 0000121f: DUP3 00001220: ADD 00001221: AND 00001222: DUP3 00001223: ADD 00001224: DUP1 00001225: PUSH1 0x40 00001227: MSTORE 00001228: POP 00001229: DUP2 0000122a: ADD 0000122b: SWAP1 0000122c: PUSH2 0x1235 0000122f: SWAP2 00001230: SWAP1 00001231: PUSH2 0x4ff9 00001234: JUMP 00001235: JUMPDEST 00001236: POP 00001237: DUP7 00001238: ISZERO 00001239: PUSH2 0x124a 0000123c: JUMPI 0000123d: PUSH2 0x1245 00001240: DUP7 00001241: PUSH2 0x3788 00001244: JUMP 00001245: JUMPDEST 00001246: PUSH2 0x125d 00001249: JUMP 0000124a: JUMPDEST 0000124b: CALLER 0000124c: PUSH1 0x00 0000124e: SWAP1 0000124f: DUP2 00001250: MSTORE 00001251: PUSH1 0x0c 00001253: PUSH1 0x20 00001255: MSTORE 00001256: PUSH1 0x40 00001258: SWAP1 00001259: KECCAK256 0000125a: DUP7 0000125b: SWAP1 0000125c: SSTORE 0000125d: JUMPDEST 0000125e: DUP2 0000125f: PUSH4 0xffffffff 00001264: AND 00001265: PUSH32 0xa5ab0177dcced661a8f177cffdbbcd24059136ca5d8e3565615134739a9065d8 00001286: DUP6 00001287: PUSH1 0x40 00001289: MLOAD 0000128a: PUSH2 0x1295 0000128d: SWAP2 0000128e: DUP2 0000128f: MSTORE 00001290: PUSH1 0x20 00001292: ADD 00001293: SWAP1 00001294: JUMP 00001295: JUMPDEST 00001296: PUSH1 0x40 00001298: MLOAD 00001299: DUP1 0000129a: SWAP2 0000129b: SUB 0000129c: SWAP1 0000129d: LOG2 0000129e: POP 0000129f: POP 000012a0: POP 000012a1: POP 000012a2: POP 000012a3: POP 000012a4: POP 000012a5: POP 000012a6: POP 000012a7: POP 000012a8: JUMP 000012a9: JUMPDEST 000012aa: PUSH2 0x12b1 000012ad: PUSH2 0x2fed 000012b0: JUMP 000012b1: JUMPDEST 000012b2: PUSH2 0x12b9 000012b5: PUSH2 0x3340 000012b8: JUMP 000012b9: JUMPDEST 000012ba: PUSH1 0x40 000012bc: MLOAD 000012bd: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 000012de: DUP2 000012df: MSTORE 000012e0: CALLER 000012e1: PUSH1 0x04 000012e3: DUP3 000012e4: ADD 000012e5: DUP2 000012e6: SWAP1 000012e7: MSTORE 000012e8: SWAP1 000012e9: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 000012fe: SWAP1 000012ff: PUSH4 0xdf592f7d 00001304: SWAP1 00001305: PUSH1 0x24 00001307: ADD 00001308: PUSH1 0x20 0000130a: PUSH1 0x40 0000130c: MLOAD 0000130d: DUP1 0000130e: DUP4 0000130f: SUB 00001310: DUP2 00001311: DUP7 00001312: GAS 00001313: STATICCALL 00001314: ISZERO 00001315: DUP1 00001316: ISZERO 00001317: PUSH2 0x1324 0000131a: JUMPI 0000131b: RETURNDATASIZE 0000131c: PUSH1 0x00 0000131e: DUP1 0000131f: RETURNDATACOPY 00001320: RETURNDATASIZE 00001321: PUSH1 0x00 00001323: REVERT 00001324: JUMPDEST 00001325: POP 00001326: POP 00001327: POP 00001328: POP 00001329: PUSH1 0x40 0000132b: MLOAD 0000132c: RETURNDATASIZE 0000132d: PUSH1 0x1f 0000132f: NOT 00001330: PUSH1 0x1f 00001332: DUP3 00001333: ADD 00001334: AND 00001335: DUP3 00001336: ADD 00001337: DUP1 00001338: PUSH1 0x40 0000133a: MSTORE 0000133b: POP 0000133c: DUP2 0000133d: ADD 0000133e: SWAP1 0000133f: PUSH2 0x1348 00001342: SWAP2 00001343: SWAP1 00001344: PUSH2 0x4ff9 00001347: JUMP 00001348: JUMPDEST 00001349: ISZERO 0000134a: PUSH2 0x1397 0000134d: JUMPI 0000134e: PUSH1 0x40 00001350: MLOAD 00001351: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 00001372: DUP2 00001373: MSTORE 00001374: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001389: DUP3 0000138a: AND 0000138b: PUSH1 0x04 0000138d: DUP3 0000138e: ADD 0000138f: MSTORE 00001390: PUSH1 0x24 00001392: ADD 00001393: PUSH2 0x0c6d 00001396: JUMP 00001397: JUMPDEST 00001398: DUP7 00001399: PUSH2 0x13ce 0000139c: JUMPI 0000139d: PUSH1 0x40 0000139f: MLOAD 000013a0: PUSH32 0xf4fc87a400000000000000000000000000000000000000000000000000000000 000013c1: DUP2 000013c2: MSTORE 000013c3: PUSH1 0x04 000013c5: ADD 000013c6: PUSH1 0x40 000013c8: MLOAD 000013c9: DUP1 000013ca: SWAP2 000013cb: SUB 000013cc: SWAP1 000013cd: REVERT 000013ce: JUMPDEST 000013cf: PUSH1 0x40 000013d1: MLOAD 000013d2: PUSH32 0xd505accf00000000000000000000000000000000000000000000000000000000 000013f3: DUP2 000013f4: MSTORE 000013f5: CALLER 000013f6: PUSH1 0x04 000013f8: DUP3 000013f9: ADD 000013fa: MSTORE 000013fb: ADDRESS 000013fc: PUSH1 0x24 000013fe: DUP3 000013ff: ADD 00001400: MSTORE 00001401: PUSH1 0x44 00001403: DUP2 00001404: ADD 00001405: DUP8 00001406: SWAP1 00001407: MSTORE 00001408: PUSH1 0x64 0000140a: DUP2 0000140b: ADD 0000140c: DUP7 0000140d: SWAP1 0000140e: MSTORE 0000140f: PUSH1 0xff 00001411: DUP6 00001412: AND 00001413: PUSH1 0x84 00001415: DUP3 00001416: ADD 00001417: MSTORE 00001418: PUSH1 0xa4 0000141a: DUP2 0000141b: ADD 0000141c: DUP5 0000141d: SWAP1 0000141e: MSTORE 0000141f: PUSH1 0xc4 00001421: DUP2 00001422: ADD 00001423: DUP4 00001424: SWAP1 00001425: MSTORE 00001426: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000143b: DUP10 0000143c: AND 0000143d: SWAP1 0000143e: PUSH4 0xd505accf 00001443: SWAP1 00001444: PUSH1 0xe4 00001446: ADD 00001447: PUSH1 0x00 00001449: PUSH1 0x40 0000144b: MLOAD 0000144c: DUP1 0000144d: DUP4 0000144e: SUB 0000144f: DUP2 00001450: PUSH1 0x00 00001452: DUP8 00001453: DUP1 00001454: EXTCODESIZE 00001455: ISZERO 00001456: DUP1 00001457: ISZERO 00001458: PUSH2 0x1460 0000145b: JUMPI 0000145c: PUSH1 0x00 0000145e: DUP1 0000145f: REVERT 00001460: JUMPDEST 00001461: POP 00001462: GAS 00001463: CALL 00001464: ISZERO 00001465: DUP1 00001466: ISZERO 00001467: PUSH2 0x1474 0000146a: JUMPI 0000146b: RETURNDATASIZE 0000146c: PUSH1 0x00 0000146e: DUP1 0000146f: RETURNDATACOPY 00001470: RETURNDATASIZE 00001471: PUSH1 0x00 00001473: REVERT 00001474: JUMPDEST 00001475: POP 00001476: POP 00001477: POP 00001478: POP 00001479: DUP7 0000147a: DUP9 0000147b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001490: AND 00001491: PUSH32 0x418da8f85cfa851601f87634c6950491b6b8785a6445c8584f5658048d512cae 000014b2: PUSH2 0x14bc 000014b5: CALLER 000014b6: DUP13 000014b7: DUP12 000014b8: PUSH2 0x33c1 000014bb: JUMP 000014bc: JUMPDEST 000014bd: PUSH1 0x40 000014bf: MLOAD 000014c0: SWAP1 000014c1: DUP2 000014c2: MSTORE 000014c3: PUSH1 0x20 000014c5: ADD 000014c6: PUSH1 0x40 000014c8: MLOAD 000014c9: DUP1 000014ca: SWAP2 000014cb: SUB 000014cc: SWAP1 000014cd: LOG3 000014ce: POP 000014cf: PUSH2 0x14f7 000014d2: PUSH1 0x01 000014d4: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 000014f5: SSTORE 000014f6: JUMP 000014f7: JUMPDEST 000014f8: POP 000014f9: POP 000014fa: POP 000014fb: POP 000014fc: POP 000014fd: POP 000014fe: POP 000014ff: JUMP 00001500: JUMPDEST 00001501: PUSH2 0x1508 00001504: PUSH2 0x2fed 00001507: JUMP 00001508: JUMPDEST 00001509: PUSH2 0x1510 0000150c: PUSH2 0x3340 0000150f: JUMP 00001510: JUMPDEST 00001511: PUSH1 0x40 00001513: MLOAD 00001514: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 00001535: DUP2 00001536: MSTORE 00001537: CALLER 00001538: PUSH1 0x04 0000153a: DUP3 0000153b: ADD 0000153c: DUP2 0000153d: SWAP1 0000153e: MSTORE 0000153f: SWAP1 00001540: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 00001555: SWAP1 00001556: PUSH4 0xdf592f7d 0000155b: SWAP1 0000155c: PUSH1 0x24 0000155e: ADD 0000155f: PUSH1 0x20 00001561: PUSH1 0x40 00001563: MLOAD 00001564: DUP1 00001565: DUP4 00001566: SUB 00001567: DUP2 00001568: DUP7 00001569: GAS 0000156a: STATICCALL 0000156b: ISZERO 0000156c: DUP1 0000156d: ISZERO 0000156e: PUSH2 0x157b 00001571: JUMPI 00001572: RETURNDATASIZE 00001573: PUSH1 0x00 00001575: DUP1 00001576: RETURNDATACOPY 00001577: RETURNDATASIZE 00001578: PUSH1 0x00 0000157a: REVERT 0000157b: JUMPDEST 0000157c: POP 0000157d: POP 0000157e: POP 0000157f: POP 00001580: PUSH1 0x40 00001582: MLOAD 00001583: RETURNDATASIZE 00001584: PUSH1 0x1f 00001586: NOT 00001587: PUSH1 0x1f 00001589: DUP3 0000158a: ADD 0000158b: AND 0000158c: DUP3 0000158d: ADD 0000158e: DUP1 0000158f: PUSH1 0x40 00001591: MSTORE 00001592: POP 00001593: DUP2 00001594: ADD 00001595: SWAP1 00001596: PUSH2 0x159f 00001599: SWAP2 0000159a: SWAP1 0000159b: PUSH2 0x4ff9 0000159e: JUMP 0000159f: JUMPDEST 000015a0: ISZERO 000015a1: PUSH2 0x15ee 000015a4: JUMPI 000015a5: PUSH1 0x40 000015a7: MLOAD 000015a8: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 000015c9: DUP2 000015ca: MSTORE 000015cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015e0: DUP3 000015e1: AND 000015e2: PUSH1 0x04 000015e4: DUP3 000015e5: ADD 000015e6: MSTORE 000015e7: PUSH1 0x24 000015e9: ADD 000015ea: PUSH2 0x0c6d 000015ed: JUMP 000015ee: JUMPDEST 000015ef: PUSH1 0x40 000015f1: MLOAD 000015f2: PUSH32 0xd505accf00000000000000000000000000000000000000000000000000000000 00001613: DUP2 00001614: MSTORE 00001615: CALLER 00001616: PUSH1 0x04 00001618: DUP3 00001619: ADD 0000161a: MSTORE 0000161b: ADDRESS 0000161c: PUSH1 0x24 0000161e: DUP3 0000161f: ADD 00001620: MSTORE 00001621: PUSH1 0x44 00001623: DUP2 00001624: ADD 00001625: DUP8 00001626: SWAP1 00001627: MSTORE 00001628: PUSH1 0x64 0000162a: DUP2 0000162b: ADD 0000162c: DUP7 0000162d: SWAP1 0000162e: MSTORE 0000162f: PUSH1 0xff 00001631: DUP6 00001632: AND 00001633: PUSH1 0x84 00001635: DUP3 00001636: ADD 00001637: MSTORE 00001638: PUSH1 0xa4 0000163a: DUP2 0000163b: ADD 0000163c: DUP5 0000163d: SWAP1 0000163e: MSTORE 0000163f: PUSH1 0xc4 00001641: DUP2 00001642: ADD 00001643: DUP4 00001644: SWAP1 00001645: MSTORE 00001646: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000165b: DUP9 0000165c: AND 0000165d: SWAP1 0000165e: PUSH4 0xd505accf 00001663: SWAP1 00001664: PUSH1 0xe4 00001666: ADD 00001667: PUSH1 0x00 00001669: PUSH1 0x40 0000166b: MLOAD 0000166c: DUP1 0000166d: DUP4 0000166e: SUB 0000166f: DUP2 00001670: PUSH1 0x00 00001672: DUP8 00001673: DUP1 00001674: EXTCODESIZE 00001675: ISZERO 00001676: DUP1 00001677: ISZERO 00001678: PUSH2 0x1680 0000167b: JUMPI 0000167c: PUSH1 0x00 0000167e: DUP1 0000167f: REVERT 00001680: JUMPDEST 00001681: POP 00001682: GAS 00001683: CALL 00001684: ISZERO 00001685: DUP1 00001686: ISZERO 00001687: PUSH2 0x1694 0000168a: JUMPI 0000168b: RETURNDATASIZE 0000168c: PUSH1 0x00 0000168e: DUP1 0000168f: RETURNDATACOPY 00001690: RETURNDATASIZE 00001691: PUSH1 0x00 00001693: REVERT 00001694: JUMPDEST 00001695: POP 00001696: POP 00001697: PUSH1 0x40 00001699: DUP1 0000169a: MLOAD 0000169b: CALLER 0000169c: PUSH1 0x60 0000169e: SHL 0000169f: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000016c0: AND 000016c1: PUSH1 0x20 000016c3: DUP1 000016c4: DUP4 000016c5: ADD 000016c6: SWAP2 000016c7: SWAP1 000016c8: SWAP2 000016c9: MSTORE 000016ca: DUP3 000016cb: MLOAD 000016cc: PUSH1 0x14 000016ce: DUP2 000016cf: DUP5 000016d0: SUB 000016d1: ADD 000016d2: DUP2 000016d3: MSTORE 000016d4: PUSH1 0x34 000016d6: SWAP1 000016d7: SWAP3 000016d8: ADD 000016d9: SWAP1 000016da: SWAP3 000016db: MSTORE 000016dc: DUP1 000016dd: MLOAD 000016de: SWAP2 000016df: ADD 000016e0: KECCAK256 000016e1: SWAP2 000016e2: POP 000016e3: PUSH2 0x16e9 000016e6: SWAP1 000016e7: POP 000016e8: JUMP 000016e9: JUMPDEST 000016ea: DUP8 000016eb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001700: AND 00001701: PUSH32 0x2bf8107bf8c15cdcd8d6360f4a02ee97d7098a46b18fccd32df8796775552fc0 00001722: PUSH2 0x172c 00001725: CALLER 00001726: DUP12 00001727: DUP12 00001728: PUSH2 0x33c1 0000172b: JUMP 0000172c: JUMPDEST 0000172d: PUSH1 0x40 0000172f: MLOAD 00001730: SWAP1 00001731: DUP2 00001732: MSTORE 00001733: PUSH1 0x20 00001735: ADD 00001736: PUSH1 0x40 00001738: MLOAD 00001739: DUP1 0000173a: SWAP2 0000173b: SUB 0000173c: SWAP1 0000173d: LOG3 0000173e: POP 0000173f: PUSH2 0x1767 00001742: PUSH1 0x01 00001744: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001765: SSTORE 00001766: JUMP 00001767: JUMPDEST 00001768: POP 00001769: POP 0000176a: POP 0000176b: POP 0000176c: POP 0000176d: POP 0000176e: JUMP 0000176f: JUMPDEST 00001770: PUSH2 0x1777 00001773: PUSH2 0x2fed 00001776: JUMP 00001777: JUMPDEST 00001778: PUSH2 0x177f 0000177b: PUSH2 0x3340 0000177e: JUMP 0000177f: JUMPDEST 00001780: PUSH1 0x40 00001782: MLOAD 00001783: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 000017a4: DUP2 000017a5: MSTORE 000017a6: CALLER 000017a7: PUSH1 0x04 000017a9: DUP3 000017aa: ADD 000017ab: DUP2 000017ac: SWAP1 000017ad: MSTORE 000017ae: SWAP1 000017af: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 000017c4: SWAP1 000017c5: PUSH4 0xdf592f7d 000017ca: SWAP1 000017cb: PUSH1 0x24 000017cd: ADD 000017ce: PUSH1 0x20 000017d0: PUSH1 0x40 000017d2: MLOAD 000017d3: DUP1 000017d4: DUP4 000017d5: SUB 000017d6: DUP2 000017d7: DUP7 000017d8: GAS 000017d9: STATICCALL 000017da: ISZERO 000017db: DUP1 000017dc: ISZERO 000017dd: PUSH2 0x17ea 000017e0: JUMPI 000017e1: RETURNDATASIZE 000017e2: PUSH1 0x00 000017e4: DUP1 000017e5: RETURNDATACOPY 000017e6: RETURNDATASIZE 000017e7: PUSH1 0x00 000017e9: REVERT 000017ea: JUMPDEST 000017eb: POP 000017ec: POP 000017ed: POP 000017ee: POP 000017ef: PUSH1 0x40 000017f1: MLOAD 000017f2: RETURNDATASIZE 000017f3: PUSH1 0x1f 000017f5: NOT 000017f6: PUSH1 0x1f 000017f8: DUP3 000017f9: ADD 000017fa: AND 000017fb: DUP3 000017fc: ADD 000017fd: DUP1 000017fe: PUSH1 0x40 00001800: MSTORE 00001801: POP 00001802: DUP2 00001803: ADD 00001804: SWAP1 00001805: PUSH2 0x180e 00001808: SWAP2 00001809: SWAP1 0000180a: PUSH2 0x4ff9 0000180d: JUMP 0000180e: JUMPDEST 0000180f: ISZERO 00001810: PUSH2 0x185d 00001813: JUMPI 00001814: PUSH1 0x40 00001816: MLOAD 00001817: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 00001838: DUP2 00001839: MSTORE 0000183a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000184f: DUP3 00001850: AND 00001851: PUSH1 0x04 00001853: DUP3 00001854: ADD 00001855: MSTORE 00001856: PUSH1 0x24 00001858: ADD 00001859: PUSH2 0x0c6d 0000185c: JUMP 0000185d: JUMPDEST 0000185e: PUSH1 0x40 00001860: DUP1 00001861: MLOAD 00001862: CALLER 00001863: PUSH1 0x60 00001865: SHL 00001866: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 00001887: AND 00001888: PUSH1 0x20 0000188a: DUP1 0000188b: DUP4 0000188c: ADD 0000188d: SWAP2 0000188e: SWAP1 0000188f: SWAP2 00001890: MSTORE 00001891: DUP3 00001892: MLOAD 00001893: PUSH1 0x14 00001895: DUP2 00001896: DUP5 00001897: SUB 00001898: ADD 00001899: DUP2 0000189a: MSTORE 0000189b: PUSH1 0x34 0000189d: SWAP1 0000189e: SWAP3 0000189f: ADD 000018a0: SWAP1 000018a1: SWAP3 000018a2: MSTORE 000018a3: DUP1 000018a4: MLOAD 000018a5: SWAP2 000018a6: ADD 000018a7: KECCAK256 000018a8: DUP4 000018a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018be: AND 000018bf: PUSH32 0x2bf8107bf8c15cdcd8d6360f4a02ee97d7098a46b18fccd32df8796775552fc0 000018e0: PUSH2 0x18ea 000018e3: CALLER 000018e4: DUP8 000018e5: DUP8 000018e6: PUSH2 0x33c1 000018e9: JUMP 000018ea: JUMPDEST 000018eb: PUSH1 0x40 000018ed: MLOAD 000018ee: SWAP1 000018ef: DUP2 000018f0: MSTORE 000018f1: PUSH1 0x20 000018f3: ADD 000018f4: PUSH1 0x40 000018f6: MLOAD 000018f7: DUP1 000018f8: SWAP2 000018f9: SUB 000018fa: SWAP1 000018fb: LOG3 000018fc: POP 000018fd: PUSH2 0x1925 00001900: PUSH1 0x01 00001902: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001923: SSTORE 00001924: JUMP 00001925: JUMPDEST 00001926: POP 00001927: POP 00001928: JUMP 00001929: JUMPDEST 0000192a: PUSH2 0x1931 0000192d: PUSH2 0x3868 00001930: JUMP 00001931: JUMPDEST 00001932: PUSH2 0x1939 00001935: PUSH2 0x38c0 00001938: JUMP 00001939: JUMPDEST 0000193a: PUSH2 0x1941 0000193d: PUSH2 0x391b 00001940: JUMP 00001941: JUMPDEST 00001942: JUMP 00001943: JUMPDEST 00001944: PUSH2 0x194b 00001947: PUSH2 0x39b8 0000194a: JUMP 0000194b: JUMPDEST 0000194c: PUSH2 0x1954 0000194f: DUP3 00001950: PUSH2 0x3abc 00001953: JUMP 00001954: JUMPDEST 00001955: PUSH2 0x1925 00001958: DUP3 00001959: DUP3 0000195a: PUSH2 0x3ac4 0000195d: JUMP 0000195e: JUMPDEST 0000195f: PUSH1 0x00 00001961: PUSH2 0x1968 00001964: PUSH2 0x3bfd 00001967: JUMP 00001968: JUMPDEST 00001969: POP 0000196a: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 0000198b: SWAP1 0000198c: JUMP 0000198d: JUMPDEST 0000198e: PUSH2 0x1995 00001991: PUSH2 0x3868 00001994: JUMP 00001995: JUMPDEST 00001996: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019ab: DUP2 000019ac: AND 000019ad: PUSH1 0x00 000019af: SWAP1 000019b0: DUP2 000019b1: MSTORE 000019b2: PUSH1 0x0c 000019b4: PUSH1 0x20 000019b6: MSTORE 000019b7: PUSH1 0x40 000019b9: DUP2 000019ba: KECCAK256 000019bb: SLOAD 000019bc: SWAP1 000019bd: SUB 000019be: PUSH2 0x02fd 000019c1: JUMPI 000019c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019d7: DUP2 000019d8: AND 000019d9: PUSH1 0x00 000019db: DUP2 000019dc: DUP2 000019dd: MSTORE 000019de: PUSH1 0x0c 000019e0: PUSH1 0x20 000019e2: MSTORE 000019e3: PUSH1 0x40 000019e5: DUP1 000019e6: DUP3 000019e7: KECCAK256 000019e8: PUSH1 0x01 000019ea: SWAP1 000019eb: SSTORE 000019ec: MLOAD 000019ed: PUSH32 0xdd1b4582f5fafcfcf2fcd22efc75c09d15daad64484c59c27bb9a05c0d436a26 00001a0e: SWAP2 00001a0f: SWAP1 00001a10: LOG2 00001a11: POP 00001a12: JUMP 00001a13: JUMPDEST 00001a14: POP 00001a15: JUMP 00001a16: JUMPDEST 00001a17: PUSH2 0x1a1e 00001a1a: PUSH2 0x3868 00001a1d: JUMP 00001a1e: JUMPDEST 00001a1f: PUSH1 0x40 00001a21: MLOAD 00001a22: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001a43: DUP2 00001a44: MSTORE 00001a45: PUSH1 0x20 00001a47: PUSH1 0x04 00001a49: DUP3 00001a4a: ADD 00001a4b: MSTORE 00001a4c: PUSH1 0x08 00001a4e: PUSH1 0x24 00001a50: DUP3 00001a51: ADD 00001a52: MSTORE 00001a53: PUSH32 0x44697361626c6564000000000000000000000000000000000000000000000000 00001a74: PUSH1 0x44 00001a76: DUP3 00001a77: ADD 00001a78: MSTORE 00001a79: PUSH1 0x64 00001a7b: ADD 00001a7c: PUSH2 0x0c6d 00001a7f: JUMP 00001a80: JUMPDEST 00001a81: CALLER 00001a82: DUP1 00001a83: PUSH2 0x1a8a 00001a86: PUSH2 0x2a1f 00001a89: JUMP 00001a8a: JUMPDEST 00001a8b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aa0: AND 00001aa1: EQ 00001aa2: PUSH2 0x1aef 00001aa5: JUMPI 00001aa6: PUSH1 0x40 00001aa8: MLOAD 00001aa9: PUSH32 0x118cdaa700000000000000000000000000000000000000000000000000000000 00001aca: DUP2 00001acb: MSTORE 00001acc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ae1: DUP3 00001ae2: AND 00001ae3: PUSH1 0x04 00001ae5: DUP3 00001ae6: ADD 00001ae7: MSTORE 00001ae8: PUSH1 0x24 00001aea: ADD 00001aeb: PUSH2 0x0c6d 00001aee: JUMP 00001aef: JUMPDEST 00001af0: PUSH2 0x1a13 00001af3: DUP2 00001af4: PUSH2 0x3c6c 00001af7: JUMP 00001af8: JUMPDEST 00001af9: PUSH2 0x1b00 00001afc: PUSH2 0x3868 00001aff: JUMP 00001b00: JUMPDEST 00001b01: PUSH2 0x1b08 00001b04: PUSH2 0x2fed 00001b07: JUMP 00001b08: JUMPDEST 00001b09: PUSH2 0x1941 00001b0c: PUSH2 0x3cbc 00001b0f: JUMP 00001b10: JUMPDEST 00001b11: PUSH1 0x00 00001b13: DUP1 00001b14: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300 00001b35: JUMPDEST 00001b36: SLOAD 00001b37: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b4c: AND 00001b4d: SWAP3 00001b4e: SWAP2 00001b4f: POP 00001b50: POP 00001b51: JUMP 00001b52: JUMPDEST 00001b53: PUSH1 0x00 00001b55: DUP1 00001b56: PUSH1 0x00 00001b58: JUMPDEST 00001b59: DUP5 00001b5a: DUP5 00001b5b: DUP3 00001b5c: DUP2 00001b5d: DUP2 00001b5e: LT 00001b5f: PUSH2 0x1b6a 00001b62: JUMPI 00001b63: PUSH2 0x1b6a 00001b66: PUSH2 0x519c 00001b69: JUMP 00001b6a: JUMPDEST 00001b6b: SWAP1 00001b6c: POP 00001b6d: PUSH1 0x20 00001b6f: MUL 00001b70: ADD 00001b71: CALLDATALOAD 00001b72: SWAP2 00001b73: POP 00001b74: DUP2 00001b75: DUP7 00001b76: LT 00001b77: PUSH2 0x1ba9 00001b7a: JUMPI 00001b7b: PUSH1 0x40 00001b7d: DUP1 00001b7e: MLOAD 00001b7f: PUSH1 0x20 00001b81: DUP2 00001b82: ADD 00001b83: DUP5 00001b84: SWAP1 00001b85: MSTORE 00001b86: SWAP1 00001b87: DUP2 00001b88: ADD 00001b89: DUP8 00001b8a: SWAP1 00001b8b: MSTORE 00001b8c: PUSH1 0x60 00001b8e: ADD 00001b8f: PUSH1 0x40 00001b91: MLOAD 00001b92: PUSH1 0x20 00001b94: DUP2 00001b95: DUP4 00001b96: SUB 00001b97: SUB 00001b98: DUP2 00001b99: MSTORE 00001b9a: SWAP1 00001b9b: PUSH1 0x40 00001b9d: MSTORE 00001b9e: DUP1 00001b9f: MLOAD 00001ba0: SWAP1 00001ba1: PUSH1 0x20 00001ba3: ADD 00001ba4: KECCAK256 00001ba5: PUSH2 0x1bd4 00001ba8: JUMP 00001ba9: JUMPDEST 00001baa: PUSH1 0x40 00001bac: DUP1 00001bad: MLOAD 00001bae: PUSH1 0x20 00001bb0: DUP2 00001bb1: ADD 00001bb2: DUP9 00001bb3: SWAP1 00001bb4: MSTORE 00001bb5: SWAP1 00001bb6: DUP2 00001bb7: ADD 00001bb8: DUP4 00001bb9: SWAP1 00001bba: MSTORE 00001bbb: PUSH1 0x60 00001bbd: ADD 00001bbe: PUSH1 0x40 00001bc0: MLOAD 00001bc1: PUSH1 0x20 00001bc3: DUP2 00001bc4: DUP4 00001bc5: SUB 00001bc6: SUB 00001bc7: DUP2 00001bc8: MSTORE 00001bc9: SWAP1 00001bca: PUSH1 0x40 00001bcc: MSTORE 00001bcd: DUP1 00001bce: MLOAD 00001bcf: SWAP1 00001bd0: PUSH1 0x20 00001bd2: ADD 00001bd3: KECCAK256 00001bd4: JUMPDEST 00001bd5: SWAP6 00001bd6: POP 00001bd7: PUSH1 0x01 00001bd9: ADD 00001bda: DUP4 00001bdb: DUP2 00001bdc: LT 00001bdd: PUSH2 0x1b58 00001be0: JUMPI 00001be1: POP 00001be2: POP 00001be3: POP 00001be4: PUSH1 0x00 00001be6: DUP4 00001be7: DUP2 00001be8: MSTORE 00001be9: PUSH1 0x06 00001beb: PUSH1 0x20 00001bed: MSTORE 00001bee: PUSH1 0x40 00001bf0: SWAP1 00001bf1: KECCAK256 00001bf2: SLOAD 00001bf3: PUSH1 0xff 00001bf5: AND 00001bf6: JUMPDEST 00001bf7: SWAP4 00001bf8: SWAP3 00001bf9: POP 00001bfa: POP 00001bfb: POP 00001bfc: JUMP 00001bfd: JUMPDEST 00001bfe: PUSH2 0x1c05 00001c01: PUSH2 0x2fed 00001c04: JUMP 00001c05: JUMPDEST 00001c06: PUSH2 0x1c0d 00001c09: PUSH2 0x3340 00001c0c: JUMP 00001c0d: JUMPDEST 00001c0e: PUSH1 0x00 00001c10: DUP1 00001c11: PUSH1 0x00 00001c13: DUP1 00001c14: PUSH2 0x1c1d 00001c17: DUP7 00001c18: DUP7 00001c19: PUSH2 0x35c8 00001c1c: JUMP 00001c1d: JUMPDEST 00001c1e: SWAP4 00001c1f: POP 00001c20: SWAP4 00001c21: POP 00001c22: SWAP4 00001c23: POP 00001c24: SWAP4 00001c25: POP 00001c26: PUSH2 0x1c33 00001c29: DUP5 00001c2a: DUP5 00001c2b: DUP5 00001c2c: DUP5 00001c2d: DUP11 00001c2e: DUP11 00001c2f: PUSH2 0x3645 00001c32: JUMP 00001c33: JUMPDEST 00001c34: PUSH2 0x1c54 00001c37: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c4c: DUP6 00001c4d: AND 00001c4e: DUP4 00001c4f: DUP6 00001c50: PUSH2 0x3d35 00001c53: JUMP 00001c54: JUMPDEST 00001c55: PUSH1 0x40 00001c57: MLOAD 00001c58: PUSH4 0xffffffff 00001c5d: DUP3 00001c5e: AND 00001c5f: SWAP1 00001c60: PUSH32 0x9853e4c075911a10a89a0f7a46bac6f8a246c4e9152480d16d86aa6a2391a4f1 00001c81: SWAP1 00001c82: PUSH1 0x00 00001c84: SWAP1 00001c85: LOG2 00001c86: POP 00001c87: POP 00001c88: POP 00001c89: POP 00001c8a: PUSH2 0x1925 00001c8d: PUSH1 0x01 00001c8f: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001cb0: SSTORE 00001cb1: JUMP 00001cb2: JUMPDEST 00001cb3: CALLER 00001cb4: ADDRESS 00001cb5: EQ 00001cb6: PUSH2 0x1ceb 00001cb9: JUMPI 00001cba: PUSH1 0x40 00001cbc: MLOAD 00001cbd: PUSH32 0x48f5c3ed00000000000000000000000000000000000000000000000000000000 00001cde: DUP2 00001cdf: MSTORE 00001ce0: PUSH1 0x04 00001ce2: ADD 00001ce3: PUSH1 0x40 00001ce5: MLOAD 00001ce6: DUP1 00001ce7: SWAP2 00001ce8: SUB 00001ce9: SWAP1 00001cea: REVERT 00001ceb: JUMPDEST 00001cec: PUSH1 0x00 00001cee: PUSH20 0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 00001d03: PUSH4 0x128acb08 00001d08: ADDRESS 00001d09: PUSH1 0x01 00001d0b: DUP6 00001d0c: PUSH2 0x1d1a 00001d0f: PUSH5 0x01000276a3 00001d15: DUP4 00001d16: PUSH2 0x51cb 00001d19: JUMP 00001d1a: JUMPDEST 00001d1b: PUSH1 0x40 00001d1d: MLOAD 00001d1e: PUSH1 0xe0 00001d20: DUP7 00001d21: SWAP1 00001d22: SHL 00001d23: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00001d44: AND 00001d45: DUP2 00001d46: MSTORE 00001d47: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d5c: SWAP5 00001d5d: DUP6 00001d5e: AND 00001d5f: PUSH1 0x04 00001d61: DUP3 00001d62: ADD 00001d63: MSTORE 00001d64: SWAP3 00001d65: ISZERO 00001d66: ISZERO 00001d67: PUSH1 0x24 00001d69: DUP5 00001d6a: ADD 00001d6b: MSTORE 00001d6c: PUSH1 0x44 00001d6e: DUP4 00001d6f: ADD 00001d70: SWAP2 00001d71: SWAP1 00001d72: SWAP2 00001d73: MSTORE 00001d74: SWAP1 00001d75: SWAP2 00001d76: AND 00001d77: PUSH1 0x64 00001d79: DUP3 00001d7a: ADD 00001d7b: MSTORE 00001d7c: PUSH1 0xa0 00001d7e: PUSH1 0x84 00001d80: DUP3 00001d81: ADD 00001d82: MSTORE 00001d83: PUSH1 0x00 00001d85: PUSH1 0xa4 00001d87: DUP3 00001d88: ADD 00001d89: MSTORE 00001d8a: PUSH1 0xc4 00001d8c: ADD 00001d8d: PUSH1 0x40 00001d8f: DUP1 00001d90: MLOAD 00001d91: DUP1 00001d92: DUP4 00001d93: SUB 00001d94: DUP2 00001d95: PUSH1 0x00 00001d97: DUP8 00001d98: GAS 00001d99: CALL 00001d9a: ISZERO 00001d9b: DUP1 00001d9c: ISZERO 00001d9d: PUSH2 0x1daa 00001da0: JUMPI 00001da1: RETURNDATASIZE 00001da2: PUSH1 0x00 00001da4: DUP1 00001da5: RETURNDATACOPY 00001da6: RETURNDATASIZE 00001da7: PUSH1 0x00 00001da9: REVERT 00001daa: JUMPDEST 00001dab: POP 00001dac: POP 00001dad: POP 00001dae: POP 00001daf: PUSH1 0x40 00001db1: MLOAD 00001db2: RETURNDATASIZE 00001db3: PUSH1 0x1f 00001db5: NOT 00001db6: PUSH1 0x1f 00001db8: DUP3 00001db9: ADD 00001dba: AND 00001dbb: DUP3 00001dbc: ADD 00001dbd: DUP1 00001dbe: PUSH1 0x40 00001dc0: MSTORE 00001dc1: POP 00001dc2: DUP2 00001dc3: ADD 00001dc4: SWAP1 00001dc5: PUSH2 0x1dce 00001dc8: SWAP2 00001dc9: SWAP1 00001dca: PUSH2 0x51f7 00001dcd: JUMP 00001dce: JUMPDEST 00001dcf: SWAP2 00001dd0: POP 00001dd1: POP 00001dd2: PUSH1 0x00 00001dd4: DUP2 00001dd5: SWAP1 00001dd6: SUB 00001dd7: PUSH2 0x03e8 00001dda: PUSH2 0x1de1 00001ddd: PUSH2 0x0d3e 00001de0: JUMP 00001de1: JUMPDEST 00001de2: DUP5 00001de3: MUL 00001de4: PUSH2 0x03db 00001de7: MUL 00001de8: DUP2 00001de9: PUSH2 0x1df4 00001dec: JUMPI 00001ded: PUSH2 0x1df4 00001df0: PUSH2 0x506b 00001df3: JUMP 00001df4: JUMPDEST 00001df5: DIV 00001df6: DUP2 00001df7: LT 00001df8: ISZERO 00001df9: PUSH2 0x1e01 00001dfc: JUMPI 00001dfd: PUSH1 0x00 00001dff: DUP1 00001e00: REVERT 00001e01: JUMPDEST 00001e02: PUSH1 0x40 00001e04: MLOAD 00001e05: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000 00001e26: DUP2 00001e27: MSTORE 00001e28: PUSH1 0x04 00001e2a: DUP2 00001e2b: ADD 00001e2c: DUP3 00001e2d: SWAP1 00001e2e: MSTORE 00001e2f: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001e44: SWAP1 00001e45: PUSH4 0x2e1a7d4d 00001e4a: SWAP1 00001e4b: PUSH1 0x24 00001e4d: ADD 00001e4e: PUSH1 0x00 00001e50: PUSH1 0x40 00001e52: MLOAD 00001e53: DUP1 00001e54: DUP4 00001e55: SUB 00001e56: DUP2 00001e57: PUSH1 0x00 00001e59: DUP8 00001e5a: DUP1 00001e5b: EXTCODESIZE 00001e5c: ISZERO 00001e5d: DUP1 00001e5e: ISZERO 00001e5f: PUSH2 0x1e67 00001e62: JUMPI 00001e63: PUSH1 0x00 00001e65: DUP1 00001e66: REVERT 00001e67: JUMPDEST 00001e68: POP 00001e69: GAS 00001e6a: CALL 00001e6b: ISZERO 00001e6c: DUP1 00001e6d: ISZERO 00001e6e: PUSH2 0x1e7b 00001e71: JUMPI 00001e72: RETURNDATASIZE 00001e73: PUSH1 0x00 00001e75: DUP1 00001e76: RETURNDATACOPY 00001e77: RETURNDATASIZE 00001e78: PUSH1 0x00 00001e7a: REVERT 00001e7b: JUMPDEST 00001e7c: POP 00001e7d: POP 00001e7e: POP 00001e7f: POP 00001e80: PUSH1 0x00 00001e82: DUP5 00001e83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e98: AND 00001e99: DUP3 00001e9a: PUSH1 0x40 00001e9c: MLOAD 00001e9d: PUSH1 0x00 00001e9f: PUSH1 0x40 00001ea1: MLOAD 00001ea2: DUP1 00001ea3: DUP4 00001ea4: SUB 00001ea5: DUP2 00001ea6: DUP6 00001ea7: DUP8 00001ea8: GAS 00001ea9: CALL 00001eaa: SWAP3 00001eab: POP 00001eac: POP 00001ead: POP 00001eae: RETURNDATASIZE 00001eaf: DUP1 00001eb0: PUSH1 0x00 00001eb2: DUP2 00001eb3: EQ 00001eb4: PUSH2 0x1ed9 00001eb7: JUMPI 00001eb8: PUSH1 0x40 00001eba: MLOAD 00001ebb: SWAP2 00001ebc: POP 00001ebd: PUSH1 0x1f 00001ebf: NOT 00001ec0: PUSH1 0x3f 00001ec2: RETURNDATASIZE 00001ec3: ADD 00001ec4: AND 00001ec5: DUP3 00001ec6: ADD 00001ec7: PUSH1 0x40 00001ec9: MSTORE 00001eca: RETURNDATASIZE 00001ecb: DUP3 00001ecc: MSTORE 00001ecd: RETURNDATASIZE 00001ece: PUSH1 0x00 00001ed0: PUSH1 0x20 00001ed2: DUP5 00001ed3: ADD 00001ed4: RETURNDATACOPY 00001ed5: PUSH2 0x1ede 00001ed8: JUMP 00001ed9: JUMPDEST 00001eda: PUSH1 0x60 00001edc: SWAP2 00001edd: POP 00001ede: JUMPDEST 00001edf: POP 00001ee0: POP 00001ee1: POP 00001ee2: POP 00001ee3: POP 00001ee4: POP 00001ee5: POP 00001ee6: POP 00001ee7: JUMP 00001ee8: JUMPDEST 00001ee9: PUSH2 0x1ef0 00001eec: PUSH2 0x2fed 00001eef: JUMP 00001ef0: JUMPDEST 00001ef1: DUP4 00001ef2: DUP1 00001ef3: TIMESTAMP 00001ef4: GT 00001ef5: ISZERO 00001ef6: PUSH2 0x1f2b 00001ef9: JUMPI 00001efa: PUSH1 0x40 00001efc: MLOAD 00001efd: PUSH32 0x7bbfb6fe00000000000000000000000000000000000000000000000000000000 00001f1e: DUP2 00001f1f: MSTORE 00001f20: PUSH1 0x04 00001f22: ADD 00001f23: PUSH1 0x40 00001f25: MLOAD 00001f26: DUP1 00001f27: SWAP2 00001f28: SUB 00001f29: SWAP1 00001f2a: REVERT 00001f2b: JUMPDEST 00001f2c: PUSH1 0x40 00001f2e: DUP8 00001f2f: EQ 00001f30: PUSH2 0x1f65 00001f33: JUMPI 00001f34: PUSH1 0x40 00001f36: MLOAD 00001f37: PUSH32 0x4b0218a800000000000000000000000000000000000000000000000000000000 00001f58: DUP2 00001f59: MSTORE 00001f5a: PUSH1 0x04 00001f5c: ADD 00001f5d: PUSH1 0x40 00001f5f: MLOAD 00001f60: DUP1 00001f61: SWAP2 00001f62: SUB 00001f63: SWAP1 00001f64: REVERT 00001f65: JUMPDEST 00001f66: PUSH1 0x00 00001f68: PUSH2 0x1fa6 00001f6b: DUP10 00001f6c: DUP10 00001f6d: DUP1 00001f6e: DUP1 00001f6f: PUSH1 0x1f 00001f71: ADD 00001f72: PUSH1 0x20 00001f74: DUP1 00001f75: SWAP2 00001f76: DIV 00001f77: MUL 00001f78: PUSH1 0x20 00001f7a: ADD 00001f7b: PUSH1 0x40 00001f7d: MLOAD 00001f7e: SWAP1 00001f7f: DUP2 00001f80: ADD 00001f81: PUSH1 0x40 00001f83: MSTORE 00001f84: DUP1 00001f85: SWAP4 00001f86: SWAP3 00001f87: SWAP2 00001f88: SWAP1 00001f89: DUP2 00001f8a: DUP2 00001f8b: MSTORE 00001f8c: PUSH1 0x20 00001f8e: ADD 00001f8f: DUP4 00001f90: DUP4 00001f91: DUP1 00001f92: DUP3 00001f93: DUP5 00001f94: CALLDATACOPY 00001f95: PUSH1 0x00 00001f97: SWAP3 00001f98: ADD 00001f99: SWAP2 00001f9a: SWAP1 00001f9b: SWAP2 00001f9c: MSTORE 00001f9d: POP 00001f9e: PUSH2 0x3db6 00001fa1: SWAP3 00001fa2: POP 00001fa3: POP 00001fa4: POP 00001fa5: JUMP 00001fa6: JUMPDEST 00001fa7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fbc: DUP2 00001fbd: AND 00001fbe: PUSH1 0x00 00001fc0: SWAP1 00001fc1: DUP2 00001fc2: MSTORE 00001fc3: PUSH1 0x02 00001fc5: PUSH1 0x20 00001fc7: SWAP1 00001fc8: DUP2 00001fc9: MSTORE 00001fca: PUSH1 0x40 00001fcc: DUP1 00001fcd: DUP4 00001fce: KECCAK256 00001fcf: SLOAD 00001fd0: DUP1 00001fd1: DUP5 00001fd2: MSTORE 00001fd3: SWAP2 00001fd4: DUP4 00001fd5: SWAP1 00001fd6: MSTORE 00001fd7: SWAP1 00001fd8: SWAP2 00001fd9: KECCAK256 00001fda: SLOAD 00001fdb: SWAP2 00001fdc: SWAP3 00001fdd: POP 00001fde: SWAP1 00001fdf: PUSH1 0xff 00001fe1: AND 00001fe2: ISZERO 00001fe3: PUSH2 0x2018 00001fe6: JUMPI 00001fe7: PUSH1 0x40 00001fe9: MLOAD 00001fea: PUSH32 0xf411c32700000000000000000000000000000000000000000000000000000000 0000200b: DUP2 0000200c: MSTORE 0000200d: PUSH1 0x04 0000200f: ADD 00002010: PUSH1 0x40 00002012: MLOAD 00002013: DUP1 00002014: SWAP2 00002015: SUB 00002016: SWAP1 00002017: REVERT 00002018: JUMPDEST 00002019: PUSH2 0x2053 0000201c: PUSH1 0x00 0000201e: DUP12 0000201f: DUP12 00002020: DUP12 00002021: DUP12 00002022: DUP12 00002023: PUSH1 0x40 00002025: MLOAD 00002026: PUSH1 0x20 00002028: ADD 00002029: PUSH2 0x2036 0000202c: SWAP6 0000202d: SWAP5 0000202e: SWAP4 0000202f: SWAP3 00002030: SWAP2 00002031: SWAP1 00002032: PUSH2 0x521b 00002035: JUMP 00002036: JUMPDEST 00002037: PUSH1 0x40 00002039: MLOAD 0000203a: PUSH1 0x20 0000203c: DUP2 0000203d: DUP4 0000203e: SUB 0000203f: SUB 00002040: DUP2 00002041: MSTORE 00002042: SWAP1 00002043: PUSH1 0x40 00002045: MSTORE 00002046: DUP1 00002047: MLOAD 00002048: SWAP1 00002049: PUSH1 0x20 0000204b: ADD 0000204c: KECCAK256 0000204d: DUP8 0000204e: DUP8 0000204f: PUSH2 0x3049 00002052: JUMP 00002053: JUMPDEST 00002054: PUSH2 0x2062 00002057: DUP7 00002058: PUSH4 0xffffffff 0000205d: AND 0000205e: PUSH2 0x32be 00002061: JUMP 00002062: JUMPDEST 00002063: DUP1 00002064: PUSH1 0x00 00002066: SUB 00002067: PUSH2 0x207a 0000206a: JUMPI 0000206b: PUSH2 0x2074 0000206e: DUP3 0000206f: DUP10 00002070: PUSH2 0x3dc1 00002073: JUMP 00002074: JUMPDEST 00002075: POP 00002076: PUSH2 0x210d 00002079: JUMP 0000207a: JUMPDEST 0000207b: PUSH1 0x00 0000207d: DUP2 0000207e: DUP2 0000207f: MSTORE 00002080: PUSH1 0x05 00002082: PUSH1 0x20 00002084: MSTORE 00002085: PUSH1 0x40 00002087: SWAP1 00002088: KECCAK256 00002089: SLOAD 0000208a: DUP9 0000208b: EQ 0000208c: PUSH2 0x20d5 0000208f: JUMPI 00002090: PUSH1 0x00 00002092: DUP2 00002093: DUP2 00002094: MSTORE 00002095: PUSH1 0x05 00002097: PUSH1 0x20 00002099: MSTORE 0000209a: PUSH1 0x40 0000209c: SWAP1 0000209d: DUP2 0000209e: SWAP1 0000209f: KECCAK256 000020a0: SLOAD 000020a1: SWAP1 000020a2: MLOAD 000020a3: PUSH32 0x140c681500000000000000000000000000000000000000000000000000000000 000020c4: DUP2 000020c5: MSTORE 000020c6: PUSH1 0x04 000020c8: DUP2 000020c9: ADD 000020ca: SWAP2 000020cb: SWAP1 000020cc: SWAP2 000020cd: MSTORE 000020ce: PUSH1 0x24 000020d0: ADD 000020d1: PUSH2 0x0c6d 000020d4: JUMP 000020d5: JUMPDEST 000020d6: PUSH1 0x00 000020d8: DUP2 000020d9: DUP2 000020da: MSTORE 000020db: PUSH1 0x20 000020dd: DUP2 000020de: SWAP1 000020df: MSTORE 000020e0: PUSH1 0x40 000020e2: SWAP1 000020e3: KECCAK256 000020e4: DUP1 000020e5: SLOAD 000020e6: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00002107: AND 00002108: PUSH1 0x01 0000210a: OR 0000210b: SWAP1 0000210c: SSTORE 0000210d: JUMPDEST 0000210e: DUP6 0000210f: PUSH4 0xffffffff 00002114: AND 00002115: DUP9 00002116: DUP4 00002117: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000212c: AND 0000212d: PUSH32 0x697a463b143a01bd93749c518e1e69d9b29fbba6408f1789236a2e4b24dab84c 0000214e: PUSH1 0x40 00002150: MLOAD 00002151: PUSH1 0x40 00002153: MLOAD 00002154: DUP1 00002155: SWAP2 00002156: SUB 00002157: SWAP1 00002158: LOG4 00002159: POP 0000215a: POP 0000215b: POP 0000215c: POP 0000215d: POP 0000215e: POP 0000215f: POP 00002160: POP 00002161: POP 00002162: POP 00002163: JUMP 00002164: JUMPDEST 00002165: PUSH1 0x40 00002167: MLOAD 00002168: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 00002189: DUP2 0000218a: MSTORE 0000218b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021a0: DUP7 000021a1: AND 000021a2: PUSH1 0x04 000021a4: DUP3 000021a5: ADD 000021a6: MSTORE 000021a7: DUP6 000021a8: SWAP1 000021a9: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 000021be: SWAP1 000021bf: PUSH4 0xdf592f7d 000021c4: SWAP1 000021c5: PUSH1 0x24 000021c7: ADD 000021c8: PUSH1 0x20 000021ca: PUSH1 0x40 000021cc: MLOAD 000021cd: DUP1 000021ce: DUP4 000021cf: SUB 000021d0: DUP2 000021d1: DUP7 000021d2: GAS 000021d3: STATICCALL 000021d4: ISZERO 000021d5: DUP1 000021d6: ISZERO 000021d7: PUSH2 0x21e4 000021da: JUMPI 000021db: RETURNDATASIZE 000021dc: PUSH1 0x00 000021de: DUP1 000021df: RETURNDATACOPY 000021e0: RETURNDATASIZE 000021e1: PUSH1 0x00 000021e3: REVERT 000021e4: JUMPDEST 000021e5: POP 000021e6: POP 000021e7: POP 000021e8: POP 000021e9: PUSH1 0x40 000021eb: MLOAD 000021ec: RETURNDATASIZE 000021ed: PUSH1 0x1f 000021ef: NOT 000021f0: PUSH1 0x1f 000021f2: DUP3 000021f3: ADD 000021f4: AND 000021f5: DUP3 000021f6: ADD 000021f7: DUP1 000021f8: PUSH1 0x40 000021fa: MSTORE 000021fb: POP 000021fc: DUP2 000021fd: ADD 000021fe: SWAP1 000021ff: PUSH2 0x2208 00002202: SWAP2 00002203: SWAP1 00002204: PUSH2 0x4ff9 00002207: JUMP 00002208: JUMPDEST 00002209: ISZERO 0000220a: PUSH2 0x2257 0000220d: JUMPI 0000220e: PUSH1 0x40 00002210: MLOAD 00002211: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 00002232: DUP2 00002233: MSTORE 00002234: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002249: DUP3 0000224a: AND 0000224b: PUSH1 0x04 0000224d: DUP3 0000224e: ADD 0000224f: MSTORE 00002250: PUSH1 0x24 00002252: ADD 00002253: PUSH2 0x0c6d 00002256: JUMP 00002257: JUMPDEST 00002258: CALLER 00002259: PUSH1 0x00 0000225b: SWAP1 0000225c: DUP2 0000225d: MSTORE 0000225e: PUSH1 0x0c 00002260: PUSH1 0x20 00002262: MSTORE 00002263: PUSH1 0x40 00002265: SWAP1 00002266: KECCAK256 00002267: SLOAD 00002268: PUSH1 0x01 0000226a: DUP2 0000226b: SLT 0000226c: ISZERO 0000226d: PUSH2 0x22a2 00002270: JUMPI 00002271: PUSH1 0x40 00002273: MLOAD 00002274: PUSH32 0x7378cebb00000000000000000000000000000000000000000000000000000000 00002295: DUP2 00002296: MSTORE 00002297: PUSH1 0x04 00002299: ADD 0000229a: PUSH1 0x40 0000229c: MLOAD 0000229d: DUP1 0000229e: SWAP2 0000229f: SUB 000022a0: SWAP1 000022a1: REVERT 000022a2: JUMPDEST 000022a3: PUSH1 0x00 000022a5: PUSH2 0x22ac 000022a8: PUSH2 0x0d3e 000022ab: JUMP 000022ac: JUMPDEST 000022ad: PUSH2 0x22b6 000022b0: GASPRICE 000022b1: DUP13 000022b2: PUSH2 0x514a 000022b5: JUMP 000022b6: JUMPDEST 000022b7: PUSH2 0x22c0 000022ba: SWAP2 000022bb: SWAP1 000022bc: PUSH2 0x5161 000022bf: JUMP 000022c0: JUMPDEST 000022c1: SWAP1 000022c2: POP 000022c3: DUP9 000022c4: DUP2 000022c5: GT 000022c6: ISZERO 000022c7: PUSH2 0x22fc 000022ca: JUMPI 000022cb: PUSH1 0x40 000022cd: MLOAD 000022ce: PUSH32 0x1fbaba3500000000000000000000000000000000000000000000000000000000 000022ef: DUP2 000022f0: MSTORE 000022f1: PUSH1 0x04 000022f3: ADD 000022f4: PUSH1 0x40 000022f6: MLOAD 000022f7: DUP1 000022f8: SWAP2 000022f9: SUB 000022fa: SWAP1 000022fb: REVERT 000022fc: JUMPDEST 000022fd: PUSH1 0x40 000022ff: MLOAD 00002300: PUSH32 0xd505accf00000000000000000000000000000000000000000000000000000000 00002321: DUP2 00002322: MSTORE 00002323: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002338: DUP10 00002339: AND 0000233a: PUSH1 0x04 0000233c: DUP3 0000233d: ADD 0000233e: MSTORE 0000233f: ADDRESS 00002340: PUSH1 0x24 00002342: DUP3 00002343: ADD 00002344: MSTORE 00002345: PUSH1 0x44 00002347: DUP2 00002348: ADD 00002349: DUP11 0000234a: SWAP1 0000234b: MSTORE 0000234c: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000236d: PUSH1 0x64 0000236f: DUP3 00002370: ADD 00002371: MSTORE 00002372: PUSH1 0xff 00002374: DUP9 00002375: AND 00002376: PUSH1 0x84 00002378: DUP3 00002379: ADD 0000237a: MSTORE 0000237b: PUSH1 0xa4 0000237d: DUP2 0000237e: ADD 0000237f: DUP8 00002380: SWAP1 00002381: MSTORE 00002382: PUSH1 0xc4 00002384: DUP2 00002385: ADD 00002386: DUP7 00002387: SWAP1 00002388: MSTORE 00002389: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000239e: SWAP1 0000239f: PUSH4 0xd505accf 000023a4: SWAP1 000023a5: PUSH1 0xe4 000023a7: ADD 000023a8: PUSH1 0x00 000023aa: PUSH1 0x40 000023ac: MLOAD 000023ad: DUP1 000023ae: DUP4 000023af: SUB 000023b0: DUP2 000023b1: PUSH1 0x00 000023b3: DUP8 000023b4: DUP1 000023b5: EXTCODESIZE 000023b6: ISZERO 000023b7: DUP1 000023b8: ISZERO 000023b9: PUSH2 0x23c1 000023bc: JUMPI 000023bd: PUSH1 0x00 000023bf: DUP1 000023c0: REVERT 000023c1: JUMPDEST 000023c2: POP 000023c3: GAS 000023c4: CALL 000023c5: ISZERO 000023c6: DUP1 000023c7: ISZERO 000023c8: PUSH2 0x23d5 000023cb: JUMPI 000023cc: RETURNDATASIZE 000023cd: PUSH1 0x00 000023cf: DUP1 000023d0: RETURNDATACOPY 000023d1: RETURNDATASIZE 000023d2: PUSH1 0x00 000023d4: REVERT 000023d5: JUMPDEST 000023d6: POP 000023d7: POP 000023d8: PUSH1 0x40 000023da: MLOAD 000023db: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 000023fc: DUP2 000023fd: MSTORE 000023fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002413: DUP12 00002414: AND 00002415: PUSH1 0x04 00002417: DUP3 00002418: ADD 00002419: MSTORE 0000241a: ADDRESS 0000241b: PUSH1 0x24 0000241d: DUP3 0000241e: ADD 0000241f: MSTORE 00002420: PUSH1 0x44 00002422: DUP2 00002423: ADD 00002424: DUP13 00002425: SWAP1 00002426: MSTORE 00002427: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000243c: SWAP3 0000243d: POP 0000243e: PUSH4 0x23b872dd 00002443: SWAP2 00002444: POP 00002445: PUSH1 0x64 00002447: ADD 00002448: PUSH1 0x20 0000244a: PUSH1 0x40 0000244c: MLOAD 0000244d: DUP1 0000244e: DUP4 0000244f: SUB 00002450: DUP2 00002451: PUSH1 0x00 00002453: DUP8 00002454: GAS 00002455: CALL 00002456: ISZERO 00002457: DUP1 00002458: ISZERO 00002459: PUSH2 0x2466 0000245c: JUMPI 0000245d: RETURNDATASIZE 0000245e: PUSH1 0x00 00002460: DUP1 00002461: RETURNDATACOPY 00002462: RETURNDATASIZE 00002463: PUSH1 0x00 00002465: REVERT 00002466: JUMPDEST 00002467: POP 00002468: POP 00002469: POP 0000246a: POP 0000246b: PUSH1 0x40 0000246d: MLOAD 0000246e: RETURNDATASIZE 0000246f: PUSH1 0x1f 00002471: NOT 00002472: PUSH1 0x1f 00002474: DUP3 00002475: ADD 00002476: AND 00002477: DUP3 00002478: ADD 00002479: DUP1 0000247a: PUSH1 0x40 0000247c: MSTORE 0000247d: POP 0000247e: DUP2 0000247f: ADD 00002480: SWAP1 00002481: PUSH2 0x248a 00002484: SWAP2 00002485: SWAP1 00002486: PUSH2 0x4ff9 00002489: JUMP 0000248a: JUMPDEST 0000248b: POP 0000248c: SWAP8 0000248d: DUP9 0000248e: SWAP1 0000248f: SUB 00002490: SWAP8 00002491: SWAP1 00002492: DUP2 00002493: ADD 00002494: SWAP1 00002495: DUP4 00002496: ISZERO 00002497: PUSH2 0x24a8 0000249a: JUMPI 0000249b: PUSH2 0x24a3 0000249e: DUP3 0000249f: PUSH2 0x3788 000024a2: JUMP 000024a3: JUMPDEST 000024a4: PUSH2 0x24bb 000024a7: JUMP 000024a8: JUMPDEST 000024a9: CALLER 000024aa: PUSH1 0x00 000024ac: SWAP1 000024ad: DUP2 000024ae: MSTORE 000024af: PUSH1 0x0c 000024b1: PUSH1 0x20 000024b3: MSTORE 000024b4: PUSH1 0x40 000024b6: SWAP1 000024b7: KECCAK256 000024b8: DUP3 000024b9: SWAP1 000024ba: SSTORE 000024bb: JUMPDEST 000024bc: PUSH1 0x40 000024be: DUP1 000024bf: MLOAD 000024c0: PUSH1 0x60 000024c2: DUP11 000024c3: SWAP1 000024c4: SHL 000024c5: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000024e6: AND 000024e7: PUSH1 0x20 000024e9: DUP1 000024ea: DUP4 000024eb: ADD 000024ec: SWAP2 000024ed: SWAP1 000024ee: SWAP2 000024ef: MSTORE 000024f0: DUP3 000024f1: MLOAD 000024f2: PUSH1 0x14 000024f4: DUP2 000024f5: DUP5 000024f6: SUB 000024f7: ADD 000024f8: DUP2 000024f9: MSTORE 000024fa: PUSH1 0x34 000024fc: SWAP1 000024fd: SWAP3 000024fe: ADD 000024ff: SWAP1 00002500: SWAP3 00002501: MSTORE 00002502: DUP1 00002503: MLOAD 00002504: SWAP2 00002505: ADD 00002506: KECCAK256 00002507: PUSH1 0x40 00002509: MLOAD 0000250a: DUP11 0000250b: DUP2 0000250c: MSTORE 0000250d: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00002522: SWAP1 00002523: PUSH32 0x2bf8107bf8c15cdcd8d6360f4a02ee97d7098a46b18fccd32df8796775552fc0 00002544: SWAP1 00002545: PUSH1 0x20 00002547: ADD 00002548: PUSH1 0x40 0000254a: MLOAD 0000254b: DUP1 0000254c: SWAP2 0000254d: SUB 0000254e: SWAP1 0000254f: LOG3 00002550: POP 00002551: POP 00002552: POP 00002553: POP 00002554: POP 00002555: POP 00002556: POP 00002557: POP 00002558: POP 00002559: POP 0000255a: JUMP 0000255b: JUMPDEST 0000255c: PUSH2 0x2563 0000255f: PUSH2 0x2fed 00002562: JUMP 00002563: JUMPDEST 00002564: PUSH2 0x256b 00002567: PUSH2 0x3340 0000256a: JUMP 0000256b: JUMPDEST 0000256c: PUSH1 0x40 0000256e: MLOAD 0000256f: PUSH32 0xdf592f7d00000000000000000000000000000000000000000000000000000000 00002590: DUP2 00002591: MSTORE 00002592: CALLER 00002593: PUSH1 0x04 00002595: DUP3 00002596: ADD 00002597: DUP2 00002598: SWAP1 00002599: MSTORE 0000259a: SWAP1 0000259b: PUSH20 0x40c57923924b5c5c5455c48d93317139addac8fb 000025b0: SWAP1 000025b1: PUSH4 0xdf592f7d 000025b6: SWAP1 000025b7: PUSH1 0x24 000025b9: ADD 000025ba: PUSH1 0x20 000025bc: PUSH1 0x40 000025be: MLOAD 000025bf: DUP1 000025c0: DUP4 000025c1: SUB 000025c2: DUP2 000025c3: DUP7 000025c4: GAS 000025c5: STATICCALL 000025c6: ISZERO 000025c7: DUP1 000025c8: ISZERO 000025c9: PUSH2 0x25d6 000025cc: JUMPI 000025cd: RETURNDATASIZE 000025ce: PUSH1 0x00 000025d0: DUP1 000025d1: RETURNDATACOPY 000025d2: RETURNDATASIZE 000025d3: PUSH1 0x00 000025d5: REVERT 000025d6: JUMPDEST 000025d7: POP 000025d8: POP 000025d9: POP 000025da: POP 000025db: PUSH1 0x40 000025dd: MLOAD 000025de: RETURNDATASIZE 000025df: PUSH1 0x1f 000025e1: NOT 000025e2: PUSH1 0x1f 000025e4: DUP3 000025e5: ADD 000025e6: AND 000025e7: DUP3 000025e8: ADD 000025e9: DUP1 000025ea: PUSH1 0x40 000025ec: MSTORE 000025ed: POP 000025ee: DUP2 000025ef: ADD 000025f0: SWAP1 000025f1: PUSH2 0x25fa 000025f4: SWAP2 000025f5: SWAP1 000025f6: PUSH2 0x4ff9 000025f9: JUMP 000025fa: JUMPDEST 000025fb: ISZERO 000025fc: PUSH2 0x2649 000025ff: JUMPI 00002600: PUSH1 0x40 00002602: MLOAD 00002603: PUSH32 0x71fa9c9900000000000000000000000000000000000000000000000000000000 00002624: DUP2 00002625: MSTORE 00002626: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000263b: DUP3 0000263c: AND 0000263d: PUSH1 0x04 0000263f: DUP3 00002640: ADD 00002641: MSTORE 00002642: PUSH1 0x24 00002644: ADD 00002645: PUSH2 0x0c6d 00002648: JUMP 00002649: JUMPDEST 0000264a: DUP3 0000264b: PUSH2 0x2680 0000264e: JUMPI 0000264f: PUSH1 0x40 00002651: MLOAD 00002652: PUSH32 0xf4fc87a400000000000000000000000000000000000000000000000000000000 00002673: DUP2 00002674: MSTORE 00002675: PUSH1 0x04 00002677: ADD 00002678: PUSH1 0x40 0000267a: MLOAD 0000267b: DUP1 0000267c: SWAP2 0000267d: SUB 0000267e: SWAP1 0000267f: REVERT 00002680: JUMPDEST 00002681: DUP3 00002682: DUP5 00002683: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002698: AND 00002699: PUSH32 0x2bf8107bf8c15cdcd8d6360f4a02ee97d7098a46b18fccd32df8796775552fc0 000026ba: PUSH2 0x26c4 000026bd: CALLER 000026be: DUP9 000026bf: DUP8 000026c0: PUSH2 0x33c1 000026c3: JUMP 000026c4: JUMPDEST 000026c5: PUSH1 0x40 000026c7: MLOAD 000026c8: SWAP1 000026c9: DUP2 000026ca: MSTORE 000026cb: PUSH1 0x20 000026cd: ADD 000026ce: PUSH1 0x40 000026d0: MLOAD 000026d1: DUP1 000026d2: SWAP2 000026d3: SUB 000026d4: SWAP1 000026d5: LOG3 000026d6: POP 000026d7: PUSH2 0x26ff 000026da: PUSH1 0x01 000026dc: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 000026fd: SSTORE 000026fe: JUMP 000026ff: JUMPDEST 00002700: POP 00002701: POP 00002702: POP 00002703: JUMP 00002704: JUMPDEST 00002705: PUSH1 0x00 00002707: DUP1 00002708: DUP1 00002709: DUP1 0000270a: DUP1 0000270b: DUP1 0000270c: DUP1 0000270d: DUP1 0000270e: PUSH2 0x2719 00002711: PUSH1 0x41 00002713: PUSH1 0x02 00002715: PUSH2 0x514a 00002718: JUMP 00002719: JUMPDEST 0000271a: PUSH2 0x2724 0000271d: SWAP1 0000271e: PUSH1 0x4c 00002720: PUSH2 0x5252 00002723: JUMP 00002724: JUMPDEST 00002725: DUP10 00002726: LT 00002727: ISZERO 00002728: PUSH2 0x2748 0000272b: JUMPI 0000272c: POP 0000272d: PUSH1 0x00 0000272f: SWAP7 00002730: POP 00002731: DUP7 00002732: SWAP6 00002733: POP 00002734: DUP6 00002735: SWAP5 00002736: POP 00002737: DUP5 00002738: SWAP4 00002739: POP 0000273a: DUP4 0000273b: SWAP3 0000273c: POP 0000273d: DUP3 0000273e: SWAP2 0000273f: POP 00002740: DUP2 00002741: SWAP1 00002742: POP 00002743: DUP1 00002744: PUSH2 0x2a12 00002747: JUMP 00002748: JUMPDEST 00002749: PUSH2 0x2756 0000274c: PUSH1 0x14 0000274e: PUSH1 0x00 00002750: DUP12 00002751: DUP14 00002752: PUSH2 0x5265 00002755: JUMP 00002756: JUMPDEST 00002757: PUSH2 0x275f 0000275a: SWAP2 0000275b: PUSH2 0x528f 0000275e: JUMP 0000275f: JUMPDEST 00002760: PUSH1 0x60 00002762: SHR 00002763: SWAP8 00002764: POP 00002765: PUSH2 0x2772 00002768: PUSH1 0x34 0000276a: PUSH1 0x14 0000276c: DUP12 0000276d: DUP14 0000276e: PUSH2 0x5265 00002771: JUMP 00002772: JUMPDEST 00002773: PUSH2 0x277b 00002776: SWAP2 00002777: PUSH2 0x5016 0000277a: JUMP 0000277b: JUMPDEST 0000277c: SWAP7 0000277d: POP 0000277e: PUSH2 0x278b 00002781: PUSH1 0x48 00002783: PUSH1 0x34 00002785: DUP12 00002786: DUP14 00002787: PUSH2 0x5265 0000278a: JUMP 0000278b: JUMPDEST 0000278c: PUSH2 0x2794 0000278f: SWAP2 00002790: PUSH2 0x528f 00002793: JUMP 00002794: JUMPDEST 00002795: PUSH1 0x60 00002797: SHR 00002798: SWAP6 00002799: POP 0000279a: PUSH2 0x27a7 0000279d: PUSH1 0x4c 0000279f: PUSH1 0x48 000027a1: DUP12 000027a2: DUP14 000027a3: PUSH2 0x5265 000027a6: JUMP 000027a7: JUMPDEST 000027a8: PUSH2 0x27b0 000027ab: SWAP2 000027ac: PUSH2 0x52f5 000027af: JUMP 000027b0: JUMPDEST 000027b1: PUSH1 0x40 000027b3: MLOAD 000027b4: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000027d5: PUSH1 0x60 000027d7: DUP12 000027d8: DUP2 000027d9: SHL 000027da: DUP3 000027db: AND 000027dc: PUSH1 0x20 000027de: DUP5 000027df: ADD 000027e0: MSTORE 000027e1: PUSH1 0x34 000027e3: DUP4 000027e4: ADD 000027e5: DUP12 000027e6: SWAP1 000027e7: MSTORE 000027e8: DUP10 000027e9: SWAP1 000027ea: SHL 000027eb: AND 000027ec: PUSH1 0x54 000027ee: DUP3 000027ef: ADD 000027f0: MSTORE 000027f1: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00002812: DUP3 00002813: AND 00002814: PUSH1 0x68 00002816: DUP3 00002817: ADD 00002818: MSTORE 00002819: PUSH1 0xe0 0000281b: SWAP2 0000281c: SWAP1 0000281d: SWAP2 0000281e: SHR 0000281f: SWAP6 00002820: POP 00002821: PUSH1 0x00 00002823: SWAP1 00002824: PUSH1 0x6c 00002826: ADD 00002827: PUSH1 0x40 00002829: DUP1 0000282a: MLOAD 0000282b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000284c: DUP2 0000284d: DUP5 0000284e: SUB 0000284f: ADD 00002850: DUP2 00002851: MSTORE 00002852: SWAP2 00002853: SWAP1 00002854: MSTORE 00002855: DUP1 00002856: MLOAD 00002857: PUSH1 0x20 00002859: SWAP1 0000285a: SWAP2 0000285b: ADD 0000285c: KECCAK256 0000285d: SWAP1 0000285e: POP 0000285f: PUSH1 0x00 00002861: PUSH1 0x41 00002863: PUSH2 0x286d 00002866: PUSH1 0x4c 00002868: DUP14 00002869: PUSH2 0x535a 0000286c: JUMP 0000286d: JUMPDEST 0000286e: PUSH2 0x2877 00002871: SWAP2 00002872: SWAP1 00002873: PUSH2 0x5161 00002876: JUMP 00002877: JUMPDEST 00002878: SWAP1 00002879: POP 0000287a: PUSH1 0x00 0000287c: PUSH1 0x0a 0000287e: SLOAD 0000287f: PUSH8 0xffffffffffffffff 00002888: DUP2 00002889: GT 0000288a: ISZERO 0000288b: PUSH2 0x2896 0000288e: JUMPI 0000288f: PUSH2 0x2896 00002892: PUSH2 0x4afa 00002895: JUMP 00002896: JUMPDEST 00002897: PUSH1 0x40 00002899: MLOAD 0000289a: SWAP1 0000289b: DUP1 0000289c: DUP3 0000289d: MSTORE 0000289e: DUP1 0000289f: PUSH1 0x20 000028a1: MUL 000028a2: PUSH1 0x20 000028a4: ADD 000028a5: DUP3 000028a6: ADD 000028a7: PUSH1 0x40 000028a9: MSTORE 000028aa: DUP1 000028ab: ISZERO 000028ac: PUSH2 0x28bf 000028af: JUMPI 000028b0: DUP2 000028b1: PUSH1 0x20 000028b3: ADD 000028b4: PUSH1 0x20 000028b6: DUP3 000028b7: MUL 000028b8: DUP1 000028b9: CALLDATASIZE 000028ba: DUP4 000028bb: CALLDATACOPY 000028bc: ADD 000028bd: SWAP1 000028be: POP 000028bf: JUMPDEST 000028c0: POP 000028c1: SWAP1 000028c2: POP 000028c3: PUSH1 0x00 000028c5: PUSH1 0x40 000028c7: MLOAD 000028c8: DUP1 000028c9: PUSH1 0x40 000028cb: ADD 000028cc: PUSH1 0x40 000028ce: MSTORE 000028cf: DUP1 000028d0: PUSH1 0x1c 000028d2: DUP2 000028d3: MSTORE 000028d4: PUSH1 0x20 000028d6: ADD 000028d7: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 000028f8: DUP2 000028f9: MSTORE 000028fa: POP 000028fb: DUP5 000028fc: PUSH1 0x40 000028fe: MLOAD 000028ff: PUSH1 0x20 00002901: ADD 00002902: PUSH2 0x290c 00002905: SWAP3 00002906: SWAP2 00002907: SWAP1 00002908: PUSH2 0x536d 0000290b: JUMP 0000290c: JUMPDEST 0000290d: PUSH1 0x40 0000290f: DUP1 00002910: MLOAD 00002911: DUP1 00002912: DUP4 00002913: SUB 00002914: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002935: ADD 00002936: DUP2 00002937: MSTORE 00002938: SWAP2 00002939: DUP2 0000293a: MSTORE 0000293b: DUP2 0000293c: MLOAD 0000293d: PUSH1 0x20 0000293f: SWAP3 00002940: DUP4 00002941: ADD 00002942: KECCAK256 00002943: PUSH1 0x00 00002945: DUP8 00002946: DUP2 00002947: MSTORE 00002948: PUSH1 0x08 0000294a: SWAP1 0000294b: SWAP4 0000294c: MSTORE 0000294d: SWAP1 0000294e: DUP3 0000294f: KECCAK256 00002950: SLOAD 00002951: PUSH1 0x09 00002953: SLOAD 00002954: SWAP6 00002955: SWAP10 00002956: POP 00002957: PUSH1 0xff 00002959: AND 0000295a: SWAP7 0000295b: POP 0000295c: DUP9 0000295d: SWAP5 0000295e: SWAP1 0000295f: SWAP3 00002960: POP 00002961: PUSH1 0x03 00002963: PUSH1 0x02 00002965: DUP3 00002966: MUL 00002967: DIV 00002968: SWAP1 00002969: SUB 0000296a: SWAP9 0000296b: POP 0000296c: POP 0000296d: PUSH1 0x4c 0000296f: DUP15 00002970: ADD 00002971: PUSH1 0x00 00002973: JUMPDEST 00002974: DUP5 00002975: DUP2 00002976: LT 00002977: ISZERO 00002978: PUSH2 0x2a05 0000297b: JUMPI 0000297c: PUSH1 0x00 0000297e: PUSH2 0x2988 00002981: DUP5 00002982: DUP5 00002983: DUP5 00002984: PUSH2 0x3ec2 00002987: JUMP 00002988: JUMPDEST 00002989: PUSH1 0x00 0000298b: DUP2 0000298c: DUP2 0000298d: MSTORE 0000298e: PUSH1 0x01 00002990: PUSH1 0x20 00002992: MSTORE 00002993: PUSH1 0x40 00002995: SWAP1 00002996: KECCAK256 00002997: SLOAD 00002998: SWAP1 00002999: SWAP2 0000299a: POP 0000299b: PUSH1 0xff 0000299d: AND 0000299e: DUP1 0000299f: ISZERO 000029a0: PUSH2 0x29c0 000029a3: JUMPI 000029a4: POP 000029a5: DUP5 000029a6: DUP2 000029a7: DUP2 000029a8: MLOAD 000029a9: DUP2 000029aa: LT 000029ab: PUSH2 0x29b6 000029ae: JUMPI 000029af: PUSH2 0x29b6 000029b2: PUSH2 0x519c 000029b5: JUMP 000029b6: JUMPDEST 000029b7: PUSH1 0x20 000029b9: MUL 000029ba: PUSH1 0x20 000029bc: ADD 000029bd: ADD 000029be: MLOAD 000029bf: ISZERO 000029c0: JUMPDEST 000029c1: ISZERO 000029c2: PUSH2 0x29ee 000029c5: JUMPI 000029c6: PUSH1 0x01 000029c8: DUP6 000029c9: DUP3 000029ca: DUP2 000029cb: MLOAD 000029cc: DUP2 000029cd: LT 000029ce: PUSH2 0x29d9 000029d1: JUMPI 000029d2: PUSH2 0x29d9 000029d5: PUSH2 0x519c 000029d8: JUMP 000029d9: JUMPDEST 000029da: SWAP2 000029db: ISZERO 000029dc: ISZERO 000029dd: PUSH1 0x20 000029df: SWAP3 000029e0: DUP4 000029e1: MUL 000029e2: SWAP2 000029e3: SWAP1 000029e4: SWAP2 000029e5: ADD 000029e6: SWAP1 000029e7: SWAP2 000029e8: ADD 000029e9: MSTORE 000029ea: PUSH2 0x29fc 000029ed: JUMP 000029ee: JUMPDEST 000029ef: DUP10 000029f0: PUSH2 0x29f8 000029f3: DUP2 000029f4: PUSH2 0x538f 000029f7: JUMP 000029f8: JUMPDEST 000029f9: SWAP11 000029fa: POP 000029fb: POP 000029fc: JUMPDEST 000029fd: POP 000029fe: PUSH1 0x01 00002a00: ADD 00002a01: PUSH2 0x2973 00002a04: JUMP 00002a05: JUMPDEST 00002a06: POP 00002a07: DUP9 00002a08: DUP9 00002a09: LT 00002a0a: ISZERO 00002a0b: SWAP7 00002a0c: POP 00002a0d: POP 00002a0e: POP 00002a0f: POP 00002a10: POP 00002a11: POP 00002a12: JUMPDEST 00002a13: SWAP3 00002a14: SWAP6 00002a15: SWAP9 00002a16: POP 00002a17: SWAP3 00002a18: SWAP6 00002a19: SWAP9 00002a1a: SWAP1 00002a1b: SWAP4 00002a1c: SWAP7 00002a1d: POP 00002a1e: JUMP 00002a1f: JUMPDEST 00002a20: PUSH1 0x00 00002a22: DUP1 00002a23: PUSH32 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00 00002a44: PUSH2 0x1b35 00002a47: JUMP 00002a48: JUMPDEST 00002a49: PUSH2 0x2a50 00002a4c: PUSH2 0x3868 00002a4f: JUMP 00002a50: JUMPDEST 00002a51: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a66: DUP2 00002a67: AND 00002a68: PUSH1 0x00 00002a6a: SWAP1 00002a6b: DUP2 00002a6c: MSTORE 00002a6d: PUSH1 0x0c 00002a6f: PUSH1 0x20 00002a71: MSTORE 00002a72: PUSH1 0x40 00002a74: DUP2 00002a75: KECCAK256 00002a76: SLOAD 00002a77: SWAP1 00002a78: DUP2 00002a79: SWAP1 00002a7a: SUB 00002a7b: PUSH2 0x2a83 00002a7e: JUMPI 00002a7f: PUSH1 0x00 00002a81: DUP1 00002a82: REVERT 00002a83: JUMPDEST 00002a84: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a99: DUP3 00002a9a: AND 00002a9b: PUSH1 0x00 00002a9d: SWAP1 00002a9e: DUP2 00002a9f: MSTORE 00002aa0: PUSH1 0x0c 00002aa2: PUSH1 0x20 00002aa4: MSTORE 00002aa5: PUSH1 0x40 00002aa7: DUP2 00002aa8: KECCAK256 00002aa9: SSTORE 00002aaa: PUSH1 0x01 00002aac: DUP2 00002aad: SGT 00002aae: ISZERO 00002aaf: PUSH2 0x2b6e 00002ab2: JUMPI 00002ab3: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00002ac8: PUSH4 0xa9059cbb 00002acd: DUP4 00002ace: PUSH2 0x2ad8 00002ad1: PUSH1 0x01 00002ad3: DUP6 00002ad4: PUSH2 0x53c4 00002ad7: JUMP 00002ad8: JUMPDEST 00002ad9: PUSH1 0x40 00002adb: MLOAD 00002adc: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00002afd: PUSH1 0xe0 00002aff: DUP6 00002b00: SWAP1 00002b01: SHL 00002b02: AND 00002b03: DUP2 00002b04: MSTORE 00002b05: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b1a: SWAP1 00002b1b: SWAP3 00002b1c: AND 00002b1d: PUSH1 0x04 00002b1f: DUP4 00002b20: ADD 00002b21: MSTORE 00002b22: PUSH1 0x24 00002b24: DUP3 00002b25: ADD 00002b26: MSTORE 00002b27: PUSH1 0x44 00002b29: ADD 00002b2a: PUSH1 0x20 00002b2c: PUSH1 0x40 00002b2e: MLOAD 00002b2f: DUP1 00002b30: DUP4 00002b31: SUB 00002b32: DUP2 00002b33: PUSH1 0x00 00002b35: DUP8 00002b36: GAS 00002b37: CALL 00002b38: ISZERO 00002b39: DUP1 00002b3a: ISZERO 00002b3b: PUSH2 0x2b48 00002b3e: JUMPI 00002b3f: RETURNDATASIZE 00002b40: PUSH1 0x00 00002b42: DUP1 00002b43: RETURNDATACOPY 00002b44: RETURNDATASIZE 00002b45: PUSH1 0x00 00002b47: REVERT 00002b48: JUMPDEST 00002b49: POP 00002b4a: POP 00002b4b: POP 00002b4c: POP 00002b4d: PUSH1 0x40 00002b4f: MLOAD 00002b50: RETURNDATASIZE 00002b51: PUSH1 0x1f 00002b53: NOT 00002b54: PUSH1 0x1f 00002b56: DUP3 00002b57: ADD 00002b58: AND 00002b59: DUP3 00002b5a: ADD 00002b5b: DUP1 00002b5c: PUSH1 0x40 00002b5e: MSTORE 00002b5f: POP 00002b60: DUP2 00002b61: ADD 00002b62: SWAP1 00002b63: PUSH2 0x2b6c 00002b66: SWAP2 00002b67: SWAP1 00002b68: PUSH2 0x4ff9 00002b6b: JUMP 00002b6c: JUMPDEST 00002b6d: POP 00002b6e: JUMPDEST 00002b6f: PUSH1 0x40 00002b71: MLOAD 00002b72: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b87: DUP4 00002b88: AND 00002b89: SWAP1 00002b8a: PUSH32 0x8d36c3850740b87c1e5020b0e478cc73619ee5147c6648b410ab31bd5cdf3378 00002bab: SWAP1 00002bac: PUSH1 0x00 00002bae: SWAP1 00002baf: LOG2 00002bb0: POP 00002bb1: POP 00002bb2: JUMP 00002bb3: JUMPDEST 00002bb4: PUSH4 0xffffffff 00002bb9: DUP3 00002bba: AND 00002bbb: PUSH1 0x00 00002bbd: SWAP1 00002bbe: DUP2 00002bbf: MSTORE 00002bc0: PUSH1 0x07 00002bc2: PUSH1 0x20 00002bc4: MSTORE 00002bc5: PUSH1 0x40 00002bc7: DUP2 00002bc8: KECCAK256 00002bc9: SLOAD 00002bca: PUSH1 0xff 00002bcc: AND 00002bcd: ISZERO 00002bce: PUSH2 0x2bd9 00002bd1: JUMPI 00002bd2: POP 00002bd3: PUSH1 0x01 00002bd5: PUSH2 0x2c0c 00002bd8: JUMP 00002bd9: JUMPDEST 00002bda: DUP2 00002bdb: TIMESTAMP 00002bdc: GT 00002bdd: ISZERO 00002bde: PUSH2 0x2c08 00002be1: JUMPI 00002be2: POP 00002be3: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002c04: PUSH2 0x2c0c 00002c07: JUMP 00002c08: JUMPDEST 00002c09: POP 00002c0a: PUSH1 0x00 00002c0c: JUMPDEST 00002c0d: SWAP3 00002c0e: SWAP2 00002c0f: POP 00002c10: POP 00002c11: JUMP 00002c12: JUMPDEST 00002c13: PUSH1 0x00 00002c15: PUSH2 0x2c1c 00002c18: PUSH2 0x3fcd 00002c1b: JUMP 00002c1c: JUMPDEST 00002c1d: DUP1 00002c1e: SLOAD 00002c1f: SWAP1 00002c20: SWAP2 00002c21: POP 00002c22: PUSH1 0xff 00002c24: PUSH9 0x010000000000000000 00002c2e: DUP3 00002c2f: DIV 00002c30: AND 00002c31: ISZERO 00002c32: SWAP1 00002c33: PUSH8 0xffffffffffffffff 00002c3c: AND 00002c3d: PUSH1 0x00 00002c3f: DUP2 00002c40: ISZERO 00002c41: DUP1 00002c42: ISZERO 00002c43: PUSH2 0x2c49 00002c46: JUMPI 00002c47: POP 00002c48: DUP3 00002c49: JUMPDEST 00002c4a: SWAP1 00002c4b: POP 00002c4c: PUSH1 0x00 00002c4e: DUP3 00002c4f: PUSH8 0xffffffffffffffff 00002c58: AND 00002c59: PUSH1 0x01 00002c5b: EQ 00002c5c: DUP1 00002c5d: ISZERO 00002c5e: PUSH2 0x2c66 00002c61: JUMPI 00002c62: POP 00002c63: ADDRESS 00002c64: EXTCODESIZE 00002c65: ISZERO 00002c66: JUMPDEST 00002c67: SWAP1 00002c68: POP 00002c69: DUP2 00002c6a: ISZERO 00002c6b: DUP1 00002c6c: ISZERO 00002c6d: PUSH2 0x2c74 00002c70: JUMPI 00002c71: POP 00002c72: DUP1 00002c73: ISZERO 00002c74: JUMPDEST 00002c75: ISZERO 00002c76: PUSH2 0x2cab 00002c79: JUMPI 00002c7a: PUSH1 0x40 00002c7c: MLOAD 00002c7d: PUSH32 0xf92ee8a900000000000000000000000000000000000000000000000000000000 00002c9e: DUP2 00002c9f: MSTORE 00002ca0: PUSH1 0x04 00002ca2: ADD 00002ca3: PUSH1 0x40 00002ca5: MLOAD 00002ca6: DUP1 00002ca7: SWAP2 00002ca8: SUB 00002ca9: SWAP1 00002caa: REVERT 00002cab: JUMPDEST 00002cac: DUP5 00002cad: SLOAD 00002cae: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 00002ccf: AND 00002cd0: PUSH1 0x01 00002cd2: OR 00002cd3: DUP6 00002cd4: SSTORE 00002cd5: DUP4 00002cd6: ISZERO 00002cd7: PUSH2 0x2d0c 00002cda: JUMPI 00002cdb: DUP5 00002cdc: SLOAD 00002cdd: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff 00002cfe: AND 00002cff: PUSH9 0x010000000000000000 00002d09: OR 00002d0a: DUP6 00002d0b: SSTORE 00002d0c: JUMPDEST 00002d0d: PUSH2 0x2d15 00002d10: DUP7 00002d11: PUSH2 0x3ff6 00002d14: JUMP 00002d15: JUMPDEST 00002d16: PUSH2 0x2d1d 00002d19: PUSH2 0x4007 00002d1c: JUMP 00002d1d: JUMPDEST 00002d1e: PUSH2 0x2d25 00002d21: PUSH2 0x4007 00002d24: JUMP 00002d25: JUMPDEST 00002d26: PUSH2 0x2d2d 00002d29: PUSH2 0x400f 00002d2c: JUMP 00002d2d: JUMPDEST 00002d2e: PUSH2 0x2d35 00002d31: PUSH2 0x4007 00002d34: JUMP 00002d35: JUMPDEST 00002d36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d4b: DUP16 00002d4c: AND 00002d4d: PUSH2 0x2d82 00002d50: JUMPI 00002d51: PUSH1 0x40 00002d53: MLOAD 00002d54: PUSH32 0xd1585e9400000000000000000000000000000000000000000000000000000000 00002d75: DUP2 00002d76: MSTORE 00002d77: PUSH1 0x04 00002d79: ADD 00002d7a: PUSH1 0x40 00002d7c: MLOAD 00002d7d: DUP1 00002d7e: SWAP2 00002d7f: SUB 00002d80: SWAP1 00002d81: REVERT 00002d82: JUMPDEST 00002d83: DUP15 00002d84: PUSH1 0x0b 00002d86: PUSH1 0x00 00002d88: PUSH2 0x0100 00002d8b: EXP 00002d8c: DUP2 00002d8d: SLOAD 00002d8e: DUP2 00002d8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002da4: MUL 00002da5: NOT 00002da6: AND 00002da7: SWAP1 00002da8: DUP4 00002da9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002dbe: AND 00002dbf: MUL 00002dc0: OR 00002dc1: SWAP1 00002dc2: SSTORE 00002dc3: POP 00002dc4: PUSH1 0x01 00002dc6: PUSH1 0x0a 00002dc8: DUP2 00002dc9: SWAP1 00002dca: SSTORE 00002dcb: POP 00002dcc: PUSH2 0x2ddb 00002dcf: DUP15 00002dd0: DUP15 00002dd1: DUP15 00002dd2: DUP15 00002dd3: DUP15 00002dd4: DUP15 00002dd5: DUP15 00002dd6: DUP15 00002dd7: PUSH2 0x401f 00002dda: JUMP 00002ddb: JUMPDEST 00002ddc: DUP4 00002ddd: ISZERO 00002dde: PUSH2 0x2e3c 00002de1: JUMPI 00002de2: DUP5 00002de3: SLOAD 00002de4: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff 00002e05: AND 00002e06: DUP6 00002e07: SSTORE 00002e08: PUSH1 0x40 00002e0a: MLOAD 00002e0b: PUSH1 0x01 00002e0d: DUP2 00002e0e: MSTORE 00002e0f: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 00002e30: SWAP1 00002e31: PUSH1 0x20 00002e33: ADD 00002e34: PUSH1 0x40 00002e36: MLOAD 00002e37: DUP1 00002e38: SWAP2 00002e39: SUB 00002e3a: SWAP1 00002e3b: LOG1 00002e3c: JUMPDEST 00002e3d: POP 00002e3e: POP 00002e3f: POP 00002e40: POP 00002e41: POP 00002e42: POP 00002e43: POP 00002e44: POP 00002e45: POP 00002e46: POP 00002e47: POP 00002e48: POP 00002e49: POP 00002e4a: POP 00002e4b: POP 00002e4c: JUMP 00002e4d: JUMPDEST 00002e4e: PUSH2 0x2e55 00002e51: PUSH2 0x3868 00002e54: JUMP 00002e55: JUMPDEST 00002e56: PUSH32 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00 00002e77: DUP1 00002e78: SLOAD 00002e79: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00002e9a: AND 00002e9b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002eb0: DUP4 00002eb1: AND 00002eb2: SWAP1 00002eb3: DUP2 00002eb4: OR 00002eb5: DUP3 00002eb6: SSTORE 00002eb7: PUSH2 0x2ebe 00002eba: PUSH2 0x1b10 00002ebd: JUMP 00002ebe: JUMPDEST 00002ebf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002ed4: AND 00002ed5: PUSH32 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 00002ef6: PUSH1 0x40 00002ef8: MLOAD 00002ef9: PUSH1 0x40 00002efb: MLOAD 00002efc: DUP1 00002efd: SWAP2 00002efe: SUB 00002eff: SWAP1 00002f00: LOG3 00002f01: POP 00002f02: POP 00002f03: JUMP 00002f04: JUMPDEST 00002f05: CALLER 00002f06: PUSH20 0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 00002f1b: EQ 00002f1c: PUSH2 0x2f51 00002f1f: JUMPI 00002f20: PUSH1 0x40 00002f22: MLOAD 00002f23: PUSH32 0x48f5c3ed00000000000000000000000000000000000000000000000000000000 00002f44: DUP2 00002f45: MSTORE 00002f46: PUSH1 0x04 00002f48: ADD 00002f49: PUSH1 0x40 00002f4b: MLOAD 00002f4c: DUP1 00002f4d: SWAP2 00002f4e: SUB 00002f4f: SWAP1 00002f50: REVERT 00002f51: JUMPDEST 00002f52: PUSH1 0x40 00002f54: MLOAD 00002f55: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00002f76: DUP2 00002f77: MSTORE 00002f78: CALLER 00002f79: PUSH1 0x04 00002f7b: DUP3 00002f7c: ADD 00002f7d: MSTORE 00002f7e: PUSH1 0x24 00002f80: DUP2 00002f81: ADD 00002f82: DUP6 00002f83: SWAP1 00002f84: MSTORE 00002f85: PUSH20 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00002f9a: SWAP1 00002f9b: PUSH4 0xa9059cbb 00002fa0: SWAP1 00002fa1: PUSH1 0x44 00002fa3: ADD 00002fa4: PUSH1 0x20 00002fa6: PUSH1 0x40 00002fa8: MLOAD 00002fa9: DUP1 00002faa: DUP4 00002fab: SUB 00002fac: DUP2 00002fad: PUSH1 0x00 00002faf: DUP8 00002fb0: GAS 00002fb1: CALL 00002fb2: ISZERO 00002fb3: DUP1 00002fb4: ISZERO 00002fb5: PUSH2 0x2fc2 00002fb8: JUMPI 00002fb9: RETURNDATASIZE 00002fba: PUSH1 0x00 00002fbc: DUP1 00002fbd: RETURNDATACOPY 00002fbe: RETURNDATASIZE 00002fbf: PUSH1 0x00 00002fc1: REVERT 00002fc2: JUMPDEST 00002fc3: POP 00002fc4: POP 00002fc5: POP 00002fc6: POP 00002fc7: PUSH1 0x40 00002fc9: MLOAD 00002fca: RETURNDATASIZE 00002fcb: PUSH1 0x1f 00002fcd: NOT 00002fce: PUSH1 0x1f 00002fd0: DUP3 00002fd1: ADD 00002fd2: AND 00002fd3: DUP3 00002fd4: ADD 00002fd5: DUP1 00002fd6: PUSH1 0x40 00002fd8: MSTORE 00002fd9: POP 00002fda: DUP2 00002fdb: ADD 00002fdc: SWAP1 00002fdd: PUSH2 0x2fe6 00002fe0: SWAP2 00002fe1: SWAP1 00002fe2: PUSH2 0x4ff9 00002fe5: JUMP 00002fe6: JUMPDEST 00002fe7: POP 00002fe8: POP 00002fe9: POP 00002fea: POP 00002feb: POP 00002fec: JUMP 00002fed: JUMPDEST 00002fee: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 0000300f: SLOAD 00003010: PUSH1 0xff 00003012: AND 00003013: ISZERO 00003014: PUSH2 0x1941 00003017: JUMPI 00003018: PUSH1 0x40 0000301a: MLOAD 0000301b: PUSH32 0xd93c066500000000000000000000000000000000000000000000000000000000 0000303c: DUP2 0000303d: MSTORE 0000303e: PUSH1 0x04 00003040: ADD 00003041: PUSH1 0x40 00003043: MLOAD 00003044: DUP1 00003045: SWAP2 00003046: SUB 00003047: SWAP1 00003048: REVERT 00003049: JUMPDEST 0000304a: PUSH1 0x00 0000304c: PUSH1 0x0a 0000304e: SLOAD 0000304f: PUSH8 0xffffffffffffffff 00003058: DUP2 00003059: GT 0000305a: ISZERO 0000305b: PUSH2 0x3066 0000305e: JUMPI 0000305f: PUSH2 0x3066 00003062: PUSH2 0x4afa 00003065: JUMP 00003066: JUMPDEST 00003067: PUSH1 0x40 00003069: MLOAD 0000306a: SWAP1 0000306b: DUP1 0000306c: DUP3 0000306d: MSTORE 0000306e: DUP1 0000306f: PUSH1 0x20 00003071: MUL 00003072: PUSH1 0x20 00003074: ADD 00003075: DUP3 00003076: ADD 00003077: PUSH1 0x40 00003079: MSTORE 0000307a: DUP1 0000307b: ISZERO 0000307c: PUSH2 0x308f 0000307f: JUMPI 00003080: DUP2 00003081: PUSH1 0x20 00003083: ADD 00003084: PUSH1 0x20 00003086: DUP3 00003087: MUL 00003088: DUP1 00003089: CALLDATASIZE 0000308a: DUP4 0000308b: CALLDATACOPY 0000308c: ADD 0000308d: SWAP1 0000308e: POP 0000308f: JUMPDEST 00003090: POP 00003091: SWAP1 00003092: POP 00003093: PUSH1 0x00 00003095: PUSH1 0x40 00003097: MLOAD 00003098: DUP1 00003099: PUSH1 0x40 0000309b: ADD 0000309c: PUSH1 0x40 0000309e: MSTORE 0000309f: DUP1 000030a0: PUSH1 0x1c 000030a2: DUP2 000030a3: MSTORE 000030a4: PUSH1 0x20 000030a6: ADD 000030a7: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 000030c8: DUP2 000030c9: MSTORE 000030ca: POP 000030cb: DUP6 000030cc: PUSH1 0x40 000030ce: MLOAD 000030cf: PUSH1 0x20 000030d1: ADD 000030d2: PUSH2 0x30dc 000030d5: SWAP3 000030d6: SWAP2 000030d7: SWAP1 000030d8: PUSH2 0x536d 000030db: JUMP 000030dc: JUMPDEST 000030dd: PUSH1 0x40 000030df: MLOAD 000030e0: PUSH1 0x20 000030e2: DUP2 000030e3: DUP4 000030e4: SUB 000030e5: SUB 000030e6: DUP2 000030e7: MSTORE 000030e8: SWAP1 000030e9: PUSH1 0x40 000030eb: MSTORE 000030ec: DUP1 000030ed: MLOAD 000030ee: SWAP1 000030ef: PUSH1 0x20 000030f1: ADD 000030f2: KECCAK256 000030f3: SWAP1 000030f4: POP 000030f5: PUSH1 0x00 000030f7: PUSH2 0x3108 000030fa: PUSH1 0x09 000030fc: SLOAD 000030fd: PUSH1 0x03 000030ff: PUSH1 0x02 00003101: DUP3 00003102: MUL 00003103: DIV 00003104: SWAP1 00003105: SUB 00003106: SWAP1 00003107: JUMP 00003108: JUMPDEST 00003109: SWAP1 0000310a: POP 0000310b: PUSH1 0x00 0000310d: PUSH2 0x3117 00003110: PUSH1 0x41 00003112: DUP7 00003113: PUSH2 0x5161 00003116: JUMP 00003117: JUMPDEST 00003118: SWAP1 00003119: POP 0000311a: DUP6 0000311b: PUSH1 0x00 0000311d: DUP1 0000311e: DUP1 0000311f: DUP12 00003120: ISZERO 00003121: PUSH2 0x313a 00003124: JUMPI 00003125: PUSH2 0x312f 00003128: DUP8 00003129: DUP6 0000312a: DUP6 0000312b: PUSH2 0x3ec2 0000312e: JUMP 0000312f: JUMPDEST 00003130: SWAP1 00003131: POP 00003132: PUSH1 0x01 00003134: SWAP3 00003135: POP 00003136: PUSH2 0x3152 00003139: JUMP 0000313a: JUMPDEST 0000313b: POP 0000313c: CALLER 0000313d: PUSH1 0x00 0000313f: SWAP1 00003140: DUP2 00003141: MSTORE 00003142: PUSH1 0x02 00003144: PUSH1 0x20 00003146: MSTORE 00003147: PUSH1 0x40 00003149: SWAP1 0000314a: KECCAK256 0000314b: SLOAD 0000314c: PUSH1 0x01 0000314e: SWAP1 0000314f: SWAP5 00003150: ADD 00003151: SWAP4 00003152: JUMPDEST 00003153: PUSH1 0x00 00003155: DUP2 00003156: DUP2 00003157: MSTORE 00003158: PUSH1 0x01 0000315a: PUSH1 0x20 0000315c: MSTORE 0000315d: PUSH1 0x40 0000315f: SWAP1 00003160: KECCAK256 00003161: SLOAD 00003162: PUSH1 0xff 00003164: AND 00003165: PUSH2 0x3215 00003168: JUMPI 00003169: PUSH1 0x00 0000316b: DUP2 0000316c: DUP2 0000316d: MSTORE 0000316e: PUSH1 0x20 00003170: DUP2 00003171: SWAP1 00003172: MSTORE 00003173: PUSH1 0x40 00003175: SWAP1 00003176: KECCAK256 00003177: SLOAD 00003178: PUSH1 0xff 0000317a: AND 0000317b: ISZERO 0000317c: PUSH2 0x3210 0000317f: JUMPI 00003180: PUSH1 0x00 00003182: DUP2 00003183: DUP2 00003184: MSTORE 00003185: PUSH1 0x01 00003187: PUSH1 0x20 00003189: DUP2 0000318a: SWAP1 0000318b: MSTORE 0000318c: PUSH1 0x40 0000318e: SWAP1 0000318f: SWAP2 00003190: KECCAK256 00003191: DUP1 00003192: SLOAD 00003193: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 000031b4: AND 000031b5: DUP3 000031b6: OR 000031b7: SWAP1 000031b8: SSTORE 000031b9: PUSH1 0x09 000031bb: DUP1 000031bc: SLOAD 000031bd: SWAP1 000031be: SWAP2 000031bf: ADD 000031c0: SWAP1 000031c1: SSTORE 000031c2: DUP2 000031c3: PUSH1 0x01 000031c5: ADD 000031c6: SWAP2 000031c7: POP 000031c8: PUSH2 0x31d9 000031cb: PUSH1 0x09 000031cd: SLOAD 000031ce: PUSH1 0x03 000031d0: PUSH1 0x02 000031d2: DUP3 000031d3: MUL 000031d4: DIV 000031d5: SWAP1 000031d6: SUB 000031d7: SWAP1 000031d8: JUMP 000031d9: JUMPDEST 000031da: SWAP6 000031db: POP 000031dc: DUP6 000031dd: DUP3 000031de: SUB 000031df: PUSH2 0x31ef 000031e2: JUMPI 000031e3: POP 000031e4: POP 000031e5: POP 000031e6: POP 000031e7: POP 000031e8: POP 000031e9: POP 000031ea: POP 000031eb: PUSH2 0x0d38 000031ee: JUMP 000031ef: JUMPDEST 000031f0: PUSH1 0x01 000031f2: DUP9 000031f3: DUP3 000031f4: DUP2 000031f5: MLOAD 000031f6: DUP2 000031f7: LT 000031f8: PUSH2 0x3203 000031fb: JUMPI 000031fc: PUSH2 0x3203 000031ff: PUSH2 0x519c 00003202: JUMP 00003203: JUMPDEST 00003204: PUSH1 0x20 00003206: MUL 00003207: PUSH1 0x20 00003209: ADD 0000320a: ADD 0000320b: DUP2 0000320c: DUP2 0000320d: MSTORE 0000320e: POP 0000320f: POP 00003210: JUMPDEST 00003211: PUSH2 0x3271 00003214: JUMP 00003215: JUMPDEST 00003216: DUP8 00003217: DUP2 00003218: DUP2 00003219: MLOAD 0000321a: DUP2 0000321b: LT 0000321c: PUSH2 0x3227 0000321f: JUMPI 00003220: PUSH2 0x3227 00003223: PUSH2 0x519c 00003226: JUMP 00003227: JUMPDEST 00003228: PUSH1 0x20 0000322a: MUL 0000322b: PUSH1 0x20 0000322d: ADD 0000322e: ADD 0000322f: MLOAD 00003230: PUSH1 0x00 00003232: SUB 00003233: PUSH2 0x3271 00003236: JUMPI 00003237: DUP2 00003238: PUSH1 0x01 0000323a: ADD 0000323b: SWAP2 0000323c: POP 0000323d: DUP6 0000323e: DUP3 0000323f: SUB 00003240: PUSH2 0x3250 00003243: JUMPI 00003244: POP 00003245: POP 00003246: POP 00003247: POP 00003248: POP 00003249: POP 0000324a: POP 0000324b: POP 0000324c: PUSH2 0x0d38 0000324f: JUMP 00003250: JUMPDEST 00003251: PUSH1 0x01 00003253: DUP9 00003254: DUP3 00003255: DUP2 00003256: MLOAD 00003257: DUP2 00003258: LT 00003259: PUSH2 0x3264 0000325c: JUMPI 0000325d: PUSH2 0x3264 00003260: PUSH2 0x519c 00003263: JUMP 00003264: JUMPDEST 00003265: PUSH1 0x20 00003267: MUL 00003268: PUSH1 0x20 0000326a: ADD 0000326b: ADD 0000326c: DUP2 0000326d: DUP2 0000326e: MSTORE 0000326f: POP 00003270: POP 00003271: JUMPDEST 00003272: PUSH2 0x327c 00003275: DUP8 00003276: DUP6 00003277: DUP6 00003278: PUSH2 0x3ec2 0000327b: JUMP 0000327c: JUMPDEST 0000327d: SWAP1 0000327e: POP 0000327f: DUP3 00003280: PUSH1 0x01 00003282: ADD 00003283: SWAP3 00003284: POP 00003285: DUP5 00003286: DUP4 00003287: GT 00003288: ISZERO 00003289: PUSH2 0x3152 0000328c: JUMPI 0000328d: PUSH1 0x40 0000328f: MLOAD 00003290: PUSH32 0x409c8aac00000000000000000000000000000000000000000000000000000000 000032b1: DUP2 000032b2: MSTORE 000032b3: PUSH1 0x04 000032b5: ADD 000032b6: PUSH1 0x40 000032b8: MLOAD 000032b9: DUP1 000032ba: SWAP2 000032bb: SUB 000032bc: SWAP1 000032bd: REVERT 000032be: JUMPDEST 000032bf: PUSH1 0x00 000032c1: DUP2 000032c2: DUP2 000032c3: MSTORE 000032c4: PUSH1 0x07 000032c6: PUSH1 0x20 000032c8: MSTORE 000032c9: PUSH1 0x40 000032cb: SWAP1 000032cc: KECCAK256 000032cd: SLOAD 000032ce: PUSH1 0xff 000032d0: AND 000032d1: ISZERO 000032d2: PUSH2 0x3307 000032d5: JUMPI 000032d6: PUSH1 0x40 000032d8: MLOAD 000032d9: PUSH32 0x7edd16f000000000000000000000000000000000000000000000000000000000 000032fa: DUP2 000032fb: MSTORE 000032fc: PUSH1 0x04 000032fe: ADD 000032ff: PUSH1 0x40 00003301: MLOAD 00003302: DUP1 00003303: SWAP2 00003304: SUB 00003305: SWAP1 00003306: REVERT 00003307: JUMPDEST 00003308: PUSH1 0x00 0000330a: SWAP1 0000330b: DUP2 0000330c: MSTORE 0000330d: PUSH1 0x07 0000330f: PUSH1 0x20 00003311: MSTORE 00003312: PUSH1 0x40 00003314: SWAP1 00003315: KECCAK256 00003316: DUP1 00003317: SLOAD 00003318: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00003339: AND 0000333a: PUSH1 0x01 0000333c: OR 0000333d: SWAP1 0000333e: SSTORE 0000333f: JUMP 00003340: JUMPDEST 00003341: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00003362: DUP1 00003363: SLOAD 00003364: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe 00003385: ADD 00003386: PUSH2 0x33bb 00003389: JUMPI 0000338a: PUSH1 0x40 0000338c: MLOAD 0000338d: PUSH32 0x3ee5aeb500000000000000000000000000000000000000000000000000000000 000033ae: DUP2 000033af: MSTORE 000033b0: PUSH1 0x04 000033b2: ADD 000033b3: PUSH1 0x40 000033b5: MLOAD 000033b6: DUP1 000033b7: SWAP2 000033b8: SUB 000033b9: SWAP1 000033ba: REVERT 000033bb: JUMPDEST 000033bc: PUSH1 0x02 000033be: SWAP1 000033bf: SSTORE 000033c0: JUMP 000033c1: JUMPDEST 000033c2: PUSH1 0x40 000033c4: MLOAD 000033c5: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 000033e6: DUP2 000033e7: MSTORE 000033e8: ADDRESS 000033e9: PUSH1 0x04 000033eb: DUP3 000033ec: ADD 000033ed: MSTORE 000033ee: PUSH1 0x00 000033f0: SWAP1 000033f1: DUP2 000033f2: SWAP1 000033f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003408: DUP6 00003409: AND 0000340a: SWAP1 0000340b: PUSH4 0x70a08231 00003410: SWAP1 00003411: PUSH1 0x24 00003413: ADD 00003414: PUSH1 0x20 00003416: PUSH1 0x40 00003418: MLOAD 00003419: DUP1 0000341a: DUP4 0000341b: SUB 0000341c: DUP2 0000341d: DUP7 0000341e: GAS 0000341f: STATICCALL 00003420: ISZERO 00003421: DUP1 00003422: ISZERO 00003423: PUSH2 0x3430 00003426: JUMPI 00003427: RETURNDATASIZE 00003428: PUSH1 0x00 0000342a: DUP1 0000342b: RETURNDATACOPY 0000342c: RETURNDATASIZE 0000342d: PUSH1 0x00 0000342f: REVERT 00003430: JUMPDEST 00003431: POP 00003432: POP 00003433: POP 00003434: POP 00003435: PUSH1 0x40 00003437: MLOAD 00003438: RETURNDATASIZE 00003439: PUSH1 0x1f 0000343b: NOT 0000343c: PUSH1 0x1f 0000343e: DUP3 0000343f: ADD 00003440: AND 00003441: DUP3 00003442: ADD 00003443: DUP1 00003444: PUSH1 0x40 00003446: MSTORE 00003447: POP 00003448: DUP2 00003449: ADD 0000344a: SWAP1 0000344b: PUSH2 0x3454 0000344e: SWAP2 0000344f: SWAP1 00003450: PUSH2 0x5052 00003453: JUMP 00003454: JUMPDEST 00003455: SWAP1 00003456: POP 00003457: PUSH2 0x3478 0000345a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000346f: DUP6 00003470: AND 00003471: DUP7 00003472: ADDRESS 00003473: DUP7 00003474: PUSH2 0x42a1 00003477: JUMP 00003478: JUMPDEST 00003479: PUSH1 0x40 0000347b: MLOAD 0000347c: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 0000349d: DUP2 0000349e: MSTORE 0000349f: ADDRESS 000034a0: PUSH1 0x04 000034a2: DUP3 000034a3: ADD 000034a4: MSTORE 000034a5: PUSH1 0x00 000034a7: SWAP1 000034a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000034bd: DUP7 000034be: AND 000034bf: SWAP1 000034c0: PUSH4 0x70a08231 000034c5: SWAP1 000034c6: PUSH1 0x24 000034c8: ADD 000034c9: PUSH1 0x20 000034cb: PUSH1 0x40 000034cd: MLOAD 000034ce: DUP1 000034cf: DUP4 000034d0: SUB 000034d1: DUP2 000034d2: DUP7 000034d3: GAS 000034d4: STATICCALL 000034d5: ISZERO 000034d6: DUP1 000034d7: ISZERO 000034d8: PUSH2 0x34e5 000034db: JUMPI 000034dc: RETURNDATASIZE 000034dd: PUSH1 0x00 000034df: DUP1 000034e0: RETURNDATACOPY 000034e1: RETURNDATASIZE 000034e2: PUSH1 0x00 000034e4: REVERT 000034e5: JUMPDEST 000034e6: POP 000034e7: POP 000034e8: POP 000034e9: POP 000034ea: PUSH1 0x40 000034ec: MLOAD 000034ed: RETURNDATASIZE 000034ee: PUSH1 0x1f 000034f0: NOT 000034f1: PUSH1 0x1f 000034f3: DUP3 000034f4: ADD 000034f5: AND 000034f6: DUP3 000034f7: ADD 000034f8: DUP1 000034f9: PUSH1 0x40 000034fb: MSTORE 000034fc: POP 000034fd: DUP2 000034fe: ADD 000034ff: SWAP1 00003500: PUSH2 0x3509 00003503: SWAP2 00003504: SWAP1 00003505: PUSH2 0x5052 00003508: JUMP 00003509: JUMPDEST 0000350a: SWAP1 0000350b: POP 0000350c: DUP2 0000350d: DUP2 0000350e: GT 0000350f: PUSH2 0x3544 00003512: JUMPI 00003513: PUSH1 0x40 00003515: MLOAD 00003516: PUSH32 0xb19ed51900000000000000000000000000000000000000000000000000000000 00003537: DUP2 00003538: MSTORE 00003539: PUSH1 0x04 0000353b: ADD 0000353c: PUSH1 0x40 0000353e: MLOAD 0000353f: DUP1 00003540: SWAP2 00003541: SUB 00003542: SWAP1 00003543: REVERT 00003544: JUMPDEST 00003545: PUSH16 0xffffffffffffffffffffffffffffffff 00003556: DUP2 00003557: GT 00003558: ISZERO 00003559: PUSH2 0x358e 0000355c: JUMPI 0000355d: PUSH1 0x40 0000355f: MLOAD 00003560: PUSH32 0xc36d283000000000000000000000000000000000000000000000000000000000 00003581: DUP2 00003582: MSTORE 00003583: PUSH1 0x04 00003585: ADD 00003586: PUSH1 0x40 00003588: MLOAD 00003589: DUP1 0000358a: SWAP2 0000358b: SUB 0000358c: SWAP1 0000358d: REVERT 0000358e: JUMPDEST 0000358f: PUSH2 0x3598 00003592: DUP3 00003593: DUP3 00003594: PUSH2 0x535a 00003597: JUMP 00003598: JUMPDEST 00003599: SWAP7 0000359a: SWAP6 0000359b: POP 0000359c: POP 0000359d: POP 0000359e: POP 0000359f: POP 000035a0: POP 000035a1: JUMP 000035a2: JUMPDEST 000035a3: PUSH1 0x01 000035a5: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 000035c6: SSTORE 000035c7: JUMP 000035c8: JUMPDEST 000035c9: PUSH1 0x00 000035cb: DUP1 000035cc: DUP1 000035cd: DUP1 000035ce: PUSH2 0x35d9 000035d1: PUSH1 0x41 000035d3: PUSH1 0x02 000035d5: PUSH2 0x514a 000035d8: JUMP 000035d9: JUMPDEST 000035da: PUSH2 0x35e4 000035dd: SWAP1 000035de: PUSH1 0x4c 000035e0: PUSH2 0x5252 000035e3: JUMP 000035e4: JUMPDEST 000035e5: DUP6 000035e6: LT 000035e7: ISZERO 000035e8: PUSH2 0x361d 000035eb: JUMPI 000035ec: PUSH1 0x40 000035ee: MLOAD 000035ef: PUSH32 0x09bde33900000000000000000000000000000000000000000000000000000000 00003610: DUP2 00003611: MSTORE 00003612: PUSH1 0x04 00003614: ADD 00003615: PUSH1 0x40 00003617: MLOAD 00003618: DUP1 00003619: SWAP2 0000361a: SUB 0000361b: SWAP1 0000361c: REVERT 0000361d: JUMPDEST 0000361e: POP 0000361f: POP 00003620: POP 00003621: DUP3 00003622: CALLDATALOAD 00003623: PUSH1 0x60 00003625: SWAP1 00003626: DUP2 00003627: SHR 00003628: SWAP5 00003629: PUSH1 0x14 0000362b: DUP6 0000362c: ADD 0000362d: CALLDATALOAD 0000362e: SWAP5 0000362f: PUSH1 0x34 00003631: DUP2 00003632: ADD 00003633: CALLDATALOAD 00003634: SWAP1 00003635: SWAP3 00003636: SHR 00003637: SWAP4 00003638: POP 00003639: PUSH1 0x48 0000363b: SWAP1 0000363c: SWAP2 0000363d: ADD 0000363e: CALLDATALOAD 0000363f: PUSH1 0xe0 00003641: SHR 00003642: SWAP2 00003643: POP 00003644: JUMP 00003645: JUMPDEST 00003646: PUSH1 0x40 00003648: MLOAD 00003649: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 0000366a: PUSH1 0x60 0000366c: DUP9 0000366d: DUP2 0000366e: SHL 0000366f: DUP3 00003670: AND 00003671: PUSH1 0x20 00003673: DUP5 00003674: ADD 00003675: MSTORE 00003676: PUSH1 0x34 00003678: DUP4 00003679: ADD 0000367a: DUP9 0000367b: SWAP1 0000367c: MSTORE 0000367d: DUP7 0000367e: SWAP1 0000367f: SHL 00003680: AND 00003681: PUSH1 0x54 00003683: DUP3 00003684: ADD 00003685: MSTORE 00003686: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000036a7: PUSH1 0xe0 000036a9: DUP6 000036aa: SWAP1 000036ab: SHL 000036ac: AND 000036ad: PUSH1 0x68 000036af: DUP3 000036b0: ADD 000036b1: MSTORE 000036b2: PUSH1 0x00 000036b4: SWAP1 000036b5: PUSH1 0x6c 000036b7: ADD 000036b8: PUSH1 0x40 000036ba: DUP1 000036bb: MLOAD 000036bc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000036dd: DUP2 000036de: DUP5 000036df: SUB 000036e0: ADD 000036e1: DUP2 000036e2: MSTORE 000036e3: SWAP2 000036e4: DUP2 000036e5: MSTORE 000036e6: DUP2 000036e7: MLOAD 000036e8: PUSH1 0x20 000036ea: SWAP3 000036eb: DUP4 000036ec: ADD 000036ed: KECCAK256 000036ee: PUSH1 0x00 000036f0: DUP2 000036f1: DUP2 000036f2: MSTORE 000036f3: PUSH1 0x08 000036f5: SWAP1 000036f6: SWAP4 000036f7: MSTORE 000036f8: SWAP2 000036f9: KECCAK256 000036fa: SLOAD 000036fb: SWAP1 000036fc: SWAP2 000036fd: POP 000036fe: PUSH1 0xff 00003700: AND 00003701: ISZERO 00003702: PUSH2 0x3737 00003705: JUMPI 00003706: PUSH1 0x40 00003708: MLOAD 00003709: PUSH32 0x24c1c1ce00000000000000000000000000000000000000000000000000000000 0000372a: DUP2 0000372b: MSTORE 0000372c: PUSH1 0x04 0000372e: ADD 0000372f: PUSH1 0x40 00003731: MLOAD 00003732: DUP1 00003733: SWAP2 00003734: SUB 00003735: SWAP1 00003736: REVERT 00003737: JUMPDEST 00003738: PUSH1 0x00 0000373a: DUP2 0000373b: DUP2 0000373c: MSTORE 0000373d: PUSH1 0x08 0000373f: PUSH1 0x20 00003741: MSTORE 00003742: PUSH1 0x40 00003744: SWAP1 00003745: KECCAK256 00003746: DUP1 00003747: SLOAD 00003748: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00003769: AND 0000376a: PUSH1 0x01 0000376c: SWAP1 0000376d: DUP2 0000376e: OR 0000376f: SWAP1 00003770: SWAP2 00003771: SSTORE 00003772: PUSH2 0x14f7 00003775: SWAP1 00003776: DUP3 00003777: PUSH2 0x3783 0000377a: DUP6 0000377b: PUSH1 0x4c 0000377d: DUP2 0000377e: DUP10 0000377f: PUSH2 0x5265 00003782: JUMP 00003783: JUMPDEST 00003784: PUSH2 0x3049 00003787: JUMP 00003788: JUMPDEST 00003789: ADDRESS 0000378a: PUSH4 0xb5169f6f 0000378f: CALLER 00003790: PUSH2 0x379a 00003793: PUSH1 0x01 00003795: DUP6 00003796: PUSH2 0x53c4 00003799: JUMP 0000379a: JUMPDEST 0000379b: PUSH1 0x40 0000379d: MLOAD 0000379e: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000037bf: PUSH1 0xe0 000037c1: DUP6 000037c2: SWAP1 000037c3: SHL 000037c4: AND 000037c5: DUP2 000037c6: MSTORE 000037c7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000037dc: SWAP1 000037dd: SWAP3 000037de: AND 000037df: PUSH1 0x04 000037e1: DUP4 000037e2: ADD 000037e3: MSTORE 000037e4: PUSH1 0x24 000037e6: DUP3 000037e7: ADD 000037e8: MSTORE 000037e9: PUSH1 0x44 000037eb: ADD 000037ec: PUSH1 0x00 000037ee: PUSH1 0x40 000037f0: MLOAD 000037f1: DUP1 000037f2: DUP4 000037f3: SUB 000037f4: DUP2 000037f5: PUSH1 0x00 000037f7: DUP8 000037f8: DUP1 000037f9: EXTCODESIZE 000037fa: ISZERO 000037fb: DUP1 000037fc: ISZERO 000037fd: PUSH2 0x3805 00003800: JUMPI 00003801: PUSH1 0x00 00003803: DUP1 00003804: REVERT 00003805: JUMPDEST 00003806: POP 00003807: GAS 00003808: CALL 00003809: SWAP3 0000380a: POP 0000380b: POP 0000380c: POP 0000380d: DUP1 0000380e: ISZERO 0000380f: PUSH2 0x3816 00003812: JUMPI 00003813: POP 00003814: PUSH1 0x01 00003816: JUMPDEST 00003817: PUSH2 0x3852 0000381a: JUMPI 0000381b: PUSH1 0x40 0000381d: MLOAD 0000381e: DUP2 0000381f: DUP2 00003820: MSTORE 00003821: CALLER 00003822: SWAP1 00003823: PUSH32 0x070f559336db1ff93112bc8bc0d3b6abf3ac8b8e6527eba2fc893164c6a8d9f0 00003844: SWAP1 00003845: PUSH1 0x20 00003847: ADD 00003848: PUSH1 0x40 0000384a: MLOAD 0000384b: DUP1 0000384c: SWAP2 0000384d: SUB 0000384e: SWAP1 0000384f: LOG2 00003850: POP 00003851: JUMP 00003852: JUMPDEST 00003853: CALLER 00003854: PUSH1 0x00 00003856: SWAP1 00003857: DUP2 00003858: MSTORE 00003859: PUSH1 0x0c 0000385b: PUSH1 0x20 0000385d: MSTORE 0000385e: PUSH1 0x40 00003860: SWAP1 00003861: KECCAK256 00003862: PUSH1 0x01 00003864: SWAP1 00003865: SSTORE 00003866: POP 00003867: JUMP 00003868: JUMPDEST 00003869: CALLER 0000386a: PUSH2 0x3871 0000386d: PUSH2 0x1b10 00003870: JUMP 00003871: JUMPDEST 00003872: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003887: AND 00003888: EQ 00003889: PUSH2 0x1941 0000388c: JUMPI 0000388d: PUSH1 0x40 0000388f: MLOAD 00003890: PUSH32 0x118cdaa700000000000000000000000000000000000000000000000000000000 000038b1: DUP2 000038b2: MSTORE 000038b3: CALLER 000038b4: PUSH1 0x04 000038b6: DUP3 000038b7: ADD 000038b8: MSTORE 000038b9: PUSH1 0x24 000038bb: ADD 000038bc: PUSH2 0x0c6d 000038bf: JUMP 000038c0: JUMPDEST 000038c1: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 000038e2: SLOAD 000038e3: PUSH1 0xff 000038e5: AND 000038e6: PUSH2 0x1941 000038e9: JUMPI 000038ea: PUSH1 0x40 000038ec: MLOAD 000038ed: PUSH32 0x8dfc202b00000000000000000000000000000000000000000000000000000000 0000390e: DUP2 0000390f: MSTORE 00003910: PUSH1 0x04 00003912: ADD 00003913: PUSH1 0x40 00003915: MLOAD 00003916: DUP1 00003917: SWAP2 00003918: SUB 00003919: SWAP1 0000391a: REVERT 0000391b: JUMPDEST 0000391c: PUSH2 0x3923 0000391f: PUSH2 0x38c0 00003922: JUMP 00003923: JUMPDEST 00003924: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00003945: DUP1 00003946: SLOAD 00003947: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00003968: AND 00003969: DUP2 0000396a: SSTORE 0000396b: PUSH32 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa 0000398c: CALLER 0000398d: JUMPDEST 0000398e: PUSH1 0x40 00003990: MLOAD 00003991: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000039a6: SWAP1 000039a7: SWAP2 000039a8: AND 000039a9: DUP2 000039aa: MSTORE 000039ab: PUSH1 0x20 000039ad: ADD 000039ae: PUSH1 0x40 000039b0: MLOAD 000039b1: DUP1 000039b2: SWAP2 000039b3: SUB 000039b4: SWAP1 000039b5: LOG1 000039b6: POP 000039b7: JUMP 000039b8: JUMPDEST 000039b9: ADDRESS 000039ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000039cf: PUSH32 0x000000000000000000000000965983977c29158ec53a296a6f47be145ddecc36 000039f0: AND 000039f1: EQ 000039f2: DUP1 000039f3: PUSH2 0x3a85 000039f6: JUMPI 000039f7: POP 000039f8: PUSH32 0x000000000000000000000000965983977c29158ec53a296a6f47be145ddecc36 00003a19: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003a2e: AND 00003a2f: PUSH2 0x3a6c 00003a32: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00003a53: SLOAD 00003a54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003a69: AND 00003a6a: SWAP1 00003a6b: JUMP 00003a6c: JUMPDEST 00003a6d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003a82: AND 00003a83: EQ 00003a84: ISZERO 00003a85: JUMPDEST 00003a86: ISZERO 00003a87: PUSH2 0x1941 00003a8a: JUMPI 00003a8b: PUSH1 0x40 00003a8d: MLOAD 00003a8e: PUSH32 0xe07c8dba00000000000000000000000000000000000000000000000000000000 00003aaf: DUP2 00003ab0: MSTORE 00003ab1: PUSH1 0x04 00003ab3: ADD 00003ab4: PUSH1 0x40 00003ab6: MLOAD 00003ab7: DUP1 00003ab8: SWAP2 00003ab9: SUB 00003aba: SWAP1 00003abb: REVERT 00003abc: JUMPDEST 00003abd: PUSH2 0x1a13 00003ac0: PUSH2 0x3868 00003ac3: JUMP 00003ac4: JUMPDEST 00003ac5: DUP2 00003ac6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003adb: AND 00003adc: PUSH4 0x52d1902d 00003ae1: PUSH1 0x40 00003ae3: MLOAD 00003ae4: DUP2 00003ae5: PUSH4 0xffffffff 00003aea: AND 00003aeb: PUSH1 0xe0 00003aed: SHL 00003aee: DUP2 00003aef: MSTORE 00003af0: PUSH1 0x04 00003af2: ADD 00003af3: PUSH1 0x20 00003af5: PUSH1 0x40 00003af7: MLOAD 00003af8: DUP1 00003af9: DUP4 00003afa: SUB 00003afb: DUP2 00003afc: DUP7 00003afd: GAS 00003afe: STATICCALL 00003aff: SWAP3 00003b00: POP 00003b01: POP 00003b02: POP 00003b03: DUP1 00003b04: ISZERO 00003b05: PUSH2 0x3b49 00003b08: JUMPI 00003b09: POP 00003b0a: PUSH1 0x40 00003b0c: DUP1 00003b0d: MLOAD 00003b0e: PUSH1 0x1f 00003b10: RETURNDATASIZE 00003b11: SWAP1 00003b12: DUP2 00003b13: ADD 00003b14: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00003b35: AND 00003b36: DUP3 00003b37: ADD 00003b38: SWAP1 00003b39: SWAP3 00003b3a: MSTORE 00003b3b: PUSH2 0x3b46 00003b3e: SWAP2 00003b3f: DUP2 00003b40: ADD 00003b41: SWAP1 00003b42: PUSH2 0x5052 00003b45: JUMP 00003b46: JUMPDEST 00003b47: PUSH1 0x01 00003b49: JUMPDEST 00003b4a: PUSH2 0x3b97 00003b4d: JUMPI 00003b4e: PUSH1 0x40 00003b50: MLOAD 00003b51: PUSH32 0x4c9c8ce300000000000000000000000000000000000000000000000000000000 00003b72: DUP2 00003b73: MSTORE 00003b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003b89: DUP4 00003b8a: AND 00003b8b: PUSH1 0x04 00003b8d: DUP3 00003b8e: ADD 00003b8f: MSTORE 00003b90: PUSH1 0x24 00003b92: ADD 00003b93: PUSH2 0x0c6d 00003b96: JUMP 00003b97: JUMPDEST 00003b98: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00003bb9: DUP2 00003bba: EQ 00003bbb: PUSH2 0x3bf3 00003bbe: JUMPI 00003bbf: PUSH1 0x40 00003bc1: MLOAD 00003bc2: PUSH32 0xaa1d49a400000000000000000000000000000000000000000000000000000000 00003be3: DUP2 00003be4: MSTORE 00003be5: PUSH1 0x04 00003be7: DUP2 00003be8: ADD 00003be9: DUP3 00003bea: SWAP1 00003beb: MSTORE 00003bec: PUSH1 0x24 00003bee: ADD 00003bef: PUSH2 0x0c6d 00003bf2: JUMP 00003bf3: JUMPDEST 00003bf4: PUSH2 0x26ff 00003bf7: DUP4 00003bf8: DUP4 00003bf9: PUSH2 0x42e7 00003bfc: JUMP 00003bfd: JUMPDEST 00003bfe: ADDRESS 00003bff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003c14: PUSH32 0x000000000000000000000000965983977c29158ec53a296a6f47be145ddecc36 00003c35: AND 00003c36: EQ 00003c37: PUSH2 0x1941 00003c3a: JUMPI 00003c3b: PUSH1 0x40 00003c3d: MLOAD 00003c3e: PUSH32 0xe07c8dba00000000000000000000000000000000000000000000000000000000 00003c5f: DUP2 00003c60: MSTORE 00003c61: PUSH1 0x04 00003c63: ADD 00003c64: PUSH1 0x40 00003c66: MLOAD 00003c67: DUP1 00003c68: SWAP2 00003c69: SUB 00003c6a: SWAP1 00003c6b: REVERT 00003c6c: JUMPDEST 00003c6d: PUSH32 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00 00003c8e: DUP1 00003c8f: SLOAD 00003c90: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00003cb1: AND 00003cb2: DUP2 00003cb3: SSTORE 00003cb4: PUSH2 0x1925 00003cb7: DUP3 00003cb8: PUSH2 0x434a 00003cbb: JUMP 00003cbc: JUMPDEST 00003cbd: PUSH2 0x3cc4 00003cc0: PUSH2 0x2fed 00003cc3: JUMP 00003cc4: JUMPDEST 00003cc5: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00003ce6: DUP1 00003ce7: SLOAD 00003ce8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00003d09: AND 00003d0a: PUSH1 0x01 00003d0c: OR 00003d0d: DUP2 00003d0e: SSTORE 00003d0f: PUSH32 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 00003d30: CALLER 00003d31: PUSH2 0x398d 00003d34: JUMP 00003d35: JUMPDEST 00003d36: PUSH1 0x40 00003d38: MLOAD 00003d39: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003d4e: DUP4 00003d4f: DUP2 00003d50: AND 00003d51: PUSH1 0x24 00003d53: DUP4 00003d54: ADD 00003d55: MSTORE 00003d56: PUSH1 0x44 00003d58: DUP3 00003d59: ADD 00003d5a: DUP4 00003d5b: SWAP1 00003d5c: MSTORE 00003d5d: PUSH2 0x26ff 00003d60: SWAP2 00003d61: DUP6 00003d62: SWAP2 00003d63: DUP3 00003d64: AND 00003d65: SWAP1 00003d66: PUSH4 0xa9059cbb 00003d6b: SWAP1 00003d6c: PUSH1 0x64 00003d6e: ADD 00003d6f: JUMPDEST 00003d70: PUSH1 0x40 00003d72: MLOAD 00003d73: PUSH1 0x20 00003d75: DUP2 00003d76: DUP4 00003d77: SUB 00003d78: SUB 00003d79: DUP2 00003d7a: MSTORE 00003d7b: SWAP1 00003d7c: PUSH1 0x40 00003d7e: MSTORE 00003d7f: SWAP2 00003d80: POP 00003d81: PUSH1 0xe0 00003d83: SHL 00003d84: PUSH1 0x20 00003d86: DUP3 00003d87: ADD 00003d88: DUP1 00003d89: MLOAD 00003d8a: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00003da7: DUP4 00003da8: DUP2 00003da9: DUP4 00003daa: AND 00003dab: OR 00003dac: DUP4 00003dad: MSTORE 00003dae: POP 00003daf: POP 00003db0: POP 00003db1: POP 00003db2: PUSH2 0x43e0 00003db5: JUMP 00003db6: JUMPDEST 00003db7: DUP1 00003db8: MLOAD 00003db9: PUSH1 0x20 00003dbb: SWAP1 00003dbc: SWAP2 00003dbd: ADD 00003dbe: KECCAK256 00003dbf: SWAP1 00003dc0: JUMP 00003dc1: JUMPDEST 00003dc2: PUSH1 0x0a 00003dc4: DUP1 00003dc5: SLOAD 00003dc6: PUSH1 0x01 00003dc8: DUP2 00003dc9: ADD 00003dca: SWAP1 00003dcb: SWAP2 00003dcc: SSTORE 00003dcd: PUSH1 0x00 00003dcf: DUP3 00003dd0: DUP2 00003dd1: MSTORE 00003dd2: PUSH1 0x03 00003dd4: PUSH1 0x20 00003dd6: MSTORE 00003dd7: PUSH1 0x40 00003dd9: SWAP1 00003dda: KECCAK256 00003ddb: SLOAD 00003ddc: ISZERO 00003ddd: PUSH2 0x3e15 00003de0: JUMPI 00003de1: PUSH1 0x40 00003de3: MLOAD 00003de4: PUSH32 0x02f3935c00000000000000000000000000000000000000000000000000000000 00003e05: DUP2 00003e06: MSTORE 00003e07: PUSH1 0x04 00003e09: DUP2 00003e0a: ADD 00003e0b: DUP4 00003e0c: SWAP1 00003e0d: MSTORE 00003e0e: PUSH1 0x24 00003e10: ADD 00003e11: PUSH2 0x0c6d 00003e14: JUMP 00003e15: JUMPDEST 00003e16: PUSH1 0x00 00003e18: DUP2 00003e19: DUP2 00003e1a: MSTORE 00003e1b: PUSH1 0x04 00003e1d: PUSH1 0x20 00003e1f: SWAP1 00003e20: DUP2 00003e21: MSTORE 00003e22: PUSH1 0x40 00003e24: DUP1 00003e25: DUP4 00003e26: KECCAK256 00003e27: DUP1 00003e28: SLOAD 00003e29: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003e3e: SWAP1 00003e3f: SWAP8 00003e40: AND 00003e41: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00003e62: SWAP1 00003e63: SWAP8 00003e64: AND 00003e65: DUP8 00003e66: OR 00003e67: SWAP1 00003e68: SSTORE 00003e69: PUSH1 0x05 00003e6b: DUP3 00003e6c: MSTORE 00003e6d: DUP1 00003e6e: DUP4 00003e6f: KECCAK256 00003e70: DUP6 00003e71: SWAP1 00003e72: SSTORE 00003e73: SWAP5 00003e74: DUP3 00003e75: MSTORE 00003e76: PUSH1 0x02 00003e78: DUP2 00003e79: MSTORE 00003e7a: DUP5 00003e7b: DUP3 00003e7c: KECCAK256 00003e7d: DUP4 00003e7e: SWAP1 00003e7f: SSTORE 00003e80: SWAP3 00003e81: DUP2 00003e82: MSTORE 00003e83: PUSH1 0x03 00003e85: DUP4 00003e86: MSTORE 00003e87: DUP4 00003e88: DUP2 00003e89: KECCAK256 00003e8a: DUP3 00003e8b: SWAP1 00003e8c: SSTORE 00003e8d: DUP2 00003e8e: DUP2 00003e8f: MSTORE 00003e90: SWAP2 00003e91: DUP3 00003e92: SWAP1 00003e93: MSTORE 00003e94: SWAP2 00003e95: SWAP1 00003e96: KECCAK256 00003e97: DUP1 00003e98: SLOAD 00003e99: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00003eba: AND 00003ebb: PUSH1 0x01 00003ebd: OR 00003ebe: SWAP1 00003ebf: SSTORE 00003ec0: SWAP1 00003ec1: JUMP 00003ec2: JUMPDEST 00003ec3: PUSH1 0x00 00003ec5: PUSH1 0x41 00003ec7: DUP3 00003ec8: MUL 00003ec9: DUP4 00003eca: ADD 00003ecb: DUP1 00003ecc: CALLDATALOAD 00003ecd: SWAP1 00003ece: PUSH1 0x20 00003ed0: DUP2 00003ed1: ADD 00003ed2: CALLDATALOAD 00003ed3: SWAP1 00003ed4: PUSH1 0x40 00003ed6: ADD 00003ed7: CALLDATALOAD 00003ed8: DUP4 00003ed9: BYTE 00003eda: PUSH1 0x1b 00003edc: DUP2 00003edd: LT 00003ede: ISZERO 00003edf: PUSH2 0x3ee6 00003ee2: JUMPI 00003ee3: PUSH1 0x1b 00003ee5: ADD 00003ee6: JUMPDEST 00003ee7: PUSH1 0x1d 00003ee9: DUP2 00003eea: PUSH1 0xff 00003eec: AND 00003eed: LT 00003eee: DUP1 00003eef: ISZERO 00003ef0: PUSH2 0x3f19 00003ef3: JUMPI 00003ef4: POP 00003ef5: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 00003f16: DUP3 00003f17: GT 00003f18: ISZERO 00003f19: JUMPDEST 00003f1a: PUSH2 0x3f24 00003f1d: JUMPI 00003f1e: PUSH1 0x00 00003f20: PUSH2 0x3fc2 00003f23: JUMP 00003f24: JUMPDEST 00003f25: PUSH1 0x40 00003f27: DUP1 00003f28: MLOAD 00003f29: PUSH1 0x00 00003f2b: DUP1 00003f2c: DUP3 00003f2d: MSTORE 00003f2e: PUSH1 0x20 00003f30: DUP3 00003f31: ADD 00003f32: DUP1 00003f33: DUP5 00003f34: MSTORE 00003f35: DUP11 00003f36: SWAP1 00003f37: MSTORE 00003f38: PUSH1 0xff 00003f3a: DUP5 00003f3b: AND 00003f3c: SWAP3 00003f3d: DUP3 00003f3e: ADD 00003f3f: SWAP3 00003f40: SWAP1 00003f41: SWAP3 00003f42: MSTORE 00003f43: PUSH1 0x60 00003f45: DUP2 00003f46: ADD 00003f47: DUP6 00003f48: SWAP1 00003f49: MSTORE 00003f4a: PUSH1 0x80 00003f4c: DUP2 00003f4d: ADD 00003f4e: DUP5 00003f4f: SWAP1 00003f50: MSTORE 00003f51: PUSH1 0x02 00003f53: SWAP2 00003f54: SWAP1 00003f55: PUSH1 0x01 00003f57: SWAP1 00003f58: PUSH1 0xa0 00003f5a: ADD 00003f5b: PUSH1 0x20 00003f5d: PUSH1 0x40 00003f5f: MLOAD 00003f60: PUSH1 0x20 00003f62: DUP2 00003f63: SUB 00003f64: SWAP1 00003f65: DUP1 00003f66: DUP5 00003f67: SUB 00003f68: SWAP1 00003f69: DUP6 00003f6a: GAS 00003f6b: STATICCALL 00003f6c: ISZERO 00003f6d: DUP1 00003f6e: ISZERO 00003f6f: PUSH2 0x3f7c 00003f72: JUMPI 00003f73: RETURNDATASIZE 00003f74: PUSH1 0x00 00003f76: DUP1 00003f77: RETURNDATACOPY 00003f78: RETURNDATASIZE 00003f79: PUSH1 0x00 00003f7b: REVERT 00003f7c: JUMPDEST 00003f7d: POP 00003f7e: POP 00003f7f: POP 00003f80: PUSH1 0x20 00003f82: PUSH1 0x40 00003f84: MLOAD 00003f85: SUB 00003f86: MLOAD 00003f87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003f9c: AND 00003f9d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003fb2: AND 00003fb3: DUP2 00003fb4: MSTORE 00003fb5: PUSH1 0x20 00003fb7: ADD 00003fb8: SWAP1 00003fb9: DUP2 00003fba: MSTORE 00003fbb: PUSH1 0x20 00003fbd: ADD 00003fbe: PUSH1 0x00 00003fc0: KECCAK256 00003fc1: SLOAD 00003fc2: JUMPDEST 00003fc3: SWAP8 00003fc4: SWAP7 00003fc5: POP 00003fc6: POP 00003fc7: POP 00003fc8: POP 00003fc9: POP 00003fca: POP 00003fcb: POP 00003fcc: JUMP 00003fcd: JUMPDEST 00003fce: PUSH1 0x00 00003fd0: DUP1 00003fd1: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00003ff2: PUSH2 0x2c0c 00003ff5: JUMP 00003ff6: JUMPDEST 00003ff7: PUSH2 0x3ffe 00003ffa: PUSH2 0x4484 00003ffd: JUMP 00003ffe: JUMPDEST 00003fff: PUSH2 0x1a13 00004002: DUP2 00004003: PUSH2 0x44c2 00004006: JUMP 00004007: JUMPDEST 00004008: PUSH2 0x1941 0000400b: PUSH2 0x4484 0000400e: JUMP 0000400f: JUMPDEST 00004010: PUSH2 0x4017 00004013: PUSH2 0x4484 00004016: JUMP 00004017: JUMPDEST 00004018: PUSH2 0x1941 0000401b: PUSH2 0x451a 0000401e: JUMP 0000401f: JUMPDEST 00004020: DUP7 00004021: PUSH1 0x04 00004023: DUP2 00004024: LT 00004025: ISZERO 00004026: PUSH2 0x405b 00004029: JUMPI 0000402a: PUSH1 0x40 0000402c: MLOAD 0000402d: PUSH32 0x3a6a875c00000000000000000000000000000000000000000000000000000000 0000404e: DUP2 0000404f: MSTORE 00004050: PUSH1 0x04 00004052: ADD 00004053: PUSH1 0x40 00004055: MLOAD 00004056: DUP1 00004057: SWAP2 00004058: SUB 00004059: SWAP1 0000405a: REVERT 0000405b: JUMPDEST 0000405c: DUP6 0000405d: DUP2 0000405e: EQ 0000405f: ISZERO 00004060: DUP1 00004061: PUSH2 0x406a 00004064: JUMPI 00004065: POP 00004066: DUP4 00004067: DUP2 00004068: EQ 00004069: ISZERO 0000406a: JUMPDEST 0000406b: DUP1 0000406c: PUSH2 0x4075 0000406f: JUMPI 00004070: POP 00004071: DUP2 00004072: DUP2 00004073: EQ 00004074: ISZERO 00004075: JUMPDEST 00004076: ISZERO 00004077: PUSH2 0x40ac 0000407a: JUMPI 0000407b: PUSH1 0x40 0000407d: MLOAD 0000407e: PUSH32 0x097ec09e00000000000000000000000000000000000000000000000000000000 0000409f: DUP2 000040a0: MSTORE 000040a1: PUSH1 0x04 000040a3: ADD 000040a4: PUSH1 0x40 000040a6: MLOAD 000040a7: DUP1 000040a8: SWAP2 000040a9: SUB 000040aa: SWAP1 000040ab: REVERT 000040ac: JUMPDEST 000040ad: PUSH1 0x60 000040af: PUSH1 0x00 000040b1: DUP1 000040b2: JUMPDEST 000040b3: DUP12 000040b4: DUP12 000040b5: DUP3 000040b6: DUP2 000040b7: DUP2 000040b8: LT 000040b9: PUSH2 0x40c4 000040bc: JUMPI 000040bd: PUSH2 0x40c4 000040c0: PUSH2 0x519c 000040c3: JUMP 000040c4: JUMPDEST 000040c5: SWAP1 000040c6: POP 000040c7: PUSH1 0x20 000040c9: MUL 000040ca: ADD 000040cb: PUSH1 0x20 000040cd: DUP2 000040ce: ADD 000040cf: SWAP1 000040d0: PUSH2 0x40d9 000040d3: SWAP2 000040d4: SWAP1 000040d5: PUSH2 0x4c30 000040d8: JUMP 000040d9: JUMPDEST 000040da: SWAP2 000040db: POP 000040dc: DUP10 000040dd: DUP10 000040de: DUP3 000040df: DUP2 000040e0: DUP2 000040e1: LT 000040e2: PUSH2 0x40ed 000040e5: JUMPI 000040e6: PUSH2 0x40ed 000040e9: PUSH2 0x519c 000040ec: JUMP 000040ed: JUMPDEST 000040ee: SWAP1 000040ef: POP 000040f0: PUSH1 0x20 000040f2: MUL 000040f3: ADD 000040f4: CALLDATALOAD 000040f5: DUP9 000040f6: DUP9 000040f7: DUP4 000040f8: DUP2 000040f9: DUP2 000040fa: LT 000040fb: PUSH2 0x4106 000040fe: JUMPI 000040ff: PUSH2 0x4106 00004102: PUSH2 0x519c 00004105: JUMP 00004106: JUMPDEST 00004107: SWAP1 00004108: POP 00004109: PUSH1 0x20 0000410b: MUL 0000410c: ADD 0000410d: CALLDATALOAD 0000410e: PUSH1 0x40 00004110: MLOAD 00004111: PUSH1 0x20 00004113: ADD 00004114: PUSH2 0x4127 00004117: SWAP3 00004118: SWAP2 00004119: SWAP1 0000411a: SWAP2 0000411b: DUP3 0000411c: MSTORE 0000411d: PUSH1 0x20 0000411f: DUP3 00004120: ADD 00004121: MSTORE 00004122: PUSH1 0x40 00004124: ADD 00004125: SWAP1 00004126: JUMP 00004127: JUMPDEST 00004128: PUSH1 0x40 0000412a: MLOAD 0000412b: PUSH1 0x20 0000412d: DUP2 0000412e: DUP4 0000412f: SUB 00004130: SUB 00004131: DUP2 00004132: MSTORE 00004133: SWAP1 00004134: PUSH1 0x40 00004136: MSTORE 00004137: SWAP3 00004138: POP 00004139: DUP2 0000413a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000414f: AND 00004150: PUSH2 0x415e 00004153: DUP5 00004154: DUP1 00004155: MLOAD 00004156: PUSH1 0x20 00004158: SWAP1 00004159: SWAP2 0000415a: ADD 0000415b: KECCAK256 0000415c: SWAP1 0000415d: JUMP 0000415e: JUMPDEST 0000415f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004174: AND 00004175: EQ 00004176: PUSH2 0x41ab 00004179: JUMPI 0000417a: PUSH1 0x40 0000417c: MLOAD 0000417d: PUSH32 0x4cd87fb500000000000000000000000000000000000000000000000000000000 0000419e: DUP2 0000419f: MSTORE 000041a0: PUSH1 0x04 000041a2: ADD 000041a3: PUSH1 0x40 000041a5: MLOAD 000041a6: DUP1 000041a7: SWAP2 000041a8: SUB 000041a9: SWAP1 000041aa: REVERT 000041ab: JUMPDEST 000041ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000041c1: DUP3 000041c2: AND 000041c3: PUSH1 0x00 000041c5: SWAP1 000041c6: DUP2 000041c7: MSTORE 000041c8: PUSH1 0x02 000041ca: PUSH1 0x20 000041cc: MSTORE 000041cd: PUSH1 0x40 000041cf: SWAP1 000041d0: KECCAK256 000041d1: SLOAD 000041d2: ISZERO 000041d3: PUSH2 0x4220 000041d6: JUMPI 000041d7: PUSH1 0x40 000041d9: MLOAD 000041da: PUSH32 0x78f22dd100000000000000000000000000000000000000000000000000000000 000041fb: DUP2 000041fc: MSTORE 000041fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004212: DUP4 00004213: AND 00004214: PUSH1 0x04 00004216: DUP3 00004217: ADD 00004218: MSTORE 00004219: PUSH1 0x24 0000421b: ADD 0000421c: PUSH2 0x0c6d 0000421f: JUMP 00004220: JUMPDEST 00004221: PUSH2 0x4289 00004224: PUSH2 0x4245 00004227: DUP4 00004228: DUP9 00004229: DUP9 0000422a: DUP6 0000422b: DUP2 0000422c: DUP2 0000422d: LT 0000422e: PUSH2 0x4239 00004231: JUMPI 00004232: PUSH2 0x4239 00004235: PUSH2 0x519c 00004238: JUMP 00004239: JUMPDEST 0000423a: SWAP1 0000423b: POP 0000423c: PUSH1 0x20 0000423e: MUL 0000423f: ADD 00004240: CALLDATALOAD 00004241: PUSH2 0x3dc1 00004244: JUMP 00004245: JUMPDEST 00004246: PUSH1 0x00 00004248: SWAP1 00004249: DUP2 0000424a: MSTORE 0000424b: PUSH1 0x01 0000424d: PUSH1 0x20 0000424f: DUP2 00004250: SWAP1 00004251: MSTORE 00004252: PUSH1 0x40 00004254: SWAP1 00004255: SWAP2 00004256: KECCAK256 00004257: DUP1 00004258: SLOAD 00004259: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 0000427a: AND 0000427b: DUP3 0000427c: OR 0000427d: SWAP1 0000427e: SSTORE 0000427f: PUSH1 0x09 00004281: DUP1 00004282: SLOAD 00004283: SWAP1 00004284: SWAP2 00004285: ADD 00004286: SWAP1 00004287: SSTORE 00004288: JUMP 00004289: JUMPDEST 0000428a: PUSH1 0x01 0000428c: ADD 0000428d: DUP4 0000428e: DUP2 0000428f: LT 00004290: PUSH2 0x40b2 00004293: JUMPI 00004294: POP 00004295: POP 00004296: POP 00004297: POP 00004298: POP 00004299: POP 0000429a: POP 0000429b: POP 0000429c: POP 0000429d: POP 0000429e: POP 0000429f: POP 000042a0: JUMP 000042a1: JUMPDEST 000042a2: PUSH1 0x40 000042a4: MLOAD 000042a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000042ba: DUP5 000042bb: DUP2 000042bc: AND 000042bd: PUSH1 0x24 000042bf: DUP4 000042c0: ADD 000042c1: MSTORE 000042c2: DUP4 000042c3: DUP2 000042c4: AND 000042c5: PUSH1 0x44 000042c7: DUP4 000042c8: ADD 000042c9: MSTORE 000042ca: PUSH1 0x64 000042cc: DUP3 000042cd: ADD 000042ce: DUP4 000042cf: SWAP1 000042d0: MSTORE 000042d1: PUSH2 0x0d38 000042d4: SWAP2 000042d5: DUP7 000042d6: SWAP2 000042d7: DUP3 000042d8: AND 000042d9: SWAP1 000042da: PUSH4 0x23b872dd 000042df: SWAP1 000042e0: PUSH1 0x84 000042e2: ADD 000042e3: PUSH2 0x3d6f 000042e6: JUMP 000042e7: JUMPDEST 000042e8: PUSH2 0x42f0 000042eb: DUP3 000042ec: PUSH2 0x4522 000042ef: JUMP 000042f0: JUMPDEST 000042f1: PUSH1 0x40 000042f3: MLOAD 000042f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004309: DUP4 0000430a: AND 0000430b: SWAP1 0000430c: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 0000432d: SWAP1 0000432e: PUSH1 0x00 00004330: SWAP1 00004331: LOG2 00004332: DUP1 00004333: MLOAD 00004334: ISZERO 00004335: PUSH2 0x4342 00004338: JUMPI 00004339: PUSH2 0x26ff 0000433c: DUP3 0000433d: DUP3 0000433e: PUSH2 0x45f1 00004341: JUMP 00004342: JUMPDEST 00004343: PUSH2 0x1925 00004346: PUSH2 0x4674 00004349: JUMP 0000434a: JUMPDEST 0000434b: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300 0000436c: DUP1 0000436d: SLOAD 0000436e: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000438f: DUP2 00004390: AND 00004391: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000043a6: DUP5 000043a7: DUP2 000043a8: AND 000043a9: SWAP2 000043aa: DUP3 000043ab: OR 000043ac: DUP5 000043ad: SSTORE 000043ae: PUSH1 0x40 000043b0: MLOAD 000043b1: SWAP3 000043b2: AND 000043b3: SWAP2 000043b4: DUP3 000043b5: SWAP1 000043b6: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000043d7: SWAP1 000043d8: PUSH1 0x00 000043da: SWAP1 000043db: LOG3 000043dc: POP 000043dd: POP 000043de: POP 000043df: JUMP 000043e0: JUMPDEST 000043e1: PUSH1 0x00 000043e3: DUP1 000043e4: PUSH1 0x20 000043e6: PUSH1 0x00 000043e8: DUP5 000043e9: MLOAD 000043ea: PUSH1 0x20 000043ec: DUP7 000043ed: ADD 000043ee: PUSH1 0x00 000043f0: DUP9 000043f1: GAS 000043f2: CALL 000043f3: DUP1 000043f4: PUSH2 0x4403 000043f7: JUMPI 000043f8: PUSH1 0x40 000043fa: MLOAD 000043fb: RETURNDATASIZE 000043fc: PUSH1 0x00 000043fe: DUP3 000043ff: RETURNDATACOPY 00004400: RETURNDATASIZE 00004401: DUP2 00004402: REVERT 00004403: JUMPDEST 00004404: POP 00004405: POP 00004406: PUSH1 0x00 00004408: MLOAD 00004409: RETURNDATASIZE 0000440a: SWAP2 0000440b: POP 0000440c: DUP2 0000440d: ISZERO 0000440e: PUSH2 0x441b 00004411: JUMPI 00004412: DUP1 00004413: PUSH1 0x01 00004415: EQ 00004416: ISZERO 00004417: PUSH2 0x4435 0000441a: JUMP 0000441b: JUMPDEST 0000441c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004431: DUP5 00004432: AND 00004433: EXTCODESIZE 00004434: ISZERO 00004435: JUMPDEST 00004436: ISZERO 00004437: PUSH2 0x0d38 0000443a: JUMPI 0000443b: PUSH1 0x40 0000443d: MLOAD 0000443e: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 0000445f: DUP2 00004460: MSTORE 00004461: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004476: DUP6 00004477: AND 00004478: PUSH1 0x04 0000447a: DUP3 0000447b: ADD 0000447c: MSTORE 0000447d: PUSH1 0x24 0000447f: ADD 00004480: PUSH2 0x0c6d 00004483: JUMP 00004484: JUMPDEST 00004485: PUSH2 0x448c 00004488: PUSH2 0x46ac 0000448b: JUMP 0000448c: JUMPDEST 0000448d: PUSH2 0x1941 00004490: JUMPI 00004491: PUSH1 0x40 00004493: MLOAD 00004494: PUSH32 0xd7e6bcf800000000000000000000000000000000000000000000000000000000 000044b5: DUP2 000044b6: MSTORE 000044b7: PUSH1 0x04 000044b9: ADD 000044ba: PUSH1 0x40 000044bc: MLOAD 000044bd: DUP1 000044be: SWAP2 000044bf: SUB 000044c0: SWAP1 000044c1: REVERT 000044c2: JUMPDEST 000044c3: PUSH2 0x44ca 000044c6: PUSH2 0x4484 000044c9: JUMP 000044ca: JUMPDEST 000044cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000044e0: DUP2 000044e1: AND 000044e2: PUSH2 0x1aef 000044e5: JUMPI 000044e6: PUSH1 0x40 000044e8: MLOAD 000044e9: PUSH32 0x1e4fbdf700000000000000000000000000000000000000000000000000000000 0000450a: DUP2 0000450b: MSTORE 0000450c: PUSH1 0x00 0000450e: PUSH1 0x04 00004510: DUP3 00004511: ADD 00004512: MSTORE 00004513: PUSH1 0x24 00004515: ADD 00004516: PUSH2 0x0c6d 00004519: JUMP 0000451a: JUMPDEST 0000451b: PUSH2 0x35a2 0000451e: PUSH2 0x4484 00004521: JUMP 00004522: JUMPDEST 00004523: DUP1 00004524: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004539: AND 0000453a: EXTCODESIZE 0000453b: PUSH1 0x00 0000453d: SUB 0000453e: PUSH2 0x458b 00004541: JUMPI 00004542: PUSH1 0x40 00004544: MLOAD 00004545: PUSH32 0x4c9c8ce300000000000000000000000000000000000000000000000000000000 00004566: DUP2 00004567: MSTORE 00004568: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000457d: DUP3 0000457e: AND 0000457f: PUSH1 0x04 00004581: DUP3 00004582: ADD 00004583: MSTORE 00004584: PUSH1 0x24 00004586: ADD 00004587: PUSH2 0x0c6d 0000458a: JUMP 0000458b: JUMPDEST 0000458c: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 000045ad: DUP1 000045ae: SLOAD 000045af: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 000045d0: AND 000045d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000045e6: SWAP3 000045e7: SWAP1 000045e8: SWAP3 000045e9: AND 000045ea: SWAP2 000045eb: SWAP1 000045ec: SWAP2 000045ed: OR 000045ee: SWAP1 000045ef: SSTORE 000045f0: JUMP 000045f1: JUMPDEST 000045f2: PUSH1 0x60 000045f4: PUSH1 0x00 000045f6: DUP1 000045f7: DUP5 000045f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000460d: AND 0000460e: DUP5 0000460f: PUSH1 0x40 00004611: MLOAD 00004612: PUSH2 0x461b 00004615: SWAP2 00004616: SWAP1 00004617: PUSH2 0x53e4 0000461a: JUMP 0000461b: JUMPDEST 0000461c: PUSH1 0x00 0000461e: PUSH1 0x40 00004620: MLOAD 00004621: DUP1 00004622: DUP4 00004623: SUB 00004624: DUP2 00004625: DUP6 00004626: GAS 00004627: DELEGATECALL 00004628: SWAP2 00004629: POP 0000462a: POP 0000462b: RETURNDATASIZE 0000462c: DUP1 0000462d: PUSH1 0x00 0000462f: DUP2 00004630: EQ 00004631: PUSH2 0x4656 00004634: JUMPI 00004635: PUSH1 0x40 00004637: MLOAD 00004638: SWAP2 00004639: POP 0000463a: PUSH1 0x1f 0000463c: NOT 0000463d: PUSH1 0x3f 0000463f: RETURNDATASIZE 00004640: ADD 00004641: AND 00004642: DUP3 00004643: ADD 00004644: PUSH1 0x40 00004646: MSTORE 00004647: RETURNDATASIZE 00004648: DUP3 00004649: MSTORE 0000464a: RETURNDATASIZE 0000464b: PUSH1 0x00 0000464d: PUSH1 0x20 0000464f: DUP5 00004650: ADD 00004651: RETURNDATACOPY 00004652: PUSH2 0x465b 00004655: JUMP 00004656: JUMPDEST 00004657: PUSH1 0x60 00004659: SWAP2 0000465a: POP 0000465b: JUMPDEST 0000465c: POP 0000465d: SWAP2 0000465e: POP 0000465f: SWAP2 00004660: POP 00004661: PUSH2 0x466b 00004664: DUP6 00004665: DUP4 00004666: DUP4 00004667: PUSH2 0x46cb 0000466a: JUMP 0000466b: JUMPDEST 0000466c: SWAP6 0000466d: SWAP5 0000466e: POP 0000466f: POP 00004670: POP 00004671: POP 00004672: POP 00004673: JUMP 00004674: JUMPDEST 00004675: CALLVALUE 00004676: ISZERO 00004677: PUSH2 0x1941 0000467a: JUMPI 0000467b: PUSH1 0x40 0000467d: MLOAD 0000467e: PUSH32 0xb398979f00000000000000000000000000000000000000000000000000000000 0000469f: DUP2 000046a0: MSTORE 000046a1: PUSH1 0x04 000046a3: ADD 000046a4: PUSH1 0x40 000046a6: MLOAD 000046a7: DUP1 000046a8: SWAP2 000046a9: SUB 000046aa: SWAP1 000046ab: REVERT 000046ac: JUMPDEST 000046ad: PUSH1 0x00 000046af: PUSH2 0x46b6 000046b2: PUSH2 0x3fcd 000046b5: JUMP 000046b6: JUMPDEST 000046b7: SLOAD 000046b8: PUSH9 0x010000000000000000 000046c2: SWAP1 000046c3: DIV 000046c4: PUSH1 0xff 000046c6: AND 000046c7: SWAP2 000046c8: SWAP1 000046c9: POP 000046ca: JUMP 000046cb: JUMPDEST 000046cc: PUSH1 0x60 000046ce: DUP3 000046cf: PUSH2 0x46e0 000046d2: JUMPI 000046d3: PUSH2 0x46db 000046d6: DUP3 000046d7: PUSH2 0x475a 000046da: JUMP 000046db: JUMPDEST 000046dc: PUSH2 0x1bf6 000046df: JUMP 000046e0: JUMPDEST 000046e1: DUP2 000046e2: MLOAD 000046e3: ISZERO 000046e4: DUP1 000046e5: ISZERO 000046e6: PUSH2 0x4704 000046e9: JUMPI 000046ea: POP 000046eb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004700: DUP5 00004701: AND 00004702: EXTCODESIZE 00004703: ISZERO 00004704: JUMPDEST 00004705: ISZERO 00004706: PUSH2 0x4753 00004709: JUMPI 0000470a: PUSH1 0x40 0000470c: MLOAD 0000470d: PUSH32 0x9996b31500000000000000000000000000000000000000000000000000000000 0000472e: DUP2 0000472f: MSTORE 00004730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00004745: DUP6 00004746: AND 00004747: PUSH1 0x04 00004749: DUP3 0000474a: ADD 0000474b: MSTORE 0000474c: PUSH1 0x24 0000474e: ADD 0000474f: PUSH2 0x0c6d 00004752: JUMP 00004753: JUMPDEST 00004754: POP 00004755: DUP1 00004756: PUSH2 0x1bf6 00004759: JUMP 0000475a: JUMPDEST 0000475b: DUP1 0000475c: MLOAD 0000475d: ISZERO 0000475e: PUSH2 0x476a 00004761: JUMPI 00004762: DUP1 00004763: MLOAD 00004764: DUP1 00004765: DUP3 00004766: PUSH1 0x20 00004768: ADD 00004769: REVERT 0000476a: JUMPDEST 0000476b: PUSH1 0x40 0000476d: MLOAD 0000476e: PUSH32 0xd6bda27500000000000000000000000000000000000000000000000000000000 0000478f: DUP2 00004790: MSTORE 00004791: PUSH1 0x04 00004793: ADD 00004794: PUSH1 0x40 00004796: MLOAD 00004797: DUP1 00004798: SWAP2 00004799: SUB 0000479a: SWAP1 0000479b: REVERT 0000479c: JUMPDEST 0000479d: DUP1 0000479e: CALLDATALOAD 0000479f: PUSH4 0xffffffff 000047a4: DUP2 000047a5: AND 000047a6: DUP2 000047a7: EQ 000047a8: PUSH2 0x47b0 000047ab: JUMPI 000047ac: PUSH1 0x00 000047ae: DUP1 000047af: REVERT 000047b0: JUMPDEST 000047b1: SWAP2 000047b2: SWAP1 000047b3: POP 000047b4: JUMP 000047b5: JUMPDEST 000047b6: PUSH1 0x00 000047b8: DUP1 000047b9: DUP4 000047ba: PUSH1 0x1f 000047bc: DUP5 000047bd: ADD 000047be: SLT 000047bf: PUSH2 0x47c7 000047c2: JUMPI 000047c3: PUSH1 0x00 000047c5: DUP1 000047c6: REVERT 000047c7: JUMPDEST 000047c8: POP 000047c9: DUP2 000047ca: CALLDATALOAD 000047cb: PUSH8 0xffffffffffffffff 000047d4: DUP2 000047d5: GT 000047d6: ISZERO 000047d7: PUSH2 0x47df 000047da: JUMPI 000047db: PUSH1 0x00 000047dd: DUP1 000047de: REVERT 000047df: JUMPDEST 000047e0: PUSH1 0x20 000047e2: DUP4 000047e3: ADD 000047e4: SWAP2 000047e5: POP 000047e6: DUP4 000047e7: PUSH1 0x20 000047e9: DUP3 000047ea: DUP6 000047eb: ADD 000047ec: ADD 000047ed: GT 000047ee: ISZERO 000047ef: PUSH2 0x47f7 000047f2: JUMPI 000047f3: PUSH1 0x00 000047f5: DUP1 000047f6: REVERT 000047f7: JUMPDEST 000047f8: SWAP3 000047f9: POP 000047fa: SWAP3 000047fb: SWAP1 000047fc: POP 000047fd: JUMP 000047fe: JUMPDEST 000047ff: PUSH1 0x00 00004801: DUP1 00004802: PUSH1 0x00 00004804: DUP1 00004805: PUSH1 0x00 00004807: PUSH1 0x80 00004809: DUP7 0000480a: DUP9 0000480b: SUB 0000480c: SLT 0000480d: ISZERO 0000480e: PUSH2 0x4816 00004811: JUMPI 00004812: PUSH1 0x00 00004814: DUP1 00004815: REVERT 00004816: JUMPDEST 00004817: DUP6 00004818: CALLDATALOAD 00004819: SWAP5 0000481a: POP 0000481b: PUSH1 0x20 0000481d: DUP7 0000481e: ADD 0000481f: CALLDATALOAD 00004820: SWAP4 00004821: POP 00004822: PUSH2 0x482d 00004825: PUSH1 0x40 00004827: DUP8 00004828: ADD 00004829: PUSH2 0x479c 0000482c: JUMP 0000482d: JUMPDEST 0000482e: SWAP3 0000482f: POP 00004830: PUSH1 0x60 00004832: DUP7 00004833: ADD 00004834: CALLDATALOAD 00004835: PUSH8 0xffffffffffffffff 0000483e: DUP2 0000483f: GT 00004840: ISZERO 00004841: PUSH2 0x4849 00004844: JUMPI 00004845: PUSH1 0x00 00004847: DUP1 00004848: REVERT 00004849: JUMPDEST 0000484a: PUSH2 0x4855 0000484d: DUP9 0000484e: DUP3 0000484f: DUP10 00004850: ADD 00004851: PUSH2 0x47b5 00004854: JUMP 00004855: JUMPDEST 00004856: SWAP7 00004857: SWAP10 00004858: SWAP6 00004859: SWAP9 0000485a: POP 0000485b: SWAP4 0000485c: SWAP7 0000485d: POP 0000485e: SWAP3 0000485f: SWAP5 00004860: SWAP4 00004861: SWAP3 00004862: POP 00004863: POP 00004864: POP 00004865: JUMP 00004866: JUMPDEST 00004867: DUP1 00004868: CALLDATALOAD 00004869: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000487e: DUP2 0000487f: AND 00004880: DUP2 00004881: EQ 00004882: PUSH2 0x47b0 00004885: JUMPI 00004886: PUSH1 0x00 00004888: DUP1 00004889: REVERT 0000488a: JUMPDEST 0000488b: PUSH1 0x00 0000488d: DUP1 0000488e: PUSH1 0x00 00004890: DUP1 00004891: PUSH1 0x60 00004893: DUP6 00004894: DUP8 00004895: SUB 00004896: SLT 00004897: ISZERO 00004898: PUSH2 0x48a0 0000489b: JUMPI 0000489c: PUSH1 0x00 0000489e: DUP1 0000489f: REVERT 000048a0: JUMPDEST 000048a1: PUSH2 0x48a9 000048a4: DUP6 000048a5: PUSH2 0x4866 000048a8: JUMP 000048a9: JUMPDEST 000048aa: SWAP4 000048ab: POP 000048ac: PUSH1 0x20 000048ae: DUP6 000048af: ADD 000048b0: CALLDATALOAD 000048b1: PUSH8 0xffffffffffffffff 000048ba: DUP2 000048bb: GT 000048bc: ISZERO 000048bd: PUSH2 0x48c5 000048c0: JUMPI 000048c1: PUSH1 0x00 000048c3: DUP1 000048c4: REVERT 000048c5: JUMPDEST 000048c6: PUSH2 0x48d1 000048c9: DUP8 000048ca: DUP3 000048cb: DUP9 000048cc: ADD 000048cd: PUSH2 0x47b5 000048d0: JUMP 000048d1: JUMPDEST 000048d2: SWAP6 000048d3: SWAP9 000048d4: SWAP1 000048d5: SWAP8 000048d6: POP 000048d7: SWAP5 000048d8: SWAP6 000048d9: PUSH1 0x40 000048db: ADD 000048dc: CALLDATALOAD 000048dd: SWAP5 000048de: SWAP4 000048df: POP 000048e0: POP 000048e1: POP 000048e2: POP 000048e3: JUMP 000048e4: JUMPDEST 000048e5: PUSH1 0x00 000048e7: PUSH1 0x20 000048e9: DUP3 000048ea: DUP5 000048eb: SUB 000048ec: SLT 000048ed: ISZERO 000048ee: PUSH2 0x48f6 000048f1: JUMPI 000048f2: PUSH1 0x00 000048f4: DUP1 000048f5: REVERT 000048f6: JUMPDEST 000048f7: POP 000048f8: CALLDATALOAD 000048f9: SWAP2 000048fa: SWAP1 000048fb: POP 000048fc: JUMP 000048fd: JUMPDEST 000048fe: PUSH1 0x00 00004900: DUP1 00004901: PUSH1 0x00 00004903: DUP1 00004904: PUSH1 0x00 00004906: DUP1 00004907: PUSH1 0x00 00004909: PUSH1 0xa0 0000490b: DUP9 0000490c: DUP11 0000490d: SUB 0000490e: SLT 0000490f: ISZERO 00004910: PUSH2 0x4918 00004913: JUMPI 00004914: PUSH1 0x00 00004916: DUP1 00004917: REVERT 00004918: JUMPDEST 00004919: DUP8 0000491a: CALLDATALOAD 0000491b: SWAP7 0000491c: POP 0000491d: PUSH1 0x20 0000491f: DUP9 00004920: ADD 00004921: CALLDATALOAD 00004922: PUSH8 0xffffffffffffffff 0000492b: DUP2 0000492c: GT 0000492d: ISZERO 0000492e: PUSH2 0x4936 00004931: JUMPI 00004932: PUSH1 0x00 00004934: DUP1 00004935: REVERT 00004936: JUMPDEST 00004937: PUSH2 0x4942 0000493a: DUP11 0000493b: DUP3 0000493c: DUP12 0000493d: ADD 0000493e: PUSH2 0x47b5 00004941: JUMP 00004942: JUMPDEST 00004943: SWAP1 00004944: SWAP8 00004945: POP 00004946: SWAP6 00004947: POP 00004948: POP 00004949: PUSH1 0x40 0000494b: DUP9 0000494c: ADD 0000494d: CALLDATALOAD 0000494e: SWAP4 0000494f: POP 00004950: PUSH2 0x495b 00004953: PUSH1 0x60 00004955: DUP10 00004956: ADD 00004957: PUSH2 0x479c 0000495a: JUMP 0000495b: JUMPDEST 0000495c: SWAP3 0000495d: POP 0000495e: PUSH1 0x80 00004960: DUP9 00004961: ADD 00004962: CALLDATALOAD 00004963: PUSH8 0xffffffffffffffff 0000496c: DUP2 0000496d: GT 0000496e: ISZERO 0000496f: PUSH2 0x4977 00004972: JUMPI 00004973: PUSH1 0x00 00004975: DUP1 00004976: REVERT 00004977: JUMPDEST 00004978: PUSH2 0x4983 0000497b: DUP11 0000497c: DUP3 0000497d: DUP12 0000497e: ADD 0000497f: PUSH2 0x47b5 00004982: JUMP 00004983: JUMPDEST 00004984: SWAP9 00004985: SWAP12 00004986: SWAP8 00004987: SWAP11 00004988: POP 00004989: SWAP6 0000498a: SWAP9 0000498b: POP 0000498c: SWAP4 0000498d: SWAP7 0000498e: SWAP3 0000498f: SWAP6 00004990: SWAP3 00004991: SWAP4 00004992: POP 00004993: POP 00004994: POP 00004995: JUMP 00004996: JUMPDEST 00004997: DUP1 00004998: ISZERO 00004999: ISZERO 0000499a: DUP2 0000499b: EQ 0000499c: PUSH2 0x1a13 0000499f: JUMPI 000049a0: PUSH1 0x00 000049a2: DUP1 000049a3: REVERT 000049a4: JUMPDEST 000049a5: PUSH1 0x00 000049a7: DUP1 000049a8: PUSH1 0x00 000049aa: DUP1 000049ab: PUSH1 0x60 000049ad: DUP6 000049ae: DUP8 000049af: SUB 000049b0: SLT 000049b1: ISZERO 000049b2: PUSH2 0x49ba 000049b5: JUMPI 000049b6: PUSH1 0x00 000049b8: DUP1 000049b9: REVERT 000049ba: JUMPDEST 000049bb: DUP5 000049bc: CALLDATALOAD 000049bd: SWAP4 000049be: POP 000049bf: PUSH1 0x20 000049c1: DUP6 000049c2: ADD 000049c3: CALLDATALOAD 000049c4: PUSH8 0xffffffffffffffff 000049cd: DUP2 000049ce: GT 000049cf: ISZERO 000049d0: PUSH2 0x49d8 000049d3: JUMPI 000049d4: PUSH1 0x00 000049d6: DUP1 000049d7: REVERT 000049d8: JUMPDEST 000049d9: PUSH2 0x49e4 000049dc: DUP8 000049dd: DUP3 000049de: DUP9 000049df: ADD 000049e0: PUSH2 0x47b5 000049e3: JUMP 000049e4: JUMPDEST 000049e5: SWAP1 000049e6: SWAP5 000049e7: POP 000049e8: SWAP3 000049e9: POP 000049ea: POP 000049eb: PUSH1 0x40 000049ed: DUP6 000049ee: ADD 000049ef: CALLDATALOAD 000049f0: PUSH2 0x49f8 000049f3: DUP2 000049f4: PUSH2 0x4996 000049f7: JUMP 000049f8: JUMPDEST 000049f9: SWAP4 000049fa: SWAP7 000049fb: SWAP3 000049fc: SWAP6 000049fd: POP 000049fe: SWAP1 000049ff: SWAP4 00004a00: POP 00004a01: POP 00004a02: JUMP 00004a03: JUMPDEST 00004a04: DUP1 00004a05: CALLDATALOAD 00004a06: PUSH1 0xff 00004a08: DUP2 00004a09: AND 00004a0a: DUP2 00004a0b: EQ 00004a0c: PUSH2 0x47b0 00004a0f: JUMPI 00004a10: PUSH1 0x00 00004a12: DUP1 00004a13: REVERT 00004a14: JUMPDEST 00004a15: PUSH1 0x00 00004a17: DUP1 00004a18: PUSH1 0x00 00004a1a: DUP1 00004a1b: PUSH1 0x00 00004a1d: DUP1 00004a1e: PUSH1 0x00 00004a20: PUSH1 0xe0 00004a22: DUP9 00004a23: DUP11 00004a24: SUB 00004a25: SLT 00004a26: ISZERO 00004a27: PUSH2 0x4a2f 00004a2a: JUMPI 00004a2b: PUSH1 0x00 00004a2d: DUP1 00004a2e: REVERT 00004a2f: JUMPDEST 00004a30: PUSH2 0x4a38 00004a33: DUP9 00004a34: PUSH2 0x4866 00004a37: JUMP 00004a38: JUMPDEST 00004a39: SWAP7 00004a3a: POP 00004a3b: PUSH1 0x20 00004a3d: DUP9 00004a3e: ADD 00004a3f: CALLDATALOAD 00004a40: SWAP6 00004a41: POP 00004a42: PUSH1 0x40 00004a44: DUP9 00004a45: ADD 00004a46: CALLDATALOAD 00004a47: SWAP5 00004a48: POP 00004a49: PUSH1 0x60 00004a4b: DUP9 00004a4c: ADD 00004a4d: CALLDATALOAD 00004a4e: SWAP4 00004a4f: POP 00004a50: PUSH2 0x4a5b 00004a53: PUSH1 0x80 00004a55: DUP10 00004a56: ADD 00004a57: PUSH2 0x4a03 00004a5a: JUMP 00004a5b: JUMPDEST 00004a5c: SWAP7 00004a5d: SWAP10 00004a5e: SWAP6 00004a5f: SWAP9 00004a60: POP 00004a61: SWAP4 00004a62: SWAP7 00004a63: SWAP3 00004a64: SWAP6 00004a65: SWAP5 00004a66: PUSH1 0xa0 00004a68: DUP5 00004a69: ADD 00004a6a: CALLDATALOAD 00004a6b: SWAP5 00004a6c: POP 00004a6d: PUSH1 0xc0 00004a6f: SWAP1 00004a70: SWAP4 00004a71: ADD 00004a72: CALLDATALOAD 00004a73: SWAP3 00004a74: SWAP2 00004a75: POP 00004a76: POP 00004a77: JUMP 00004a78: JUMPDEST 00004a79: PUSH1 0x00 00004a7b: DUP1 00004a7c: PUSH1 0x00 00004a7e: DUP1 00004a7f: PUSH1 0x00 00004a81: DUP1 00004a82: PUSH1 0xc0 00004a84: DUP8 00004a85: DUP10 00004a86: SUB 00004a87: SLT 00004a88: ISZERO 00004a89: PUSH2 0x4a91 00004a8c: JUMPI 00004a8d: PUSH1 0x00 00004a8f: DUP1 00004a90: REVERT 00004a91: JUMPDEST 00004a92: PUSH2 0x4a9a 00004a95: DUP8 00004a96: PUSH2 0x4866 00004a99: JUMP 00004a9a: JUMPDEST 00004a9b: SWAP6 00004a9c: POP 00004a9d: PUSH1 0x20 00004a9f: DUP8 00004aa0: ADD 00004aa1: CALLDATALOAD 00004aa2: SWAP5 00004aa3: POP 00004aa4: PUSH1 0x40 00004aa6: DUP8 00004aa7: ADD 00004aa8: CALLDATALOAD 00004aa9: SWAP4 00004aaa: POP 00004aab: PUSH2 0x4ab6 00004aae: PUSH1 0x60 00004ab0: DUP9 00004ab1: ADD 00004ab2: PUSH2 0x4a03 00004ab5: JUMP 00004ab6: JUMPDEST 00004ab7: SWAP6 00004ab8: SWAP9 00004ab9: SWAP5 00004aba: SWAP8 00004abb: POP 00004abc: SWAP3 00004abd: SWAP6 00004abe: PUSH1 0x80 00004ac0: DUP2 00004ac1: ADD 00004ac2: CALLDATALOAD 00004ac3: SWAP5 00004ac4: PUSH1 0xa0 00004ac6: SWAP1 00004ac7: SWAP2 00004ac8: ADD 00004ac9: CALLDATALOAD 00004aca: SWAP4 00004acb: POP 00004acc: SWAP2 00004acd: POP 00004ace: POP 00004acf: JUMP 00004ad0: JUMPDEST 00004ad1: PUSH1 0x00 00004ad3: DUP1 00004ad4: PUSH1 0x40 00004ad6: DUP4 00004ad7: DUP6 00004ad8: SUB 00004ad9: SLT 00004ada: ISZERO 00004adb: PUSH2 0x4ae3 00004ade: JUMPI 00004adf: PUSH1 0x00 00004ae1: DUP1 00004ae2: REVERT 00004ae3: JUMPDEST 00004ae4: PUSH2 0x4aec 00004ae7: DUP4 00004ae8: PUSH2 0x4866 00004aeb: JUMP 00004aec: JUMPDEST 00004aed: SWAP5 00004aee: PUSH1 0x20 00004af0: SWAP4 00004af1: SWAP1 00004af2: SWAP4 00004af3: ADD 00004af4: CALLDATALOAD 00004af5: SWAP4 00004af6: POP 00004af7: POP 00004af8: POP 00004af9: JUMP 00004afa: JUMPDEST 00004afb: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00004b1c: PUSH1 0x00 00004b1e: MSTORE 00004b1f: PUSH1 0x41 00004b21: PUSH1 0x04 00004b23: MSTORE 00004b24: PUSH1 0x24 00004b26: PUSH1 0x00 00004b28: REVERT 00004b29: JUMPDEST 00004b2a: PUSH1 0x00 00004b2c: DUP1 00004b2d: PUSH1 0x40 00004b2f: DUP4 00004b30: DUP6 00004b31: SUB 00004b32: SLT 00004b33: ISZERO 00004b34: PUSH2 0x4b3c 00004b37: JUMPI 00004b38: PUSH1 0x00 00004b3a: DUP1 00004b3b: REVERT 00004b3c: JUMPDEST 00004b3d: PUSH2 0x4b45 00004b40: DUP4 00004b41: PUSH2 0x4866 00004b44: JUMP 00004b45: JUMPDEST 00004b46: SWAP2 00004b47: POP 00004b48: PUSH1 0x20 00004b4a: DUP4 00004b4b: ADD 00004b4c: CALLDATALOAD 00004b4d: PUSH8 0xffffffffffffffff 00004b56: DUP2 00004b57: GT 00004b58: ISZERO 00004b59: PUSH2 0x4b61 00004b5c: JUMPI 00004b5d: PUSH1 0x00 00004b5f: DUP1 00004b60: REVERT 00004b61: JUMPDEST 00004b62: DUP4 00004b63: ADD 00004b64: PUSH1 0x1f 00004b66: DUP2 00004b67: ADD 00004b68: DUP6 00004b69: SGT 00004b6a: PUSH2 0x4b72 00004b6d: JUMPI 00004b6e: PUSH1 0x00 00004b70: DUP1 00004b71: REVERT 00004b72: JUMPDEST 00004b73: DUP1 00004b74: CALLDATALOAD 00004b75: PUSH8 0xffffffffffffffff 00004b7e: DUP2 00004b7f: GT 00004b80: ISZERO 00004b81: PUSH2 0x4b8c 00004b84: JUMPI 00004b85: PUSH2 0x4b8c 00004b88: PUSH2 0x4afa 00004b8b: JUMP 00004b8c: JUMPDEST 00004b8d: PUSH1 0x40 00004b8f: MLOAD 00004b90: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00004bb1: PUSH1 0x3f 00004bb3: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00004bd4: PUSH1 0x1f 00004bd6: DUP6 00004bd7: ADD 00004bd8: AND 00004bd9: ADD 00004bda: AND 00004bdb: DUP2 00004bdc: ADD 00004bdd: DUP2 00004bde: DUP2 00004bdf: LT 00004be0: PUSH8 0xffffffffffffffff 00004be9: DUP3 00004bea: GT 00004beb: OR 00004bec: ISZERO 00004bed: PUSH2 0x4bf8 00004bf0: JUMPI 00004bf1: PUSH2 0x4bf8 00004bf4: PUSH2 0x4afa 00004bf7: JUMP 00004bf8: JUMPDEST 00004bf9: PUSH1 0x40 00004bfb: MSTORE 00004bfc: DUP2 00004bfd: DUP2 00004bfe: MSTORE 00004bff: DUP3 00004c00: DUP3 00004c01: ADD 00004c02: PUSH1 0x20 00004c04: ADD 00004c05: DUP8 00004c06: LT 00004c07: ISZERO 00004c08: PUSH2 0x4c10 00004c0b: JUMPI 00004c0c: PUSH1 0x00 00004c0e: DUP1 00004c0f: REVERT 00004c10: JUMPDEST 00004c11: DUP2 00004c12: PUSH1 0x20 00004c14: DUP5 00004c15: ADD 00004c16: PUSH1 0x20 00004c18: DUP4 00004c19: ADD 00004c1a: CALLDATACOPY 00004c1b: PUSH1 0x00 00004c1d: PUSH1 0x20 00004c1f: DUP4 00004c20: DUP4 00004c21: ADD 00004c22: ADD 00004c23: MSTORE 00004c24: DUP1 00004c25: SWAP4 00004c26: POP 00004c27: POP 00004c28: POP 00004c29: POP 00004c2a: SWAP3 00004c2b: POP 00004c2c: SWAP3 00004c2d: SWAP1 00004c2e: POP 00004c2f: JUMP 00004c30: JUMPDEST 00004c31: PUSH1 0x00 00004c33: PUSH1 0x20 00004c35: DUP3 00004c36: DUP5 00004c37: SUB 00004c38: SLT 00004c39: ISZERO 00004c3a: PUSH2 0x4c42 00004c3d: JUMPI 00004c3e: PUSH1 0x00 00004c40: DUP1 00004c41: REVERT 00004c42: JUMPDEST 00004c43: PUSH2 0x1bf6 00004c46: DUP3 00004c47: PUSH2 0x4866 00004c4a: JUMP 00004c4b: JUMPDEST 00004c4c: PUSH1 0x00 00004c4e: DUP1 00004c4f: DUP4 00004c50: PUSH1 0x1f 00004c52: DUP5 00004c53: ADD 00004c54: SLT 00004c55: PUSH2 0x4c5d 00004c58: JUMPI 00004c59: PUSH1 0x00 00004c5b: DUP1 00004c5c: REVERT 00004c5d: JUMPDEST 00004c5e: POP 00004c5f: DUP2 00004c60: CALLDATALOAD 00004c61: PUSH8 0xffffffffffffffff 00004c6a: DUP2 00004c6b: GT 00004c6c: ISZERO 00004c6d: PUSH2 0x4c75 00004c70: JUMPI 00004c71: PUSH1 0x00 00004c73: DUP1 00004c74: REVERT 00004c75: JUMPDEST 00004c76: PUSH1 0x20 00004c78: DUP4 00004c79: ADD 00004c7a: SWAP2 00004c7b: POP 00004c7c: DUP4 00004c7d: PUSH1 0x20 00004c7f: DUP3 00004c80: PUSH1 0x05 00004c82: SHL 00004c83: DUP6 00004c84: ADD 00004c85: ADD 00004c86: GT 00004c87: ISZERO 00004c88: PUSH2 0x47f7 00004c8b: JUMPI 00004c8c: PUSH1 0x00 00004c8e: DUP1 00004c8f: REVERT 00004c90: JUMPDEST 00004c91: PUSH1 0x00 00004c93: DUP1 00004c94: PUSH1 0x00 00004c96: PUSH1 0x40 00004c98: DUP5 00004c99: DUP7 00004c9a: SUB 00004c9b: SLT 00004c9c: ISZERO 00004c9d: PUSH2 0x4ca5 00004ca0: JUMPI 00004ca1: PUSH1 0x00 00004ca3: DUP1 00004ca4: REVERT 00004ca5: JUMPDEST 00004ca6: DUP4 00004ca7: CALLDATALOAD 00004ca8: SWAP3 00004ca9: POP 00004caa: PUSH1 0x20 00004cac: DUP5 00004cad: ADD 00004cae: CALLDATALOAD 00004caf: PUSH8 0xffffffffffffffff 00004cb8: DUP2 00004cb9: GT 00004cba: ISZERO 00004cbb: PUSH2 0x4cc3 00004cbe: JUMPI 00004cbf: PUSH1 0x00 00004cc1: DUP1 00004cc2: REVERT 00004cc3: JUMPDEST 00004cc4: PUSH2 0x4ccf 00004cc7: DUP7 00004cc8: DUP3 00004cc9: DUP8 00004cca: ADD 00004ccb: PUSH2 0x4c4b 00004cce: JUMP 00004ccf: JUMPDEST 00004cd0: SWAP5 00004cd1: SWAP8 00004cd2: SWAP1 00004cd3: SWAP7 00004cd4: POP 00004cd5: SWAP4 00004cd6: SWAP5 00004cd7: POP 00004cd8: POP 00004cd9: POP 00004cda: POP 00004cdb: JUMP 00004cdc: JUMPDEST 00004cdd: PUSH1 0x00 00004cdf: DUP1 00004ce0: PUSH1 0x20 00004ce2: DUP4 00004ce3: DUP6 00004ce4: SUB 00004ce5: SLT 00004ce6: ISZERO 00004ce7: PUSH2 0x4cef 00004cea: JUMPI 00004ceb: PUSH1 0x00 00004ced: DUP1 00004cee: REVERT 00004cef: JUMPDEST 00004cf0: DUP3 00004cf1: CALLDATALOAD 00004cf2: PUSH8 0xffffffffffffffff 00004cfb: DUP2 00004cfc: GT 00004cfd: ISZERO 00004cfe: PUSH2 0x4d06 00004d01: JUMPI 00004d02: PUSH1 0x00 00004d04: DUP1 00004d05: REVERT 00004d06: JUMPDEST 00004d07: PUSH2 0x4d12 00004d0a: DUP6 00004d0b: DUP3 00004d0c: DUP7 00004d0d: ADD 00004d0e: PUSH2 0x47b5 00004d11: JUMP 00004d12: JUMPDEST 00004d13: SWAP1 00004d14: SWAP7 00004d15: SWAP1 00004d16: SWAP6 00004d17: POP 00004d18: SWAP4 00004d19: POP 00004d1a: POP 00004d1b: POP 00004d1c: POP 00004d1d: JUMP 00004d1e: JUMPDEST 00004d1f: PUSH1 0x00 00004d21: JUMPDEST 00004d22: DUP4 00004d23: DUP2 00004d24: LT 00004d25: ISZERO 00004d26: PUSH2 0x4d39 00004d29: JUMPI 00004d2a: DUP2 00004d2b: DUP2 00004d2c: ADD 00004d2d: MLOAD 00004d2e: DUP4 00004d2f: DUP3 00004d30: ADD 00004d31: MSTORE 00004d32: PUSH1 0x20 00004d34: ADD 00004d35: PUSH2 0x4d21 00004d38: JUMP 00004d39: JUMPDEST 00004d3a: POP 00004d3b: POP 00004d3c: PUSH1 0x00 00004d3e: SWAP2 00004d3f: ADD 00004d40: MSTORE 00004d41: JUMP 00004d42: JUMPDEST 00004d43: PUSH1 0x20 00004d45: DUP2 00004d46: MSTORE 00004d47: PUSH1 0x00 00004d49: DUP3 00004d4a: MLOAD 00004d4b: DUP1 00004d4c: PUSH1 0x20 00004d4e: DUP5 00004d4f: ADD 00004d50: MSTORE 00004d51: PUSH2 0x4d61 00004d54: DUP2 00004d55: PUSH1 0x40 00004d57: DUP6 00004d58: ADD 00004d59: PUSH1 0x20 00004d5b: DUP8 00004d5c: ADD 00004d5d: PUSH2 0x4d1e 00004d60: JUMP 00004d61: JUMPDEST 00004d62: PUSH1 0x1f 00004d64: ADD 00004d65: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00004d86: AND 00004d87: SWAP2 00004d88: SWAP1 00004d89: SWAP2 00004d8a: ADD 00004d8b: PUSH1 0x40 00004d8d: ADD 00004d8e: SWAP3 00004d8f: SWAP2 00004d90: POP 00004d91: POP 00004d92: JUMP 00004d93: JUMPDEST 00004d94: PUSH1 0x00 00004d96: DUP1 00004d97: PUSH1 0x00 00004d99: DUP1 00004d9a: PUSH1 0x00 00004d9c: DUP1 00004d9d: PUSH1 0x00 00004d9f: PUSH1 0xa0 00004da1: DUP9 00004da2: DUP11 00004da3: SUB 00004da4: SLT 00004da5: ISZERO 00004da6: PUSH2 0x4dae 00004da9: JUMPI 00004daa: PUSH1 0x00 00004dac: DUP1 00004dad: REVERT 00004dae: JUMPDEST 00004daf: DUP8 00004db0: CALLDATALOAD 00004db1: PUSH8 0xffffffffffffffff 00004dba: DUP2 00004dbb: GT 00004dbc: ISZERO 00004dbd: PUSH2 0x4dc5 00004dc0: JUMPI 00004dc1: PUSH1 0x00 00004dc3: DUP1 00004dc4: REVERT 00004dc5: JUMPDEST 00004dc6: PUSH2 0x4dd1 00004dc9: DUP11 00004dca: DUP3 00004dcb: DUP12 00004dcc: ADD 00004dcd: PUSH2 0x47b5 00004dd0: JUMP 00004dd1: JUMPDEST 00004dd2: SWAP1 00004dd3: SWAP9 00004dd4: POP 00004dd5: SWAP7 00004dd6: POP 00004dd7: POP 00004dd8: PUSH1 0x20 00004dda: DUP9 00004ddb: ADD 00004ddc: CALLDATALOAD 00004ddd: SWAP5 00004dde: POP 00004ddf: PUSH1 0x40 00004de1: DUP9 00004de2: ADD 00004de3: CALLDATALOAD 00004de4: SWAP4 00004de5: POP 00004de6: PUSH2 0x495b 00004de9: PUSH1 0x60 00004deb: DUP10 00004dec: ADD 00004ded: PUSH2 0x479c 00004df0: JUMP 00004df1: JUMPDEST 00004df2: PUSH1 0x00 00004df4: DUP1 00004df5: PUSH1 0x00 00004df7: DUP1 00004df8: PUSH1 0x00 00004dfa: DUP1 00004dfb: PUSH1 0x00 00004dfd: PUSH1 0xe0 00004dff: DUP9 00004e00: DUP11 00004e01: SUB 00004e02: SLT 00004e03: ISZERO 00004e04: PUSH2 0x4e0c 00004e07: JUMPI 00004e08: PUSH1 0x00 00004e0a: DUP1 00004e0b: REVERT 00004e0c: JUMPDEST 00004e0d: DUP8 00004e0e: CALLDATALOAD 00004e0f: SWAP7 00004e10: POP 00004e11: PUSH1 0x20 00004e13: DUP9 00004e14: ADD 00004e15: CALLDATALOAD 00004e16: SWAP6 00004e17: POP 00004e18: PUSH2 0x4e23 00004e1b: PUSH1 0x40 00004e1d: DUP10 00004e1e: ADD 00004e1f: PUSH2 0x4866 00004e22: JUMP 00004e23: JUMPDEST 00004e24: SWAP5 00004e25: POP 00004e26: PUSH2 0x4e31 00004e29: PUSH1 0x60 00004e2b: DUP10 00004e2c: ADD 00004e2d: PUSH2 0x4a03 00004e30: JUMP 00004e31: JUMPDEST 00004e32: SWAP4 00004e33: POP 00004e34: PUSH1 0x80 00004e36: DUP9 00004e37: ADD 00004e38: CALLDATALOAD 00004e39: SWAP3 00004e3a: POP 00004e3b: PUSH1 0xa0 00004e3d: DUP9 00004e3e: ADD 00004e3f: CALLDATALOAD 00004e40: SWAP2 00004e41: POP 00004e42: PUSH1 0xc0 00004e44: DUP9 00004e45: ADD 00004e46: CALLDATALOAD 00004e47: PUSH2 0x4e4f 00004e4a: DUP2 00004e4b: PUSH2 0x4996 00004e4e: JUMP 00004e4f: JUMPDEST 00004e50: DUP1 00004e51: SWAP2 00004e52: POP 00004e53: POP 00004e54: SWAP3 00004e55: SWAP6 00004e56: SWAP9 00004e57: SWAP2 00004e58: SWAP5 00004e59: SWAP8 00004e5a: POP 00004e5b: SWAP3 00004e5c: SWAP6 00004e5d: POP 00004e5e: JUMP 00004e5f: JUMPDEST 00004e60: PUSH1 0x00 00004e62: DUP1 00004e63: PUSH1 0x00 00004e65: PUSH1 0x60 00004e67: DUP5 00004e68: DUP7 00004e69: SUB 00004e6a: SLT 00004e6b: ISZERO 00004e6c: PUSH2 0x4e74 00004e6f: JUMPI 00004e70: PUSH1 0x00 00004e72: DUP1 00004e73: REVERT 00004e74: JUMPDEST 00004e75: PUSH2 0x4e7d 00004e78: DUP5 00004e79: PUSH2 0x4866 00004e7c: JUMP 00004e7d: JUMPDEST 00004e7e: SWAP6 00004e7f: PUSH1 0x20 00004e81: DUP6 00004e82: ADD 00004e83: CALLDATALOAD 00004e84: SWAP6 00004e85: POP 00004e86: PUSH1 0x40 00004e88: SWAP1 00004e89: SWAP5 00004e8a: ADD 00004e8b: CALLDATALOAD 00004e8c: SWAP4 00004e8d: SWAP3 00004e8e: POP 00004e8f: POP 00004e90: POP 00004e91: JUMP 00004e92: JUMPDEST 00004e93: PUSH1 0x00 00004e95: DUP1 00004e96: PUSH1 0x40 00004e98: DUP4 00004e99: DUP6 00004e9a: SUB 00004e9b: SLT 00004e9c: ISZERO 00004e9d: PUSH2 0x4ea5 00004ea0: JUMPI 00004ea1: PUSH1 0x00 00004ea3: DUP1 00004ea4: REVERT 00004ea5: JUMPDEST 00004ea6: PUSH2 0x4aec 00004ea9: DUP4 00004eaa: PUSH2 0x479c 00004ead: JUMP 00004eae: JUMPDEST 00004eaf: PUSH1 0x00 00004eb1: DUP1 00004eb2: PUSH1 0x00 00004eb4: DUP1 00004eb5: PUSH1 0x00 00004eb7: DUP1 00004eb8: PUSH1 0x00 00004eba: DUP1 00004ebb: PUSH1 0x00 00004ebd: DUP1 00004ebe: PUSH1 0xc0 00004ec0: DUP12 00004ec1: DUP14 00004ec2: SUB 00004ec3: SLT 00004ec4: ISZERO 00004ec5: PUSH2 0x4ecd 00004ec8: JUMPI 00004ec9: PUSH1 0x00 00004ecb: DUP1 00004ecc: REVERT 00004ecd: JUMPDEST 00004ece: PUSH2 0x4ed6 00004ed1: DUP12 00004ed2: PUSH2 0x4866 00004ed5: JUMP 00004ed6: JUMPDEST 00004ed7: SWAP10 00004ed8: POP 00004ed9: PUSH1 0x20 00004edb: DUP12 00004edc: ADD 00004edd: CALLDATALOAD 00004ede: PUSH8 0xffffffffffffffff 00004ee7: DUP2 00004ee8: GT 00004ee9: ISZERO 00004eea: PUSH2 0x4ef2 00004eed: JUMPI 00004eee: PUSH1 0x00 00004ef0: DUP1 00004ef1: REVERT 00004ef2: JUMPDEST 00004ef3: PUSH2 0x4efe 00004ef6: DUP14 00004ef7: DUP3 00004ef8: DUP15 00004ef9: ADD 00004efa: PUSH2 0x4c4b 00004efd: JUMP 00004efe: JUMPDEST 00004eff: SWAP1 00004f00: SWAP11 00004f01: POP 00004f02: SWAP9 00004f03: POP 00004f04: POP 00004f05: PUSH1 0x40 00004f07: DUP12 00004f08: ADD 00004f09: CALLDATALOAD 00004f0a: PUSH8 0xffffffffffffffff 00004f13: DUP2 00004f14: GT 00004f15: ISZERO 00004f16: PUSH2 0x4f1e 00004f19: JUMPI 00004f1a: PUSH1 0x00 00004f1c: DUP1 00004f1d: REVERT 00004f1e: JUMPDEST 00004f1f: PUSH2 0x4f2a 00004f22: DUP14 00004f23: DUP3 00004f24: DUP15 00004f25: ADD 00004f26: PUSH2 0x4c4b 00004f29: JUMP 00004f2a: JUMPDEST 00004f2b: SWAP1 00004f2c: SWAP9 00004f2d: POP 00004f2e: SWAP7 00004f2f: POP 00004f30: POP 00004f31: PUSH1 0x60 00004f33: DUP12 00004f34: ADD 00004f35: CALLDATALOAD 00004f36: PUSH8 0xffffffffffffffff 00004f3f: DUP2 00004f40: GT 00004f41: ISZERO 00004f42: PUSH2 0x4f4a 00004f45: JUMPI 00004f46: PUSH1 0x00 00004f48: DUP1 00004f49: REVERT 00004f4a: JUMPDEST 00004f4b: PUSH2 0x4f56 00004f4e: DUP14 00004f4f: DUP3 00004f50: DUP15 00004f51: ADD 00004f52: PUSH2 0x4c4b 00004f55: JUMP 00004f56: JUMPDEST 00004f57: SWAP1 00004f58: SWAP7 00004f59: POP 00004f5a: SWAP5 00004f5b: POP 00004f5c: POP 00004f5d: PUSH1 0x80 00004f5f: DUP12 00004f60: ADD 00004f61: CALLDATALOAD 00004f62: PUSH8 0xffffffffffffffff 00004f6b: DUP2 00004f6c: GT 00004f6d: ISZERO 00004f6e: PUSH2 0x4f76 00004f71: JUMPI 00004f72: PUSH1 0x00 00004f74: DUP1 00004f75: REVERT 00004f76: JUMPDEST 00004f77: PUSH2 0x4f82 00004f7a: DUP14 00004f7b: DUP3 00004f7c: DUP15 00004f7d: ADD 00004f7e: PUSH2 0x4c4b 00004f81: JUMP 00004f82: JUMPDEST 00004f83: SWAP1 00004f84: SWAP5 00004f85: POP 00004f86: SWAP3 00004f87: POP 00004f88: PUSH2 0x4f95 00004f8b: SWAP1 00004f8c: POP 00004f8d: PUSH1 0xa0 00004f8f: DUP13 00004f90: ADD 00004f91: PUSH2 0x4866 00004f94: JUMP 00004f95: JUMPDEST 00004f96: SWAP1 00004f97: POP 00004f98: SWAP3 00004f99: SWAP6 00004f9a: SWAP9 00004f9b: SWAP12 00004f9c: SWAP2 00004f9d: SWAP5 00004f9e: SWAP8 00004f9f: SWAP11 00004fa0: POP 00004fa1: SWAP3 00004fa2: SWAP6 00004fa3: SWAP9 00004fa4: POP 00004fa5: JUMP 00004fa6: JUMPDEST 00004fa7: PUSH1 0x00 00004fa9: DUP1 00004faa: PUSH1 0x00 00004fac: DUP1 00004fad: PUSH1 0x60 00004faf: DUP6 00004fb0: DUP8 00004fb1: SUB 00004fb2: SLT 00004fb3: ISZERO 00004fb4: PUSH2 0x4fbc 00004fb7: JUMPI 00004fb8: PUSH1 0x00 00004fba: DUP1 00004fbb: REVERT 00004fbc: JUMPDEST 00004fbd: DUP5 00004fbe: CALLDATALOAD 00004fbf: SWAP4 00004fc0: POP 00004fc1: PUSH1 0x20 00004fc3: DUP6 00004fc4: ADD 00004fc5: CALLDATALOAD 00004fc6: SWAP3 00004fc7: POP 00004fc8: PUSH1 0x40 00004fca: DUP6 00004fcb: ADD 00004fcc: CALLDATALOAD 00004fcd: PUSH8 0xffffffffffffffff 00004fd6: DUP2 00004fd7: GT 00004fd8: ISZERO 00004fd9: PUSH2 0x4fe1 00004fdc: JUMPI 00004fdd: PUSH1 0x00 00004fdf: DUP1 00004fe0: REVERT 00004fe1: JUMPDEST 00004fe2: PUSH2 0x4fed 00004fe5: DUP8 00004fe6: DUP3 00004fe7: DUP9 00004fe8: ADD 00004fe9: PUSH2 0x47b5 00004fec: JUMP 00004fed: JUMPDEST 00004fee: SWAP6 00004fef: SWAP9 00004ff0: SWAP5 00004ff1: SWAP8 00004ff2: POP 00004ff3: SWAP6 00004ff4: POP 00004ff5: POP 00004ff6: POP 00004ff7: POP 00004ff8: JUMP 00004ff9: JUMPDEST 00004ffa: PUSH1 0x00 00004ffc: PUSH1 0x20 00004ffe: DUP3 00004fff: DUP5 00005000: SUB 00005001: SLT 00005002: ISZERO 00005003: PUSH2 0x500b 00005006: JUMPI 00005007: PUSH1 0x00 00005009: DUP1 0000500a: REVERT 0000500b: JUMPDEST 0000500c: DUP2 0000500d: MLOAD 0000500e: PUSH2 0x1bf6 00005011: DUP2 00005012: PUSH2 0x4996 00005015: JUMP 00005016: JUMPDEST 00005017: DUP1 00005018: CALLDATALOAD 00005019: PUSH1 0x20 0000501b: DUP4 0000501c: LT 0000501d: ISZERO 0000501e: PUSH2 0x2c0c 00005021: JUMPI 00005022: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00005043: PUSH1 0x20 00005045: DUP5 00005046: SWAP1 00005047: SUB 00005048: PUSH1 0x03 0000504a: SHL 0000504b: SHL 0000504c: AND 0000504d: SWAP3 0000504e: SWAP2 0000504f: POP 00005050: POP 00005051: JUMP 00005052: JUMPDEST 00005053: PUSH1 0x00 00005055: PUSH1 0x20 00005057: DUP3 00005058: DUP5 00005059: SUB 0000505a: SLT 0000505b: ISZERO 0000505c: PUSH2 0x5064 0000505f: JUMPI 00005060: PUSH1 0x00 00005062: DUP1 00005063: REVERT 00005064: JUMPDEST 00005065: POP 00005066: MLOAD 00005067: SWAP2 00005068: SWAP1 00005069: POP 0000506a: JUMP 0000506b: JUMPDEST 0000506c: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000508d: PUSH1 0x00 0000508f: MSTORE 00005090: PUSH1 0x12 00005092: PUSH1 0x04 00005094: MSTORE 00005095: PUSH1 0x24 00005097: PUSH1 0x00 00005099: REVERT 0000509a: JUMPDEST 0000509b: DUP2 0000509c: DUP4 0000509d: MSTORE 0000509e: DUP2 0000509f: DUP2 000050a0: PUSH1 0x20 000050a2: DUP6 000050a3: ADD 000050a4: CALLDATACOPY 000050a5: POP 000050a6: PUSH1 0x00 000050a8: PUSH1 0x20 000050aa: DUP3 000050ab: DUP5 000050ac: ADD 000050ad: ADD 000050ae: MSTORE 000050af: PUSH1 0x00 000050b1: PUSH1 0x20 000050b3: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000050d4: PUSH1 0x1f 000050d6: DUP5 000050d7: ADD 000050d8: AND 000050d9: DUP5 000050da: ADD 000050db: ADD 000050dc: SWAP1 000050dd: POP 000050de: SWAP3 000050df: SWAP2 000050e0: POP 000050e1: POP 000050e2: JUMP 000050e3: JUMPDEST 000050e4: DUP6 000050e5: DUP2 000050e6: MSTORE 000050e7: PUSH1 0x80 000050e9: PUSH1 0x20 000050eb: DUP3 000050ec: ADD 000050ed: MSTORE 000050ee: PUSH1 0x00 000050f0: PUSH2 0x50fd 000050f3: PUSH1 0x80 000050f5: DUP4 000050f6: ADD 000050f7: DUP7 000050f8: DUP9 000050f9: PUSH2 0x509a 000050fc: JUMP 000050fd: JUMPDEST 000050fe: SWAP1 000050ff: POP 00005100: DUP4 00005101: PUSH1 0x40 00005103: DUP4 00005104: ADD 00005105: MSTORE 00005106: PUSH4 0xffffffff 0000510b: DUP4 0000510c: AND 0000510d: PUSH1 0x60 0000510f: DUP4 00005110: ADD 00005111: MSTORE 00005112: SWAP7 00005113: SWAP6 00005114: POP 00005115: POP 00005116: POP 00005117: POP 00005118: POP 00005119: POP 0000511a: JUMP 0000511b: JUMPDEST 0000511c: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000513d: PUSH1 0x00 0000513f: MSTORE 00005140: PUSH1 0x11 00005142: PUSH1 0x04 00005144: MSTORE 00005145: PUSH1 0x24 00005147: PUSH1 0x00 00005149: REVERT 0000514a: JUMPDEST 0000514b: DUP1 0000514c: DUP3 0000514d: MUL 0000514e: DUP2 0000514f: ISZERO 00005150: DUP3 00005151: DUP3 00005152: DIV 00005153: DUP5 00005154: EQ 00005155: OR 00005156: PUSH2 0x2c0c 00005159: JUMPI 0000515a: PUSH2 0x2c0c 0000515d: PUSH2 0x511b 00005160: JUMP 00005161: JUMPDEST 00005162: PUSH1 0x00 00005164: DUP3 00005165: PUSH2 0x5197 00005168: JUMPI 00005169: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000518a: PUSH1 0x00 0000518c: MSTORE 0000518d: PUSH1 0x12 0000518f: PUSH1 0x04 00005191: MSTORE 00005192: PUSH1 0x24 00005194: PUSH1 0x00 00005196: REVERT 00005197: JUMPDEST 00005198: POP 00005199: DIV 0000519a: SWAP1 0000519b: JUMP 0000519c: JUMPDEST 0000519d: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000051be: PUSH1 0x00 000051c0: MSTORE 000051c1: PUSH1 0x32 000051c3: PUSH1 0x04 000051c5: MSTORE 000051c6: PUSH1 0x24 000051c8: PUSH1 0x00 000051ca: REVERT 000051cb: JUMPDEST 000051cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000051e1: DUP2 000051e2: DUP2 000051e3: AND 000051e4: DUP4 000051e5: DUP3 000051e6: AND 000051e7: ADD 000051e8: SWAP1 000051e9: DUP2 000051ea: GT 000051eb: ISZERO 000051ec: PUSH2 0x2c0c 000051ef: JUMPI 000051f0: PUSH2 0x2c0c 000051f3: PUSH2 0x511b 000051f6: JUMP 000051f7: JUMPDEST 000051f8: PUSH1 0x00 000051fa: DUP1 000051fb: PUSH1 0x40 000051fd: DUP4 000051fe: DUP6 000051ff: SUB 00005200: SLT 00005201: ISZERO 00005202: PUSH2 0x520a 00005205: JUMPI 00005206: PUSH1 0x00 00005208: DUP1 00005209: REVERT 0000520a: JUMPDEST 0000520b: POP 0000520c: POP 0000520d: DUP1 0000520e: MLOAD 0000520f: PUSH1 0x20 00005211: SWAP1 00005212: SWAP2 00005213: ADD 00005214: MLOAD 00005215: SWAP1 00005216: SWAP3 00005217: SWAP1 00005218: SWAP2 00005219: POP 0000521a: JUMP 0000521b: JUMPDEST 0000521c: PUSH1 0x80 0000521e: DUP2 0000521f: MSTORE 00005220: PUSH1 0x00 00005222: PUSH2 0x522f 00005225: PUSH1 0x80 00005227: DUP4 00005228: ADD 00005229: DUP8 0000522a: DUP10 0000522b: PUSH2 0x509a 0000522e: JUMP 0000522f: JUMPDEST 00005230: PUSH1 0x20 00005232: DUP4 00005233: ADD 00005234: SWAP6 00005235: SWAP1 00005236: SWAP6 00005237: MSTORE 00005238: POP 00005239: PUSH1 0x40 0000523b: DUP2 0000523c: ADD 0000523d: SWAP3 0000523e: SWAP1 0000523f: SWAP3 00005240: MSTORE 00005241: PUSH4 0xffffffff 00005246: AND 00005247: PUSH1 0x60 00005249: SWAP1 0000524a: SWAP2 0000524b: ADD 0000524c: MSTORE 0000524d: SWAP3 0000524e: SWAP2 0000524f: POP 00005250: POP 00005251: JUMP 00005252: JUMPDEST 00005253: DUP1 00005254: DUP3 00005255: ADD 00005256: DUP1 00005257: DUP3 00005258: GT 00005259: ISZERO 0000525a: PUSH2 0x2c0c 0000525d: JUMPI 0000525e: PUSH2 0x2c0c 00005261: PUSH2 0x511b 00005264: JUMP 00005265: JUMPDEST 00005266: PUSH1 0x00 00005268: DUP1 00005269: DUP6 0000526a: DUP6 0000526b: GT 0000526c: ISZERO 0000526d: PUSH2 0x5275 00005270: JUMPI 00005271: PUSH1 0x00 00005273: DUP1 00005274: REVERT 00005275: JUMPDEST 00005276: DUP4 00005277: DUP7 00005278: GT 00005279: ISZERO 0000527a: PUSH2 0x5282 0000527d: JUMPI 0000527e: PUSH1 0x00 00005280: DUP1 00005281: REVERT 00005282: JUMPDEST 00005283: POP 00005284: POP 00005285: DUP3 00005286: ADD 00005287: SWAP4 00005288: SWAP2 00005289: SWAP1 0000528a: SWAP3 0000528b: SUB 0000528c: SWAP2 0000528d: POP 0000528e: JUMP 0000528f: JUMPDEST 00005290: DUP1 00005291: CALLDATALOAD 00005292: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000052b3: DUP2 000052b4: AND 000052b5: SWAP1 000052b6: PUSH1 0x14 000052b8: DUP5 000052b9: LT 000052ba: ISZERO 000052bb: PUSH2 0x52ee 000052be: JUMPI 000052bf: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000052e0: DUP1 000052e1: DUP6 000052e2: PUSH1 0x14 000052e4: SUB 000052e5: PUSH1 0x03 000052e7: SHL 000052e8: SHL 000052e9: DUP3 000052ea: AND 000052eb: AND 000052ec: SWAP2 000052ed: POP 000052ee: JUMPDEST 000052ef: POP 000052f0: SWAP3 000052f1: SWAP2 000052f2: POP 000052f3: POP 000052f4: JUMP 000052f5: JUMPDEST 000052f6: DUP1 000052f7: CALLDATALOAD 000052f8: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00005319: DUP2 0000531a: AND 0000531b: SWAP1 0000531c: PUSH1 0x04 0000531e: DUP5 0000531f: LT 00005320: ISZERO 00005321: PUSH2 0x52ee 00005324: JUMPI 00005325: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00005346: DUP1 00005347: DUP6 00005348: PUSH1 0x04 0000534a: SUB 0000534b: PUSH1 0x03 0000534d: SHL 0000534e: SHL 0000534f: DUP3 00005350: AND 00005351: AND 00005352: SWAP2 00005353: POP 00005354: POP 00005355: SWAP3 00005356: SWAP2 00005357: POP 00005358: POP 00005359: JUMP 0000535a: JUMPDEST 0000535b: DUP2 0000535c: DUP2 0000535d: SUB 0000535e: DUP2 0000535f: DUP2 00005360: GT 00005361: ISZERO 00005362: PUSH2 0x2c0c 00005365: JUMPI 00005366: PUSH2 0x2c0c 00005369: PUSH2 0x511b 0000536c: JUMP 0000536d: JUMPDEST 0000536e: PUSH1 0x00 00005370: DUP4 00005371: MLOAD 00005372: PUSH2 0x537f 00005375: DUP2 00005376: DUP5 00005377: PUSH1 0x20 00005379: DUP9 0000537a: ADD 0000537b: PUSH2 0x4d1e 0000537e: JUMP 0000537f: JUMPDEST 00005380: SWAP2 00005381: SWAP1 00005382: SWAP2 00005383: ADD 00005384: SWAP2 00005385: DUP3 00005386: MSTORE 00005387: POP 00005388: PUSH1 0x20 0000538a: ADD 0000538b: SWAP2 0000538c: SWAP1 0000538d: POP 0000538e: JUMP 0000538f: JUMPDEST 00005390: PUSH1 0x00 00005392: DUP2 00005393: PUSH2 0x539e 00005396: JUMPI 00005397: PUSH2 0x539e 0000539a: PUSH2 0x511b 0000539d: JUMP 0000539e: JUMPDEST 0000539f: POP 000053a0: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000053c1: ADD 000053c2: SWAP1 000053c3: JUMP 000053c4: JUMPDEST 000053c5: DUP2 000053c6: DUP2 000053c7: SUB 000053c8: PUSH1 0x00 000053ca: DUP4 000053cb: SLT 000053cc: DUP1 000053cd: ISZERO 000053ce: DUP4 000053cf: DUP4 000053d0: SGT 000053d1: AND 000053d2: DUP4 000053d3: DUP4 000053d4: SLT 000053d5: DUP3 000053d6: AND 000053d7: OR 000053d8: ISZERO 000053d9: PUSH2 0x52ee 000053dc: JUMPI 000053dd: PUSH2 0x52ee 000053e0: PUSH2 0x511b 000053e3: JUMP 000053e4: JUMPDEST 000053e5: PUSH1 0x00 000053e7: DUP3 000053e8: MLOAD 000053e9: PUSH2 0x53f6 000053ec: DUP2 000053ed: DUP5 000053ee: PUSH1 0x20 000053f0: DUP8 000053f1: ADD 000053f2: PUSH2 0x4d1e 000053f5: JUMP 000053f6: JUMPDEST 000053f7: SWAP2 000053f8: SWAP1 000053f9: SWAP2 000053fa: ADD 000053fb: SWAP3 000053fc: SWAP2 000053fd: POP 000053fe: POP 000053ff: JUMP 00005400: INVALID 00005401: LOG2 00005402: PUSH5 0x6970667358 00005408: UNKNOWN(0x22) 00005409: SLT 0000540a: KECCAK256 0000540b: SWAP1 0000540c: MCOPY 0000540d: PUSH26 0xfd00de0341025ed86414e8afefc46838b67018ea71b7934edff1 00005428: DUP14 00005429: DELEGATECALL 0000542a: UNKNOWN(0x0E) 0000542b: PUSH5 0x736f6c6343 00005431: STOP 00005432: ADDMOD 00005433: CLZ 00005434: STOP 00005435: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | slither | TruthBridge.uniswapV3SwapCallback(int256,int256,bytes) (contracts/TruthBridge.sol#341-349) ignores return value by IERC20(usdc).transfer(msg.sender,uint256(amount0Delta)) (contr... | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "uniswapV3SwapCallback",
"type": "function",
"source_mapping": {
"lines": [
341,
342,
343,
344,
345,
346,
347,
348,
349
],
"start": 13005,
"length": 234,
"ending_column": 68,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "uniswapV3SwapCallback(int256,int256,bytes)"
}
},
{
"name": "IERC20(usdc).transfer(msg.sender,uint256(amount0Delta))",
"type": "node",
"source_mapping": {
"lines": [
349
],
"start": 13178,
"length": 56,
"ending_column": 63,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 7,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "uniswapV3SwapCallback",
"type": "function",
"source_mapping": {
"lines": [
341,
342,
343,
344,
345,
346,
347,
348,
349
],
"start": 13005,
"length": 234,
"ending_column": 68,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "uniswapV3SwapCallback(int256,int256,bytes)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "uniswapV3SwapCallback",
"type": "function",
"lines": [
341,
342,
343,
344,
345,
346,
347,
348,
349
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transfer(msg.sender,uint256(amount0Delta))",
"type": "node",
"lines": [
349
]
}
],
"description": "TruthBridge.uniswapV3SwapCallback(int256,int256,bytes) (contracts/TruthBridge.sol#341-349) ignores return value by IERC20(usdc).transfer(msg.sender,uint256(amount0Delta)) (contracts/TruthBridge.sol#349)"
}
|
| high | reentrancy | codex | Relayer refund can be reentered to withdraw multiple times | 85 | no | — |
viewevidence_json{
"evidence": "_attemptRelayerRefund calls this.__refundRelayer(...) and only then sets relayerBalance to 1 on success; __refundRelayer sends ETH to relayer via call, enabling reentrancy before state update.",
"locations": [
"contracts/TruthBridge.sol:relayerLift",
"contracts/TruthBridge.sol:relayerLower",
"contracts/TruthBridge.sol:_attemptRelayerRefund",
"contracts/TruthBridge.sol:__refundRelayer"
],
"recommendation": "Apply checks-effects-interactions: update relayerBalance before any external calls. Add nonReentrant to relayerLift/relayerLower and/or to the refund path, or move refunds to a pull-based withdrawal function.",
"exploit_scenario": "A registered relayer calls relayerLower or relayerLift with triggerRefund=true. During __refundRelayer, the contract sends ETH to the relayer via a low-level call; the relayer reenters relayerLower/relayerLift before relayerBalance is reset, triggering another refund using the same outstanding balance. This can be repeated to drain USDC from the contract via repeated swaps."
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x2176215d28c43f17e8f899aaf8061df27b295cd8cfc1eb829d748985133cc89c
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x2176215d28c43f17e8f899aaf8061df27b295cd8cfc1eb829d748985133cc89c",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xea4bc53e",
"selector": "0xea4bc53e",
"calldata_variants": [
"0xea4bc53e",
"0xea4bc53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6f4b533",
"selector": "0xe6f4b533",
"calldata_variants": [
"0xe6f4b533",
"0xe6f4b5330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8b744f4",
"selector": "0xe8b744f4",
"calldata_variants": [
"0xe8b744f4",
"0xe8b744f40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8fed1d6",
"selector": "0xe8fed1d6",
"calldata_variants": [
"0xe8fed1d6",
"0xe8fed1d60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe37347e6",
"selector": "0xe37347e6",
"calldata_variants": [
"0xe37347e6",
"0xe37347e60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe51d0921",
"selector": "0xe51d0921",
"calldata_variants": [
"0xe51d0921",
"0xe51d09210000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 17959,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 21545,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 12059,
"type": "msg_sender_eq_const",
"value": 7.815659205030845e+47
},
{
"pc": 12037,
"type": "msg_sender_eq_const",
"value": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
}
],
"delegatecall_count": 2,
"untrusted_delegatecall_count": 2
}
|
| high | other | slither | TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) uses arbitrary from in transferFrom in combination with permit: I... | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "arbitrary-send-erc20-permit",
"elements": [
{
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
},
{
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"source_mapping": {
"lines": [
296,
297,
298
],
"start": 11487,
"length": 54,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 149,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLift",
"type": "function",
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"lines": [
296,
297,
298
]
}
],
"description": "TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) uses arbitrary from in transferFrom in combination with permit: IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)"
}
|
| high | other | slither | TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329) ignores return value by IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324) | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
},
{
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"source_mapping": {
"lines": [
323,
324
],
"start": 12496,
"length": 35,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 68,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLower",
"type": "function",
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"lines": [
323,
324
]
}
],
"description": "TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329) ignores return value by IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)"
}
|
| high | other | slither | TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) ignores return value by IERC20(usdc).transferFrom(user,address(th... | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
},
{
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"source_mapping": {
"lines": [
296,
297,
298
],
"start": 11487,
"length": 54,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 149,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLift",
"type": "function",
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"lines": [
296,
297,
298
]
}
],
"description": "TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304) ignores return value by IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)"
}
|
| high | other | slither | TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285) ignores return value by IERC20(usdc).transfer(relayer,uint256(balance - 1)) (contracts/TruthBridge.sol... | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "deregisterRelayer",
"type": "function",
"source_mapping": {
"lines": [
276,
277,
278,
279,
280,
281,
282,
283,
284,
285
],
"start": 10560,
"length": 346,
"ending_column": 65,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 34,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "deregisterRelayer(address)"
}
},
{
"name": "IERC20(usdc).transfer(relayer,uint256(balance - 1))",
"type": "node",
"source_mapping": {
"lines": [
279,
280,
281,
282,
283
],
"start": 10776,
"length": 52,
"ending_column": 37,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 51,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "deregisterRelayer",
"type": "function",
"source_mapping": {
"lines": [
276,
277,
278,
279,
280,
281,
282,
283,
284,
285
],
"start": 10560,
"length": 346,
"ending_column": 65,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 34,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "deregisterRelayer(address)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "deregisterRelayer",
"type": "function",
"lines": [
276,
277,
278,
279,
280,
281,
282,
283,
284,
285
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transfer(relayer,uint256(balance - 1))",
"type": "node",
"lines": [
279,
280,
281,
282,
283
]
}
],
"description": "TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285) ignores return value by IERC20(usdc).transfer(relayer,uint256(balance - 1)) (contracts/TruthBridge.sol#279-283)"
}
|
| medium | reentrancy | slither | Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
},
{
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"source_mapping": {
"lines": [
323,
324
],
"start": 12496,
"length": 35,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 68,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
},
{
"name": "relayerBalance[msg.sender] = balance",
"type": "node",
"source_mapping": {
"lines": [
326,
327
],
"start": 12598,
"length": 36,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 26,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"variable_name": "relayerBalance",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLower",
"type": "function",
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"lines": [
323,
324
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "relayerBalance[msg.sender] = balance",
"type": "node",
"lines": [
326,
327
]
}
],
"description": "Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329):\n\tExternal calls:\n\t- IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)\n\tState variables written after the call(s):\n\t- relayerBalance[msg.sender] = balance (contracts/TruthBridge.sol#326-327)\n\tTruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:\n\t- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)\n\t- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)\n\t- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)\n\t- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)\n\t- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)\n\t- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)"
}
|
| medium | auth | codex | Author confirmations and lower proofs lack domain separation (replayable signatures) | 75 | no | — |
viewevidence_json{
"evidence": "msgHash is keccak256(abi.encode(...)) of payload only, then prefixed with ESM_PREFIX; no domain fields are included before _verifyConfirmations.",
"locations": [
"contracts/TruthBridge.sol:addAuthor",
"contracts/TruthBridge.sol:removeAuthor",
"contracts/TruthBridge.sol:publishRoot",
"contracts/TruthBridge.sol:_processLower",
"contracts/TruthBridge.sol:_verifyConfirmations"
],
"recommendation": "Use EIP-712 typed data with a domain separator including chainId and verifying contract, or include contract address + chainId + nonce in the signed payloads.",
"exploit_scenario": "Signatures used for addAuthor/removeAuthor/publishRoot and lower proofs are over raw payloads without chainId or contract address. If the same author keys are used on another deployment or chain, signatures can be replayed to add/remove authors or claim lowers on this contract as long as t2TxId/lowerId are unused."
}
|
| medium | reentrancy | slither | Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
},
{
"name": "IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s)",
"type": "node",
"source_mapping": {
"lines": [
296
],
"start": 11399,
"length": 82,
"ending_column": 143,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 61,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
},
{
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"source_mapping": {
"lines": [
296,
297,
298
],
"start": 11487,
"length": 54,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 149,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
},
{
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"source_mapping": {
"lines": [
301
],
"start": 11647,
"length": 30,
"ending_column": 32,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
},
{
"name": "this.__refundRelayer(msg.sender,balance - 1)",
"type": "node",
"source_mapping": {
"lines": [
468,
469,
470,
471,
472,
473,
474,
475,
476
],
"start": 17262,
"length": 195,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_attemptRelayerRefund",
"type": "function",
"source_mapping": {
"lines": [
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476
],
"start": 17201,
"length": 260,
"ending_column": 20,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 46,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "_attemptRelayerRefund(int256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLift",
"type": "function",
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s)",
"type": "node",
"lines": [
296
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"lines": [
296,
297,
298
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"lines": [
301
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "this.__refundRelayer(msg.sender,balance - 1)",
"type": "node",
"lines": [
468,
469,
470,
471,
472,
473,
474,
475,
476
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"lines": [
301
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "relayerBalance[msg.sender] = 1",
"type": "node",
"lines": [
472
]
}
],
"description": "Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304):\n\tExternal calls:\n\t- IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s) (contracts/TruthBridge.sol#296)\n\t- IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)\n\t- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)\n\t\t- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)\n\tState variables written after the call(s):\n\t- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#301)\n\t\t- relayerBalance[msg.sender] = 1 (contracts/TruthBridge.sol#472)\n\tTruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:\n\t- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)\n\t- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)\n\t- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)\n\t- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)\n\t- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)\n\t- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)"
}
|
| medium | reentrancy | slither | Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
},
{
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"source_mapping": {
"lines": [
323,
324
],
"start": 12496,
"length": 35,
"ending_column": 8,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 68,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
},
{
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"source_mapping": {
"lines": [
324,
325,
326
],
"start": 12557,
"length": 30,
"ending_column": 15,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 34,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
},
{
"name": "this.__refundRelayer(msg.sender,balance - 1)",
"type": "node",
"source_mapping": {
"lines": [
468,
469,
470,
471,
472,
473,
474,
475,
476
],
"start": 17262,
"length": 195,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_attemptRelayerRefund",
"type": "function",
"source_mapping": {
"lines": [
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476
],
"start": 17201,
"length": 260,
"ending_column": 20,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 46,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "_attemptRelayerRefund(int256)"
}
}
}
},
{
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"source_mapping": {
"lines": [
324,
325,
326
],
"start": 12557,
"length": 30,
"ending_column": 15,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 34,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"variable_name": "relayerBalance",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "relayerLower",
"type": "function",
"source_mapping": {
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
],
"start": 11923,
"length": 762,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 33,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLower(uint256,bytes,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLower",
"type": "function",
"lines": [
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transfer(user,amount)",
"type": "node",
"lines": [
323,
324
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"lines": [
324,
325,
326
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "this.__refundRelayer(msg.sender,balance - 1)",
"type": "node",
"lines": [
468,
469,
470,
471,
472,
473,
474,
475,
476
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "_attemptRelayerRefund(balance)",
"type": "node",
"lines": [
324,
325,
326
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "relayerBalance[msg.sender] = 1",
"type": "node",
"lines": [
472
]
}
],
"description": "Reentrancy in TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329):\n\tExternal calls:\n\t- IERC20(usdc).transfer(user,amount) (contracts/TruthBridge.sol#323-324)\n\t- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)\n\t\t- this.__refundRelayer(msg.sender,balance - 1) (contracts/TruthBridge.sol#468-476)\n\tState variables written after the call(s):\n\t- _attemptRelayerRefund(balance) (contracts/TruthBridge.sol#324-326)\n\t\t- relayerBalance[msg.sender] = 1 (contracts/TruthBridge.sol#472)\n\tTruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:\n\t- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)\n\t- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)\n\t- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)\n\t- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)\n\t- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)\n\t- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)"
}
|
| medium | reentrancy | slither | Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
},
{
"name": "IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s)",
"type": "node",
"source_mapping": {
"lines": [
296
],
"start": 11399,
"length": 82,
"ending_column": 143,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 61,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
},
{
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"source_mapping": {
"lines": [
296,
297,
298
],
"start": 11487,
"length": 54,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 149,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
},
{
"name": "relayerBalance[msg.sender] = balance",
"type": "node",
"source_mapping": {
"lines": [
301,
302,
303
],
"start": 11688,
"length": 36,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"additional_fields": {
"variable_name": "relayerBalance",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "relayerLift",
"type": "function",
"source_mapping": {
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
],
"start": 11046,
"length": 761,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
},
"type_specific_fields": {
"parent": {
"name": "TruthBridge",
"type": "contract",
"source_mapping": {
"lines": [
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345,
346,
347,
348,
349,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
370,
371,
372,
373,
374,
375,
376,
377,
378,
379,
380,
381,
382,
383,
384,
385,
386,
387,
388,
389,
390,
391,
392,
393,
394,
395,
396,
397,
398,
399,
400,
401,
402,
403,
404,
405,
406,
407,
408,
409,
410,
411,
412,
413,
414,
415,
416,
417,
418,
419,
420,
421,
422,
423,
424,
425,
426,
427,
428,
429,
430,
431,
432,
433,
434,
435,
436,
437,
438,
439,
440,
441,
442,
443,
444,
445,
446,
447,
448,
449,
450,
451,
452,
453,
454,
455,
456,
457,
458,
459,
460,
461,
462,
463,
464,
465,
466,
467,
468,
469,
470,
471,
472,
473,
474,
475,
476,
477,
478,
479,
480,
481,
482,
483,
484,
485,
486,
487,
488,
489,
490,
491,
492,
493,
494,
495,
496,
497,
498,
499,
500,
501,
502,
503,
504,
505,
506,
507,
508,
509,
510,
511,
512,
513,
514,
515,
516,
517,
518,
519,
520,
521,
522,
523,
524,
525,
526,
527,
528,
529,
530,
531,
532,
533,
534,
535,
536,
537,
538,
539,
540,
541,
542,
543,
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632
],
"start": 1418,
"length": 21924,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/TruthBridge.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-2yugzs_x/contracts/TruthBridge.sol",
"filename_relative": "contracts/TruthBridge.sol"
}
},
"signature": "relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/TruthBridge.sol",
"name": "relayerLift",
"type": "function",
"lines": [
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s)",
"type": "node",
"lines": [
296
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "IERC20(usdc).transferFrom(user,address(this),amount)",
"type": "node",
"lines": [
296,
297,
298
]
},
{
"file": "contracts/TruthBridge.sol",
"name": "relayerBalance[msg.sender] = balance",
"type": "node",
"lines": [
301,
302,
303
]
}
],
"description": "Reentrancy in TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304):\n\tExternal calls:\n\t- IERC20Permit(usdc).permit(user,address(this),amount,type()(uint256).max,v,r,s) (contracts/TruthBridge.sol#296)\n\t- IERC20(usdc).transferFrom(user,address(this),amount) (contracts/TruthBridge.sol#296-298)\n\tState variables written after the call(s):\n\t- relayerBalance[msg.sender] = balance (contracts/TruthBridge.sol#301-303)\n\tTruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70) can be used in cross function reentrancies:\n\t- TruthBridge._attemptRelayerRefund(int256) (contracts/TruthBridge.sol#465-476)\n\t- TruthBridge.deregisterRelayer(address) (contracts/TruthBridge.sol#276-285)\n\t- TruthBridge.registerRelayer(address) (contracts/TruthBridge.sol#267-275)\n\t- TruthBridge.relayerBalance (contracts/TruthBridge.sol#69-70)\n\t- TruthBridge.relayerLift(uint256,uint256,address,uint8,bytes32,bytes32,bool) (contracts/TruthBridge.sol#289-304)\n\t- TruthBridge.relayerLower(uint256,bytes,bool) (contracts/TruthBridge.sol#308-329)"
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 2
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x7588395dd7e8a4d409556e6deeeff2cb21d81e7a5e40015873bd5f8a6d6a7c44
call_targets:
0x965983977c29158ec53a296a6f47be145ddecc36
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x7588395dd7e8a4d409556e6deeeff2cb21d81e7a5e40015873bd5f8a6d6a7c44",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x965983977c29158ec53a296a6f47be145ddecc36"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xea4bc53e",
"selector": "0xea4bc53e",
"calldata_variants": [
"0xea4bc53e",
"0xea4bc53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6f4b533",
"selector": "0xe6f4b533",
"calldata_variants": [
"0xe6f4b533",
"0xe6f4b5330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8b744f4",
"selector": "0xe8b744f4",
"calldata_variants": [
"0xe8b744f4",
"0xe8b744f40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8fed1d6",
"selector": "0xe8fed1d6",
"calldata_variants": [
"0xe8fed1d6",
"0xe8fed1d60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe37347e6",
"selector": "0xe37347e6",
"calldata_variants": [
"0xe37347e6",
"0xe37347e60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe51d0921",
"selector": "0xe51d0921",
"calldata_variants": [
"0xe51d0921",
"0xe51d09210000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4608,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5219,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5763,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 12,
"guards_detected": [
{
"pc": 12059,
"type": "msg_sender_eq_const",
"value": 7.815659205030845e+47
},
{
"pc": 12037,
"type": "msg_sender_eq_const",
"value": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
}
],
"untrusted_call_count": 12
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x7588395dd7e8a4d409556e6deeeff2cb21d81e7a5e40015873bd5f8a6d6a7c44
call_targets:
0x965983977c29158ec53a296a6f47be145ddecc36
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x7588395dd7e8a4d409556e6deeeff2cb21d81e7a5e40015873bd5f8a6d6a7c44",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x965983977c29158ec53a296a6f47be145ddecc36"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xea4bc53e",
"selector": "0xea4bc53e",
"calldata_variants": [
"0xea4bc53e",
"0xea4bc53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6f4b533",
"selector": "0xe6f4b533",
"calldata_variants": [
"0xe6f4b533",
"0xe6f4b5330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8b744f4",
"selector": "0xe8b744f4",
"calldata_variants": [
"0xe8b744f4",
"0xe8b744f40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8fed1d6",
"selector": "0xe8fed1d6",
"calldata_variants": [
"0xe8fed1d6",
"0xe8fed1d60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe37347e6",
"selector": "0xe37347e6",
"calldata_variants": [
"0xe37347e6",
"0xe37347e60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe51d0921",
"selector": "0xe51d0921",
"calldata_variants": [
"0xe51d0921",
"0xe51d09210000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4608,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5219,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5763,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 12,
"guards_detected": [
{
"pc": 12059,
"type": "msg_sender_eq_const",
"value": 7.815659205030845e+47
},
{
"pc": 12037,
"type": "msg_sender_eq_const",
"value": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
}
]
}
|
| low | access_control | codex | Pause bypass for relayer operations | 65 | no | — |
viewevidence_json{
"evidence": "relayerLift/relayerLower lack whenNotPaused while other state-changing entrypoints are paused.",
"locations": [
"contracts/TruthBridge.sol:relayerLift",
"contracts/TruthBridge.sol:relayerLower"
],
"recommendation": "Add whenNotPaused to relayerLift and relayerLower or explicitly document/guard why they should bypass pause.",
"exploit_scenario": "When the contract is paused, relayerLift and relayerLower remain callable, allowing funds to be moved despite an emergency pause."
}
|
| low | oracle | codex | Chainlink price used without sanity or staleness checks | 65 | no | — |
viewevidence_json{
"evidence": "usdcEth casts latestAnswer() to uint256 and divides by 1e6 without any validation.",
"locations": [
"contracts/TruthBridge.sol:usdcEth"
],
"recommendation": "Use latestRoundData(), verify updatedAt/answeredInRound, ensure answer > 0, and handle feed decimals explicitly.",
"exploit_scenario": "If the feed returns stale/zero/negative data, usdcEth can become zero or huge due to unchecked casting/division, leading to division-by-zero reverts or mispriced relayer costs/refunds."
}
|
| low | other | codex | Unchecked ERC20 transfer return values | 65 | no | — |
viewevidence_json{
"evidence": "Raw IERC20.transfer used without checking the return value.",
"locations": [
"contracts/TruthBridge.sol:deregisterRelayer",
"contracts/TruthBridge.sol:relayerLower",
"contracts/TruthBridge.sol:uniswapV3SwapCallback"
],
"recommendation": "Use SafeERC20.safeTransfer/safeTransferFrom and handle failures explicitly.",
"exploit_scenario": "If USDC (or a token with non-reverting failure) returns false on transfer, the contract will continue execution: lowers may be marked claimed and relayer balances updated even though funds were not transferred."
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 23
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 9
}
|