# Path: athlib/utils.py
# def parse_hms(t: Union[int, float, str]) -> Union[int, float]:
#     """
#     Parse a time duration with 0, 1 or 2 colons and return seconds.
# 
#     >>> from .utils import parse_hms
#     >>> parse_hms('10')
#     10
#     >>> parse_hms('1:10')
#     70
#     >>> parse_hms('1:1:10')
#     3670
#     >>> parse_hms('1:1:10.1')
#     3670.1
#     >>> parse_hms(3670.1)
#     3670.1
#     """
#     if isinstance(t, (float, int)):
#         return t
# 
#     # Try : and ; separators
#     for sep in ':;':
#         if sep not in t:
#             continue
# 
#         sec = 0
# 
#         for s in t.split(sep):
#             sec *= 60
# 
#             try:
#                 sec += str2num(s)
#             except ValueError:
#                 raise ValueError('cannot parse seconds from %s' % repr(t))
# 
#         return sec
#     try:
#         return str2num(t)
#     except ValueError:
#         raise ValueError('cannot parse seconds from %s' % repr(t))
# 
# def normalize_event_code(c : str) -> str:
#     c = c.strip()   #remove excess whitespace
#     m =  PAT_EVENT_CODE.match(c)
#     if not m:
#         raise ValueError('cannot normalize event code %r' % c)
#     rm = PAT_RELAYS.match(c)
#     if rm:
#         c = '%sx%s' % (rm.group(1),rm.group(2).upper())
#     else:
#         R = [].append
#         for k, v in m.groupdict().items():
#             if v is None or k not in _gnorms: continue
#             s = v.strip()
#             if not s: continue
#             R((m.span(k),_gnorms[k](s)))
#         R = R.__self__
#         c = c.upper()
#         for ((start,end),repl) in sorted(R, reverse=True):
#             c = c[:start] + repl + c[end:] 
#     return c.replace(' ','')
# 
# Path: athlib/codes.py
# PAT_RUN = re.compile(_orjoin(PAT_TRACK, PAT_ROAD, PAT_RELAYS))


from athlib import parse_hms, normalize_event_code, PAT_RUN
from typing import Union
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKWLU13': {
    '70H': [0.1, 20.0, 11.0],
    '800': [1, 230, 140],
    'LJ': [0.04, 2.0, 5.6],
    'SP': [0.1, 2.0, 11.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKSEC': {
    '100': [0.1, 19.5, 10.5],
    '800': [1, 230, 140],
    'LJ': [0.05, 2.0, 6.5],
    'OT': [0.6, 6.0, 60.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKPRI': {
    '75': [0.1, 16.0, 7.0],
    '600': [1, 180, 90],
    'SLJ': [0.02, 1.02, 2.82],
    'OT': [0.5, 5.0, 50.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKSTA': {
    '50': [0.1, 12.0, 3.0],
    '400': [1, 125, 35],
    'SLJ': [0.03, 0.75, 3.0],
    'OT': [0.5, 2.5, 47.5],
    '4x100': [0.5, 94.0, 49.0]
    },

# Path: athlib/utils.py
# def parse_hms(t: Union[int, float, str]) -> Union[int, float]:
#     """
#     Parse a time duration with 0, 1 or 2 colons and return seconds.
# 
#     >>> from .utils import parse_hms
#     >>> parse_hms('10')
#     10
#     >>> parse_hms('1:10')
#     70
#     >>> parse_hms('1:1:10')
#     3670
#     >>> parse_hms('1:1:10.1')
#     3670.1
#     >>> parse_hms(3670.1)
#     3670.1
#     """
#     if isinstance(t, (float, int)):
#         return t
# 
#     # Try : and ; separators
#     for sep in ':;':
#         if sep not in t:
#             continue
# 
#         sec = 0
# 
#         for s in t.split(sep):
#             sec *= 60
# 
#             try:
#                 sec += str2num(s)
#             except ValueError:
#                 raise ValueError('cannot parse seconds from %s' % repr(t))
# 
#         return sec
#     try:
#         return str2num(t)
#     except ValueError:
#         raise ValueError('cannot parse seconds from %s' % repr(t))
# 
# def normalize_event_code(c : str) -> str:
#     c = c.strip()   #remove excess whitespace
#     m =  PAT_EVENT_CODE.match(c)
#     if not m:
#         raise ValueError('cannot normalize event code %r' % c)
#     rm = PAT_RELAYS.match(c)
#     if rm:
#         c = '%sx%s' % (rm.group(1),rm.group(2).upper())
#     else:
#         R = [].append
#         for k, v in m.groupdict().items():
#             if v is None or k not in _gnorms: continue
#             s = v.strip()
#             if not s: continue
#             R((m.span(k),_gnorms[k](s)))
#         R = R.__self__
#         c = c.upper()
#         for ((start,end),repl) in sorted(R, reverse=True):
#             c = c[:start] + repl + c[end:] 
#     return c.replace(' ','')
# 
# Path: athlib/codes.py
# PAT_RUN = re.compile(_orjoin(PAT_TRACK, PAT_ROAD, PAT_RELAYS))


# Path: athlib/qkids_score.py
from athlib import parse_hms, normalize_event_code, PAT_RUN
from typing import Union

    '4x100': [0.5, 94.0, 49.0]
    },
  'QKWLU13': {
    '70H': [0.1, 20.0, 11.0],
    '800': [1, 230, 140],
    'LJ': [0.04, 2.0, 5.6],
    'SP': [0.1, 2.0, 11.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKSEC': {
    '100': [0.1, 19.5, 10.5],
    '800': [1, 230, 140],
    'LJ': [0.05, 2.0, 6.5],
    'OT': [0.6, 6.0, 60.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKPRI': {
    '75': [0.1, 16.0, 7.0],
    '600': [1, 180, 90],
    'SLJ': [0.02, 1.02, 2.82],
    'OT': [0.5, 5.0, 50.0],
    '4x100': [0.5, 94.0, 49.0]
    },
  'QKSTA': {
    '50': [0.1, 12.0, 3.0],
    '400': [1, 125, 35],
    'SLJ': [0.03, 0.75, 3.0],
    'OT': [0.5, 2.5, 47.5],
    '4x100': [0.5, 94.0, 49.0]
    },

  'QKCLUB': {