o
    &hͥ                     @   sz  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' g dZ(dgZ)d	gZ*d
d Z+e+dZ,e+dZ-e+dZ.e&dG dd deZ/e&dG dd de/Z0e'dG dd deZ1e'dG dd de/Z2G dd deZ3G dd deZ4G dd  d eZ5G d!d" d"eZ6G d#d$ d$e	Z7de,j8_9ege,j8_:ee-j;_9e2eeeege-j;_:ee-j<_9e2e1e3ege-j<_:ee-j=_9e2eee7ege-j=_:ee-j>_9e2e/ge-j>_:ee-j?_9e2e/ge-j?_:ee5e-j@_9e2eege-j@_:ee4e-jA_9e2eege-jA_:ee6e-jB_9e2eege-jB_:ee/e-jC_9e2eege-jC_:e4e-jD_9e2e1ge-jD_:e5e-jE_9e2ege-jE_:e4e-jF_9e2e1ge-jF_:ee-jG_9e2ge-jG_:e5e-jH_9e2ege-jH_:ee-jI_9e2ge-jI_:e3e-jJ_9e2e1ge-jJ_:ee-jK_9e2ge-jK_:e6e-jL_9e2ege-jL_:e2e-jM_9e2ge-jM_:ee-jN_9e2ge-jN_:ee-jO_9e2ge-jO_:ee-jP_9e2ge-jP_:e3e-jQ_9e2e1e3ege-jQ_:ee-jR_9e2e1ge-jR_:de-jS_9e2ege-jS_:de-jT_9e2ege-jT_:de-jU_9e2ege-jU_:ee-jV_9e5ge-jV_:e"e-jW_9e5ge-jW_:ee-jX_9e5ge-jX_:de-jY_9e4e4ge-jY_:e3e-jZ_9e4ge-jZ_:e1e-j[_9e4ge-j[_:ee-j\_9e4ge-j\_:e3e-j]_9e4e3ge-j]_:e2e-j^_9e2eege-j^_:ee-j__9g e-j__:de-j`_9ege-j`_:e/e-ja_9e/ge-ja_:ee/e-jb_9eege-jb_:e/e-jc_9e/ege-jc_:e2e-jd_9ege-jd_:e2e-je_9ege-je_:e/e-jf_9ege-jf_:e/e-jg_9ege-jg_:e/e-jh_9ee/ge-jh_:e se!serde-ji_9de-jj_9e se!ree-jk_9de-jl_9e2ge-jl_:de-jm_9e/ge-jm_:de-jn_9e/ee/ege-jn_:e2e-jo_9e/ge-jo_:ze-jpZpW n eqy   d%d& ZpY nw eep_9e/gep_:ee-jr_9e/ge-jr_:e/e-js_9e/e5ge-js_:de-jt_9e/e5e/ge-jt_:ee-ju_9e6ge-ju_:ee-jv_9e6ge-jv_:ee7e-jw_9e6eege-jw_:G d'd( d(e	Zxde-jy_9e/e1eeege-jy_:de-jz_9e/e/ge-jz_:de-j{_9e/eee7eeege-j{_:e/e-j|_9ege-j|_:ee-j}_9e/e/ge-j}_:eexe-j~_9e/eeeege-j~_:ee6e-j_9e/eege-j_:ee/e-j_9e/eege-j_:exe-j_9e/e1eege-j_:ee-j_9e/ge-j_:de-j_9e/ge-j_:ee-j_9e1ge-j_:ee-j_9e1e1ge-j_:e1e-j_9ege-j_:d)d* Zd+d, Zd-d. Zd/d0 Zi Zd1d2 Zddd3d4d5ZG d6d7 d7e	Zeddd8d9d:d;Zg ZdFd<d=Zd>d? ZdFd@dAZdFdBdCZedDdE ZdS )G    N)contextmanager)CDLL	CFUNCTYPEPOINTERArgumentError	StructureUnion	addressof	alignmentbyrefc_boolc_char_pc_doublec_floatc_intc_longdoublec_size_tc_uintc_uint8c_void_pcastmemmovesizeofutil   )ctypes_patch)	__arm____i386__
__x86_64__c_ptrdiff_tctype_for_encodingctype_for_typeencoding_for_ctypewith_encodingwith_preferred_encoding)Class
FoundationIMPIvarMethodSELadd_ivar
add_methodautoreleasepool	get_classget_ivarlibclibobjcload_library
objc_blockobjc_idobjc_method_descriptionobjc_property_t
objc_superobject_isClasssend_message
send_superset_ivarshould_use_fpretshould_use_stretz/usr/libz/System/Library/Frameworksc              	   C   s   t | }|durt|S tD ]}zttj|d|  d W   S  ty*   Y qw tD ]}zttj|| d | W   S  tyG   Y q-w t	d| d)a  Load and return the C library with the given name.

    If the library could not be found, a :class:`ValueError` is raised.

    Internally, this function uses :func:`ctypes.util.find_library` to search
    for the library in the system-standard locations. If the library cannot be
    found this way, it is attempted to load the library from certain hard-coded
    locations, as a fallback for systems where ``find_library`` does not work
    (such as iOS).
    Nlibz.dylibz
