text: # pylint: disable=invalid-name
  """
  The tool to check the availability or syntax of domain, IP or URL.
  
  ::
  
  
      ██████╗ ██╗   ██╗███████╗██╗   ██╗███╗   ██╗ ██████╗███████╗██████╗ ██╗     ███████╗
      ██╔══██╗╚██╗ ██╔╝██╔════╝██║   ██║████╗  ██║██╔════╝██╔════╝██╔══██╗██║     ██╔════╝
      ██████╔╝ ╚████╔╝ █████╗  ██║   ██║██╔██╗ ██║██║     █████╗  ██████╔╝██║     █████╗
      ██╔═══╝   ╚██╔╝  ██╔══╝  ██║   ██║██║╚██╗██║██║     ██╔══╝  ██╔══██╗██║     ██╔══╝
      ██║        ██║   ██║     ╚██████╔╝██║ ╚████║╚██████╗███████╗██████╔╝███████╗███████╗
      ╚═╝        ╚═╝   ╚═╝      ╚═════╝ ╚═╝  ╚═══╝ ╚═════╝╚══════╝╚═════╝ ╚══════╝╚══════╝
  
  Provides some global utilities.
  
  Author:
      Nissar Chababy, @funilrys, contactTATAfunilrysTODTODcom
  
  Special thanks:
      https://pyfunceble.github.io/#/special-thanks
  
  Contributors:
      https://pyfunceble.github.io/#/contributors
  
  Project link:
      https://github.com/funilrys/PyFunceble
  
  Project documentation:
      https://pyfunceble.readthedocs.io/en/dev/
  
  Project homepage:
      https://pyfunceble.github.io/
  
  License:
  ::
  
  
      Copyright 2017, 2018, 2019, 2020, 2021 Nissar Chababy
  
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
  
          http://www.apache.org/licenses/LICENSE-2.0
  
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
  """
  
  import contextlib
  import cProfile
  import io
  import linecache
  import pstats
  import tracemalloc
  
  
  @contextlib.contextmanager
  def profile_it(*, sort_stats: str = "cumulative", show_callers: bool = False):
      """
      Provides a context manager which will activates the profiling of our
      source code.
  
      :param sort_starts:
          The column to sort.
      :param show_callers:
          Authorizes the output of the callers.
      """
  
      profiler = cProfile.Profile()
      profiler.enable()
  
      yield
  
      profiler.disable()
  
      our_stream = io.StringIO()
  
      profiler_starts = pstats.Stats(profiler, stream=our_stream)
  
      if sort_stats:
          profiler_starts.sort_stats(sort_stats)
  
      profiler_starts.print_stats()
  
      if show_callers:
          profiler_starts.print_callees()
  
      print(our_stream.getvalue())
  
  
  @contextlib.contextmanager
  def profile_memory(stats_mode: str = "lineno", top_limit: int = 10):
      """
      Provides a context manager which will activates memory profiling of our
      source code.
      """
  
      tracemalloc.start()
  
      yield
  
      snapshot = tracemalloc.take_snapshot()
      snapshot = snapshot.filter_traces(
          (
              tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
              tracemalloc.Filter(False, "<unknown>"),
              tracemalloc.Filter(False, "<frozen importlib._bootstrap_external>"),
          )
      )
      top_stats = snapshot.statistics(stats_mode)
  
      print("Top %s lines" % top_limit)
      for index, stat in enumerate(top_stats[:top_limit], 1):
          frame = stat.traceback[0]
          print(
              "#%s: %s:%s: %.1f KiB"
              % (index, frame.filename, frame.lineno, stat.size / 1024)
          )
          line = linecache.getline(frame.filename, frame.lineno).strip()
          if line:
              print("    %s" % line)
  
      other = top_stats[top_limit:]
      if other:
          size = sum(stat.size for stat in other)
          print("%s other: %.1f KiB" % (len(other), size / 1024))
      total = sum(stat.size for stat in top_stats)
      print("Total allocated size: %.1f KiB" % (total / 1024))
  