More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 912,311 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Submit Transacti... | 30021864 | 45 mins ago | IN | 0 CELO | 0.0266545 | ||||
Submit Transacti... | 30021738 | 55 mins ago | IN | 0 CELO | 0.0002841 | ||||
Submit Transacti... | 30021737 | 55 mins ago | IN | 0 CELO | 0.00509059 | ||||
Submit Transacti... | 30021198 | 1 hr ago | IN | 0 CELO | 0.0008827 | ||||
Submit Transacti... | 30020995 | 1 hr ago | IN | 0 CELO | 0.00088244 | ||||
Submit Transacti... | 30020923 | 2 hrs ago | IN | 0 CELO | 0.00742294 | ||||
Submit Transacti... | 30020872 | 2 hrs ago | IN | 0 CELO | 0.00370997 | ||||
Submit Transacti... | 30020866 | 2 hrs ago | IN | 0 CELO | 0.00603727 | ||||
Submit Transacti... | 30020834 | 2 hrs ago | IN | 0 CELO | 0.00227162 | ||||
Submit Transacti... | 30020834 | 2 hrs ago | IN | 0 CELO | 0.19144242 | ||||
Submit Transacti... | 30020827 | 2 hrs ago | IN | 0 CELO | 0.0157127 | ||||
Submit Transacti... | 30020824 | 2 hrs ago | IN | 0 CELO | 0.00409267 | ||||
Submit Transacti... | 30020767 | 2 hrs ago | IN | 0 CELO | 0.01326917 | ||||
Submit Transacti... | 30020689 | 2 hrs ago | IN | 0 CELO | 0.00442264 | ||||
Submit Transacti... | 30020666 | 2 hrs ago | IN | 0 CELO | 0.00202202 | ||||
Submit Transacti... | 30020656 | 2 hrs ago | IN | 0 CELO | 0.06265409 | ||||
Submit Transacti... | 30020622 | 2 hrs ago | IN | 0 CELO | 0.00384109 | ||||
Submit Transacti... | 30020523 | 2 hrs ago | IN | 0 CELO | 0.00211609 | ||||
Submit Transacti... | 30020523 | 2 hrs ago | IN | 0 CELO | 0.01315644 | ||||
Submit Transacti... | 30020519 | 2 hrs ago | IN | 0 CELO | 0.00771998 | ||||
Submit Transacti... | 30020487 | 2 hrs ago | IN | 0 CELO | 0.00316152 | ||||
Submit Transacti... | 30020481 | 2 hrs ago | IN | 0 CELO | 0.04918274 | ||||
Submit Transacti... | 30020465 | 2 hrs ago | IN | 0 CELO | 0.00199364 | ||||
Submit Transacti... | 30020464 | 2 hrs ago | IN | 0 CELO | 0.00686248 | ||||
Submit Transacti... | 30020453 | 2 hrs ago | IN | 0 CELO | 0.03111066 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
29993040 | 40 hrs ago | 4,194.00834923 CELO | ||||
29977690 | 2 days ago | 4,057.93861617 CELO | ||||
29968027 | 3 days ago | 4,055.32803743 CELO | ||||
29911479 | 6 days ago | 3,305.28532681 CELO | ||||
29886840 | 7 days ago | 3,712.8197564 CELO | ||||
29822754 | 11 days ago | 4,091.87010642 CELO | ||||
29813090 | 12 days ago | 3,825.32748072 CELO | ||||
29728896 | 16 days ago | 4,125.47080587 CELO | ||||
29718447 | 17 days ago | 150.46991189 CELO | ||||
29679886 | 19 days ago | 3,380.69860734 CELO | ||||
29580307 | 25 days ago | 3,650.00686598 CELO | ||||
29505712 | 29 days ago | 425.19521766 CELO | ||||
29459228 | 32 days ago | 6,646.875056 CELO | ||||
29403563 | 35 days ago | 3,977.72270956 CELO | ||||
29392971 | 36 days ago | 3,610.55701229 CELO | ||||
29380579 | 37 days ago | 3,801.29010354 CELO | ||||
29376447 | 37 days ago | 3,492.02314587 CELO | ||||
29373964 | 37 days ago | 3,666.76998599 CELO | ||||
29336062 | 39 days ago | 332.95093772 CELO | ||||
29315040 | 40 days ago | 3,526.65532749 CELO | ||||
29299688 | 41 days ago | 397.53514927 CELO | ||||
29298568 | 41 days ago | 3,248.76644697 CELO | ||||
29289870 | 42 days ago | 3,283.18814585 CELO | ||||
29286545 | 42 days ago | 3,276.38535183 CELO | ||||
29234718 | 45 days ago | 3,554.43345082 CELO |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xB58DA472...0C26093dA The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Proxy
Compiler Version
v0.5.13+commit.5b0b510c
Contract Source Code (Solidity)
/** *Submitted for verification at celoscan.io on 2023-12-28 */ pragma solidity ^0.5.13; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title A Proxy utilizing the Unstructured Storage pattern. */ contract Proxy { // Used to store the address of the owner. bytes32 private constant OWNER_POSITION = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1); // Used to store the address of the implementation contract. bytes32 private constant IMPLEMENTATION_POSITION = bytes32( uint256(keccak256("eip1967.proxy.implementation")) - 1 ); event OwnerSet(address indexed owner); event ImplementationSet(address indexed implementation); constructor() public { _setOwner(msg.sender); } /** * @notice Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _getOwner(), "sender was not owner"); _; } /** * @notice Delegates calls to the implementation contract. */ function() external payable { bytes32 implementationPosition = IMPLEMENTATION_POSITION; address implementationAddress; // Load the address of the implementation contract from an explicit storage slot. assembly { implementationAddress := sload(implementationPosition) } // Avoid checking if address is a contract or executing delegated call when // implementation address is 0x0 require(implementationAddress != address(0), "No Implementation set"); require(Address.isContract(implementationAddress), "Invalid contract address"); assembly { // Extract the position of the transaction data (i.e. function ID and arguments). let newCallDataPosition := mload(0x40) mstore(0x40, add(newCallDataPosition, calldatasize)) calldatacopy(newCallDataPosition, 0, calldatasize) // Call the smart contract at `implementationAddress` in the context of the proxy contract, // with the same msg.sender and value. let delegatecallSuccess := delegatecall( gas, implementationAddress, newCallDataPosition, calldatasize, 0, 0 ) // Copy the return value of the call so it can be returned. let returnDataSize := returndatasize let returnDataPosition := mload(0x40) mstore(0x40, add(returnDataPosition, returnDataSize)) returndatacopy(returnDataPosition, 0, returnDataSize) // Revert or return depending on whether or not the call was successful. switch delegatecallSuccess case 0 { revert(returnDataPosition, returnDataSize) } default { return(returnDataPosition, returnDataSize) } } } /** * @notice Transfers ownership of Proxy to a new owner. * @param newOwner Address of the new owner account. */ function _transferOwnership(address newOwner) external onlyOwner { _setOwner(newOwner); } /** * @notice Sets the address of the implementation contract and calls into it. * @param implementation Address of the new target contract. * @param callbackData The abi-encoded function call to perform in the implementation * contract. * @dev Throws if the initialization callback fails. * @dev If the target contract does not need initialization, use * setImplementation instead. */ function _setAndInitializeImplementation(address implementation, bytes calldata callbackData) external payable onlyOwner { _setImplementation(implementation); bool success; bytes memory returnValue; (success, returnValue) = implementation.delegatecall(callbackData); require(success, "initialization callback failed"); } /** * @notice Returns the implementation address. */ function _getImplementation() external view returns (address implementation) { bytes32 implementationPosition = IMPLEMENTATION_POSITION; // Load the address of the implementation contract from an explicit storage slot. assembly { implementation := sload(implementationPosition) } } /** * @notice Sets the address of the implementation contract. * @param implementation Address of the new target contract. * @dev If the target contract needs to be initialized, call * setAndInitializeImplementation instead. */ function _setImplementation(address implementation) public onlyOwner { bytes32 implementationPosition = IMPLEMENTATION_POSITION; require(Address.isContract(implementation), "Invalid contract address"); // Store the address of the implementation contract in an explicit storage slot. assembly { sstore(implementationPosition, implementation) } emit ImplementationSet(implementation); } /** * @notice Returns the Proxy owner's address. */ function _getOwner() public view returns (address owner) { bytes32 position = OWNER_POSITION; // Load the address of the contract owner from an explicit storage slot. assembly { owner := sload(position) } } function _setOwner(address newOwner) internal { require(newOwner != address(0), "owner cannot be 0"); bytes32 position = OWNER_POSITION; // Store the address of the contract owner in an explicit storage slot. assembly { sstore(position, newOwner) } emit OwnerSet(newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ImplementationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerSet","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"_getImplementation","outputs":[{"internalType":"address","name":"implementation","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_getOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"callbackData","type":"bytes"}],"name":"_setAndInitializeImplementation","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"_transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x60806040526004361061004a5760003560e01c806303386ba3146101e757806342404e0714610280578063bb913f41146102d7578063d29d44ee14610328578063f7e6af8014610379575b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20496d706c656d656e746174696f6e20736574000000000000000000000081525060200191505060405180910390fd5b61013f816103d0565b6101b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b60405136810160405236600082376000803683855af43d604051818101604052816000823e82600081146101e3578282f35b8282fd5b61027e600480360360408110156101fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184600183028401116401000000008311171561026e57600080fd5b909192939192939050505061041b565b005b34801561028c57600080fd5b506102956105c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e357600080fd5b50610326600480360360208110156102fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061060d565b005b34801561033457600080fd5b506103776004803603602081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107bd565b005b34801561038557600080fd5b5061038e610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561041257506000801b8214155b92505050919050565b610423610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6104cc8361060d565b600060608473ffffffffffffffffffffffffffffffffffffffff168484604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610539576040519150601f19603f3d011682016040523d82523d6000602084013e61053e565b606091505b508092508193505050816105ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e697469616c697a6174696f6e2063616c6c6261636b206661696c6564000081525060200191505060405180910390fd5b5050505050565b600080600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050805491505090565b610615610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050610701826103d0565b610773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b8181558173ffffffffffffffffffffffffffffffffffffffff167fab64f92ab780ecbf4f3866f57cee465ff36c89450dcce20237ca7a8d81fb7d1360405160405180910390a25050565b6107c5610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b61086e816108bd565b50565b600080600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b9050805491505090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a2505056fea265627a7a72315820ddaaedbcde72a50c209acc3d9132e085934b56b89e72a05cc3c769d6941d429064736f6c634300050d0032
Deployed Bytecode Sourcemap
3105:5271:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3931:30;3454:1;3409:41;;;;;;;;;;;;;;;;;;;3401:50;;:54;3387:73;;3931:56;;3996:29;4170:22;4164:29;4139:54;;4368:1;4335:35;;:21;:35;;;;4327:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4411:41;4430:21;4411:18;:41::i;:::-;4403:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:4;4624:11;4681:12;4660:19;4656:38;4650:4;4643:52;4740:12;4737:1;4716:19;4703:50;5069:1;5057;5034:12;5004:19;4972:21;4958:3;4935:144;5178:14;5232:4;5226:11;5282:14;5262:18;5258:39;5252:4;5245:53;5344:14;5341:1;5321:18;5306:53;5456:19;5490:1;5485:73;;;;5616:14;5596:18;5589:42;5485:73;5532:14;5512:18;5505:42;6313:366;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6313:366:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6313:366:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6313:366:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6313:366:0;;;;;;;;;;;;:::i;:::-;;6749:311;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6749:311:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7317:430;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7317:430:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7317:430:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;5789:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5789:97:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5789:97:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7816:236;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7816:236:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;712:619;772:4;1034:16;1061:19;1083:66;1061:88;;;;1252:7;1240:20;1228:32;;1292:11;1280:8;:23;;:42;;;;;1319:3;1307:15;;:8;:15;;1280:42;1272:51;;;;712:619;;;:::o;6313:366::-;3764:11;:9;:11::i;:::-;3750:25;;:10;:25;;;3742:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6459:34;6478:14;6459:18;:34::i;:::-;6500:12;6519:24;6575:14;:27;;6603:12;;6575:41;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;6575:41:0;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;6550:66:0;;;;;;;;6631:7;6623:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3807:1;;6313:366;;;:::o;6749:311::-;6802:22;6833:30;3454:1;3409:41;;;;;;;;;;;;;;;;;;;3401:50;;:54;3387:73;;6833:56;;7025:22;7019:29;7001:47;;6992:63;;:::o;7317:430::-;3764:11;:9;:11::i;:::-;3750:25;;:10;:25;;;3742:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7393:30;3454:1;3409:41;;;;;;;;;;;;;;;;;;;3401:50;;:54;3387:73;;7393:56;;7466:34;7485:14;7466:18;:34::i;:::-;7458:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7673:14;7649:22;7642:46;7726:14;7708:33;;;;;;;;;;;;3807:1;7317:430;:::o;5789:97::-;3764:11;:9;:11::i;:::-;3750:25;;:10;:25;;;3742:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5861:19;5871:8;5861:9;:19::i;:::-;5789:97;:::o;7816:236::-;7858:13;7880:16;3265:1;3229:32;;;;;;;;;;;;;;;;;;;3221:41;;:45;3213:54;;7880:33;;8031:8;8025:15;8016:24;;8007:40;;:::o;8058:315::-;8139:1;8119:22;;:8;:22;;;;8111:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8170:16;3265:1;3229:32;;;;;;;;;;;;;;;;;;;3221:41;;:45;3213:54;;8170:33;;8322:8;8312;8305:26;8358:8;8349:18;;;;;;;;;;;;8058:315;;:::o
Swarm Source
bzzr://ddaaedbcde72a50c209acc3d9132e085934b56b89e72a05cc3c769d6941d4290
Loading...
Loading
Loading...
Loading
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.