.frameworkzLibrary z
 not found)
r   Zfind_libraryr   	_lib_pathospathjoinOSError_framework_path
ValueError)namerA   loc rH   k/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-packages/rubicon/objc/runtime.pyr2   M   s    
 r2   cobjcr&      @c                   @      e Zd ZdZdS )r4   zxThe `id <https://developer.apple.com/documentation/objectivec/id?language=objc>`__
    type from ``<objc/objc.h>``.
    N__name__
__module____qualname____doc__rH   rH   rH   rI   r4   w       r4   s   @?c                   @   rM   )r3   a  The low-level type of block pointers.

    This type tells Rubicon's internals that the object in question is a block
    and not just a regular Objective-C object, which affects method argument and
    return value conversions. For more details, see :ref:`objc_blocks`.

    .. note::

        This type does not correspond to an actual C type or Objective-C class.
        Although the internal structure of block objects is documented, as well
        as the fact that they are Objective-C objects, they do not have a
        documented type or class name and are not fully defined in any header
        file.

        Aside from the special conversion behavior, this type is equivalent to
        :class:`objc_id`.
    NrN   rH   rH   rH   rI   r3   ~   rS   r3      :c                       sD   e Zd ZdZedd Zd fdd	Zd fdd	Zd	d
 Z  Z	S )r*   zzThe `SEL <https://developer.apple.com/documentation/objectivec/sel?language=objc>`__
    type from ``<objc/objc.h>``.
    c                 C   s   | j du r	tdt| S )z&The selector's name as :class:`bytes`.Nz Cannot get name of null selector)valuerE   r1   sel_getNameselfrH   rH   rI   rF      s   

zSEL.nameNc                    s>   t |ttfrtt|}d|_|S t | |}d|_|S )zThe constructor can be called with a :class:`bytes` or :class:`str` object to
        obtain a selector with that value.

        (The normal arguments supported by :class:`~ctypes.c_void_p` are
        still accepted.)
        TF)	
