§
    ‚ŠtjêK  ã                   óŠ   — d Z ddlZddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZmZ  ej        e¦  «        Z G d„ de¦  «        ZdS )	zZ
Sequence feature extraction class for common feature extractors to preprocess sequences.
é    Né   )Úis_valid_audioÚ
load_audio)ÚBatchFeatureÚFeatureExtractionMixin)ÚPaddingStrategyÚ
TensorTypeÚis_torch_tensorÚloggingÚto_numpyc                   ó  ‡ — e Zd ZdZdededefˆ fd„Z	 	 	 	 	 	 dd	eee         z  e	e
ef         z  e	e
ee         f         z  ee	e
ef                  z  d
ee
z  ez  dedz  dededz  dedz  de
ez  dz  defd„Zdej        ddfd	e	e
ej        f         ez  dedz  dededz  dedz  de	fd„Z	 	 	 dd	e	e
ej        f         ez  dedz  dedz  dedz  fd„Zdd„Zdde
ee
         z  eee
                  z  dedz  fd„Zˆ xZS )ÚSequenceFeatureExtractora¡  
    This is a general feature extraction class for speech recognition.

    Args:
        feature_size (`int`):
            The feature dimension of the extracted features.
        sampling_rate (`int`):
            The sampling rate at which the audio files should be digitalized expressed in hertz (Hz).
        padding_value (`float`):
            The value that is used to fill the padding values / vectors.
    Úfeature_sizeÚsampling_rateÚpadding_valuec                 óÐ   •— || _         || _        || _        |                     dd¦  «        | _        |                     dd¦  «        | _         t          ¦   «         j        di |¤Ž d S )NÚpadding_sideÚrightÚreturn_attention_maskT© )r   r   r   Úpopr   r   ÚsuperÚ__init__)Úselfr   r   r   ÚkwargsÚ	__class__s        €úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/feature_extraction_sequence_utils.pyr   z!SequenceFeatureExtractor.__init__)   sk   ø€ Ø(ˆÔØ*ˆÔØ*ˆÔà"ŸJšJ ~°wÑ?Ô?ˆÔØ%+§Z¢ZÐ0GÈÑ%NÔ%NˆÔ"à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"ó    TNFÚprocessed_featuresÚpaddingÚ
max_lengthÚ
truncationÚpad_to_multiple_ofr   Úreturn_tensorsÚreturnc           	      óR  ‡ ‡‡‡— t          ‰t          t          f¦  «        rHt          ‰d         t          t          f¦  «        r&ˆfd„‰d                              ¦   «         D ¦   «         Š‰ j        d         ‰vr?t          d‰ j        d         › dt          ‰                     ¦   «         ¦  «        › �¦  «        ‚‰‰ j        d                  }|�|n‰ j        }t          |¦  «        dk    r	|rg ‰d<   ‰S |d         }	t          |	t          t          f¦  «        rZd}
t          ||
         ¦  «        dk    r|
dz  }
t          ||
         ¦  «        dk    °|
t          |¦  «        k     r||
         d         }	|€kt          |	¦  «        rd}nYt          |	t          t          t          t          t          j        f¦  «        rd	}n#t          d
