+
    ¾¾jÒg  ã                  ó  € R t ^ RIHt ^ RIHtHtHt ^ RIHtHt ^ RI	H
t
HtHtHtHtHtHtHtHtHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIH t  ]'       d   ^ R	I!t!^ R
I"H#t# ^ RI$H%t% ^ RI&H't'  ! R R]4      t(R.t)R	# )z:rfc:`5545` VALARM component.)Úannotations)ÚdateÚdatetimeÚ	timedelta)ÚTYPE_CHECKINGÚ
NamedTuple)ÚCONCEPTS_TYPE_SETTERÚLINKS_TYPE_SETTERÚRELATED_TO_TYPE_SETTERÚattendees_propertyÚcreate_single_propertyÚdescription_propertyÚproperty_del_durationÚproperty_get_durationÚproperty_set_durationÚrepeat_propertyÚsingle_int_propertyÚsingle_string_propertyÚsingle_utc_propertyÚsummary_propertyÚuid_property)Ú	Component)Úget_example)ÚInvalidCalendar)ÚvBinaryN)ÚSequence)ÚSelf)ÚvCalAddressc                  óô  a € ] tR t^&tRtRtR&tR'tR(tR)t	]
! R^ R^ R	7      t]! ]]]R
4      t]! RR4      t]! RR]]3]],          R,          R4      t]R R l4       t]P0                  R R l4       t ! R R]4      t]R 4       t]t]! RR4      t]! R] P                  RR.4      t!]"t#]$t%]&t'](R*R V 3R lll4       t)R R lt*](R+R R ll4       t+](R*R R  ll4       t,](R*R! R" ll4       t-](R,R# R$ ll4       t.R%t/V ;t0# )-ÚAlarma·  
A "VALARM" calendar component is a grouping of component
properties that defines an alarm or reminder for an event or a
to-do. For example, it may be used to define a reminder for a
pending event or an overdue to-do.

Example:

    The following example creates an alarm which uses an audio file
    from an FTP server.

    .. code-block:: pycon

        >>> from icalendar import Alarm
        >>> alarm = Alarm.example()
        >>> print(alarm.to_ical().decode())
        BEGIN:VALARM
        ACTION:AUDIO
        ATTACH;FMTTYPE=audio/basic:ftp://example.com/pub/sounds/bell-01.aud
        DURATION:PT15M
        REPEAT:4
        TRIGGER;VALUE=DATE-TIME:19970317T133000Z
        END:VALARM
ÚVALARMÚACTIONÚTRIGGERÚREPEATÚUIDÚACKNOWLEDGEDa¹  The number of additional times the alarm is triggered after the initial trigger.

        Defaults to ``0``, meaning the alarm fires once. To repeat the alarm,
        set both :attr:`REPEAT` and :attr:`DURATION`. The :attr:`DURATION`
        sets the gap between repetitions. :attr:`REPEAT` is the count of *additional*
        triggers, so a :attr:`REPEAT` of ``2`` produces three alarms in total
        (the initial trigger plus two repeats).

        Conforming with :rfc:`5545#section-3.8.6.2`, this property can appear
        once in an :class:`~icalendar.cal.alarm.Alarm` component and must be
        paired with :attr:`DURATION`.

        Example:
            Build an alarm that fires once and then repeats twice at
            five-minute intervals.

            .. code-block:: pycon

                >>> from datetime import timedelta
                >>> from icalendar import Alarm
                >>> alarm = Alarm()
                >>> alarm.TRIGGER = timedelta(minutes=-15)
                >>> alarm.DURATION = timedelta(minutes=5)
                >>> alarm.REPEAT = 2
                >>> alarm.REPEAT
                2

        Raises:
            TypeError: If the value is not an ``int``. Booleans are rejected, too,
                even though ``bool`` subclasses ``int``.

            ~icalendar.error.InvalidCalendar: If the value is negative.

        ..  versionchanged:: 7.2.3
            Negative values are no longer accepted.
        )Ú	min_valueañ  The delay between repeated triggers of a repeating alarm.

        Returns a :class:`datetime.timedelta` or ``None`` when the alarm
        has no :attr:`DURATION` set. Setting this attribute accepts a
        :class:`~datetime.timedelta`; deleting it removes the property
        from the component.

        :attr:`DURATION` is meaningful only for repeating alarms and must
        be paired with :attr:`REPEAT`. The two together produce
        :attr:`REPEAT` additional triggers, each spaced by :attr:`DURATION` after
        the initial trigger.

        Conforming with :rfc:`5545#section-3.8.2.5`, the :attr:`DURATION` property
        can appear once in an :class:`~icalendar.cal.alarm.Alarm` component.

        Example:
            Pair :attr:`DURATION` with :attr:`REPEAT` to produce three
            triggers spaced ten minutes apart.

            .. code-block:: pycon

                >>> from datetime import timedelta
                >>> from icalendar import Alarm
                >>> alarm = Alarm()
                >>> alarm.TRIGGER = timedelta(minutes=-30)
                >>> alarm.DURATION = timedelta(minutes=10)
                >>> alarm.REPEAT = 2
                >>> alarm.DURATION
                datetime.timedelta(seconds=600)
        ap  This property is the UTC datetime at which this alarm was last sent or acknowledged as defined in :rfc:`9074`.

    Setting this property allows calendar clients to
    dismiss or suppress an alarm across multiple devices. Once set to a value
    greater than or equal to the alarm's computed trigger time, conforming clients
    will not refire the alarm.

    Returns ``None`` when no acknowledgment has been recorded.

    Example:
        Mark an alarm as acknowledged. Note that the example uses an arbitrary time
        for the purpose of passing doctests. In actual practice, clients should
        use the current time in UTC, such as ``datetime.now(UTC)``.

        .. code-block:: pycon

            >>> from datetime import timezone, datetime
            >>> from icalendar import Alarm
            >>> UTC = timezone.utc
            >>> alarm = Alarm()
            >>> alarm.ACKNOWLEDGED = datetime(2024, 1, 15, 10, 0, tzinfo=UTC)
            >>> alarm.ACKNOWLEDGED
            datetime.datetime(2024, 1, 15, 10, 0, tzinfo=ZoneInfo(key='UTC'))

    See also:
        :attr:`TRIGGER`, the time at which the alarm fires.
    ÚdtNak  The time at which this alarm fires, per :rfc:`5545#section-3.8.6.3`.

    The value is either a :class:`~datetime.timedelta` (relative trigger) or a
    UTC :class:`~datetime.datetime` (absolute trigger).

    A negative :class:`~datetime.timedelta` fires *before* the related
    component boundary (start or end); a positive one fires *after* it.
    Use :attr:`TRIGGER_RELATED` to choose whether the offset is measured from
    the start or the end of the parent event or to-do.
    An absolute trigger fires at an exact UTC point in time regardless of the
    parent component's dates.

    Examples:
        Set an alarm to fire 15 minutes before the start of an event.

        .. code-block:: pycon

            >>> from datetime import datetime, timedelta, timezone
            >>> from icalendar import Alarm, Event
            >>> UTC = timezone.utc
            >>> event = Event()
            >>> event.start = datetime(2024, 1, 15, 10, 0, tzinfo=UTC)
            >>> alarm = Alarm()
            >>> alarm.TRIGGER = timedelta(minutes=-15)
            >>> event.add_component(alarm)
            >>> event.alarms.times[0].trigger
            datetime.datetime(2024, 1, 15, 9, 45, tzinfo=datetime.timezone.utc)

        Set an absolute trigger to fire at a specific UTC time.

        .. code-block:: pycon

            >>> absolute_alarm = Alarm()
            >>> absolute_alarm.TRIGGER = datetime(2024, 1, 15, 9, 45, tzinfo=UTC)
            >>> absolute_alarm.TRIGGER
            datetime.datetime(2024, 1, 15, 9, 45, tzinfo=datetime.timezone.utc)

    See also:
        :attr:`TRIGGER_RELATED`, :attr:`DURATION`, :attr:`REPEAT`
    c               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "ÚR/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/icalendar/cal/alarm.pyÚ__annotate__ÚAlarm.__annotate__ú   s   € ÷ 6ñ 6 ñ 6ó    c                óh   € V P                  R4      pVf   R# VP                  P                  RR4      # )a  The RELATED parameter of the TRIGGER property.

Values are either "START" (default) or "END".

A value of START will set the alarm to trigger off the
start of the associated event or to-do.  A value of END will set
the alarm to trigger off the end of the associated event or to-do.

In this example, we create an alarm that triggers two hours after the
end of its parent component.

>>> from icalendar import Alarm
>>> from datetime import timedelta
>>> alarm = Alarm()
>>> alarm.TRIGGER = timedelta(hours=2)
>>> alarm.TRIGGER_RELATED = "END"
r"   ÚSTARTÚRELATED)ÚgetÚparams)ÚselfÚtriggers   & r.   ÚTRIGGER_RELATEDÚAlarm.TRIGGER_RELATEDù   s1   € ð& —(‘(˜9Ó%ˆØŠ?ÙØ�~‰~×!Ñ! )¨WÓ5Ð5r1   c               ó   € V ^8„  d   QhRR/# )r)   Úvaluer+   r,   )r-   s   "r.   r/   r0     s   € ÷ *ñ * Sñ *r1   c                ób   € V P                  R4      pVf   \        R4      hWP                  R&   R# )zSet "START" or "END".r"   Nz<You must set a TRIGGER before setting the RELATED parameter.r4   )r5   Ú
ValueErrorr6   )r7   r<   r8   s   && r.   r9   r:     s5   € ð —(‘(˜9Ó%ˆØŠ?ÜØNóð ð %*�‰�yÓ!r1   c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	# )
ÚAlarm.Triggersi  zÞThe computed times of alarm triggers.

start - triggers relative to the start of the Event or Todo (timedelta)

end - triggers relative to the end of the Event or Todo (timedelta)

absolute - triggers at a datetime in UTC
ztuple[timedelta]ÚstartÚendztuple[datetime]Úabsoluter,   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r,   r1   r.   ÚTriggersr@     s   ‡ ñ	ð  ÓØÓØ!×!r1   rK   c                óæ  € . p. p. pV P                   pVe®   \        V\        4      '       d   VP                  V4       TpM8V P                  R8X  d   VP                  V4       TpMVP                  V4       TpV P
                  pVe<   \        V P                  4       F"  pVP                  VR,          V,           4       K$  	  V P                  \        V4      \        V4      \        V4      R7      # )ar  The computed triggers of an Alarm.

This takes the TRIGGER, DURATION and REPEAT properties into account.

Here, we create an alarm that triggers 3 times before the start of the
parent component.

>>> from icalendar import Alarm
>>> from datetime import timedelta
>>> alarm = Alarm()
>>> alarm.TRIGGER = timedelta(hours=-4)  # trigger 4 hours before START
>>> alarm.DURATION = timedelta(hours=1)  # after 1 hour trigger again
>>> alarm.REPEAT = 2  # trigger 2 more times
>>> alarm.triggers.start == (timedelta(hours=-4),  timedelta(hours=-3),  timedelta(hours=-2))
True
>>> alarm.triggers.end
()
>>> alarm.triggers.absolute
()
r3   )rA   rB   rC   éÿÿÿÿ)
r"   Ú
isinstancer   Úappendr9   ÚDURATIONÚrangeÚrepeatrK   Útuple)r7   rA   rB   rC   r8   ÚaddÚdurationÚ_s   &       r.   ÚtriggersÚAlarm.triggers)  sÐ   € ð, ˆØˆØˆØ—,‘,ˆØÒÜ˜'¤4×(Ò(Ø—‘ Ô(Ø‘Ø×%Ñ%¨Ô0Ø—‘˜WÔ%Ø‘à—
‘
˜7Ô#Ø�Ø—}‘}ˆHØÒ#Ü˜tŸ{™{Ö+�AØ—J‘J˜s 2�w¨Õ1Ö2ñ ,à�}‰}Ü˜“,¤E¨#£J¼¸x»ð ó 
ð 	
r1   zóThe action invoked when the alarm triggers.

        Typical values defined by :rfc:`5545#section-3.8.6.1` are
        ``AUDIO``, ``DISPLAY``, and ``EMAIL``. The empty string is
        returned when no ``ACTION`` property is present.
        z
X-ALARMUIDzX-EVOLUTION-ALARM-UIDc               ó<   € V ^8„  d   QhRRRRRRRRR	R
RRRRRRRR/	# )r)   Ú	attendeeszlist[vCalAddress] | NoneÚconceptsr   Údescriptionz
str | NoneÚlinksr	   Úrefidsúlist[str] | str | NoneÚ
related_tor
   ÚsummaryÚuidústr | uuid.UUID | Noner*   r   r,   )r-   s   "r.   r/   r0   j  sf   € ÷ -ñ -ð ,ð-ð 'ð	-ð
  ð-ð !ð-ð 'ð-ð +ð-ð ð-ð $ð-ð 
ñ-r1   c	               ó^   <€ \         S
V `  VVVVR7      p	Wyn        W9n        W‰n        Wn        V	# )aE  Create a new alarm with all required properties.

This creates a new Alarm in accordance with :rfc:`5545`.

Parameters:
    attendees: The :attr:`attendees` of the alarm.
    concepts: The :attr:`~icalendar.cal.component.Component.concepts` of the alarm.
    description: The :attr:`description` of the alarm.
    links: The :attr:`~icalendar.cal.component.Component.links` of the alarm.
    refids: :attr:`~icalendar.cal.component.Component.refids` of the alarm.
    related_to: :attr:`~icalendar.cal.component.Component.related_to` of the alarm.
    summary: The :attr:`summary` of the alarm.
    uid: The :attr:`uid` of the alarm.

Returns:
    :class:`Alarm`

Raises:
    ~error.InvalidCalendar: If the content is not valid
        according to :rfc:`5545`.

.. warning:: As time progresses, we will be stricter with the validation.
)r]   r`   r^   r[   )ÚsuperÚnewra   r\   rb   rZ   )ÚclsrZ   r[   r\   r]   r^   r`   ra   rb   ÚalarmÚ	__class__s   "&&&&&&&& €r.   rf   Ú	Alarm.newi  sA   ø€ ôH ‘g‘kØØ!ØØð	 "ó 
ˆð  ŒØ'ÔØŒ	Ø#ŒØˆr1   c               ó$   € V ^8„  d   QhRRRRRR/# )r)   rU   útimedelta | NonerR   ú
int | Noner*   ÚNoner,   )r-   s   "r.   r/   r0   ™  s(   € ÷ !ñ !à"ð!ð ð!ð 
ñ	!r1   c                	óX   € Vf   Ve"   Ve   Vf   \        R4      hWn        W n        R # R # )Nz6DURATION and REPEAT must be set together or not at all)r   rP   r#   )r7   rU   rR   s   &&&r.   Ú_apply_duration_repeatÚAlarm._apply_duration_repeat™  s:   € ð
 Ò 6Ò#5ØÒ 6¢>Ü%ØLóð ð %ŒMØ ŽKñ $6r1   c               ó@   € V ^8„  d   QhRRRRRRRRR	R
RRRRRRRRRR/
# )r)   r\   r+   r8   útimedelta | datetimerU   rl   rR   rm   rb   rc   r]   r	   r`   r
   r^   r_   r[   r   r*   r   r,   )r-   s   "r.   r/   r0   §  sz   € ÷ ]ñ ]àð]ð &ð]ð #ð	]ð
 ð]ð $ð]ð !ð]ð +ð]ð 'ð]ð 'ð]ð 
ñ]r1   c
           	     óÊ   € V'       g   \        R4      hVf   \        R4      hV P                  VVVVVV	R7      p
V
P                  RR4       W*n        V
P	                  W44       V
# )aÛ	  Create a new DISPLAY alarm that shows a text reminder.

A DISPLAY alarm pops up a text notification at the trigger time.
This is the most common alarm type used by calendar clients.

Conforms to :rfc:`5545#section-3.6.6`.

Parameters:
    description: Required. The text to display when the alarm fires.
        Corresponds to the :attr:`description` property.
    trigger: Required. When the alarm fires, as a :class:`~datetime.timedelta`
        relative to the event start (negative means before) or as an
        absolute :class:`~datetime.datetime` (recommend UTC-aware).
    concepts: The :attr:`~icalendar.cal.component.Component.concepts` of the alarm.
    duration: Gap between repeated triggers. Must be paired with
        ``repeat``. Corresponds to the :attr:`DURATION` property.
    links: The :attr:`~icalendar.cal.component.Component.links` of the alarm.
    refids: The :attr:`~icalendar.cal.component.Component.refids` of the alarm.
    related_to: The :attr:`~icalendar.cal.component.Component.related_to` of the alarm.
    repeat: Number of *additional* times to fire after the initial
        trigger. Must be paired with ``duration``.
        Corresponds to the :attr:`REPEAT` property.
    uid: Unique identifier for the alarm or ``None``.