isinstancebytesstrr1   sel_registerNameensure_bytes_initedsuper__new__)clsinitrX   	__class__rH   rI   r`      s   zSEL.__new__c                    s   | j st | d S d S N)r^   r_   __init__)rX   rb   rc   rH   rI   rf      s   zSEL.__init__c                 C   s&   dj t| | jd u rd dS | jdS )Nz-{cls.__module__}.{cls.__qualname__}({name!r}))ra   rF   )formattyperU   rF   rW   rH   rH   rI   __repr__   s
   zSEL.__repr__re   )
rO   rP   rQ   rR   propertyrF   r`   rf   ri   __classcell__rH   rH   rc   rI   r*      s    
r*      #c                   @   rM   )r%   z~The `Class <https://developer.apple.com/documentation/objectivec/class?language=objc>`__
    type from ``<objc/objc.h>``.
    NrN   rH   rH   rH   rI   r%      rS   r%   c                   @   rM   )r'   a/  The `IMP <https://developer.apple.com/documentation/objectivec/imp?language=objc>`__
    type from ``<objc/objc.h>``.

    An :class:`IMP` cannot be called directly --- it must be cast to the
    correct :func:`~ctypes.CFUNCTYPE` first, to provide the necessary
    information about its signature.
    NrN   rH   rH   rH   rI   r'          r'   c                   @   rM   )r)   zThe `Method <https://developer.apple.com/documentation/objectivec/method?language=objc>`__
    type from ``<objc/runtime.h>``.
    NrN   rH   rH   rH   rI   r)      rm   r)   c                   @   rM   )r(   zThe `Ivar <https://developer.apple.com/documentation/objectivec/ivar?language=objc>`__
    type from ``<objc/runtime.h>``.
    NrN   rH   rH   rH   rI   r(      rm   r(   c                   @   rM   )r6   zThe `objc_property_t <https://developer.apple.com/documentation/objectivec/objc_property_t?language=objc>`__
    type from ``<objc/runtime.h>``.
    NrN   rH   rH   rH   rI   r6      rm   r6   c                   @   s    e Zd ZdZdefdefgZdS )objc_property_attribute_tz
    The `objc_property_attribute_t <https://developer.apple.com/documentation/objectivec/objc_property_attribute_t?language=objc>`__
    structure from ``<objc/runtime.h>``.
    rF   rU   N)rO   rP   rQ   rR   r   _fields_rH   rH   rH   rI   rn      s
    rn   c                 C   s   t t | S )zReturn whether the given Objective-C object is a class (or a metaclass).

        This is the emulated version of the object_isClass runtime function, for systems
        older than OS X 10.10 or iOS 8, where the real function doesn't exist yet.
        )r1   class_isMetaClassobject_getClass)objrH   rH   rI   r8     s   r8   c                   @       e Zd ZdZdefdefgZdS )r5   zThe `objc_method_description <https://developer.apple.com/documentation/objectivec/objc_method_description?language=objc>`__
    structure from ``<objc/runtime.h>``.
    rF   typesN)rO   rP   rQ   rR   r*   r   ro   rH   rH   rH   rI   r5   $  
    r5   c                 C   s   t | tr| S | dS )zConvert the given string to :class:`bytes` if necessary.

    If the argument is already :class:`bytes`, it is returned unchanged;
    if it is :class:`str`, it is encoded as UTF-8.
    utf-8)rY   rZ   encode)xrH   rH   rI   r]     s   

r]   c                 C   s   t t| S )zGet the Objective-C class with the given name as a :class:`Class` object.

    If no class with the given name is loaded, ``None`` is returned, and
    the Objective-C runtime will log a warning message.
    )r1   objc_getClassr]   )rF   rH   rH   rI   r.     s   r.   c                 C   sT   t | t turd}|S trt| dv}|S tr t| dk}|S tr&d}|S d}|S )zwReturn whether a method returning the given type must be called using
    ``objc_msgSend_stret`` on the current system.F)r               T)rh   r   r   r   r   r   )restyperetvalrH   rH   rI   r=     s   r=   c                 C   s"   t r| tkS tr| tttfv S dS )zwReturn whether a method returning the given type must be called using
    ``objc_msgSend_fpret`` on the current system.F)r   r   r   r   r   )r~   rH   rH   rI   r<     s
   r<   c                 C   sv   z	t | g|R  W S  ty:   t| rd}n	t| rd}nd}t| }| |_ttg| |_|t | g|R < | Y S w )aT  Get the appropriate variant of ``objc_msgSend`` for calling a method with the
    given return and argument types.

    :param restype: The return type of the method to be called.
    :param argtypes: The argument types of the method to be called, excluding
        the self and _cmd arguments.
    :return: A C function for ``objc_msgSend`` or one of its variants, with its
        return and argument types configured correctly based on the ``restype``
        and ``argtypes`` arguments. The ``restype`` and ``argtypes`` attributes
        of the returned function *must not* be modified.
    objc_msgSend_fpretobjc_msgSend_stretZobjc_msgSend)	_msg_send_cacheKeyErrorr<   r=   r1   r~   r4   r*   argtypes)r~   r   Z	send_namesendrH   rH   rI   _msg_send_for_types  s   
r   )r   varargsc             
   G   s:  z| j } W n	 ty   Y nw t| ts$tdt| j dt| j t|ts-t|}|du r3g }|du r9g }t	|t	|krPtdt	| dt	| dt