|	› dt          |	¦  «        › d�¦  «        ‚‰                     ¦   «         D ]c\  }}t          |d         t          t          f¦  «        rt#          |¦  «        ‰|<   Œ:t          |t          j        ¦  «        sd„ |D ¦   «         ‰|<   Œd‰                      ||¬¦  «        }‰‰ j        d                  }t          |¦  «        Št'          ˆfd„‰                     ¦   «         D ¦   «         ¦  «        st          d¦  «        ‚g }t+          ‰¦  «        D ]PŠˆfd„‰                     ¦   «         D ¦   «         }‰                      ||||¬¦  «        }|                     |¦  «         ŒQ|t0          j        k    r't5          ˆ fd„|D ¦   «         ¦  «        }t0          j        }i }t+          ‰¦  «        D ]¤Š‰                      |‰         ||||¬¦  «        }|                     ¦   «         D ]m\  }}||vrg ||<   |j        t          j        t          j        ¦  «        u r|                     t          j         ¦  «        }||                              |¦  «         ŒnŒ¥t	          ||¬¦  «        S )a2  
        Pad input values / input vectors or a batch of input values / input vectors up to predefined length or to the
        max sequence length in the batch.

        Padding side (left/right) padding values are defined at the feature extractor level (with `self.padding_side`,
        `self.padding_value`)

        <Tip>

        If the `processed_features` passed are dictionary of numpy arrays or PyTorch tensors  the
        result will use the same type unless you provide a different tensor type with `return_tensors`. In the case of
        PyTorch tensors, you will lose the specific device of your tensors however.

        </Tip>

        Args:
            processed_features ([`BatchFeature`], list of [`BatchFeature`], `dict[str, list[float]]`, `dict[str, list[list[float]]` or `list[dict[str, list[float]]]`):
                Processed inputs. Can represent one input ([`BatchFeature`] or `dict[str, list[float]]`) or a batch of
                input values / vectors (list of [`BatchFeature`], *dict[str, list[list[float]]]* or *list[dict[str,
                list[float]]]*) so you can use this method during preprocessing as well as in a PyTorch Dataloader
                collate function.

                Instead of `list[float]` you can have tensors (numpy arrays or PyTorch tensors),
                see the note above for the return type.
            padding (`bool`, `str` or [`~utils.PaddingStrategy`], *optional*, defaults to `True`):
                Select a strategy to pad the returned sequences (according to the model's padding side and padding
                index) among:

                - `True` or `'longest'`: Pad to the longest sequence in the batch (or no padding if only a single
                  sequence if provided).
                - `'max_length'`: Pad to a maximum length specified with the argument `max_length` or to the maximum
                  acceptable input length for the model if that argument is not provided.
                - `False` or `'do_not_pad'` (default): No padding (i.e., can output a batch with sequences of different
                  lengths).
            max_length (`int`, *optional*):
                Maximum length of the returned list and optionally padding length (see above).
            truncation (`bool`):
                Activates truncation to cut input sequences longer than `max_length` to `max_length`.
            pad_to_multiple_of (`int`, *optional*):
                If set will pad the sequence to a multiple of the provided value.

                This is especially useful to enable the use of Tensor Cores on NVIDIA hardware with compute capability
                `>= 7.5` (Volta), or on TPUs which benefit from having sequence lengths be a multiple of 128.
            return_attention_mask (`bool`, *optional*):
                Whether to return the attention mask. If left to the default, will return the attention mask according
                to the specific feature_extractor's default.

                [What are attention masks?](../glossary#attention-mask)
            return_tensors (`str` or [`~utils.TensorType`], *optional*):
                If set, will return tensors instead of list of python integers. Acceptable values are:

                - `'pt'`: Return PyTorch `torch.Tensor` objects.
                - `'np'`: Return Numpy `np.ndarray` objects.
        r   c                 ó0   •‡— i | ]Š‰ˆfd „‰D ¦   «         “ŒS )c                 ó    •— g | ]
}|‰         ‘ŒS r   r   )Ú.0ÚexampleÚkeys     €r   ú
<listcomp>z;SequenceFeatureExtractor.pad.<locals>.<dictcomp>.<listcomp>|   s   ø€ ÐEÐEÐE w�g˜c”lÐEÐEÐEr   r   )r)   r+   r   s    @€r   ú
<dictcomp>z0SequenceFeatureExtractor.pad.<locals>.<dictcomp>{   s?   øø€ ð "ð "ð "ØJM�ÐEÐEÐEÐEÐ2DÐEÑEÔEð"ð "ð "r   z�You should supply an instance of `transformers.BatchFeature` or list of `transformers.BatchFeature` to this method that includes z, but you provided NÚattention_maskr   ÚptÚnpztype of z
 unknown: z6. Should be one of a python, numpy, or pytorch object.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )r   )r)   Úvs     r   r,   z0SequenceFeatureExtractor.pad.<locals>.<listcomp>°   s   € Ð*FÐ*FÐ*F¸1­8°A©;¬;Ð*FÐ*FÐ*Fr   )r    r!   c              3   ó>   •K  — | ]}t          |¦  «        ‰k    V — Œd S ©N)Úlen)r)   r2   Ú