Returns:
    :class:`Alarm` with ``ACTION:DISPLAY`` set.

Raises:
    ~icalendar.error.InvalidCalendar: If required fields are missing
        or ``duration`` and ``repeat`` are not both provided together.

Example:
    Create a display alarm that fires 15 minutes before the event:

    .. code-block:: pycon

        >>> from datetime import timedelta
        >>> from icalendar import Alarm
        >>> alarm = Alarm.new_display(
        ...     description="Team meeting in 15 minutes",
        ...     trigger=timedelta(minutes=-15),
        ... )
        >>> print(alarm.to_ical().decode())
        BEGIN:VALARM
        ACTION:DISPLAY
        DESCRIPTION:Team meeting in 15 minutes
        TRIGGER:-PT15M
        END:VALARM

    Attach the alarm to an event:

    .. code-block:: python

        from datetime import datetime, timedelta, timezone
        from icalendar import Alarm, Event

        event = Event.new(
            summary="Team meeting",
            start=datetime(2025, 6, 1, 10, 0, tzinfo=timezone.utc),
            end=datetime(2025, 6, 1, 11, 0, tzinfo=timezone.utc),
        )
        event.add_component(Alarm.new_display(
            description="Team meeting in 15 minutes",
            trigger=timedelta(minutes=-15),
        ))
