code: async def load_uvarint(reader):
      
      buffer = _UVARINT_BUFFER
      await reader.areadinto(buffer)
      size = buffer[0]
      if size == 0:
          return 0
  
      negative = size < 0
      size = -size if negative else size
      result = 0
      shift = 0
  
      if size > 8:
          raise ValueError('Varint size too big: %s' % size)
  
      # TODO: endianity, rev bytes if needed
      for _ in range(size):
          await reader.areadinto(buffer)
          result += buffer[0] << shift
          shift += 8
      return result if not negative else -result
docs: Monero portable_binary_archive boost integer serialization
      :param reader:
      :return: