input: def create_blockchain():
      """
      Create a basic blockchain system in Python. The system includes two classes: Block and Blockchain. The Block class represents each block in the blockchain, containing an index, timestamp, data, previous hash, and its own hash. The Blockchain class manages the chain, allowing the addition of new blocks and providing a method to retrieve the entire chain in JSON format.
      
      Example:
      >>> bc = Blockchain()
      >>> bc.add_block({'timestamp': '2023-04-01 12:00:00', 'data': 'Genesis Block'})
      >>> bc.add_block({'timestamp': '2023-04-01 12:01:00', 'data': 'Transaction Data'})
      >>> bc.get_chain()
      '[
        {
          "index": 0,
          "timestamp": "2023-04-01 12:00:00",
          "data": "Genesis Block",
          "previous_hash": null,
          "hash": "..."
        },
        {
          "index": 1,
          "timestamp": "2023-04-01 12:01:00",
          "data": "Transaction Data",
          "previous_hash": "...",
          "hash": "..."
        }
      ]'
      """
output:     
      import hashlib
      import json
      from time import time
  
      class Block:
          def __init__(self, index, timestamp, data, previous_hash):
              self.index = index
              self.timestamp = timestamp
              self.data = data
              self.previous_hash = previous_hash
              self.hash = self.calculate_hash()
  
          def calculate_hash(self):
              block_string = json.dumps(self.__dict__, sort_keys=True).encode()
              return hashlib.sha256(block_string).hexdigest()
  
      class Blockchain:
          def __init__(self):
              self.chain = [self.create_genesis_block()]
  
          def create_genesis_block(self):
              return Block(0, "2023-04-01 12:00:00", "Genesis Block", "0")
  
          def get_latest_block(self):
              return self.chain[-1]
  
          def add_block(self, data):
              latest_block = self.get_latest_block()
              new_block = Block(latest_block.index + 1, time(), data, latest_block.hash)
              self.chain.append(new_block)
  
          def get_chain(self):
              return json.dumps([block.__dict__ for block in self.chain], indent=4)
  