||}z|| |g||R  }W n0 ty } z$|jd }	|jjdd	}
d
dd |D }|
 d|	 d| g|_|d}~ww |tkrt|}|S )a	  Call a method on the receiver with the given selector and arguments.

    This is the equivalent of an Objective-C method call like ``[receiver sel:args]``.

    .. note::

        Some Objective-C methods take variadic arguments (``varargs``), for example
        `+[NSString stringWithFormat:] <https://developer.apple.com/documentation/foundation/nsstring/stringwithformat:?language=objc>`_.
        When using :func:`send_message`, variadic arguments are treated
        differently from regular arguments: they are not passed as normal
        function arguments in ``*args``, but as a list in a separate ``varargs``
        keyword argument.

        This explicit separation of regular and variadic arguments protects
        against accidentally passing too many arguments into a method. By
        default these extra arguments would be considered ``varargs`` and passed on
        to the method, even if the method in question doesn't take ``varargs``.
        Because of how the Objective-C runtime and most C calling conventions
        work, this error would otherwise be silently ignored.

        The types of ``varargs`` are not included in the ``argtypes`` list. Instead,
        the values are automatically converted to C types using the default
        :mod:`ctypes` argument conversion rules. To ensure that all ``varargs`` are
        converted to the expected C types, it is recommended to manually convert
        all ``varargs`` to :mod:`ctypes` types instead of relying on automatic
        conversions. For example:

        .. code-block:: python

            send_message(
                NSString,
                "stringWithFormat:",
                at("%i %s %@"),
                restype=objc_id,
                argtypes=[objc_id],
                varargs=[c_int(123), cast(b"C string", c_char_p), at("ObjC string")],
            )

    :param receiver: The object on which to call the method, as an
        :class:`~rubicon.objc.api.ObjCInstance` or :class:`.objc_id`.
    :param selector: The name of the method as a :class:`str`, :class:`bytes`,
        or :class:`SEL`.
    :param args: The method arguments.
    :param restype: The return type of the method.
    :param argtypes: The argument types of the method, as a :class:`list`.
        Defaults to ``[]``.
    :param varargs: Variadic arguments for the method, as a :class:`list`.
        Defaults to ``[]``. These arguments are converted according to the
        default :mod:`ctypes` conversion rules.
    z1Receiver must be an ObjCInstance or objc_id, not .N"Inconsistent number of arguments () and argument types ()r   backslashreplace)errorsz, c                 s   s    | ]}|j V  qd S re   )rO   ).0trH   rH   rI   	<genexpr>T  s    zsend_message.<locals>.<genexpr> z; argtypes: )_as_parameter_AttributeErrorrY   r4   	TypeErrorrh   rP   rQ   r*   lenr   r   argsrF   decoderB   r   )receiverselectorr~   r   r   r   r   resulterrorerrselZ
valid_argsrH   rH   rI   r9     sN   4




r9   c                   @   rs   )r7   zThe `objc_super <https://developer.apple.com/documentation/objectivec/objc_super?language=objc>`__
    structure from ``<objc/message.h>``.
    r   Zsuper_classN)rO   rP   rQ   rR   r4   r%   ro   rH   rH   rH   rI   r7   ]  ru   r7   F)r~   r   r   _allow_deallocc                G   s  z| j } W n	 ty   Y nw t|tst|}|du rg }|du r$g }t|t|kr;tdt| dt| dt| tsQtdt| j dt| j	 d|sa|j
dkratjd	d
d dS z|j }W n	 tyo   Y nw t|trvnt|tu rt|t}ntdt|j dt|j	 t| }|jdu rt| d}	td|	dt||}
t|rtd }ntd }||_tttg| |_|t|
|g||R  }|tkrt|}|S )a   In the context of the given class, call a superclass method on the receiver with
    the given selector and arguments.

    This is the equivalent of an Objective-C method call like
    ``[super sel:args]`` in the class ``cls``.

    In practice, the first parameter should always be the special variable
    ``__class__``, and the second parameter should be ``self``. A typical
    :func:`send_super` call would be ``send_super(__class__, self, 'init')``
    for example.

    The special variable ``__class__`` is defined by Python and stands for the
    class object that is being created by the current ``class`` block. The
    exact reasons why ``__class__`` must be passed manually are somewhat
    technical, and are not directly relevant to users of :func:`send_super`.
    For a full explanation, see issue `beeware/rubicon-objc#107
    <https://github.com/beeware/rubicon-objc/issues/107>`__ and PR
    `beeware/rubicon-objc#108 <https://github.com/beeware/rubicon-objc/pull/108>`__.

    Although it is possible to pass other values than ``__class__`` and
    ``self`` for the first two parameters, this is strongly discouraged. Doing
    so is not supported by the Objective-C language, and relies on
    implementation details of the superclasses.

    :param cls: The class in whose context the ``super`` call is happening, as
        an :class:`~rubicon.objc.api.ObjCClass` or :class:`Class`.
    :param receiver: The object on which to call the method, as an
        :class:`~rubicon.objc.api.ObjCInstance`, :class:`.objc_id`, or
        :class:`~ctypes.c_void_p`.
    :param selector: The name of the method as a :class:`str`, :class:`bytes`,
        or :class:`SEL`.
    :param args: The method arguments.
    :param restype: The return type of the method.
    :param argtypes: The argument types of the method, as a :class:`list`.
        Defaults to ``[]``.
    :param varargs: Variadic arguments for the method, as a :class:`list`.
        Defaults to ``[]``. These arguments are converted according to the
        default :mod:`ctypes` conversion rules.
    Nr   r   r   zEMissing or invalid cls argument: expected an ObjCClass or Class, not r   z