batch_sizes     €r   ú	<genexpr>z/SequenceFeatureExtractor.pad.<locals>.<genexpr>¸   s.   øè è € ÐMÐM¨A•3�q‘6”6˜ZÒ'ÐMÐMÐMÐMÐMÐMr   zLSome items in the output dictionary have a different batch size than others.c                 ó(   •— i | ]\  }}||‰         “ŒS r   r   )r)   Úkr2   Úis      €r   r-   z0SequenceFeatureExtractor.pad.<locals>.<dictcomp>½   s#   ø€ ÐEÐEÐE¡$ ! Q�a˜˜1œÐEÐEÐEr   )r!   r#   r"   c              3   óX   •K  — | ]$}t          |‰j        d                   ¦  «        V — Œ%dS )r   N)r5   Úmodel_input_names)r)   Úinput_slicer   s     €r   r7   z/SequenceFeatureExtractor.pad.<locals>.<genexpr>É   s8   øè è € ÐmÐmÈ[�S ¨TÔ-CÀAÔ-FÔ!GÑHÔHÐmÐmÐmÐmÐmÐmr   )r!   Úpadding_strategyr#   r   )Útensor_type)!Ú
isinstanceÚlistÚtupleÚdictr   Úkeysr<   Ú
ValueErrorr   r5   r
   ÚintÚfloatr0   ÚndarrayÚtypeÚitemsr   Ú_get_padding_strategiesÚallÚvaluesÚrangeÚ	_truncateÚappendr   ÚLONGESTÚmaxÚ
MAX_LENGTHÚ_padÚdtypeÚfloat64ÚastypeÚfloat32)r   r   r    r!   r"   r#   r   r$   Úrequired_inputÚfirst_elementÚindexr+   Úvaluer>   Útruncated_inputsÚinputsÚinputs_sliceÚbatch_outputsÚoutputsr6   r:   s   ``                 @@r   ÚpadzSequenceFeatureExtractor.pad3   s×  øøøø€ õL Ð(­4µ¨-Ñ8Ô8ð 	½ZÐHZÐ[\ÔH]Õ`dÕfrÐ_sÑ=tÔ=tð 	ð"ð "ð "ð "ØQcÐdeÔQf×QkÒQkÑQmÔQmð"ñ "ô "Ðð
 Ô! !Ô$Ð,>Ð>Ð>Ýð6Ø15Ô1GÈÔ1Jð6ð 6åÐ+×0Ò0Ñ2Ô2Ñ3Ô3ð6ð 6ñô ð ð ,¨DÔ,BÀ1Ô,EÔFˆà%:Ð%FÐ!Ð!ÈDÔLfð 	õ ˆ~ÑÔ !Ò#Ð#Ø$ð :Ø79Ð"Ð#3Ñ4Ø%Ð%ð ' qÔ)ˆÝ�m¥d­E ]Ñ3Ô3ð 	9àˆEÝ�n UÔ+Ñ,Ô,°Ò1Ð1Ø˜‘
