from typing import Awaitable, Callable, ParamSpec, TypeVar, Union, overload
P = ParamSpec('P')
R1 = TypeVar('R1')
R2 = TypeVar('R2')
R3 = TypeVar('R3')
R4 = TypeVar('R4')
R5 = TypeVar('R5')
R6 = TypeVar('R6')
R7 = TypeVar('R7')
R8 = TypeVar('R8')
R9 = TypeVar('R9')
R10 = TypeVar('R10')
R11 = TypeVar('R11')
R12 = TypeVar('R12')
R13 = TypeVar('R13')
R14 = TypeVar('R14')
R15 = TypeVar('R15')
@overload
def compose(f1: Callable[P, R1], /) -> Callable[P, R1]:
    ...
@overload
def compose(f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R2]:
    ...
@overload
def compose(f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R3]:
    ...
@overload
def compose(f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R4]:
    ...
@overload
def compose(f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R5]:
    ...
@overload
def compose(f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R6]:
    ...
@overload
def compose(f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R7]:
    ...
@overload
def compose(f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R8]:
    ...
@overload
def compose(f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R9]:
    ...
@overload
def compose(f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R10]:
    ...
@overload
def compose(f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R11]:
    ...
@overload
def compose(f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R12]:
    ...
@overload
def compose(f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R13]:
    ...
@overload
def compose(f14: Callable[[R13], R14], f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R14]:
    ...
@overload
def compose(f15: Callable[[R14], R15], f14: Callable[[R13], R14], f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R15]:
    ...
@overload
def acompose(f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R1]]:
    ...
@overload
def acompose(f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R2]]:
    ...
@overload
def acompose(f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R3]]:
    ...
@overload
def acompose(f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R4]]:
    ...
@overload
def acompose(f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R5]]:
    ...
@overload
def acompose(f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R6]]:
    ...
@overload
def acompose(f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R7]]:
    ...
@overload
def acompose(f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R8]]:
    ...
@overload
def acompose(f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R9]]:
    ...
@overload
def acompose(f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R10]]:
    ...
@overload
def acompose(f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R11]]:
    ...
@overload
def acompose(f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R12]]:
    ...
@overload
def acompose(f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R13]]:
    ...
@overload
def acompose(f14: Callable[[R13], Union[R14, Awaitable[R14]]], f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R14]]:
    ...
@overload
def acompose(f15: Callable[[R14], Union[R15, Awaitable[R15]]], f14: Callable[[R13], Union[R14, Awaitable[R14]]], f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R15]]:
    ...
@overload
def sacompose(f1: Callable[P, R1], /) -> Callable[P, R1]:
    ...
@overload
def sacompose(f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R2]:
    ...
@overload
def sacompose(f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R3]:
    ...
@overload
def sacompose(f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R4]:
    ...
@overload
def sacompose(f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R5]:
    ...
@overload
def sacompose(f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R6]:
    ...
@overload
def sacompose(f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R7]:
    ...
@overload
def sacompose(f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R8]:
    ...
@overload
def sacompose(f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R9]:
    ...
@overload
def sacompose(f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R10]:
    ...
@overload
def sacompose(f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R11]:
    ...
@overload
def sacompose(f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R12]:
    ...
@overload
def sacompose(f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R13]:
    ...
@overload
def sacompose(f14: Callable[[R13], R14], f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R14]:
    ...
@overload
def sacompose(f15: Callable[[R14], R15], f14: Callable[[R13], R14], f13: Callable[[R12], R13], f12: Callable[[R11], R12], f11: Callable[[R10], R11], f10: Callable[[R9], R10], f9: Callable[[R8], R9], f8: Callable[[R7], R8], f7: Callable[[R6], R7], f6: Callable[[R5], R6], f5: Callable[[R4], R5], f4: Callable[[R3], R4], f3: Callable[[R2], R3], f2: Callable[[R1], R2], f1: Callable[P, R1], /) -> Callable[P, R15]:
    ...
@overload
def sacompose(f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R1]]:
    ...
@overload
def sacompose(f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R2]]:
    ...
@overload
def sacompose(f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R3]]:
    ...
@overload
def sacompose(f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R4]]:
    ...
@overload
def sacompose(f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R5]]:
    ...
@overload
def sacompose(f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R6]]:
    ...
@overload
def sacompose(f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R7]]:
    ...
@overload
def sacompose(f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R8]]:
    ...
@overload
def sacompose(f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R9]]:
    ...
@overload
def sacompose(f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R10]]:
    ...
@overload
def sacompose(f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R11]]:
    ...
@overload
def sacompose(f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R12]]:
    ...
@overload
def sacompose(f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R13]]:
    ...
@overload
def sacompose(f14: Callable[[R13], Union[R14, Awaitable[R14]]], f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R14]]:
    ...
@overload
def sacompose(f15: Callable[[R14], Union[R15, Awaitable[R15]]], f14: Callable[[R13], Union[R14, Awaitable[R14]]], f13: Callable[[R12], Union[R13, Awaitable[R13]]], f12: Callable[[R11], Union[R12, Awaitable[R12]]], f11: Callable[[R10], Union[R11, Awaitable[R11]]], f10: Callable[[R9], Union[R10, Awaitable[R10]]], f9: Callable[[R8], Union[R9, Awaitable[R9]]], f8: Callable[[R7], Union[R8, Awaitable[R8]]], f7: Callable[[R6], Union[R7, Awaitable[R7]]], f6: Callable[[R5], Union[R6, Awaitable[R6]]], f5: Callable[[R4], Union[R5, Awaitable[R5]]], f4: Callable[[R3], Union[R4, Awaitable[R4]]], f3: Callable[[R2], Union[R3, Awaitable[R3]]], f2: Callable[[R1], Union[R2, Awaitable[R2]]], f1: Callable[P, Union[R1, Awaitable[R1]]], /) -> Callable[P, Awaitable[R15]]:
    ...