send_super requires the current class to be passed explicitly as the first argument. To fix this error, pass the special name __class__ as the first argument to send_super.s   dealloczYou should not call the superclass dealloc manually when overriding dealloc. Rubicon-objc will call it for you after releasing objects stored in properties and ivars.rz   )
stacklevelzInvalid type for receiver: rv   zThe specified class z3 is a root class, it cannot be used with send_superobjc_msgSendSuper_stretZobjc_msgSendSuper)r   r   rY   r*   r   r   r%   rh   rP   rQ   rF   warningswarnr4   r   r   r1   class_getSuperclassrU   class_getNamer   rE   r7   r=   r~   r   r   r   )ra   r   r   r~   r   r   r   r   Z	super_ptr
class_nameZsuper_structr   r   rH   rH   rI   r:   i  s~   3









r:   c           
      C   s   dd |D }|d t ksJ |d tksJ |d dur-t|d ttfr-t|d  t|}ddd	 |D }t| }||}|rQt	
| |t|t| nt	| |t|t|}	|	sgtd
|jdt| |S )a  Add a new instance method to the given class.

    To add a class method, add an instance method to the metaclass.

    :param cls: The Objective-C class to which to add the method, as an
        :class:`~rubicon.objc.api.ObjCClass` or :class:`Class`.
    :param selector: The name for the new method, as a :class:`str`,
        :class:`bytes`, or :class:`SEL`.
    :param method: The method implementation, as a Python callable or a C
        function address.
    :param encoding: The method's signature (return type and argument types) as
        a :class:`list`. The types of the implicit ``self`` and ``_cmd``
        parameters must be included in the signature.
    :param replace: If the class already implements a method with the given
        name, replaces the current implementation if ``True``. Raises a
        :class:`ValueError` error otherwise.
    :return: The ctypes C function pointer object that was created for the
        method's implementation. This return value can be ignored. (In version
        0.4.0 and older, callers were required to manually keep a reference to
        this function pointer object to ensure that it isn't garbage-collected.
        Rubicon now does this automatically.)
    c                 S   s   g | ]}t |qS rH   )r!   )r   tprH   rH   rI   
<listcomp>  s    zadd_method.<locals>.<listcomp>r   rz   r   N    c                 s   s    | ]}t |V  qd S re   )r"   )r   ctyperH   rH   rI   r     s    zadd_method.<locals>.<genexpr>zA method with the name z already exists)r4   r*   
issubclassr   r   r   Zmake_callback_returnablerB   r   r1   class_replaceMethodr   r'   class_addMethodrE   rF   _keep_alive_impsappend)
ra   r   methodencodingreplace	signaturert   Z	cfunctypeimpresrH   rH   rI   r,     s    
r,   c              	   C   s&   t | t|t|t|tt|S )z;Add a new instance variable of type ``vartype`` to ``cls``.)r1   class_addIvarr]   r   r
   r"   r!   )ra   rF   vartyperH   rH   rI   r+   '  s   
