contract Z_Ownable {
  address public owner;
  mapping (address => bool) internal admin_accounts;

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    // set msg.sender as owner
    owner = msg.sender;
    // set msg.sender as first administrator
    admin_accounts[msg.sender]= true;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner );
    _;
  }

  /**
   * @dev check if msg.sender is owner
   * @return true  if msg.sender is owner
   */
  function  isOwner() internal view returns (bool) {
    return (msg.sender == owner );
    
  }
  
  /**
   * @dev Throws if called by any account other than admins.
   */
  modifier onlyAdmin() {
    require (admin_accounts[msg.sender]==true);
    _;
  }

  /**
   * @dev check if msg.sender is admin
   * @return true  if msg.sender is admin
   */
  function  isAdmin() internal view returns (bool) {
    return  (admin_accounts[msg.sender]==true);
    
  }
 
}
/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and multiple admin addresses, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
function  isOwner() internal view returns (bool) {
    return (msg.sender == owner );
    
  }
/**
 * @dev check if msg.sender is owner
 * @return true  if msg.sender is owner
 */