z$DISPLAY alarm requires a descriptionz DISPLAY alarm requires a trigger)r\   rb   r]   r`   r^   r[   r!   ÚDISPLAY)r   rf   rT   r"   rp   )rg   r\   r8   rU   rR   rb   r]   r`   r^   r[   rh   s   &&&&&&&&&& r.   Únew_displayÚAlarm.new_display¦  sr   € ÷^ Ü!Ð"HÓIÐIØŠ?Ü!Ð"DÓEÐEØ—w‘wØ#ØØØ!ØØð ó 
ˆð 	�	‰	�(˜IÔ&ØŒØ×$Ñ$ XÔ6Øˆr1   c               ó@   € V ^8„  d   QhRRRRRRRRR	R
RRRRRRRRRR/
# )r)   r8   rs   Úattachzstr | bytes | NonerU   rl   rR   rm   rb   rc   r]   r	   r`   r
   r^   r_   r[   r   r*   r   r,   )r-   s   "r.   r/   r0     sz   € ÷ Qñ Qà%ðQð #ðQð #ð	Qð
 ðQð $ðQð !ðQð +ðQð 'ðQð 'ðQð 
ñQr1   c
                ó  € Vf   \        R4      hV P                  VVVVV	R7      p
V
P                  RR4       Wn        V'       d4   T
P                  R\	        V\
        4      '       d   \        V4      MT4       V
P                  W44       V
# )a‰  Create a new AUDIO alarm that plays a sound.

An AUDIO alarm plays a sound at the trigger time. An optional
``attach`` URI points to the audio file to play; when omitted,
the client uses its default alert sound.

Conforms to :rfc:`5545#section-3.6.6`.

Parameters:
    trigger: Required. When the alarm fires, as a :class:`~datetime.timedelta`
        relative to the event start (negative means before) or as an
        absolute :class:`~datetime.datetime` (recommend UTC-aware).
    attach: Optional audio attachment. Pass a URI string such as
        ``"ftp://example.com/pub/sounds/bell.aud"`` for a linked
        sound file, or :class:`bytes` for inline binary audio data
        (stored as ``VALUE=BINARY``). When ``None`` the client uses
        its default sound.
    concepts: The :attr:`~icalendar.cal.component.Component.concepts` of the alarm.
    duration: Gap between repeated triggers. Must be paired with
        ``repeat``. Corresponds to the :attr:`DURATION` property.
    links: The :attr:`~icalendar.cal.component.Component.links` of the alarm.
    refids: The :attr:`~icalendar.cal.component.Component.refids` of the alarm.
    related_to: The :attr:`~icalendar.cal.component.Component.related_to` of the alarm.
    repeat: Number of *additional* times to fire after the initial
        trigger. Must be paired with ``duration``.
        Corresponds to the :attr:`REPEAT` property.
    uid: Unique identifier for the alarm or ``None``.

Returns:
    :class:`Alarm` with ``ACTION:AUDIO`` set.

Raises:
    ~icalendar.error.InvalidCalendar: If required fields are missing
        or ``duration`` and ``repeat`` are not both provided together.

Example:
    Create an audio alarm using a custom sound file:

    .. code-block:: pycon

        >>> from datetime import timedelta
        >>> from icalendar import Alarm
        >>> alarm = Alarm.new_audio(
        ...     trigger=timedelta(minutes=-5),
        ...     attach="ftp://example.com/pub/sounds/bell-01.aud",
        ... )
        >>> print(alarm.to_ical().decode())
        BEGIN:VALARM
        ACTION:AUDIO
        ATTACH:ftp://example.com/pub/sounds/bell-01.aud
        TRIGGER:-PT5M
        END:VALARM
zAUDIO alarm requires a trigger)rb   r]   r`   r^   r[   r!   ÚAUDIOÚATTACH)r   rf   rT   r"   rN   Úbytesr   rp   )rg   r8   ry   rU   rR   rb   r]   r`   r^   r[   rh   s   &&&&&&&&&& r.   Ú	new_audioÚAlarm.new_audio  sˆ   € ðD Š?Ü!Ð"BÓCÐCØ—w‘wØØØ!ØØð ó 
ˆð 	�	‰	�(˜GÔ$ØŒßØ�I‰IØ¬Z¸Ä×-FÒ-Fœ' &œ/ÈFôð 	×$Ñ$ XÔ6Øˆr1   c               óL   € V ^8„  d   QhRRRRRRRRRR	R
RRRRRRRRRRRRRRR/# )r)   ra   r+   r\   r8   rs   rZ   z#Sequence[vCalAddress] | vCalAddressÚattachmentszSequence[str] | str | NonerU   rl   rR   rm   rb   rc   r]   r	   r`   r
   r^   r_   r[   r   r*   r   r,   )r-   s   "r.   r/   r0   [  s›   € ÷ iñ iàðið ðið &ð	ið
 7ðið 0ðið #ðið ðið $ðið !ðið +ðið 'ðið 'ðið 
ñir1   c                óÄ  € \        V\        4      '       d   V.p\        V\        4      '       d   V.pV'       g   \        R4      hV'       g   \        R4      hVf   \        R4      hV'       g   \        R4      hV P                  VVVVV	V
VVR7      pVP	                  RR4       W=n        V'       d   V F  pVP	                  RV4       K  	  VP                  Wg4       V# )	aþ	  Create a new EMAIL alarm that sends an email notification.

An EMAIL alarm sends an email to each address in ``attendees`` when
the alarm fires.

Conforms to :rfc:`5545#section-3.6.6`.

Parameters:
    attendees: Required. One or more recipient addresses as
        :class:`~icalendar.prop.cal_address.vCalAddress` instances. A
        single address or a sequence of addresses. At least one is
        required.
    description: Required. Body of the email.
        Corresponds to the :attr:`description` property.
    summary: Required. Subject line of the email.
        Corresponds to the :attr:`summary` property.
    trigger: Required. When the alarm fires, as a :class:`~datetime.timedelta`
        relative to the event start (negative means before) or as an
        absolute :class:`~datetime.datetime` (recommend UTC-aware).
    attachments: Optional URI or sequence of URIs to attach to the
        email.
    concepts: The :attr:`~icalendar.cal.component.Component.concepts` of the alarm.
    duration: Gap between repeated triggers. Must be paired with
        ``repeat``. Corresponds to the :attr:`DURATION` property.
    links: The :attr:`~icalendar.cal.component.Component.links` of the alarm.
    refids: The :attr:`~icalendar.cal.component.Component.refids` of the alarm.
    related_to: The :attr:`~icalendar.cal.component.Component.related_to` of the alarm.
    repeat: Number of *additional* times to fire after the initial
        trigger. Must be paired with ``duration``.
        Corresponds to the :attr:`REPEAT` property.
    uid: Unique identifier for the alarm or ``None``.

Returns:
    :class:`Alarm` with ``ACTION:EMAIL`` set.

Raises:
    ~icalendar.error.InvalidCalendar: If required fields are missing,
        ``attendees`` is empty, or ``duration`` and ``repeat`` are not
        both provided together.

Example:
    Create an email alarm sent to two recipients:

    .. code-block:: pycon

        >>> from datetime import timedelta
        >>> from icalendar import Alarm, vCalAddress
        >>> alarm = Alarm.new_email(
        ...     summary="Meeting reminder",
        ...     description="Your meeting starts in 30 minutes.",
        ...     trigger=timedelta(minutes=-30),
        ...     attendees=[vCalAddress("mailto:user@example.com")],
        ... )
        >>> print(alarm.to_ical().decode())
        BEGIN:VALARM
        ACTION:EMAIL
        ATTENDEE:mailto:user@example.com
        DESCRIPTION:Your meeting starts in 30 minutes.
        SUMMARY:Meeting reminder
        TRIGGER:-PT30M
        END:VALARM
zEMAIL alarm requires a summaryz"EMAIL alarm requires a descriptionzEMAIL alarm requires a triggerz*EMAIL alarm requires at least one attendee)ra   r\   rb   rZ   r]   r`   r^   r[   r!   ÚEMAILr|   )rN   r+   r   rf   rT   r"   rp   )rg   ra   r\   r8   rZ   r�   rU   rR   rb   r]   r`   r^   r[   rh   Ú
attachments   &&&&&&&&&&&&&  r.   Ú	new_emailÚAlarm.new_emailZ  sÙ   € ô\ �i¤×%Ò%Ø"˜ˆIÜ�k¤3×'Ò'Ø&˜-ˆKßÜ!Ð"BÓCÐCßÜ!Ð"FÓGÐGØŠ?Ü!Ð"BÓCÐCßÜ!Ð"NÓOÐOØ—w‘wØØ#ØØØØ!ØØð ó 	
ˆð 	�	‰	�(˜GÔ$ØŒßÛ)�
Ø—	‘	˜( JÖ/ñ *à×$Ñ$ XÔ6Øˆr1   c               ó    € V ^8„  d   QhRRRR/# )r)   Únamer+   r*   r   r,   )r-   s   "r.   r/   r0   Ç  s   € ÷ :ñ :˜3ð :¨uñ :r1   c                ó8   € V P                  \        RV4      4      # )z-Return the alarm example with the given name.Úalarms)Ú	from_icalr   )rg   rˆ   s   &&r.   ÚexampleÚAlarm.exampleÆ  s   € ð �}‰}œ[¨°4Ó8Ó9Ð9r1   ©rP   r#   )r!   r"   )	r!   ÚDESCRIPTIONÚSUMMARYr"   rP   r#   r$   Ú	PROXIMITYr%   )rŽ   )r�   ÚATTENDEE)r’   r|   z
RELATED-TO)NNNNNNNN)NNNNNNN)rŒ   )1rD   rE   rF   rG   rH   rˆ   ÚrequiredÚ
singletonsÚ	inclusiveÚmultipler   r#   Úpropertyr   r   r   rP   r   r%   r   r   r   r"   r9   Úsetterr   rK   rW   r   rR   r   r!   r   rb   r   ra   r   r\   r   rZ   Úclassmethodrf   rp   rv   r~   r…   rŒ   rJ   Ú__classcell__)ri   s   @r.   r   r   &   s´  ø† ñð2 €Dð€Hð
€Jð	€Ið 4€Há ØØ	ð#	ðH ôO(€FñT ØØØð	ó	"€HñH 'Øð	ó€Lñ> %ØØØ	�9ÐØ�HÕ˜tÕ#ð'	ó-€Gð^ ô6ó ð6ð. ×Ñô*ó ð*ô"�:ô "ð ñ)
ó ð)
ðV €Fá#Øð	ó€Fñ !ØØ×ÑØ	Ð.Ð/ó€Cð
 €GØ&€KØ"€Ià÷-ñ -ó ð-õ^!ð ö]ó ð]ð~ öQó ðQðf öió ðiðV ö:ó ö:r1   r   )*rH   Ú
__future__r   r   r   r   Útypingr   r   Úicalendar.attrr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úicalendar.cal.componentr   Úicalendar.cal.examplesr   Úicalendar.errorr   Úicalendar.prop.binaryr   ÚuuidÚcollections.abcr   Úicalendar.compatibilityr   Úicalendar.propr   r   Ú__all__r,   r1   r.   Ú<module>r§      sb   ðÙ #å "ç .Ñ .ß ,÷÷ ÷ ÷ ñ õ" .Ý .Ý +Ý )çÛÝ(å,Ý*ôc
:ˆIô c
:ðL ˆ)‚r1   