r+   c                 C   s   z| j } W n	 ty   Y nw tt| t|}tt|}|r3t| j	t
| }t|S t|trAtt| ||S || j	t
| S )ap  Get the value of obj's ``ivar`` named ``varname``.

    The returned object is a :mod:`ctypes` data object.

    For non-object types (everything except :class:`.objc_id` and subclasses),
    the returned data object is backed by the ``ivar``'s actual memory. This means
    that the data object is only usable as long as the "owner" object is alive,
    and writes to it will directly change the ``ivar``'s value.

    For object types, the returned data object is independent of the ``ivar``'s
    memory. This is because object ``ivars`` may be weak, and thus cannot always
    be accessed directly by their address.
    )r   r   r1   class_getInstanceVariablerq   r]   r    ivar_getTypeEncodingobjc_loadWeakRetainedrU   ivar_getOffsetobjc_autoreleaseReturnValuer   r4   r   object_getIvarZfrom_address)rr   varnameweakivarr   rU   rH   rH   rI   r/   3  s   


r/   c                 C   s  z| j } W n	 ty   Y nw tt| t|}tt|}t||s5t	d|dt
|d|tt
|t|krZt	d|dt
|dtt
| d|dt| 
|rjt| jt| | dS t|trxt| || dS t| jt| t|t| dS )zSet obj's ``ivar`` ``varname`` to value. If ``weak`` is ``True``, only a weak
    reference to the value is stored.

    value must be a :mod:`ctypes` data object whose type matches that of
    the ``ivar``.
    zIncompatible type for ivar z: z& is not a subclass of the ivar's type z
 has size z, but the ivar's type N)r   r   r1   r   rq   r]   r    r   rY   r   rh   r   objc_storeWeakrU   r   r   r4   object_setIvarr   r	   )rr   r   rU   r   r   r   rH   rH   rI   r;   U  s@   



r;   c               	   c   s.    t  } zdV  W t |  dS t |  w )ak  A context manager that has the same effect as a @autoreleasepool block in
    Objective-C.

    Any objects that are autoreleased within the context will receive a release message
    when exiting the context. When running an event loop, AppKit will create an
    autorelease pool at the beginning of each cycle of the event loop and drain it at
    the end. You therefore do not need to use @autoreleasepool blocks when running an
    event loop. However, they may be still be useful when your code temporarily
    allocates large amounts of memory which you want to explicitly free before the end
    of a cycle.
    N)r1   objc_autoreleasePoolPushobjc_autoreleasePoolPop)poolrH   rH   rI   r-   }  s
   r-   )F)r@   r   
contextlibr   ctypesr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   rt   r   r   r   r   r    r!   r"   r#   r$   __all__r?   rD   r2   r0   r1   r&   r4   r3   r*   r%   r'   r)   r(   r6   rn   freer~   r   r   r   Zclass_addPropertyZclass_addProtocolZclass_conformsToProtocolZclass_copyIvarListZclass_copyMethodListZclass_copyPropertyListZclass_copyProtocolListZclass_getClassMethodZclass_getClassVariableZclass_getInstanceMethodZclass_getInstanceSizer   Zclass_getIvarLayoutZclass_getMethodImplementationr   Zclass_getPropertyr   Zclass_getVersionZclass_getWeakIvarLayoutrp   r   Zclass_respondsToSelectorZclass_setIvarLayoutZclass_setVersionZclass_setWeakIvarLayoutZivar_getNamer   r   Zmethod_exchangeImplementationsZmethod_getImplementationZmethod_getNameZmethod_getTypeEncodingZmethod_setImplementationZobjc_allocateClassPairr   r   r   Zobjc_copyProtocolListZobjc_getAssociatedObjectry   Zobjc_getMetaClassZobjc_getProtocolr   r   r   r   r   Zobjc_registerClassPairZobjc_removeAssociatedObjectsZobjc_setAssociatedObjectrq   r8   r   Zobject_getClassNamer   r   Zproperty_getAttributesZproperty_getNameZproperty_copyAttributeListr5   Zprotocol_addMethodDescriptionZprotocol_addProtocolZprotocol_addPropertyZobjc_allocateProtocolZprotocol_conformsToProtocolZ"protocol_copyMethodDescriptionListZprotocol_copyPropertyListZprotocol_copyProtocolListZprotocol_getMethodDescriptionZprotocol_getNameZobjc_registerProtocolrV   Zsel_isEqualr\   r]   r.   r=   r<   r   r   r9   r7   r:   r   r,   r+   r/   r;   r-   rH   rH   rH   rI   <module>   s   d,%)

























	

	

	



,_ 
0

"(