�õ �n UÔ+Ñ,Ô,°Ò1Ð1à•s˜>Ñ*Ô*Ò*Ð*Ø .¨uÔ 5°aÔ 8�àÐ!Ý˜}Ñ-Ô-ð Ø!%��Ý˜M­Cµ½½eÅRÄZÐ+PÑQÔQð Ø!%��å ðK˜}ð Kð K½¸]Ñ8KÔ8Kð Kð Kð Kñô ð ð
 -×2Ò2Ñ4Ô4ð 	Gð 	G‰JˆC�Ý˜% œ(¥S­% LÑ1Ô1ð GÝ*2°5©/¬/Ð" 3Ñ'Ð'Ý ¥r¤zÑ2Ô2ð Gð +GÐ*FÀÐ*FÑ*FÔ*FÐ" 3Ñ'øð  ×7Ò7ÀÐT^Ð7Ñ_Ô_Ðà+¨DÔ,BÀ1Ô,EÔFˆå˜Ñ(Ô(ˆ
ÝÐMÐMÐMÐMÐ1C×1JÒ1JÑ1LÔ1LÐMÑMÔMÑMÔMð 	mÝÐkÑlÔlÐlàÐÝ�zÑ"Ô"ð 		2ð 		2ˆAØEÐEÐEÐEÐ*<×*BÒ*BÑ*DÔ*DÐEÑEÔEˆFàŸ>š>ØØ%Ø#5Ø%ð	 *ñ ô ˆLð ×#Ò# LÑ1Ô1Ð1Ð1à�Ô6Ò6Ð6åÐmÐmÐmÐmÐ\lÐmÑmÔmÑmÔmˆJÝ.Ô9ÐàˆÝ�zÑ"Ô"ð 	1ð 	1ˆAà—i’iØ  Ô#Ø%Ø!1Ø#5Ø&;ð  ñ ô ˆGð &Ÿmšm™oœoð 1ð 1‘
��UØ˜mÐ+Ð+Ø)+�M #Ñ&Ø”;¥"¤(­2¬:Ñ"6Ô"6Ð6Ð6Ø!ŸLšL­¬Ñ4Ô4�EØ˜cÔ"×)Ò)¨%Ñ0Ô0Ð0Ð0ð1õ ˜M°~ÐFÑFÔFÐFr   r>   c                 óv  — || j         d                  }|t          j        k    rt          |¦  «        }|�|�||z  dk    r||z  dz   |z  }|t          j        k    ot          |¦  «        |k     }|r4d|vr0t          j        t          |¦  «        t
          j        ¬¦  «        |d<   |�r|t          |¦  «        z
  }| j        dk    rc|r t          j	        |d         d|f¦  «        |d<   | j
        dk    rd|fdfnd|f}	t          j	        ||	d| j        ¬	¦  «        || j         d         <   n’| j        d
k    rc|r t          j	        |d         |df¦  «        |d<   | j
        dk    r|dfdfn|df}	t          j	        ||	d| j        ¬	¦  «        || j         d         <   n$t          dt          | j        ¦  «        z   ¦  «        ‚|S )a€  
        Pad inputs (on left/right and up to predefined length or max length in the batch)

        Args:
            processed_features (`Union[dict[str, np.ndarray], BatchFeature]`):
                Dictionary of input values (`np.ndarray[float]`) / input vectors (`list[np.ndarray[float]]`) or batch
                of inputs values (`list[np.ndarray[int]]`) / input vectors (`list[np.ndarray[int]]`)
            max_length (`int`, *optional*):
                Maximum length of the returned list and optionally padding length (see below)
            padding_strategy (`PaddingStrategy`, *optional*, default to `PaddingStrategy.DO_NOT_PAD`):
                PaddingStrategy to use for padding.

                - PaddingStrategy.LONGEST Pad to the longest sequence in the batch
                - PaddingStrategy.MAX_LENGTH: Pad to the max length (default)
                - PaddingStrategy.DO_NOT_PAD: Do not pad
                The feature_extractor padding sides are defined in self.padding_side:

                    - 'left': pads on the left of the sequences
                    - 'right': pads on the right of the sequences
            pad_to_multiple_of (`int`, *optional*):
                Integer if set will pad the sequence to a multiple of the provided value. This is especially useful to
                enable the use of Tensor Core on NVIDIA hardware with compute capability `>= 7.5` (Volta), or on TPUs
                which benefit from having sequence lengths be a multiple of 128.
            return_attention_mask (`bool`, *optional*):
                Set to False to avoid returning attention mask (default: set to model specifics)
        r   Nr   r.   )rU   r   )r   r   Úconstant)Úconstant_valuesÚleftzInvalid padding strategy:)r<   r   rQ   r5   Ú
DO_NOT_PADr0   ÚonesÚint32r   rb   r   r   rE   Ústr)
r   r   r!   r>   r#   r   rY   Úneeds_to_be_paddedÚ
differenceÚpadding_shapes
             r   rT   zSequenceFeatureExtractor._padà   sD  € ðD ,¨DÔ,BÀ1Ô,EÔFˆà�Ô6Ò6Ð6Ý˜^Ñ,Ô,ˆJàÐ!Ð&8Ð&DÈ*ÐWiÑJiÐmnÒJnÐJnØ%Ð);Ñ;¸qÑ@ÐDVÑVˆJà-µÔ1KÒKÐpÕPSÐTbÑPcÔPcÐfpÒPpÐà ð 	`Ð%5Ð=OÐ%OÐ%OÝ35´7½3¸~Ñ;NÔ;NÕVXÔV^Ð3_Ñ3_Ô3_ÐÐ/Ñ0àñ 	WØ#¥c¨.Ñ&9Ô&9Ñ9ˆJØÔ  GÒ+Ð+Ø(ð Ý;=¼6Ø*Ð+;Ô<¸qÀ*¸oñ<ô <Ð&Ð'7Ñ8ð >BÔ=NÐQRÒ=RÐ=R ! Z °&Ð 9Ð 9ÐYZÐ\fÐXg�Ý@BÄØ" M°:ÈtÔOaðAñ Aô AÐ" 4Ô#9¸!Ô#<Ñ=Ð=ð Ô" fÒ,Ð,Ø(ð Ý;=¼6Ø*Ð+;Ô<¸zÈ1¸oñ<ô <Ð&Ð'7Ñ8ð >BÔ=NÐQRÒ=RÐ=R *¨a °&Ð 9Ð 9ÐYcÐefÐXg�Ý@BÄØ" M°:ÈtÔOaðAñ Aô AÐ" 4Ô#9¸!Ô#<Ñ=Ð=õ !Ð!<½sÀ4ÔCTÑ?UÔ?UÑ!UÑVÔVÐVà!Ð!r   c                 ó4  — |s|S |r|€t          d¦  «        ‚|| j        d                  }|�|�||z  dk    r||z  dz   |z  }t          |¦  «        |k    }|r@|| j        d                  d|…         || j        d         <   d|v r|d         d|…         |d<   |S )a  
        Truncate inputs to predefined length or max length in the batch

        Args:
            processed_features(`Union[dict[str, np.ndarray], BatchFeature]`):
                Dictionary of input values (`np.ndarray[float]`) / input vectors (`list[np.ndarray[float]]`) or batch
                of inputs values (`list[np.ndarray[int]]`) / input vectors (`list[np.ndarray[int]]`)
            max_length (`int`, *optional*):
                maximum length of the returned list and optionally padding length (see below)
            pad_to_multiple_of (`int`, *optional*) :
                Integer if set will pad the sequence to a multiple of the provided value. This is especially useful to
                enable the use of Tensor Core on NVIDIA hardware with compute capability `>= 7.5` (Volta), or on TPUs
                which benefit from having sequence lengths be a multiple of 128.
            truncation (`bool`, *optional*):
                Activates truncation to cut input sequences longer than `max_length` to `max_length`.
        NzKWhen setting ``truncation=True``, make sure that ``max_length`` is defined.r   r   r.   )rE   r<   r5   )r   r   r!   r#   r"   rY   Úneeds_to_be_truncateds          r   rO   z"SequenceFeatureExtractor._truncate(  sð   € ð. ð 	lØ%Ð%Øð 	l˜JÐ.ÝÐjÑkÔkÐkà+¨DÔ,BÀ1Ô,EÔFˆð Ð!Ð&8Ð&DÈ*ÐWiÑJiÐmnÒJnÐJnØ%Ð);Ñ;¸qÑ@ÐDVÑVˆJå # NÑ 3Ô 3°jÒ @Ðà ð 	iØ<NÈtÔOeÐfgÔOhÔ<iÐjuÐkuÐjuÔ<vÐ˜tÔ5°aÔ8Ñ9ØÐ#5Ð5Ð5Ø7IÐJZÔ7[Ð\gÐ]gÐ\gÔ7hÐ"Ð#3Ñ4à!Ð!r   c                 ól  — |durN|du rt           j        }nIt          |t           ¦  «        st          |¦  «        }n$t          |t           ¦  «        r|}nt           j        }|€-|t           j        k    rt          dt           j        › d�¦  «        ‚|t           j        k    r| j        €t          d¦  «        ‚|S )z3
        Find the correct padding strategy
        FTNzWhen setting ``padding=z(``, make sure that max_length is definedz­Asking to pad but the feature_extractor does not have a padding value. Please select a value to use as `padding_value`. For example: `feature_extractor.padding_value = 0.0`.)r   rQ   r@   rg   rS   rE   r   )r   r    r!   r>   s       r   rK   z0SequenceFeatureExtractor._get_padding_strategiesS  sÚ   € ð ˜%ÐÐØ˜$ˆˆÝ#2Ô#:Ð Ð Ý ­Ñ9Ô9ð +Ý#2°7Ñ#;Ô#;Ð Ð Ý˜G¥_Ñ5Ô5ð +Ø#*Ð øå.Ô9Ðð ÐØ¥?Ô#=Ò=Ð=Ý Ør­oÔ.HÐrÐrÐrñô ð ð
 �Ô9Ò9Ð9¸tÔ?QÐ?YÝð]ñô ð ð
  Ðr   Úaudio_url_or_urlsc                 óF  ‡ ‡— ‰r‰n‰ j         Št          |t          ¦  «        r*t          |d         t          ¦  «        sˆˆ fd„|D ¦   «         S t          |t          ¦  «        rt          |‰¬¦  «        S t          |¦  «        r|S t          dt          |¦  «        › �¦  «        ‚)zê
        Convert a single or a list of urls into the corresponding `np.ndarray` objects.

        If a single url is passed, the return value will be a single object. If a list is passed a list of objects is
        returned.
        r   c                 ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS )©r   )Úfetch_audio)r)   Úxr   r   s     €€r   r,   z8SequenceFeatureExtractor.fetch_audio.<locals>.<listcomp>}  s,   ø€ Ð`Ð`Ð`È�D×$Ò$ Q°mÐ$ÑDÔDÐ`Ð`Ð`r   rt   z=only a single or a list of entries is supported but got type=)	r   r@   rA   rG   rj   r   r   Ú	TypeErrorrI   )r   rq   r   s   ` `r   ru   z$SequenceFeatureExtractor.fetch_audios  sÄ   øø€ ð *7ÐN˜˜¸DÔ<NˆÝÐ'­Ñ.Ô.ð 	wµzÐBSÐTUÔBVÕX]Ñ7^Ô7^ð 	wØ`Ð`Ð`Ð`Ð`ÐN_Ð`Ñ`Ô`Ð`ÝÐ)­3Ñ/Ô/ð 	wÝÐ/¸}ÐMÑMÔMÐMÝÐ-Ñ.Ô.ð 	wØ$Ð$åÐuÕ\`ÐarÑ\sÔ\sÐuÐuÑvÔvÐvr   )TNFNNN)NNN)FNr4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   rG   r   r   rA   rC   rj   Úboolr   r	   rb   rg   r0   rH   rT   rO   rK   ru   Ú__classcell__)r   s   @r   r   r      s¸  ø€ € € € € ð
ð 
ð# Sð #¸ð #ÈUð #ð #ð #ð #ð #ð #ð" 15Ø!%Ø Ø)-Ø-1Ø26ðkGð kGà(Ø
ˆ|Ô
ñà
ˆs�LÐ Ô
!ñ"ð ˆs�D˜Ô&Ð&Ô
'ñ(ð ˆt�C˜Ð%Ô&Ô
'ñ	(ðkGð ˜‘˜oÑ-ðkGð ˜$‘JðkGð ðkGð   $™JðkGð  $ d™{ðkGð ˜jÑ(¨4Ñ/ðkGð 
ðkGð kGð kGð kGð` "&Ø,;Ô,FØ)-Ø-1ðF"ð F"à   b¤j Ô1°LÑ@ðF"ð ˜$‘JðF"ð *ð	F"ð
   $™JðF"ð  $ d™{ðF"ð 
ðF"ð F"ð F"ð F"ðV "&Ø)-Ø"&ð)"ð )"à   b¤j Ô1°LÑ@ð)"ð ˜$‘Jð)"ð   $™Jð	)"ð
 ˜4‘Kð)"ð )"ð )"ð )"ðV ð  ð  ð  ð@wð w¨S°4¸´9©_¸tÀDÈÄI¼Ñ-Nð wÐ_bÐeiÑ_ið wð wð wð wð wð wð wð wr   r   )r{   Únumpyr0   Úaudio_utilsr   r   Úfeature_extraction_utilsr   r   Úutilsr   r	   r
   r   r   Ú
get_loggerrx   Úloggerr   r   r   r   ú<module>r„      sÔ   ððð ð Ð Ð Ð à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rð 
ˆÔ	˜HÑ	%Ô	%€ðgwð gwð gwð gwð gwÐ5ñ gwô gwð gwð gwð gwr   