Updated python-purple's debianization.
authorBruno Abinader <bruno.abinader@openbossa.org>
Tue, 9 Dec 2008 14:39:24 +0000 (14:39 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:22 +0000 (17:11 -0400)
FIXES:
 - Updated python-purple's debianization to support Maemo.
 - Added cython-made purple.c file.

Signed-off-by: Bruno Abinader <bruno.abinader@openbossa.org>
Acked-by: Anderson Briglia <anderson.briglia@openbossa.org>

git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1654 596f6dd7-e928-0410-a184-9e12fd12cf7e

debian/control
debian/files [deleted file]
debian/pyversions [deleted file]
debian/rules
purple.c [new file with mode: 0644]

index 6a817d4..08da9c2 100644 (file)
@@ -2,14 +2,15 @@ Source: python-purple
 Section: python
 Priority: optional
 Maintainer: Bruno Abinader <bruno.abinader@openbossa.org>
 Section: python
 Priority: optional
 Maintainer: Bruno Abinader <bruno.abinader@openbossa.org>
-Build-Depends: cdbs, debhelper, libpurple-dev
+Build-Depends: cdbs, debhelper, libpurple-dev, libglib2.0-dev
 Standards-Version: 3.8.0
 
 Package: python-purple
 Architecture: any
 Standards-Version: 3.8.0
 
 Package: python-purple
 Architecture: any
-Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}
-Provides: ${python:Provides}
-Suggests: ${shlibs:Suggests}, cython
+Depends: python | python2.5, libc6 (>= 2.1.3), libglib2.0-0 (>= 2.12.0),
+ libpurple0 (>= 2.5.1)
+Provides: python2.5-purple
+Suggests: cython | python2.5-cython
 Description: Python bind for libpurple
  Libpurple is a library intended to be used by programmers seeking
  to write an IM client that connects to many IM networks.
 Description: Python bind for libpurple
  Libpurple is a library intended to be used by programmers seeking
  to write an IM client that connects to many IM networks.
diff --git a/debian/files b/debian/files
deleted file mode 100644 (file)
index 6e0d65d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-python-purple_0.1_i386.deb python optional
diff --git a/debian/pyversions b/debian/pyversions
deleted file mode 100644 (file)
index 95e3ba8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-2.5
index a8f2098..735ac07 100755 (executable)
@@ -1,10 +1,37 @@
 #!/usr/bin/make -f
 #!/usr/bin/make -f
-# -*- makefile -*-
+DEB_DIR=debian/python-purple
 
 
-DEB_PYTHON_SYSTEM=pysupport
+build:
 
 
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/python-distutils.mk
+clean:
+       dh_testdir
+       python2.5 setup_dist.py clean
+       rm -f `find $(CURDIR) -name '*.py[co]'`
+       rm -rf build-stamp build
+       rm -rf $(DEB_DIR)
+       #rm -rf purple.c
+       dh_clean install-stamp
 
 
-install/cython::
-#      dh_installman debian/python-purple.1
+install: build install-stamp
+install-stamp:
+       dh_testdir
+       dh_testroot
+       dh_installdirs
+       python2.5 setup_dist.py install --root=$(DEB_DIR)
+
+binary-indep: build install
+       dh_testdir
+       dh_testroot
+       dh_installdocs
+       dh_installchangelogs
+       dh_compress -X.py
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary-arch:
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
diff --git a/purple.c b/purple.c
new file mode 100644 (file)
index 0000000..a8c4a07
--- /dev/null
+++ b/purple.c
@@ -0,0 +1,23985 @@
+/* Generated by Cython 0.10 on Tue Dec  9 09:17:03 2008 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#include "structmember.h"
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#if PY_VERSION_HEX < 0x02040000
+  #define METH_COEXIST 0
+#endif
+#if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;
+  #define PY_SSIZE_T_MAX INT_MAX
+  #define PY_SSIZE_T_MIN INT_MIN
+  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
+  #define PyNumber_Index(o)    PyNumber_Int(o)
+  #define PyIndex_Check(o)     PyNumber_Check(o)
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
+  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define PyVarObject_HEAD_INIT(type, size) \
+          PyObject_HEAD_INIT(type) size,
+  #define PyType_Modified(t)
+
+  typedef struct {
+       void *buf;
+       PyObject *obj;
+       Py_ssize_t len;
+       Py_ssize_t itemsize;
+       int readonly;
+       int ndim;
+       char *format;
+       Py_ssize_t *shape;
+       Py_ssize_t *strides;
+       Py_ssize_t *suboffsets;
+       void *internal;
+  } Py_buffer;
+
+  #define PyBUF_SIMPLE 0
+  #define PyBUF_WRITABLE 0x0001
+  #define PyBUF_LOCK 0x0002
+  #define PyBUF_FORMAT 0x0004
+  #define PyBUF_ND 0x0008
+  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+
+#endif
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define Py_TPFLAGS_CHECKTYPES 0
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyString_Type                PyBytes_Type
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define PyBytes_Type                 PyString_Type
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+#else
+  #define _USE_MATH_DEFINES
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+#include <math.h>
+#define __PYX_HAVE_API__purple
+#include "libpurple/purple.h"
+#include "c_purple.h"
+#include "glib.h"
+#include "libpurple/blist.h"
+#include "libpurple/connection.h"
+#include "libpurple/log.h"
+#include "libpurple/proxy.h"
+#include "libpurple/status.h"
+#include "libpurple/account.h"
+#include "libpurple/prefs.h"
+#include "libpurple/accountopt.h"
+#include "libpurple/buddyicon.h"
+#include "libpurple/plugin.h"
+#include "libpurple/prpl.h"
+#include "time.h"
+#include "libpurple/conversation.h"
+#include "libpurple/core.h"
+#include "libpurple/debug.h"
+#include "libpurple/eventloop.h"
+#include "libpurple/ft.h"
+#include "libpurple/idle.h"
+#include "libpurple/notify.h"
+#include "libpurple/pounce.h"
+#include "libpurple/privacy.h"
+#include "libpurple/request.h"
+#include "libpurple/roomlist.h"
+#include "libpurple/server.h"
+#include "libpurple/signals.h"
+#include "libpurple/value.h"
+#include "libpurple/savedstatuses.h"
+#include "libpurple/xmlnode.h"
+#include "libpurple/util.h"
+
+
+#ifdef __GNUC__
+#define INLINE __inline__
+#elif _WIN32
+#define INLINE __inline
+#else
+#define INLINE 
+#endif
+
+typedef struct {PyObject **p; char *s; long n; char is_unicode; char intern; char is_identifier;} __Pyx_StringTabEntry; /*proto*/
+
+
+
+static int __pyx_skip_dispatch = 0;
+
+
+/* Type Conversion Predeclarations */
+
+#if PY_MAJOR_VERSION < 3
+#define __Pyx_PyBytes_FromString PyString_FromString
+#define __Pyx_PyBytes_AsString   PyString_AsString
+#else
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_AsString   PyBytes_AsString
+#endif
+
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static INLINE int __Pyx_PyObject_IsTrue(PyObject* x);
+static INLINE PY_LONG_LONG __pyx_PyInt_AsLongLong(PyObject* x);
+static INLINE unsigned PY_LONG_LONG __pyx_PyInt_AsUnsignedLongLong(PyObject* x);
+static INLINE Py_ssize_t __pyx_PyIndex_AsSsize_t(PyObject* b);
+
+#define __pyx_PyInt_AsLong(x) (PyInt_CheckExact(x) ? PyInt_AS_LONG(x) : PyInt_AsLong(x))
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+
+static INLINE unsigned char __pyx_PyInt_unsigned_char(PyObject* x);
+static INLINE unsigned short __pyx_PyInt_unsigned_short(PyObject* x);
+static INLINE char __pyx_PyInt_char(PyObject* x);
+static INLINE short __pyx_PyInt_short(PyObject* x);
+static INLINE int __pyx_PyInt_int(PyObject* x);
+static INLINE long __pyx_PyInt_long(PyObject* x);
+static INLINE signed char __pyx_PyInt_signed_char(PyObject* x);
+static INLINE signed short __pyx_PyInt_signed_short(PyObject* x);
+static INLINE signed int __pyx_PyInt_signed_int(PyObject* x);
+static INLINE signed long __pyx_PyInt_signed_long(PyObject* x);
+static INLINE long double __pyx_PyInt_long_double(PyObject* x);
+#ifdef __GNUC__
+/* Test for GCC > 2.95 */
+#if __GNUC__ > 2 ||               (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
+#define likely(x)   __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ > 2 ... */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+    
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+static const char **__pyx_f;
+
+static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
+    PyObject *r;
+    if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
+        r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (PyTuple_CheckExact(o) && 0 <= i && i < PyTuple_GET_SIZE(o)) {
+        r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0) || !is_unsigned))
+        r = PySequence_GetItem(o, i);
+    else {
+        PyObject *j = (likely(i >= 0) || !is_unsigned) ? PyInt_FromLong(i) : PyLong_FromUnsignedLongLong((sizeof(unsigned long long) > sizeof(Py_ssize_t) ? (1ULL << (sizeof(Py_ssize_t)*8)) : 0) + i);
+        if (!j)
+            return 0;
+        r = PyObject_GetItem(o, j);
+        Py_DECREF(j);
+    }
+    return r;
+}
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+
+static INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
+    const char* function_name, int kw_allowed); /*proto*/
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact); /*proto*/
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+    if (likely(PyList_CheckExact(L))) {
+        if (PyList_Append(L, x) < 0) return NULL;
+        Py_INCREF(Py_None);
+        return Py_None; // this is just to have an accurate signature
+    }
+    else {
+        return PyObject_CallMethod(L, "append", "(O)", x);
+    }
+}
+
+static void __Pyx_WriteUnraisable(const char *name); /*proto*/
+
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+
+static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+
+/* Type declarations */
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":22
+ * cimport purple
+ * 
+ * cdef class Buddy:             # <<<<<<<<<<<<<<
+ *     """
+ *     Buddy class
+ */
+
+struct __pyx_obj_6purple_Buddy {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Buddy *__pyx_vtab;
+  PyObject *__account;
+  PyObject *__name;
+  PyObject *__exists;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+ * include "util.pxd"
+ * 
+ * cdef class Purple:             # <<<<<<<<<<<<<<
+ *     """ Purple class.
+ * 
+ */
+
+struct __pyx_obj_6purple_Purple {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Purple *__pyx_vtab;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":56
+ *     USE_ENVVAR = property(get_USE_ENVVAR)
+ * 
+ * cdef class ProxyInfo:             # <<<<<<<<<<<<<<
+ * 
+ *     cdef proxy.PurpleProxyInfo *c_proxyinfo
+ */
+
+struct __pyx_obj_6purple_ProxyInfo {
+  PyObject_HEAD
+  PurpleProxyInfo *c_proxyinfo;
+  PyObject *types;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":22
+ * cimport purple
+ * 
+ * cdef class Protocol:             # <<<<<<<<<<<<<<
+ *     """
+ *     Protocol class
+ */
+
+struct __pyx_obj_6purple_Protocol {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Protocol *__pyx_vtab;
+  PyObject *__id;
+  PyObject *__exists;
+};
+
+struct __pyx_obj_6purple_ProxyInfoType {
+  PyObject_HEAD
+  PurpleProxyType c_type;
+};
+
+struct __pyx_obj_6purple_Conversation {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Conversation *__pyx_vtab;
+  PyObject *__account;
+  PyObject *__name;
+  PyObject *__type;
+  PyObject *__exists;
+};
+
+struct __pyx_obj_6purple_Account {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Account *__pyx_vtab;
+  PyObject *__username;
+  PyObject *__protocol;
+  PyObject *__core;
+  PyObject *__exists;
+};
+
+
+struct __pyx_vtabstruct_6purple_Protocol {
+  PurplePlugin *(*_get_structure)(struct __pyx_obj_6purple_Protocol *);
+};
+static struct __pyx_vtabstruct_6purple_Protocol *__pyx_vtabptr_6purple_Protocol;
+
+
+struct __pyx_vtabstruct_6purple_Buddy {
+  PurpleBuddy *(*_get_structure)(struct __pyx_obj_6purple_Buddy *);
+};
+static struct __pyx_vtabstruct_6purple_Buddy *__pyx_vtabptr_6purple_Buddy;
+
+
+struct __pyx_vtabstruct_6purple_Conversation {
+  PurpleConversation *(*_get_structure)(struct __pyx_obj_6purple_Conversation *);
+};
+static struct __pyx_vtabstruct_6purple_Conversation *__pyx_vtabptr_6purple_Conversation;
+
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+ * include "util.pxd"
+ * 
+ * cdef class Purple:             # <<<<<<<<<<<<<<
+ *     """ Purple class.
+ * 
+ */
+
+struct __pyx_vtabstruct_6purple_Purple {
+  void (*__core_ui_ops_ui_prefs_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_debug_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_ui_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_quit)(struct __pyx_obj_6purple_Purple *);
+  GHashTable *(*__core_ui_ops_get_ui_info)(struct __pyx_obj_6purple_Purple *);
+};
+static struct __pyx_vtabstruct_6purple_Purple *__pyx_vtabptr_6purple_Purple;
+
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":22
+ * cimport purple
+ * 
+ * cdef class Account:             # <<<<<<<<<<<<<<
+ *     """
+ *     Account class
+ */
+
+struct __pyx_vtabstruct_6purple_Account {
+  PurpleAccount *(*_get_structure)(struct __pyx_obj_6purple_Account *);
+};
+static struct __pyx_vtabstruct_6purple_Account *__pyx_vtabptr_6purple_Account;
+/* Module declarations from glib */
+
+/* Module declarations from account */
+
+/* Module declarations from prefs */
+
+/* Module declarations from accountopt */
+
+/* Module declarations from buddyicon */
+
+/* Module declarations from blist */
+
+/* Module declarations from prpl */
+
+/* Module declarations from plugin */
+
+/* Module declarations from connection */
+
+/* Module declarations from conversation */
+
+/* Module declarations from core */
+
+/* Module declarations from debug */
+
+/* Module declarations from eventloop */
+
+/* Module declarations from ft */
+
+/* Module declarations from idle */
+
+/* Module declarations from notify */
+
+/* Module declarations from pounce */
+
+/* Module declarations from privacy */
+
+/* Module declarations from proxy */
+
+/* Module declarations from request */
+
+/* Module declarations from roomlist */
+
+/* Module declarations from server */
+
+/* Module declarations from signals */
+
+/* Module declarations from value */
+
+/* Module declarations from status */
+
+/* Module declarations from savedstatuses */
+
+/* Module declarations from xmlnode */
+
+/* Module declarations from util */
+
+/* Module declarations from purple */
+
+static PyTypeObject *__pyx_ptype_6purple_Purple = 0;
+static PyTypeObject *__pyx_ptype_6purple_Protocol = 0;
+static PyTypeObject *__pyx_ptype_6purple_ProxyInfoType = 0;
+static PyTypeObject *__pyx_ptype_6purple_ProxyInfo = 0;
+static PyTypeObject *__pyx_ptype_6purple_Account = 0;
+static PyTypeObject *__pyx_ptype_6purple_Buddy = 0;
+static PyTypeObject *__pyx_ptype_6purple_Conversation = 0;
+static GHashTable *__pyx_v_6purple_c_ui_info;
+static char *__pyx_v_6purple_c_ui_name;
+static char *__pyx_v_6purple_c_ui_version;
+static char *__pyx_v_6purple_c_ui_website;
+static char *__pyx_v_6purple_c_ui_dev_website;
+static PurpleAccountUiOps __pyx_v_6purple_c_account_ui_ops;
+static PurpleBlistUiOps __pyx_v_6purple_c_blist_ui_ops;
+static PurpleConnectionUiOps __pyx_v_6purple_c_conn_ui_ops;
+static PurpleConversationUiOps __pyx_v_6purple_c_conv_ui_ops;
+static PurpleCoreUiOps __pyx_v_6purple_c_core_ui_ops;
+static PurpleEventLoopUiOps __pyx_v_6purple_c_eventloop_ui_ops;
+static PurpleNotifyUiOps __pyx_v_6purple_c_notify_ui_ops;
+static PurpleRequestUiOps __pyx_v_6purple_c_request_ui_ops;
+static PurpleAccountRequestAuthorizationCb __pyx_v_6purple_c_request_authorize_authorize_cb;
+static PurpleAccountRequestAuthorizationCb __pyx_v_6purple_c_request_authorize_deny_cb;
+static void *__pyx_v_6purple_c_request_authorize_user_data;
+static void __pyx_f_6purple_notify_added(PurpleAccount *, const char *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_status_changed(PurpleAccount *, PurpleStatus *); /*proto*/
+static void __pyx_f_6purple_request_add(PurpleAccount *, const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_request_authorize(PurpleAccount *, const char *, const char *, const char *, const char *, gboolean, PurpleAccountRequestAuthorizationCb, PurpleAccountRequestAuthorizationCb, void *); /*proto*/
+static void __pyx_f_6purple_close_account_request(void *); /*proto*/
+static void __pyx_f_6purple___group_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___other_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple_new_list(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_new_node(PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_show(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_update(PurpleBuddyList *, PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_remove(PurpleBuddyList *, PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_destroy(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_set_visible(PurpleBuddyList *, gboolean); /*proto*/
+static void __pyx_f_6purple_request_add_buddy(PurpleAccount *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_request_add_chat(PurpleAccount *, PurpleGroup *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_request_add_group(void); /*proto*/
+static void __pyx_f_6purple_connect_progress(PurpleConnection *, const char *, size_t, size_t); /*proto*/
+static void __pyx_f_6purple_connected(PurpleConnection *); /*proto*/
+static void __pyx_f_6purple_disconnected(PurpleConnection *); /*proto*/
+static void __pyx_f_6purple_notice(PurpleConnection *, const char *); /*proto*/
+static void __pyx_f_6purple_report_disconnect(PurpleConnection *, const char *); /*proto*/
+static void __pyx_f_6purple_network_connected(void); /*proto*/
+static void __pyx_f_6purple_network_disconnected(void); /*proto*/
+static void __pyx_f_6purple_report_disconnect_reason(PurpleConnection *, PurpleConnectionError, const char *); /*proto*/
+static void __pyx_f_6purple_create_conversation(PurpleConversation *); /*proto*/
+static void __pyx_f_6purple_destroy_conversation(PurpleConversation *); /*proto*/
+static void __pyx_f_6purple_write_chat(PurpleConversation *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_write_im(PurpleConversation *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_write_conv(PurpleConversation *, const char *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_chat_add_users(PurpleConversation *, GList *, gboolean); /*proto*/
+static void __pyx_f_6purple_chat_rename_user(PurpleConversation *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_chat_remove_users(PurpleConversation *, GList *); /*proto*/
+static void __pyx_f_6purple_chat_update_user(PurpleConversation *, const char *); /*proto*/
+static void __pyx_f_6purple_present(PurpleConversation *); /*proto*/
+static gboolean __pyx_f_6purple_has_focus(PurpleConversation *); /*proto*/
+static gboolean __pyx_f_6purple_custom_smiley_add(PurpleConversation *, const char *, gboolean); /*proto*/
+static void __pyx_f_6purple_custom_smiley_write(PurpleConversation *, const char *, const guchar *, gsize); /*proto*/
+static void __pyx_f_6purple_custom_smiley_close(PurpleConversation *, const char *); /*proto*/
+static void __pyx_f_6purple_send_confirm(PurpleConversation *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_message(PurpleNotifyMsgType, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_email(PurpleConnection *, const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_emails(PurpleConnection *, size_t, gboolean, const char **, const char **, const char **, const char **); /*proto*/
+static void *__pyx_f_6purple_notify_formatted(const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_searchresults(PurpleConnection *, const char *, const char *, const char *, PurpleNotifySearchResults *, gpointer); /*proto*/
+static void __pyx_f_6purple_notify_searchresults_new_rows(PurpleConnection *, PurpleNotifySearchResults *, void *); /*proto*/
+static void *__pyx_f_6purple_notify_userinfo(PurpleConnection *, const char *, PurpleNotifyUserInfo *); /*proto*/
+static void *__pyx_f_6purple_notify_uri(const char *); /*proto*/
+static void __pyx_f_6purple_close_notify(PurpleNotifyType, void *); /*proto*/
+static void *__pyx_f_6purple_request_input(const char *, const char *, const char *, const char *, gboolean, gboolean, gchar *, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void *__pyx_f_6purple_request_choice(const char *, const char *, const char *, int, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *, va_list); /*proto*/
+static void *__pyx_f_6purple_request_action(const char *, const char *, const char *, int, PurpleAccount *, const char *, PurpleConversation *, void *, size_t, va_list); /*proto*/
+static void *__pyx_f_6purple_request_fields(const char *, const char *, const char *, PurpleRequestFields *, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void *__pyx_f_6purple_request_file(const char *, const char *, gboolean, GCallback, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void __pyx_f_6purple_close_request(PurpleRequestType, void *); /*proto*/
+static void *__pyx_f_6purple_request_folder(const char *, const char *, GCallback, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void __pyx_f_6purple_signal_signed_on_cb(PurpleConnection *, gpointer); /*proto*/
+static void __pyx_f_6purple_signal_signed_off_cb(PurpleConnection *, gpointer); /*proto*/
+static void __pyx_f_6purple_signal_connection_error_cb(PurpleConnection *, PurpleConnectionError, const gchar *); /*proto*/
+static void __pyx_f_6purple_signal_buddy_signed_on_cb(PurpleBuddy *); /*proto*/
+static void __pyx_f_6purple_signal_buddy_signed_off_cb(PurpleBuddy *); /*proto*/
+static gboolean __pyx_f_6purple_signal_receiving_im_msg_cb(PurpleAccount *, char **, char **, PurpleConversation *, PurpleMessageFlags *); /*proto*/
+static void __pyx_f_6purple_jabber_receiving_xmlnode_cb(PurpleConnection *, xmlnode **, gpointer); /*proto*/
+
+
+/* Implementation of purple */
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_2;
+static PyObject *__pyx_int_3;
+static PyObject *__pyx_int_4;
+static PyObject *__pyx_int_5;
+static PyObject *__pyx_int_6;
+static PyObject *__pyx_int_7;
+static PyObject *__pyx_int_8;
+static PyObject *__pyx_int_9;
+static PyObject *__pyx_int_10;
+static PyObject *__pyx_int_11;
+static PyObject *__pyx_int_12;
+static PyObject *__pyx_int_13;
+static PyObject *__pyx_int_14;
+static PyObject *__pyx_int_15;
+static PyObject *__pyx_int_16;
+static char __pyx_k___init__[] = "__init__";
+static PyObject *__pyx_kp___init__;
+static char __pyx_k_destroy[] = "destroy";
+static PyObject *__pyx_kp_destroy;
+static char __pyx_k___get_ui_name[] = "__get_ui_name";
+static PyObject *__pyx_kp___get_ui_name;
+static char __pyx_k_ui_name[] = "ui_name";
+static PyObject *__pyx_kp_ui_name;
+static char __pyx_k_1[] = "__glib_iteration_when_idle";
+static PyObject *__pyx_kp_1;
+static char __pyx_k_purple_init[] = "purple_init";
+static PyObject *__pyx_kp_purple_init;
+static char __pyx_k_add_callback[] = "add_callback";
+static PyObject *__pyx_kp_add_callback;
+static char __pyx_k_signal_connect[] = "signal_connect";
+static PyObject *__pyx_kp_signal_connect;
+static char __pyx_k_accounts_get_all[] = "accounts_get_all";
+static PyObject *__pyx_kp_accounts_get_all;
+static char __pyx_k_2[] = "accounts_get_all_active";
+static PyObject *__pyx_kp_2;
+static char __pyx_k_protocols_get_all[] = "protocols_get_all";
+static PyObject *__pyx_kp_protocols_get_all;
+static char __pyx_k___get_exists[] = "__get_exists";
+static PyObject *__pyx_kp___get_exists;
+static char __pyx_k_exists[] = "exists";
+static PyObject *__pyx_kp_exists;
+static char __pyx_k___get_id[] = "__get_id";
+static PyObject *__pyx_kp___get_id;
+static char __pyx_k_id[] = "id";
+static PyObject *__pyx_kp_id;
+static char __pyx_k___get_name[] = "__get_name";
+static PyObject *__pyx_kp___get_name;
+static char __pyx_k_name[] = "name";
+static PyObject *__pyx_kp_name;
+static char __pyx_k_3[] = "__get_options_labels";
+static PyObject *__pyx_kp_3;
+static char __pyx_k_options_labels[] = "options_labels";
+static PyObject *__pyx_kp_options_labels;
+static char __pyx_k_4[] = "__get_options_values";
+static PyObject *__pyx_kp_4;
+static char __pyx_k_options_values[] = "options_values";
+static PyObject *__pyx_kp_options_values;
+static char __pyx_k_get_NONE[] = "get_NONE";
+static PyObject *__pyx_kp_get_NONE;
+static char __pyx_k_NONE[] = "NONE";
+static PyObject *__pyx_kp_NONE;
+static char __pyx_k_get_USE_GLOBAL[] = "get_USE_GLOBAL";
+static PyObject *__pyx_kp_get_USE_GLOBAL;
+static char __pyx_k_USE_GLOBAL[] = "USE_GLOBAL";
+static PyObject *__pyx_kp_USE_GLOBAL;
+static char __pyx_k_get_HTTP[] = "get_HTTP";
+static PyObject *__pyx_kp_get_HTTP;
+static char __pyx_k_HTTP[] = "HTTP";
+static PyObject *__pyx_kp_HTTP;
+static char __pyx_k_5[] = "get_SOCKS4";
+static PyObject *__pyx_kp_5;
+static char __pyx_k_6[] = "get_SOCKS5";
+static PyObject *__pyx_kp_6;
+static char __pyx_k_get_USE_ENVVAR[] = "get_USE_ENVVAR";
+static PyObject *__pyx_kp_get_USE_ENVVAR;
+static char __pyx_k_USE_ENVVAR[] = "USE_ENVVAR";
+static PyObject *__pyx_kp_USE_ENVVAR;
+static char __pyx_k_set_type[] = "set_type";
+static PyObject *__pyx_kp_set_type;
+static char __pyx_k_set_host[] = "set_host";
+static PyObject *__pyx_kp_set_host;
+static char __pyx_k_set_port[] = "set_port";
+static PyObject *__pyx_kp_set_port;
+static char __pyx_k_set_username[] = "set_username";
+static PyObject *__pyx_kp_set_username;
+static char __pyx_k_set_password[] = "set_password";
+static PyObject *__pyx_kp_set_password;
+static char __pyx_k_get_types[] = "get_types";
+static PyObject *__pyx_kp_get_types;
+static char __pyx_k_set_info[] = "set_info";
+static PyObject *__pyx_kp_set_info;
+static char __pyx_k___is_connected[] = "__is_connected";
+static PyObject *__pyx_kp___is_connected;
+static char __pyx_k_is_connected[] = "is_connected";
+static PyObject *__pyx_kp_is_connected;
+static char __pyx_k___is_connecting[] = "__is_connecting";
+static PyObject *__pyx_kp___is_connecting;
+static char __pyx_k_is_connecting[] = "is_connecting";
+static PyObject *__pyx_kp_is_connecting;
+static char __pyx_k___is_disconnected[] = "__is_disconnected";
+static PyObject *__pyx_kp___is_disconnected;
+static char __pyx_k_is_disconnected[] = "is_disconnected";
+static PyObject *__pyx_kp_is_disconnected;
+static char __pyx_k___get_core[] = "__get_core";
+static PyObject *__pyx_kp___get_core;
+static char __pyx_k_core[] = "core";
+static PyObject *__pyx_kp_core;
+static char __pyx_k___get_username[] = "__get_username";
+static PyObject *__pyx_kp___get_username;
+static char __pyx_k_username[] = "username";
+static PyObject *__pyx_kp_username;
+static char __pyx_k___get_protocol[] = "__get_protocol";
+static PyObject *__pyx_kp___get_protocol;
+static char __pyx_k_protocol[] = "protocol";
+static PyObject *__pyx_kp_protocol;
+static char __pyx_k_7[] = "_get_protocol_options";
+static PyObject *__pyx_kp_7;
+static char __pyx_k_protocol_options[] = "protocol_options";
+static PyObject *__pyx_kp_protocol_options;
+static char __pyx_k___get_password[] = "__get_password";
+static PyObject *__pyx_kp___get_password;
+static char __pyx_k_password[] = "password";
+static PyObject *__pyx_kp_password;
+static char __pyx_k___get_alias[] = "__get_alias";
+static PyObject *__pyx_kp___get_alias;
+static char __pyx_k_alias[] = "alias";
+static PyObject *__pyx_kp_alias;
+static char __pyx_k___get_user_info[] = "__get_user_info";
+static PyObject *__pyx_kp___get_user_info;
+static char __pyx_k_user_info[] = "user_info";
+static PyObject *__pyx_kp_user_info;
+static char __pyx_k_8[] = "__get_remember_password";
+static PyObject *__pyx_kp_8;
+static char __pyx_k_remember_password[] = "remember_password";
+static PyObject *__pyx_kp_remember_password;
+static char __pyx_k___get_enabled[] = "__get_enabled";
+static PyObject *__pyx_kp___get_enabled;
+static char __pyx_k_enabled[] = "enabled";
+static PyObject *__pyx_kp_enabled;
+static char __pyx_k___get_status_types[] = "__get_status_types";
+static PyObject *__pyx_kp___get_status_types;
+static char __pyx_k_status_types[] = "status_types";
+static PyObject *__pyx_kp_status_types;
+static char __pyx_k___get_active_status[] = "__get_active_status";
+static PyObject *__pyx_kp___get_active_status;
+static char __pyx_k_active_status[] = "active_status";
+static PyObject *__pyx_kp_active_status;
+static char __pyx_k_set_protocol[] = "set_protocol";
+static PyObject *__pyx_kp_set_protocol;
+static char __pyx_k_9[] = "set_protocol_options";
+static PyObject *__pyx_kp_9;
+static char __pyx_k_set_alias[] = "set_alias";
+static PyObject *__pyx_kp_set_alias;
+static char __pyx_k_set_user_info[] = "set_user_info";
+static PyObject *__pyx_kp_set_user_info;
+static char __pyx_k_10[] = "set_remember_password";
+static PyObject *__pyx_kp_10;
+static char __pyx_k_set_enabled[] = "set_enabled";
+static PyObject *__pyx_kp_set_enabled;
+static char __pyx_k_new[] = "new";
+static PyObject *__pyx_kp_new;
+static char __pyx_k_remove[] = "remove";
+static PyObject *__pyx_kp_remove;
+static char __pyx_k_connect[] = "connect";
+static PyObject *__pyx_kp_connect;
+static char __pyx_k_disconnect[] = "disconnect";
+static PyObject *__pyx_kp_disconnect;
+static char __pyx_k_add_buddy[] = "add_buddy";
+static PyObject *__pyx_kp_add_buddy;
+static char __pyx_k_remove_buddy[] = "remove_buddy";
+static PyObject *__pyx_kp_remove_buddy;
+static char __pyx_k_get_buddies_online[] = "get_buddies_online";
+static PyObject *__pyx_kp_get_buddies_online;
+static char __pyx_k_request_add_buddy[] = "request_add_buddy";
+static PyObject *__pyx_kp_request_add_buddy;
+static char __pyx_k_set_active_status[] = "set_active_status";
+static PyObject *__pyx_kp_set_active_status;
+static char __pyx_k_set_status_message[] = "set_status_message";
+static PyObject *__pyx_kp_set_status_message;
+static char __pyx_k___get_account[] = "__get_account";
+static PyObject *__pyx_kp___get_account;
+static char __pyx_k_account[] = "account";
+static PyObject *__pyx_kp_account;
+static char __pyx_k___get_group[] = "__get_group";
+static PyObject *__pyx_kp___get_group;
+static char __pyx_k_group[] = "group";
+static PyObject *__pyx_kp_group;
+static char __pyx_k___get_server_alias[] = "__get_server_alias";
+static PyObject *__pyx_kp___get_server_alias;
+static char __pyx_k_server_alias[] = "server_alias";
+static PyObject *__pyx_kp_server_alias;
+static char __pyx_k___get_contact_alias[] = "__get_contact_alias";
+static PyObject *__pyx_kp___get_contact_alias;
+static char __pyx_k_contact_alias[] = "contact_alias";
+static PyObject *__pyx_kp_contact_alias;
+static char __pyx_k___get_local_alias[] = "__get_local_alias";
+static PyObject *__pyx_kp___get_local_alias;
+static char __pyx_k_local_alias[] = "local_alias";
+static PyObject *__pyx_kp_local_alias;
+static char __pyx_k___get_available[] = "__get_available";
+static PyObject *__pyx_kp___get_available;
+static char __pyx_k_available[] = "available";
+static PyObject *__pyx_kp_available;
+static char __pyx_k___get_online[] = "__get_online";
+static PyObject *__pyx_kp___get_online;
+static char __pyx_k_online[] = "online";
+static PyObject *__pyx_kp_online;
+static char __pyx_k___get_idle[] = "__get_idle";
+static PyObject *__pyx_kp___get_idle;
+static char __pyx_k_idle[] = "idle";
+static PyObject *__pyx_kp_idle;
+static char __pyx_k_set_group[] = "set_group";
+static PyObject *__pyx_kp_set_group;
+static char __pyx_k_set_ui_ops[] = "set_ui_ops";
+static PyObject *__pyx_kp_set_ui_ops;
+static char __pyx_k_im_send[] = "im_send";
+static PyObject *__pyx_kp_im_send;
+static char __pyx_k_message[] = "message";
+static PyObject *__pyx_kp_message;
+static char __pyx_k_ui_version[] = "ui_version";
+static PyObject *__pyx_kp_ui_version;
+static char __pyx_k_ui_website[] = "ui_website";
+static PyObject *__pyx_kp_ui_website;
+static char __pyx_k_ui_dev_website[] = "ui_dev_website";
+static PyObject *__pyx_kp_ui_dev_website;
+static char __pyx_k_debug_enabled[] = "debug_enabled";
+static PyObject *__pyx_kp_debug_enabled;
+static char __pyx_k_default_path[] = "default_path";
+static PyObject *__pyx_kp_default_path;
+static char __pyx_k_type[] = "type";
+static PyObject *__pyx_kp_type;
+static char __pyx_k_callback[] = "callback";
+static PyObject *__pyx_kp_callback;
+static char __pyx_k_cb[] = "cb";
+static PyObject *__pyx_kp_cb;
+static char __pyx_k_host[] = "host";
+static PyObject *__pyx_kp_host;
+static char __pyx_k_port[] = "port";
+static PyObject *__pyx_kp_port;
+static char __pyx_k_acc[] = "acc";
+static PyObject *__pyx_kp_acc;
+static char __pyx_k_info[] = "info";
+static PyObject *__pyx_kp_info;
+static char __pyx_k_po[] = "po";
+static PyObject *__pyx_kp_po;
+static char __pyx_k_value[] = "value";
+static PyObject *__pyx_kp_value;
+static char __pyx_k_buddy_username[] = "buddy_username";
+static PyObject *__pyx_kp_buddy_username;
+static char __pyx_k_buddy_alias[] = "buddy_alias";
+static PyObject *__pyx_kp_buddy_alias;
+static char __pyx_k_msg[] = "msg";
+static PyObject *__pyx_kp_msg;
+static char __pyx_k_cbs[] = "cbs";
+static PyObject *__pyx_kp_cbs;
+static char __pyx_k_ecore[] = "ecore";
+static PyObject *__pyx_kp_ecore;
+static char __pyx_k_account_cbs[] = "account_cbs";
+static PyObject *__pyx_kp_account_cbs;
+static char __pyx_k_blist_cbs[] = "blist_cbs";
+static PyObject *__pyx_kp_blist_cbs;
+static char __pyx_k_connection_cbs[] = "connection_cbs";
+static PyObject *__pyx_kp_connection_cbs;
+static char __pyx_k_conversation_cbs[] = "conversation_cbs";
+static PyObject *__pyx_kp_conversation_cbs;
+static char __pyx_k_notify_cbs[] = "notify_cbs";
+static PyObject *__pyx_kp_notify_cbs;
+static char __pyx_k_request_cbs[] = "request_cbs";
+static PyObject *__pyx_kp_request_cbs;
+static char __pyx_k_signal_cbs[] = "signal_cbs";
+static PyObject *__pyx_kp_signal_cbs;
+static char __pyx_k_property[] = "property";
+static PyObject *__pyx_kp_property;
+static char __pyx_k_has_key[] = "has_key";
+static PyObject *__pyx_kp_has_key;
+static char __pyx_k_call_authorize_cb[] = "call_authorize_cb";
+static PyObject *__pyx_kp_call_authorize_cb;
+static char __pyx_k_call_deny_cb[] = "call_deny_cb";
+static PyObject *__pyx_kp_call_deny_cb;
+static char __pyx_k_54[] = "show";
+static PyObject *__pyx_kp_54;
+static char __pyx_k_55[] = "show";
+static PyObject *__pyx_kp_55;
+static char __pyx_k_60[] = "update";
+static PyObject *__pyx_kp_60;
+static char __pyx_k_61[] = "update";
+static PyObject *__pyx_kp_61;
+static char __pyx_k_62[] = "update";
+static PyObject *__pyx_kp_62;
+static char __pyx_k_63[] = "update";
+static PyObject *__pyx_kp_63;
+static char __pyx_k_64[] = "update";
+static PyObject *__pyx_kp_64;
+static char __pyx_k_65[] = "update";
+static PyObject *__pyx_kp_65;
+static char __pyx_k_69[] = "remove";
+static PyObject *__pyx_kp_69;
+static char __pyx_k_70[] = "remove";
+static PyObject *__pyx_kp_70;
+static char __pyx_k_71[] = "remove";
+static PyObject *__pyx_kp_71;
+static char __pyx_k_72[] = "remove";
+static PyObject *__pyx_kp_72;
+static char __pyx_k_73[] = "remove";
+static PyObject *__pyx_kp_73;
+static char __pyx_k_74[] = "remove";
+static PyObject *__pyx_kp_74;
+static char __pyx_k_78[] = "destroy";
+static PyObject *__pyx_kp_78;
+static char __pyx_k_79[] = "destroy";
+static PyObject *__pyx_kp_79;
+static char __pyx_k_112[] = "connected";
+static PyObject *__pyx_kp_112;
+static char __pyx_k_113[] = "connected";
+static PyObject *__pyx_kp_113;
+static char __pyx_k_118[] = "disconnected";
+static PyObject *__pyx_kp_118;
+static char __pyx_k_119[] = "disconnected";
+static PyObject *__pyx_kp_119;
+static char __pyx_k_124[] = "notice";
+static PyObject *__pyx_kp_124;
+static char __pyx_k_125[] = "notice";
+static PyObject *__pyx_kp_125;
+static char __pyx_k_185[] = "SEND";
+static PyObject *__pyx_kp_185;
+static char __pyx_k_186[] = "RECV";
+static PyObject *__pyx_kp_186;
+static char __pyx_k_222[] = "present";
+static PyObject *__pyx_kp_222;
+static char __pyx_k_223[] = "present";
+static PyObject *__pyx_kp_223;
+static char __pyx_k_timer_add[] = "timer_add";
+static PyObject *__pyx_kp_timer_add;
+static char __pyx_k_c_ui_info[] = "c_ui_info";
+static PyObject *__pyx_kp_c_ui_info;
+static char __pyx_k_405[] = "account";
+static PyObject *__pyx_kp_405;
+static char __pyx_k_406[] = "blist";
+static PyObject *__pyx_kp_406;
+static char __pyx_k_407[] = "connection";
+static PyObject *__pyx_kp_407;
+static char __pyx_k_408[] = "conversation";
+static PyObject *__pyx_kp_408;
+static char __pyx_k_409[] = "notify";
+static PyObject *__pyx_kp_409;
+static char __pyx_k_410[] = "request";
+static PyObject *__pyx_kp_410;
+static char __pyx_k_append[] = "append";
+static PyObject *__pyx_kp_append;
+static char __pyx_k_427[] = "HTTP";
+static PyObject *__pyx_kp_427;
+static char __pyx_k_428[] = "USER_GLOBAL";
+static PyObject *__pyx_kp_428;
+static char __pyx_k_429[] = "USE_ENVVAR";
+static PyObject *__pyx_kp_429;
+static char __pyx_k_430[] = "SOCKS4";
+static PyObject *__pyx_kp_430;
+static char __pyx_k_431[] = "SOCKS5";
+static PyObject *__pyx_kp_431;
+static char __pyx_k_432[] = "NONE";
+static PyObject *__pyx_kp_432;
+static char __pyx_k_keys[] = "keys";
+static PyObject *__pyx_kp_keys;
+static char __pyx_k_433[] = "type";
+static PyObject *__pyx_kp_433;
+static char __pyx_k_434[] = "type";
+static PyObject *__pyx_kp_434;
+static char __pyx_k_435[] = "type";
+static PyObject *__pyx_kp_435;
+static char __pyx_k_436[] = "HTTP";
+static PyObject *__pyx_kp_436;
+static char __pyx_k_437[] = "host";
+static PyObject *__pyx_kp_437;
+static char __pyx_k_438[] = "host";
+static PyObject *__pyx_kp_438;
+static char __pyx_k_439[] = "host";
+static PyObject *__pyx_kp_439;
+static char __pyx_k_440[] = "port";
+static PyObject *__pyx_kp_440;
+static char __pyx_k_441[] = "port";
+static PyObject *__pyx_kp_441;
+static char __pyx_k_442[] = "port";
+static PyObject *__pyx_kp_442;
+static char __pyx_k_443[] = "username";
+static PyObject *__pyx_kp_443;
+static char __pyx_k_444[] = "username";
+static PyObject *__pyx_kp_444;
+static char __pyx_k_445[] = "username";
+static PyObject *__pyx_kp_445;
+static char __pyx_k_446[] = "password";
+static PyObject *__pyx_kp_446;
+static char __pyx_k_447[] = "password";
+static PyObject *__pyx_kp_447;
+static char __pyx_k_448[] = "password";
+static PyObject *__pyx_kp_448;
+static char __pyx_k_451[] = "type";
+static PyObject *__pyx_kp_451;
+static char __pyx_k_452[] = "name";
+static PyObject *__pyx_kp_452;
+static char __pyx_k_453[] = "message";
+static PyObject *__pyx_kp_453;
+static char __pyx_k_459[] = "type";
+static PyObject *__pyx_kp_459;
+static char __pyx_k_460[] = "name";
+static PyObject *__pyx_kp_460;
+static char __pyx_k_461[] = "message";
+static PyObject *__pyx_kp_461;
+static char __pyx_k_462[] = "UNKNOWN";
+static PyObject *__pyx_kp_462;
+static char __pyx_k_463[] = "IM";
+static PyObject *__pyx_kp_463;
+static char __pyx_k_464[] = "CHAT";
+static PyObject *__pyx_kp_464;
+static char __pyx_k_465[] = "MISC";
+static PyObject *__pyx_kp_465;
+static char __pyx_k_466[] = "ANY";
+static PyObject *__pyx_kp_466;
+static PyObject *__pyx_builtin_property;
+static PyObject *__pyx_kp_14;
+static PyObject *__pyx_kp_15;
+static char __pyx_k_11[] = "account";
+static char __pyx_k_12[] = "%s";
+static char __pyx_k_13[] = "notify-added\n";
+static char __pyx_k_14[] = "notify-added";
+static char __pyx_k_15[] = "notify-added";
+static PyObject *__pyx_kp_19;
+static PyObject *__pyx_kp_20;
+static char __pyx_k_16[] = "account";
+static char __pyx_k_17[] = "%s";
+static char __pyx_k_18[] = "status-changed\n";
+static char __pyx_k_19[] = "status-changed";
+static char __pyx_k_20[] = "status-changed";
+static PyObject *__pyx_kp_24;
+static PyObject *__pyx_kp_25;
+static char __pyx_k_21[] = "account";
+static char __pyx_k_22[] = "%s";
+static char __pyx_k_23[] = "request-add\n";
+static char __pyx_k_24[] = "request-add";
+static char __pyx_k_25[] = "request-add";
+static PyObject *__pyx_kp_29;
+static PyObject *__pyx_kp_30;
+static char __pyx_k_26[] = "account";
+static char __pyx_k_27[] = "%s";
+static char __pyx_k_28[] = "request-authorize\n";
+static char __pyx_k_29[] = "request-authorize";
+static char __pyx_k_30[] = "request-authorize";
+static PyObject *__pyx_kp_34;
+static PyObject *__pyx_kp_35;
+static char __pyx_k_31[] = "account";
+static char __pyx_k_32[] = "%s";
+static char __pyx_k_33[] = "close-account-request\n";
+static char __pyx_k_34[] = "close-account-request";
+static char __pyx_k_35[] = "close-account-request";
+static PyObject *__pyx_kp_39;
+static PyObject *__pyx_kp_40;
+static PyObject *__pyx_kp_41;
+static char __pyx_k_36[] = "blist";
+static char __pyx_k_37[] = "%s";
+static char __pyx_k_38[] = "new-list\n";
+static char __pyx_k_39[] = "new-list";
+static char __pyx_k_40[] = "new-list";
+static char __pyx_k_41[] = "new-list: TODO";
+static PyObject *__pyx_kp_45;
+static PyObject *__pyx_kp_46;
+static PyObject *__pyx_kp_47;
+static PyObject *__pyx_kp_48;
+static PyObject *__pyx_kp_49;
+static PyObject *__pyx_kp_50;
+static char __pyx_k_42[] = "blist";
+static char __pyx_k_43[] = "%s";
+static char __pyx_k_44[] = "new-node\n";
+static char __pyx_k_45[] = "new-node";
+static char __pyx_k_46[] = "new-node";
+static char __pyx_k_47[] = "new-node";
+static char __pyx_k_48[] = "new-node";
+static char __pyx_k_49[] = "new-node";
+static char __pyx_k_50[] = "new-node";
+static PyObject *__pyx_kp_56;
+static char __pyx_k_51[] = "blist";
+static char __pyx_k_52[] = "%s";
+static char __pyx_k_53[] = "show\n";
+static char __pyx_k_56[] = "show: TODO";
+static char __pyx_k_57[] = "blist";
+static char __pyx_k_58[] = "%s";
+static char __pyx_k_59[] = "update\n";
+static char __pyx_k_66[] = "blist";
+static char __pyx_k_67[] = "%s";
+static char __pyx_k_68[] = "remove\n";
+static PyObject *__pyx_kp_80;
+static char __pyx_k_75[] = "blist";
+static char __pyx_k_76[] = "%s";
+static char __pyx_k_77[] = "destroy\n";
+static char __pyx_k_80[] = "destroy: TODO";
+static PyObject *__pyx_kp_84;
+static PyObject *__pyx_kp_85;
+static PyObject *__pyx_kp_86;
+static char __pyx_k_81[] = "blist";
+static char __pyx_k_82[] = "%s";
+static char __pyx_k_83[] = "set-visible\n";
+static char __pyx_k_84[] = "set-visible";
+static char __pyx_k_85[] = "set-visible";
+static char __pyx_k_86[] = "set-visible: TODO";
+static PyObject *__pyx_kp_90;
+static PyObject *__pyx_kp_91;
+static char __pyx_k_87[] = "blist";
+static char __pyx_k_88[] = "%s";
+static char __pyx_k_89[] = "request-add-buddy\n";
+static char __pyx_k_90[] = "request-add-buddy";
+static char __pyx_k_91[] = "request-add-buddy";
+static PyObject *__pyx_kp_95;
+static PyObject *__pyx_kp_96;
+static PyObject *__pyx_kp_97;
+static char __pyx_k_92[] = "blist";
+static char __pyx_k_93[] = "%s";
+static char __pyx_k_94[] = "request-add-chat\n";
+static char __pyx_k_95[] = "request-add-chat";
+static char __pyx_k_96[] = "request-add-chat";
+static char __pyx_k_97[] = "request-add-chat: TODO";
+static PyObject *__pyx_kp_101;
+static PyObject *__pyx_kp_102;
+static PyObject *__pyx_kp_103;
+static char __pyx_k_98[] = "blist";
+static char __pyx_k_99[] = "%s";
+static char __pyx_k_100[] = "request-add-group\n";
+static char __pyx_k_101[] = "request-add-chat";
+static char __pyx_k_102[] = "request-add-chat";
+static char __pyx_k_103[] = "request-add-group: TODO";
+static PyObject *__pyx_kp_107;
+static PyObject *__pyx_kp_108;
+static char __pyx_k_104[] = "connection";
+static char __pyx_k_105[] = "%s";
+static char __pyx_k_106[] = "connect-progress\n";
+static char __pyx_k_107[] = "connect-progress";
+static char __pyx_k_108[] = "connect-progress";
+static PyObject *__pyx_kp_114;
+static char __pyx_k_109[] = "connection";
+static char __pyx_k_110[] = "%s";
+static char __pyx_k_111[] = "connected\n";
+static char __pyx_k_114[] = "connected: TODO";
+static PyObject *__pyx_kp_120;
+static char __pyx_k_115[] = "connection";
+static char __pyx_k_116[] = "%s";
+static char __pyx_k_117[] = "disconnected\n";
+static char __pyx_k_120[] = "disconnected: TODO";
+static PyObject *__pyx_kp_126;
+static char __pyx_k_121[] = "connection";
+static char __pyx_k_122[] = "%s";
+static char __pyx_k_123[] = "notice\n";
+static char __pyx_k_126[] = "notice: TODO";
+static PyObject *__pyx_kp_130;
+static PyObject *__pyx_kp_131;
+static char __pyx_k_127[] = "connection";
+static char __pyx_k_128[] = "%s";
+static char __pyx_k_129[] = "report-disconnect\n";
+static char __pyx_k_130[] = "report-disconnect";
+static char __pyx_k_131[] = "report-disconnect";
+static PyObject *__pyx_kp_135;
+static PyObject *__pyx_kp_136;
+static char __pyx_k_132[] = "connection";
+static char __pyx_k_133[] = "%s";
+static char __pyx_k_134[] = "network-connected\n";
+static char __pyx_k_135[] = "network-connected";
+static char __pyx_k_136[] = "network-connected";
+static PyObject *__pyx_kp_140;
+static PyObject *__pyx_kp_141;
+static char __pyx_k_137[] = "connection";
+static char __pyx_k_138[] = "%s";
+static char __pyx_k_139[] = "network-disconnected\n";
+static char __pyx_k_140[] = "network-disconnected";
+static char __pyx_k_141[] = "network-disconnected";
+static PyObject *__pyx_kp_145;
+static PyObject *__pyx_kp_146;
+static PyObject *__pyx_kp_147;
+static PyObject *__pyx_kp_148;
+static PyObject *__pyx_kp_149;
+static PyObject *__pyx_kp_150;
+static PyObject *__pyx_kp_151;
+static PyObject *__pyx_kp_152;
+static PyObject *__pyx_kp_153;
+static PyObject *__pyx_kp_154;
+static PyObject *__pyx_kp_155;
+static PyObject *__pyx_kp_156;
+static PyObject *__pyx_kp_157;
+static PyObject *__pyx_kp_158;
+static PyObject *__pyx_kp_159;
+static PyObject *__pyx_kp_160;
+static PyObject *__pyx_kp_161;
+static PyObject *__pyx_kp_162;
+static PyObject *__pyx_kp_163;
+static char __pyx_k_142[] = "connection";
+static char __pyx_k_143[] = "%s";
+static char __pyx_k_144[] = "report-disconnect-reason\n";
+static char __pyx_k_145[] = "Network error";
+static char __pyx_k_146[] = "Invalid username";
+static char __pyx_k_147[] = "Authentication failed";
+static char __pyx_k_148[] = "Authentication impossible";
+static char __pyx_k_149[] = "No SSL support";
+static char __pyx_k_150[] = "Encryption error";
+static char __pyx_k_151[] = "Name in use";
+static char __pyx_k_152[] = "Invalid settings";
+static char __pyx_k_153[] = "Certificate not provided";
+static char __pyx_k_154[] = "Certificate untrusted";
+static char __pyx_k_155[] = "Certificate expired";
+static char __pyx_k_156[] = "Certificate not activated";
+static char __pyx_k_157[] = "Certificate hostname mismatch";
+static char __pyx_k_158[] = "Certificate fingerprint mismatch";
+static char __pyx_k_159[] = "Certificate self signed";
+static char __pyx_k_160[] = "Certificate error (other)";
+static char __pyx_k_161[] = "Other error";
+static char __pyx_k_162[] = "report-disconnect-reason";
+static char __pyx_k_163[] = "report-disconnect-reason";
+static PyObject *__pyx_kp_167;
+static PyObject *__pyx_kp_168;
+static char __pyx_k_164[] = "conversation";
+static char __pyx_k_165[] = "%s";
+static char __pyx_k_166[] = "create-conversation\n";
+static char __pyx_k_167[] = "create-conversation";
+static char __pyx_k_168[] = "create-conversation";
+static PyObject *__pyx_kp_172;
+static PyObject *__pyx_kp_173;
+static PyObject *__pyx_kp_174;
+static char __pyx_k_169[] = "conversation";
+static char __pyx_k_170[] = "%s";
+static char __pyx_k_171[] = "destroy-conversation\n";
+static char __pyx_k_172[] = "destroy-conversation";
+static char __pyx_k_173[] = "destroy-conversation";
+static char __pyx_k_174[] = "destroy-conversation: TODO";
+static PyObject *__pyx_kp_178;
+static PyObject *__pyx_kp_179;
+static PyObject *__pyx_kp_180;
+static char __pyx_k_175[] = "conversation";
+static char __pyx_k_176[] = "%s";
+static char __pyx_k_177[] = "write-chat\n";
+static char __pyx_k_178[] = "write-chat";
+static char __pyx_k_179[] = "write-chat";
+static char __pyx_k_180[] = "write-chat: TODO";
+static PyObject *__pyx_kp_184;
+static PyObject *__pyx_kp_187;
+static PyObject *__pyx_kp_188;
+static char __pyx_k_181[] = "conversation";
+static char __pyx_k_182[] = "%s";
+static char __pyx_k_183[] = "write-im\n";
+static char __pyx_k_184[] = "utf-8";
+static char __pyx_k_187[] = "write-im";
+static char __pyx_k_188[] = "write-im";
+static PyObject *__pyx_kp_192;
+static PyObject *__pyx_kp_193;
+static PyObject *__pyx_kp_194;
+static char __pyx_k_189[] = "conversation";
+static char __pyx_k_190[] = "%s";
+static char __pyx_k_191[] = "write-conv\n";
+static char __pyx_k_192[] = "write-conv";
+static char __pyx_k_193[] = "write-conv";
+static char __pyx_k_194[] = "write-conv: TODO";
+static PyObject *__pyx_kp_198;
+static PyObject *__pyx_kp_199;
+static PyObject *__pyx_kp_200;
+static char __pyx_k_195[] = "conversation";
+static char __pyx_k_196[] = "%s";
+static char __pyx_k_197[] = "chat-add-users\n";
+static char __pyx_k_198[] = "chat-add-users";
+static char __pyx_k_199[] = "chat-add-users";
+static char __pyx_k_200[] = "chat-add-users: TODO";
+static PyObject *__pyx_kp_204;
+static PyObject *__pyx_kp_205;
+static PyObject *__pyx_kp_206;
+static char __pyx_k_201[] = "conversation";
+static char __pyx_k_202[] = "%s";
+static char __pyx_k_203[] = "chat-rename-user\n";
+static char __pyx_k_204[] = "chat-rename-user";
+static char __pyx_k_205[] = "chat-rename-user";
+static char __pyx_k_206[] = "chat-rename-user: TODO";
+static PyObject *__pyx_kp_210;
+static PyObject *__pyx_kp_211;
+static PyObject *__pyx_kp_212;
+static char __pyx_k_207[] = "conversation";
+static char __pyx_k_208[] = "%s";
+static char __pyx_k_209[] = "chat-remove-users\n";
+static char __pyx_k_210[] = "chat-remove-users";
+static char __pyx_k_211[] = "chat-remove-users";
+static char __pyx_k_212[] = "chat-remove-users: TODO";
+static PyObject *__pyx_kp_216;
+static PyObject *__pyx_kp_217;
+static PyObject *__pyx_kp_218;
+static char __pyx_k_213[] = "conversation";
+static char __pyx_k_214[] = "%s";
+static char __pyx_k_215[] = "chat-update-user\n";
+static char __pyx_k_216[] = "chat-update-user";
+static char __pyx_k_217[] = "chat-update-user";
+static char __pyx_k_218[] = "chat-update-user: TODO";
+static PyObject *__pyx_kp_224;
+static char __pyx_k_219[] = "conversation";
+static char __pyx_k_220[] = "%s";
+static char __pyx_k_221[] = "present\n";
+static char __pyx_k_224[] = "present: TODO";
+static PyObject *__pyx_kp_228;
+static PyObject *__pyx_kp_229;
+static PyObject *__pyx_kp_230;
+static char __pyx_k_225[] = "conversation";
+static char __pyx_k_226[] = "%s";
+static char __pyx_k_227[] = "has-focus\n";
+static char __pyx_k_228[] = "has-focus";
+static char __pyx_k_229[] = "has-focus";
+static char __pyx_k_230[] = "has-focus: TODO";
+static PyObject *__pyx_kp_234;
+static PyObject *__pyx_kp_235;
+static PyObject *__pyx_kp_236;
+static char __pyx_k_231[] = "conversation";
+static char __pyx_k_232[] = "%s";
+static char __pyx_k_233[] = "custom-smiley-add\n";
+static char __pyx_k_234[] = "custom-smiley-add";
+static char __pyx_k_235[] = "custom-smiley-add";
+static char __pyx_k_236[] = "custom-smiley-add: TODO";
+static PyObject *__pyx_kp_240;
+static PyObject *__pyx_kp_241;
+static PyObject *__pyx_kp_242;
+static char __pyx_k_237[] = "conversation";
+static char __pyx_k_238[] = "%s";
+static char __pyx_k_239[] = "custom-smiley-write\n";
+static char __pyx_k_240[] = "custom-smiley-write";
+static char __pyx_k_241[] = "custom-smiley-write";
+static char __pyx_k_242[] = "custom-smiley-write: TODO";
+static PyObject *__pyx_kp_246;
+static PyObject *__pyx_kp_247;
+static PyObject *__pyx_kp_248;
+static char __pyx_k_243[] = "conversation";
+static char __pyx_k_244[] = "%s";
+static char __pyx_k_245[] = "custom-smiley-close\n";
+static char __pyx_k_246[] = "custom-smiley-close";
+static char __pyx_k_247[] = "custom-smiley-close";
+static char __pyx_k_248[] = "custom-smiley-close: TODO";
+static PyObject *__pyx_kp_252;
+static PyObject *__pyx_kp_253;
+static PyObject *__pyx_kp_254;
+static char __pyx_k_249[] = "conversation";
+static char __pyx_k_250[] = "%s";
+static char __pyx_k_251[] = "send-confirm\n";
+static char __pyx_k_252[] = "send-confirm";
+static char __pyx_k_253[] = "send-confirm";
+static char __pyx_k_254[] = "send-confirm: TODO";
+static PyObject *__pyx_kp_258;
+static PyObject *__pyx_kp_259;
+static PyObject *__pyx_kp_260;
+static char __pyx_k_255[] = "notify";
+static char __pyx_k_256[] = "%s";
+static char __pyx_k_257[] = "notify-message\n";
+static char __pyx_k_258[] = "notif-message";
+static char __pyx_k_259[] = "notify-message";
+static char __pyx_k_260[] = "notify-message: TODO";
+static PyObject *__pyx_kp_264;
+static PyObject *__pyx_kp_265;
+static PyObject *__pyx_kp_266;
+static char __pyx_k_261[] = "notify";
+static char __pyx_k_262[] = "%s";
+static char __pyx_k_263[] = "notify-email\n";
+static char __pyx_k_264[] = "notify-email";
+static char __pyx_k_265[] = "notify-email";
+static char __pyx_k_266[] = "notify-email: TODO";
+static PyObject *__pyx_kp_270;
+static PyObject *__pyx_kp_271;
+static PyObject *__pyx_kp_272;
+static char __pyx_k_267[] = "notify";
+static char __pyx_k_268[] = "%s";
+static char __pyx_k_269[] = "notify-emails\n";
+static char __pyx_k_270[] = "notify-emails";
+static char __pyx_k_271[] = "notify-emails";
+static char __pyx_k_272[] = "notify-emails: TODO";
+static PyObject *__pyx_kp_276;
+static PyObject *__pyx_kp_277;
+static PyObject *__pyx_kp_278;
+static char __pyx_k_273[] = "notify";
+static char __pyx_k_274[] = "%s";
+static char __pyx_k_275[] = "notify-formatted\n";
+static char __pyx_k_276[] = "notify-formatted";
+static char __pyx_k_277[] = "notify-formatted";
+static char __pyx_k_278[] = "notify-formatted: TODO";
+static PyObject *__pyx_kp_282;
+static PyObject *__pyx_kp_283;
+static PyObject *__pyx_kp_284;
+static char __pyx_k_279[] = "notify";
+static char __pyx_k_280[] = "%s";
+static char __pyx_k_281[] = "notify-searchresults\n";
+static char __pyx_k_282[] = "notify-searchresults";
+static char __pyx_k_283[] = "notify-searchresults";
+static char __pyx_k_284[] = "notify-searchresults: TODO";
+static PyObject *__pyx_kp_288;
+static PyObject *__pyx_kp_289;
+static PyObject *__pyx_kp_290;
+static char __pyx_k_285[] = "notify";
+static char __pyx_k_286[] = "%s";
+static char __pyx_k_287[] = "notify-searchresults-new-rows\n";
+static char __pyx_k_288[] = "notify-searchresults-new-rows";
+static char __pyx_k_289[] = "notify-searchresults-new-rows";
+static char __pyx_k_290[] = "notify-searchresults-new-rows: TODO";
+static PyObject *__pyx_kp_294;
+static PyObject *__pyx_kp_295;
+static PyObject *__pyx_kp_296;
+static char __pyx_k_291[] = "notify";
+static char __pyx_k_292[] = "%s";
+static char __pyx_k_293[] = "notify-userinfo\n";
+static char __pyx_k_294[] = "notify-userinfo";
+static char __pyx_k_295[] = "notify-userinfo";
+static char __pyx_k_296[] = "notify-userinfo: TODO";
+static PyObject *__pyx_kp_300;
+static PyObject *__pyx_kp_301;
+static PyObject *__pyx_kp_302;
+static char __pyx_k_297[] = "notify";
+static char __pyx_k_298[] = "%s";
+static char __pyx_k_299[] = "notify-uri\n";
+static char __pyx_k_300[] = "notify-uri";
+static char __pyx_k_301[] = "notify-uri";
+static char __pyx_k_302[] = "notify-uri: TODO";
+static PyObject *__pyx_kp_306;
+static PyObject *__pyx_kp_307;
+static PyObject *__pyx_kp_308;
+static char __pyx_k_303[] = "notify";
+static char __pyx_k_304[] = "%s";
+static char __pyx_k_305[] = "close-notify\n";
+static char __pyx_k_306[] = "close-notify";
+static char __pyx_k_307[] = "close-notify";
+static char __pyx_k_308[] = "close-notify: TODO";
+static PyObject *__pyx_kp_312;
+static PyObject *__pyx_kp_313;
+static PyObject *__pyx_kp_314;
+static char __pyx_k_309[] = "request";
+static char __pyx_k_310[] = "%s";
+static char __pyx_k_311[] = "request-input\n";
+static char __pyx_k_312[] = "request-input";
+static char __pyx_k_313[] = "request-input";
+static char __pyx_k_314[] = "request-input: TODO";
+static PyObject *__pyx_kp_318;
+static PyObject *__pyx_kp_319;
+static PyObject *__pyx_kp_320;
+static char __pyx_k_315[] = "request";
+static char __pyx_k_316[] = "%s";
+static char __pyx_k_317[] = "request-choice\n";
+static char __pyx_k_318[] = "request-choice";
+static char __pyx_k_319[] = "request-choice";
+static char __pyx_k_320[] = "request-choice: TODO";
+static PyObject *__pyx_kp_324;
+static PyObject *__pyx_kp_325;
+static PyObject *__pyx_kp_326;
+static char __pyx_k_321[] = "request";
+static char __pyx_k_322[] = "%s";
+static char __pyx_k_323[] = "request-action\n";
+static char __pyx_k_324[] = "request-action";
+static char __pyx_k_325[] = "request-action";
+static char __pyx_k_326[] = "request-action: TODo";
+static PyObject *__pyx_kp_330;
+static PyObject *__pyx_kp_331;
+static PyObject *__pyx_kp_332;
+static char __pyx_k_327[] = "request";
+static char __pyx_k_328[] = "%s";
+static char __pyx_k_329[] = "request-fields\n";
+static char __pyx_k_330[] = "request-fields";
+static char __pyx_k_331[] = "request-fields";
+static char __pyx_k_332[] = "request-fields: TODO";
+static PyObject *__pyx_kp_336;
+static PyObject *__pyx_kp_337;
+static PyObject *__pyx_kp_338;
+static char __pyx_k_333[] = "request";
+static char __pyx_k_334[] = "%s";
+static char __pyx_k_335[] = "request-file\n";
+static char __pyx_k_336[] = "request-file";
+static char __pyx_k_337[] = "request-file";
+static char __pyx_k_338[] = "request-file: TODO";
+static PyObject *__pyx_kp_342;
+static PyObject *__pyx_kp_343;
+static PyObject *__pyx_kp_344;
+static char __pyx_k_339[] = "request";
+static char __pyx_k_340[] = "%s";
+static char __pyx_k_341[] = "close-request\n";
+static char __pyx_k_342[] = "close-request";
+static char __pyx_k_343[] = "close-request";
+static char __pyx_k_344[] = "close-request: TODO";
+static PyObject *__pyx_kp_348;
+static PyObject *__pyx_kp_349;
+static PyObject *__pyx_kp_350;
+static char __pyx_k_345[] = "request";
+static char __pyx_k_346[] = "%s";
+static char __pyx_k_347[] = "request-folder\n";
+static char __pyx_k_348[] = "request-folder";
+static char __pyx_k_349[] = "request-folder";
+static char __pyx_k_350[] = "request-folder: TODO";
+static PyObject *__pyx_kp_351;
+static PyObject *__pyx_kp_352;
+static char __pyx_k_351[] = "signed-on";
+static char __pyx_k_352[] = "signed-on";
+static PyObject *__pyx_kp_353;
+static PyObject *__pyx_kp_354;
+static char __pyx_k_353[] = "signed-off";
+static char __pyx_k_354[] = "signed-off";
+static PyObject *__pyx_kp_355;
+static PyObject *__pyx_kp_356;
+static PyObject *__pyx_kp_357;
+static PyObject *__pyx_kp_358;
+static PyObject *__pyx_kp_359;
+static PyObject *__pyx_kp_360;
+static PyObject *__pyx_kp_361;
+static PyObject *__pyx_kp_362;
+static PyObject *__pyx_kp_363;
+static PyObject *__pyx_kp_364;
+static PyObject *__pyx_kp_365;
+static PyObject *__pyx_kp_366;
+static PyObject *__pyx_kp_367;
+static PyObject *__pyx_kp_368;
+static PyObject *__pyx_kp_369;
+static PyObject *__pyx_kp_370;
+static PyObject *__pyx_kp_371;
+static PyObject *__pyx_kp_372;
+static PyObject *__pyx_kp_373;
+static char __pyx_k_355[] = "Network error";
+static char __pyx_k_356[] = "Invalid username";
+static char __pyx_k_357[] = "Authentication failed";
+static char __pyx_k_358[] = "Authentication impossible";
+static char __pyx_k_359[] = "No SSL support";
+static char __pyx_k_360[] = "Encryption error";
+static char __pyx_k_361[] = "Name in use";
+static char __pyx_k_362[] = "Invalid settings";
+static char __pyx_k_363[] = "SSL certificate not provided";
+static char __pyx_k_364[] = "SSL certificate untrusted";
+static char __pyx_k_365[] = "SSL certificate expired";
+static char __pyx_k_366[] = "SSL certificate not activated";
+static char __pyx_k_367[] = "SSL certificate hostname mismatch";
+static char __pyx_k_368[] = "SSL certificate fingerprint mismatch";
+static char __pyx_k_369[] = "SSL certificate self signed";
+static char __pyx_k_370[] = "SSL certificate other error";
+static char __pyx_k_371[] = "Other error";
+static char __pyx_k_372[] = "connection-error";
+static char __pyx_k_373[] = "connection-error";
+static PyObject *__pyx_kp_374;
+static PyObject *__pyx_kp_375;
+static char __pyx_k_374[] = "buddy-signed-on";
+static char __pyx_k_375[] = "buddy-signed-on";
+static PyObject *__pyx_kp_376;
+static PyObject *__pyx_kp_377;
+static char __pyx_k_376[] = "buddy-signed-off";
+static char __pyx_k_377[] = "buddy-signed-off";
+static PyObject *__pyx_kp_378;
+static PyObject *__pyx_kp_379;
+static char __pyx_k_378[] = "receiving-im-msg";
+static char __pyx_k_379[] = "receiving-im-msg";
+static PyObject *__pyx_kp_380;
+static PyObject *__pyx_kp_381;
+static char __pyx_k_380[] = "jabber-receiving-xmlnode";
+static char __pyx_k_381[] = "jabber-receiving-xmlnode";
+static char __pyx_k_382[] = "core_ui_ops";
+static char __pyx_k_383[] = "%s";
+static char __pyx_k_384[] = "ui_prefs_init\n";
+static char __pyx_k_385[] = "/carman";
+static char __pyx_k_386[] = "core_ui_ops";
+static char __pyx_k_387[] = "%s";
+static char __pyx_k_388[] = "debug_ui_init\n";
+static char __pyx_k_389[] = "core_ui_ops";
+static char __pyx_k_390[] = "%s";
+static char __pyx_k_391[] = "ui_init\n";
+static char __pyx_k_392[] = "core_ui_ops";
+static char __pyx_k_393[] = "%s";
+static char __pyx_k_394[] = "quit\n";
+static char __pyx_k_395[] = "name";
+static char __pyx_k_396[] = "version";
+static char __pyx_k_397[] = "website";
+static char __pyx_k_398[] = "dev_website";
+static char __pyx_k_399[] = "main";
+static char __pyx_k_400[] = "%s";
+static char __pyx_k_401[] = "libpurple initialization failed.\n";
+static char __pyx_k_402[] = "main";
+static char __pyx_k_403[] = "%s";
+static char __pyx_k_404[] = "Another instance of libpurple is already running.\n";
+static PyObject *__pyx_kp_412;
+static PyObject *__pyx_kp_414;
+static PyObject *__pyx_kp_416;
+static PyObject *__pyx_kp_418;
+static PyObject *__pyx_kp_420;
+static PyObject *__pyx_kp_422;
+static PyObject *__pyx_kp_424;
+static char __pyx_k_411[] = "prpl-jabber";
+static char __pyx_k_412[] = "signed-on";
+static char __pyx_k_413[] = "signed-on";
+static char __pyx_k_414[] = "signed-off";
+static char __pyx_k_415[] = "signed-off";
+static char __pyx_k_416[] = "connection-error";
+static char __pyx_k_417[] = "connection-error";
+static char __pyx_k_418[] = "buddy-signed-on";
+static char __pyx_k_419[] = "buddy-signed-on";
+static char __pyx_k_420[] = "buddy-signed-off";
+static char __pyx_k_421[] = "buddy-signed-off";
+static char __pyx_k_422[] = "receiving-im-msg";
+static char __pyx_k_423[] = "receiving-im-msg";
+static char __pyx_k_424[] = "jabber-receiving-xmlnode";
+static char __pyx_k_425[] = "jabber-receiving-xmlnode";
+static char __pyx_k_426[] = "";
+static char __pyx_k_449[] = "";
+static char __pyx_k_450[] = "message";
+static char __pyx_k_454[] = "message";
+static char __pyx_k_455[] = "/purple/savedstatus/idleaway";
+static char __pyx_k_456[] = "message";
+static PyObject *__pyx_kp_457;
+static char __pyx_k_457[] = "utf-8";
+static char __pyx_k_458[] = "message";
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":31
+ * cdef void *c_request_authorize_user_data = NULL
+ * 
+ * def call_authorize_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
+ */
+
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  __pyx_self = __pyx_self;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":36
+ *     global c_request_authorize_user_data
+ * 
+ *     if c_request_authorize_authorize_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_authorize_cb != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":37
+ * 
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ */
+    __pyx_v_6purple_c_request_authorize_authorize_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":38
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":39
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":40
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
+ * 
+ * def call_deny_cb():
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":42
+ *     c_request_authorize_user_data = NULL
+ * 
+ * def call_deny_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
+ */
+
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  __pyx_self = __pyx_self;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":47
+ *     global c_request_authorize_user_data
+ * 
+ *     if c_request_authorize_deny_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_deny_cb != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":48
+ * 
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ */
+    __pyx_v_6purple_c_request_authorize_deny_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":49
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":50
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":51
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notify_added(account.PurpleAccount *c_account, \
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":53
+ *     c_request_authorize_user_data = NULL
+ * 
+ * cdef void notify_added(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
+ */
+
+static  void __pyx_f_6purple_notify_added(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":61
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":63
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  purple_debug_info(__pyx_k_11, __pyx_k_12, __pyx_k_13);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":65
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":66
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":68
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":70
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":71
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":72
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":73
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":75
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":77
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":79
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":80
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":82
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("notify-added"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":84
+ *         message = None
+ * 
+ *     if account_cbs.has_key("notify-added"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_14);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_14);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":85
+ * 
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_15); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":86
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
+ * 
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":87
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void status_changed(account.PurpleAccount *c_account, \
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.notify_added");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":89
+ *                 (username, protocol_id), message)
+ * 
+ * cdef void status_changed(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         status.PurpleStatus *c_status):
+ *     """
+ */
+
+static  void __pyx_f_6purple_status_changed(PurpleAccount *__pyx_v_c_account, PurpleStatus *__pyx_v_c_status) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_status_id;
+  PyObject *__pyx_v_status_name;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_name = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":94
+ *     This account's status changed.
+ *     """
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")             # <<<<<<<<<<<<<<
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ */
+  purple_debug_info(__pyx_k_16, __pyx_k_17, __pyx_k_18);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":96
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")
+ * 
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":97
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     status_id = status.purple_status_get_id(c_status)
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":99
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     status_id = status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
+ *     status_name = status.purple_status_get_name(c_status)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_id(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_status_id);
+  __pyx_v_status_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":100
+ * 
+ *     status_id = status.purple_status_get_id(c_status)
+ *     status_name = status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("status-changed"):
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_name(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_status_name);
+  __pyx_v_status_name = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":102
+ *     status_name = status.purple_status_get_name(c_status)
+ * 
+ *     if account_cbs.has_key("status-changed"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_19);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_19);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":103
+ * 
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), status_id, status_name)
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_20); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":104
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add(account.PurpleAccount *c_account, \
+ */
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_protocol_id);
+    __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_3));
+    Py_INCREF(__pyx_v_status_id);
+    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_status_id);
+    Py_INCREF(__pyx_v_status_name);
+    PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_status_name);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.status_changed");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_status_id);
+  Py_DECREF(__pyx_v_status_name);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":106
+ *                 (username, protocol_id), status_id, status_name)
+ * 
+ * cdef void request_add(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
+ */
+
+static  void __pyx_f_6purple_request_add(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":113
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":115
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-add\n")             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  purple_debug_info(__pyx_k_21, __pyx_k_22, __pyx_k_23);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":117
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":118
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":120
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":122
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":123
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":124
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":125
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":127
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":129
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":131
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":132
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":134
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("request-add"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":136
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-add"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_24);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_24);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":137
+ * 
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_25); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":138
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
+ * 
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":139
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.request_add");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":141
+ *                 (username, protocol_id), message)
+ * 
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message, glib.gboolean on_list, \
+ */
+
+static  void *__pyx_f_6purple_request_authorize(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message, gboolean __pyx_v_on_list, PurpleAccountRequestAuthorizationCb __pyx_v_authorize_cb, PurpleAccountRequestAuthorizationCb __pyx_v_deny_cb, void *__pyx_v_user_data) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  void *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  PyObject *__pyx_8 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":154
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":156
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")             # <<<<<<<<<<<<<<
+ * 
+ *     global c_request_authorize_authorize_cb
+ */
+  purple_debug_info(__pyx_k_26, __pyx_k_27, __pyx_k_28);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":162
+ *     global c_request_authorize_user_data
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = __pyx_v_authorize_cb;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":163
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = user_data
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = __pyx_v_deny_cb;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":164
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = __pyx_v_user_data;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":166
+ *     c_request_authorize_user_data = user_data
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":167
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":169
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":171
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":172
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":173
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":174
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":176
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":178
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":180
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":181
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":183
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("request-authorize"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":185
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-authorize"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_29);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_29);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":186
+ * 
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_30); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":187
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":188
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":189
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
+ *                 message, on_list, \             # <<<<<<<<<<<<<<
+ *                 call_authorize_cb, call_deny_cb)
+ * 
+ */
+    __pyx_5 = PyInt_FromLong(__pyx_v_on_list); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":190
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_account_request (void *ui_handle):
+ */
+    __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_kp_call_authorize_cb); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_call_deny_cb); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_8 = PyTuple_New(6); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_8, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_8, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 2, __pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 3, __pyx_5);
+    PyTuple_SET_ITEM(__pyx_8, 4, __pyx_6);
+    PyTuple_SET_ITEM(__pyx_8, 5, __pyx_7);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_5 = 0;
+    __pyx_6 = 0;
+    __pyx_7 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_8), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_8)); __pyx_8 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
+  Py_XDECREF(__pyx_8);
+  __Pyx_WriteUnraisable("purple.request_authorize");
+  __pyx_r = 0;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":192
+ *                 call_authorize_cb, call_deny_cb)
+ * 
+ * cdef void close_account_request (void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     Close a pending request for authorization. ui_handle is a handle as
+ */
+
+static  void __pyx_f_6purple_close_account_request(void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":197
+ *     returned by request_authorize.
+ *     """
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")             # <<<<<<<<<<<<<<
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ */
+  purple_debug_info(__pyx_k_31, __pyx_k_32, __pyx_k_33);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":199
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ */
+  purple_request_close(PURPLE_REQUEST_ACTION, __pyx_v_ui_handle);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":201
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ * 
+ *     if account_cbs.has_key("close-account-request"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["close-account-request"])()
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_34);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_34);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":202
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ *         (<object> account_cbs["close-account-request"])()             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_35); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_account_request");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":27
+ * blist_cbs = {}
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___group_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleGroup *__pyx_v_group;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_currentsize;
+  PyObject *__pyx_v_totalsize;
+  PyObject *__pyx_v_online;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_currentsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_totalsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_online = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":28
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  __pyx_v_group = ((PurpleGroup *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":29
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":31
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_group_get_name(__pyx_v_group));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":32
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":33
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":35
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":37
+ *         name = c_name
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)             # <<<<<<<<<<<<<<
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 0)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_currentsize);
+  __pyx_v_currentsize = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":38
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)             # <<<<<<<<<<<<<<
+ *     online = blist.purple_blist_get_group_online_count(group)
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_totalsize);
+  __pyx_v_totalsize = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":39
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name, totalsize, currentsize, online)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_online_count(__pyx_v_group)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_online);
+  __pyx_v_online = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":41
+ *     online = blist.purple_blist_get_group_online_count(group)
+ * 
+ *     callback(node.type, name, totalsize, currentsize, online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(5); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_totalsize);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_totalsize);
+  Py_INCREF(__pyx_v_currentsize);
+  PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_currentsize);
+  Py_INCREF(__pyx_v_online);
+  PyTuple_SET_ITEM(__pyx_3, 4, __pyx_v_online);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__group_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_currentsize);
+  Py_DECREF(__pyx_v_totalsize);
+  Py_DECREF(__pyx_v_online);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":43
+ *     callback(node.type, name, totalsize, currentsize, online)
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL
+ */
+
+static  void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleContact *__pyx_v_contact;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":44
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_contact = ((PurpleContact *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":45
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":47
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_contact_get_alias(__pyx_v_contact));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":48
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":49
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":51
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":53
+ *         alias = c_alias
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \             # <<<<<<<<<<<<<<
+ *              contact.online)
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyInt_FromLong(__pyx_v_contact->totalsize); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = PyInt_FromLong(__pyx_v_contact->currentsize); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":54
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ *              contact.online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_5 = PyInt_FromLong(__pyx_v_contact->online); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyTuple_New(5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_2);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 2, __pyx_3);
+  PyTuple_SET_ITEM(__pyx_6, 3, __pyx_4);
+  PyTuple_SET_ITEM(__pyx_6, 4, __pyx_5);
+  __pyx_2 = 0;
+  __pyx_3 = 0;
+  __pyx_4 = 0;
+  __pyx_5 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.__contact_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":56
+ *              contact.online)
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_name;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":57
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL
+ */
+  __pyx_v_buddy = ((PurpleBuddy *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":58
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":59
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":61
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":62
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":63
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":65
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":67
+ *         name = c_name
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":68
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":69
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":71
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name, alias)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":73
+ *         alias = c_alias
+ * 
+ *     callback(node.type, name, alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_alias);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__buddy_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":75
+ *     callback(node.type, name, alias)
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleChat *__pyx_v_chat;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":76
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  __pyx_v_chat = ((PurpleChat *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":77
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":79
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_chat_get_name(__pyx_v_chat));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":80
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":81
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":83
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":85
+ *         name = c_name
+ * 
+ *     callback(node.type, name)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__chat_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":87
+ *     callback(node.type, name)
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     callback(node.type)
+ * 
+ */
+
+static  void __pyx_f_6purple___other_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":88
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     callback(node.type)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void new_list(blist.PurpleBuddyList *list):
+ */
+  __pyx_1 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_WriteUnraisable("purple.__other_node_cb");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":90
+ *     callback(node.type)
+ * 
+ * cdef void new_list(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     Sets UI-specific data on a buddy list.
+ */
+
+static  void __pyx_f_6purple_new_list(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":94
+ *     Sets UI-specific data on a buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ */
+  purple_debug_info(__pyx_k_36, __pyx_k_37, __pyx_k_38);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":95
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_39);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_39);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":96
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void new_node(blist.PurpleBlistNode *node):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_40); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_41);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_41);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.new_list");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":98
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ * 
+ * cdef void new_node(blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     Sets UI-specific data on a node.
+ */
+
+static  void __pyx_f_6purple_new_node(PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":102
+ *     Sets UI-specific data on a node.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_42, __pyx_k_43, __pyx_k_44);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":103
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_45);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_45);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":104
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":105
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_46); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":106
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":107
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_47); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":108
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":109
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_48); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":110
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":111
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_49); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":112
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":113
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void show(blist.PurpleBuddyList *list):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_50); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.new_node");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":115
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ * 
+ * cdef void show(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     The core will call this when it's finished doing its core stuff.
+ */
+
+static  void __pyx_f_6purple_show(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":119
+ *     The core will call this when it's finished doing its core stuff.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "show\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")
+ */
+  purple_debug_info(__pyx_k_51, __pyx_k_52, __pyx_k_53);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":120
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["show"])("show: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_54);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_54);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":121
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_55); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_56);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_56);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.show");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":123
+ *         (<object> blist_cbs["show"])("show: TODO")
+ * 
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     This will update a node in the buddy list.
+ */
+
+static  void __pyx_f_6purple_update(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":127
+ *     This will update a node in the buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "update\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_57, __pyx_k_58, __pyx_k_59);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":128
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_60);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_60);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":129
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":130
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_61); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":131
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":132
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_62); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":133
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":134
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_63); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":135
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":136
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_64); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":137
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["update"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":138
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_65); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.update");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":140
+ *             __other_node_cb(node, blist_cbs["update"])
+ * 
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     This removes a node from the list.
+ */
+
+static  void __pyx_f_6purple_remove(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":144
+ *     This removes a node from the list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "remove\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_66, __pyx_k_67, __pyx_k_68);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":145
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_69);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_69);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":146
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":147
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_70); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":148
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":149
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_71); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":150
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":151
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_72); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":152
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":153
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_73); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":154
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["remove"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":155
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void destroy(blist.PurpleBuddyList *list):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_74); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.remove");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":157
+ *             __other_node_cb(node, blist_cbs["remove"])
+ * 
+ * cdef void destroy(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     When the list gets destroyed, this gets called to destroy the UI.
+ */
+
+static  void __pyx_f_6purple_destroy(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":161
+ *     When the list gets destroyed, this gets called to destroy the UI.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ */
+  purple_debug_info(__pyx_k_75, __pyx_k_76, __pyx_k_77);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":162
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_78);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_78);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":163
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_79); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_80);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_80);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.destroy");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":165
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ * 
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):             # <<<<<<<<<<<<<<
+ *     """
+ *     Hides or unhides the buddy list.
+ */
+
+static  void __pyx_f_6purple_set_visible(PurpleBuddyList *__pyx_v_list, gboolean __pyx_v_show) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":169
+ *     Hides or unhides the buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ */
+  purple_debug_info(__pyx_k_81, __pyx_k_82, __pyx_k_83);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":170
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_84);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_84);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":171
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_85); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_86);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_86);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.set_visible");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":173
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ * 
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *c_buddy_username, const_char *c_buddy_group, \
+ *         const_char *c_buddy_alias):
+ */
+
+static  void __pyx_f_6purple_request_add_buddy(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_c_buddy_username, const char *__pyx_v_c_buddy_group, const char *__pyx_v_c_buddy_alias) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_buddy_username;
+  PyObject *__pyx_v_buddy_group;
+  PyObject *__pyx_v_buddy_alias;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_group = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":180
+ *     list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")             # <<<<<<<<<<<<<<
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ */
+  purple_debug_info(__pyx_k_87, __pyx_k_88, __pyx_k_89);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":182
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")
+ * 
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":183
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_username:
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":185
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_buddy_username:             # <<<<<<<<<<<<<<
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_username != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":186
+ * 
+ *     if c_buddy_username:
+ *         buddy_username = <char *> c_buddy_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_username = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_username)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":188
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
+ *         buddy_username = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_group:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":190
+ *         buddy_username = None
+ * 
+ *     if c_buddy_group:             # <<<<<<<<<<<<<<
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_group != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":191
+ * 
+ *     if c_buddy_group:
+ *         buddy_group = <char *> c_buddy_group             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_group = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_group)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":193
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
+ *         buddy_group = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_alias:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = Py_None;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":195
+ *         buddy_group = None
+ * 
+ *     if c_buddy_alias:             # <<<<<<<<<<<<<<
+ *         buddy_alias = <char *> c_buddy_alias
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_alias != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":196
+ * 
+ *     if c_buddy_alias:
+ *         buddy_alias = <char *> c_buddy_alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_alias = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_alias)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":198
+ *         buddy_alias = <char *> c_buddy_alias
+ *     else:
+ *         buddy_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":200
+ *         buddy_alias = None
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_90);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_90);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":201
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_91); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":202
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 buddy_username, buddy_group, buddy_alias)
+ * 
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":203
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_chat(account.PurpleAccount *acc, \
+ */
+    __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_buddy_username);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_buddy_username);
+    Py_INCREF(__pyx_v_buddy_group);
+    PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_buddy_group);
+    Py_INCREF(__pyx_v_buddy_alias);
+    PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_buddy_alias);
+    __pyx_4 = 0;
+    __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.request_add_buddy");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_buddy_username);
+  Py_DECREF(__pyx_v_buddy_group);
+  Py_DECREF(__pyx_v_buddy_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":205
+ *                 buddy_username, buddy_group, buddy_alias)
+ * 
+ * cdef void request_add_chat(account.PurpleAccount *acc, \             # <<<<<<<<<<<<<<
+ *         blist.PurpleGroup *group, const_char *alias, const_char *name):
+ *     """
+ */
+
+static  void __pyx_f_6purple_request_add_chat(PurpleAccount *__pyx_v_acc, PurpleGroup *__pyx_v_group, const char *__pyx_v_alias, const char *__pyx_v_name) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":210
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ */
+  purple_debug_info(__pyx_k_92, __pyx_k_93, __pyx_k_94);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":211
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_95);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_95);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":212
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_group():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_96); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_97);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_97);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_add_chat");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":214
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ * 
+ * cdef void request_add_group():             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_request_add_group(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":218
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ */
+  purple_debug_info(__pyx_k_98, __pyx_k_99, __pyx_k_100);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":219
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_101);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_101);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":220
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_102); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_103);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_103);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_add_group");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":30
+ *     ctypedef int size_t
+ * 
+ * cdef void connect_progress(connection.PurpleConnection *gc, const_char *text, \             # <<<<<<<<<<<<<<
+ *         size_t step, size_t step_count):
+ *     """
+ */
+
+static  void __pyx_f_6purple_connect_progress(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text, size_t __pyx_v_step, size_t __pyx_v_step_count) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":37
+ *     reached (which might be displayed as a progress bar).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ */
+  purple_debug_info(__pyx_k_104, __pyx_k_105, __pyx_k_106);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":38
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_107);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_107);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":39
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void connected(connection.PurpleConnection *gc):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_108); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyInt_FromLong(__pyx_v_step); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_5 = PyInt_FromLong(__pyx_v_step_count); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_6 = PyTuple_New(3); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_3);
+    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
+    PyTuple_SET_ITEM(__pyx_6, 2, __pyx_5);
+    __pyx_3 = 0;
+    __pyx_2 = 0;
+    __pyx_5 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.connect_progress");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":41
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ * 
+ * cdef void connected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is established (just before the signed-on signal).
+ */
+
+static  void __pyx_f_6purple_connected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":45
+ *     Called when a connection is established (just before the signed-on signal).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ */
+  purple_debug_info(__pyx_k_109, __pyx_k_110, __pyx_k_111);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":46
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_112);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_112);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":47
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void disconnected(connection.PurpleConnection *gc):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_113); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_114);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_114);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.connected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":49
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ * 
+ * cdef void disconnected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is ended (between the signing-off and signed-off
+ */
+
+static  void __pyx_f_6purple_disconnected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":54
+ *     signal).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ */
+  purple_debug_info(__pyx_k_115, __pyx_k_116, __pyx_k_117);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":55
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_118);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_118);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":56
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_119); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_120);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_120);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.disconnected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":58
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ * 
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Used to display connection-specific notices. (Pidgin's Gtk user interface
+ */
+
+static  void __pyx_f_6purple_notice(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":64
+ *     operation, is not used by any of the protocols shipped with libpurple.)
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ */
+  purple_debug_info(__pyx_k_121, __pyx_k_122, __pyx_k_123);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_124);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_124);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":66
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_125); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_126);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_126);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notice");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":68
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ * 
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when an error causes a connection to be disconnected.
+ */
+
+static  void __pyx_f_6purple_report_disconnect(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":77
+ *                 PurpleConnectionUiOps.report_disconnect_reason.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ */
+  purple_debug_info(__pyx_k_127, __pyx_k_128, __pyx_k_129);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":78
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_130);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_130);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":79
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void network_connected():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_131); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.report_disconnect");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":81
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ * 
+ * cdef void network_connected():             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when libpurple discovers that the computer's network connection
+ */
+
+static  void __pyx_f_6purple_network_connected(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":87
+ *     it uses Win32's network change notification infrastructure.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("network-connected"):
+ *         (<object> connection_cbs["network-connected"])()
+ */
+  purple_debug_info(__pyx_k_132, __pyx_k_133, __pyx_k_134);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":88
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")
+ *     if connection_cbs.has_key("network-connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["network-connected"])()
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_135);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_135);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":89
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")
+ *     if connection_cbs.has_key("network-connected"):
+ *         (<object> connection_cbs["network-connected"])()             # <<<<<<<<<<<<<<
+ * 
+ * cdef void network_disconnected():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_136); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.network_connected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":91
+ *         (<object> connection_cbs["network-connected"])()
+ * 
+ * cdef void network_disconnected():             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when libpurple discovers that the computer's network connection
+ */
+
+static  void __pyx_f_6purple_network_disconnected(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":96
+ *     has gone away.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("network-disconnected"):
+ *         (<object> connection_cbs["network-disconnected"])()
+ */
+  purple_debug_info(__pyx_k_137, __pyx_k_138, __pyx_k_139);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":97
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
+ *     if connection_cbs.has_key("network-disconnected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["network-disconnected"])()
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_140);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_140);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":98
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
+ *     if connection_cbs.has_key("network-disconnected"):
+ *         (<object> connection_cbs["network-disconnected"])()             # <<<<<<<<<<<<<<
+ * 
+ * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_141); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.network_disconnected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":100
+ *         (<object> connection_cbs["network-disconnected"])()
+ * 
+ * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         connection.PurpleConnectionError reason, const_char *c_text):
+ *     """
+ */
+
+static  void __pyx_f_6purple_report_disconnect_reason(PurpleConnection *__pyx_v_gc, PurpleConnectionError __pyx_v_reason, const char *__pyx_v_c_text) {
+  PyObject *__pyx_v_reason_string;
+  PyObject *__pyx_v_text;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  char *__pyx_5;
+  __pyx_v_reason_string = Py_None; Py_INCREF(Py_None);
+  __pyx_v_text = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":114
+ *     @since 2.3.0
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect-reason\n")             # <<<<<<<<<<<<<<
+ * 
+ *     reason_string = {
+ */
+  purple_debug_info(__pyx_k_142, __pyx_k_143, __pyx_k_144);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_text:
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":117
+ * 
+ *     reason_string = {
+ *         0: 'Network error',             # <<<<<<<<<<<<<<
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_0, __pyx_kp_145) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":118
+ *     reason_string = {
+ *         0: 'Network error',
+ *         1: 'Invalid username',             # <<<<<<<<<<<<<<
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_1, __pyx_kp_146) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":119
+ *         0: 'Network error',
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',             # <<<<<<<<<<<<<<
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_2, __pyx_kp_147) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":120
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',             # <<<<<<<<<<<<<<
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_3, __pyx_kp_148) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":121
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',             # <<<<<<<<<<<<<<
+ *         5: 'Encryption error',
+ *         6: 'Name in use',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_4, __pyx_kp_149) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":122
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',             # <<<<<<<<<<<<<<
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_5, __pyx_kp_150) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":123
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',
+ *         6: 'Name in use',             # <<<<<<<<<<<<<<
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_6, __pyx_kp_151) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":124
+ *         5: 'Encryption error',
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',             # <<<<<<<<<<<<<<
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_7, __pyx_kp_152) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":125
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',             # <<<<<<<<<<<<<<
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_8, __pyx_kp_153) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":126
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',             # <<<<<<<<<<<<<<
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_9, __pyx_kp_154) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":127
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',             # <<<<<<<<<<<<<<
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_10, __pyx_kp_155) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":128
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',             # <<<<<<<<<<<<<<
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_11, __pyx_kp_156) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":129
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',             # <<<<<<<<<<<<<<
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_12, __pyx_kp_157) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":130
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',             # <<<<<<<<<<<<<<
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_13, __pyx_kp_158) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":131
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',             # <<<<<<<<<<<<<<
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_14, __pyx_kp_159) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":132
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',             # <<<<<<<<<<<<<<
+ *         16: 'Other error' }[reason]
+ * 
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_15, __pyx_kp_160) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_text:
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_16, __pyx_kp_161) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetItem(((PyObject *)__pyx_1), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(__pyx_v_reason_string);
+  __pyx_v_reason_string = __pyx_3;
+  __pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":135
+ *         16: 'Other error' }[reason]
+ * 
+ *     if c_text:             # <<<<<<<<<<<<<<
+ *         text = <char *> c_text
+ *     else:
+ */
+  __pyx_4 = (__pyx_v_c_text != 0);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":136
+ * 
+ *     if c_text:
+ *         text = <char *> c_text             # <<<<<<<<<<<<<<
+ *     else:
+ *         text = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_text)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_text);
+    __pyx_v_text = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":138
+ *         text = <char *> c_text
+ *     else:
+ *         text = None             # <<<<<<<<<<<<<<
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_text);
+    __pyx_v_text = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":140
+ *         text = None
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_162);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_162);
+  __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":141
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):
+ *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)             # <<<<<<<<<<<<<<
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_163); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_5 = __Pyx_PyBytes_AsString(__pyx_v_text); if (unlikely((!__pyx_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_5)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_reason_string);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_reason_string);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.report_disconnect_reason");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_reason_string);
+  Py_DECREF(__pyx_v_text);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":29
+ * conversation_cbs = {}
+ * 
+ * cdef void create_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a conv is created (but before the conversation-created
+ */
+
+static  void __pyx_f_6purple_create_conversation(PurpleConversation *__pyx_v_conv) {
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_type;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_type = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":34
+ *     signal is emitted).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  purple_debug_info(__pyx_k_164, __pyx_k_165, __pyx_k_166);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":35
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":37
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_conversation_get_name(__pyx_v_conv));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":38
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":39
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":41
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     type = conversation.purple_conversation_get_type(conv)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":43
+ *         name = c_name
+ * 
+ *     type = conversation.purple_conversation_get_type(conv)             # <<<<<<<<<<<<<<
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):
+ */
+  __pyx_2 = PyInt_FromLong(purple_conversation_get_type(__pyx_v_conv)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_type);
+  __pyx_v_type = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":45
+ *     type = conversation.purple_conversation_get_type(conv)
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["create-conversation"])(name, type)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_167);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_167);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":46
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):
+ *         (<object> conversation_cbs["create-conversation"])(name, type)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void destroy_conversation(conversation.PurpleConversation *conv):
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_168); if (!__pyx_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_name);
+    Py_INCREF(__pyx_v_type);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_type);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.create_conversation");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_type);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":48
+ *         (<object> conversation_cbs["create-conversation"])(name, type)
+ * 
+ * cdef void destroy_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called just before a conv is freed.
+ */
+
+static  void __pyx_f_6purple_destroy_conversation(PurpleConversation *__pyx_v_conv) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":52
+ *     Called just before a conv is freed.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("destroy-conversation"):
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ */
+  purple_debug_info(__pyx_k_169, __pyx_k_170, __pyx_k_171);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":53
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
+ *     if conversation_cbs.has_key("destroy-conversation"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_172);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_172);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":54
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
+ *     if conversation_cbs.has_key("destroy-conversation"):
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_173); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_174);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_174);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.destroy_conversation");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":56
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ * 
+ * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
+ *         const_char *message, conversation.PurpleMessageFlags flags, \
+ *         time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_chat(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":64
+ *     @see purple_conv_chat_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("write-chat"):
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ */
+  purple_debug_info(__pyx_k_175, __pyx_k_176, __pyx_k_177);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
+ *     if conversation_cbs.has_key("write-chat"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_178);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_178);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":66
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
+ *     if conversation_cbs.has_key("write-chat"):
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_179); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_180);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_180);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.write_chat");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":68
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ * 
+ * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
+ *         const_char *c_message, conversation.PurpleMessageFlags flags, \
+ *         time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_im(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_c_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PurpleAccount *__pyx_v_acc;
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_sender_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_sender;
+  PyObject *__pyx_v_sender_alias;
+  PyObject *__pyx_v_message;
+  PyObject *__pyx_v_flag;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sender = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sender_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+  __pyx_v_flag = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":76
+ *     @see purple_conv_im_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")             # <<<<<<<<<<<<<<
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ */
+  purple_debug_info(__pyx_k_181, __pyx_k_182, __pyx_k_183);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":77
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL
+ */
+  __pyx_v_acc = purple_conversation_get_account(__pyx_v_conv);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":78
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_sender_alias = NULL
+ */
+  __pyx_v_buddy = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":79
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_sender_alias = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":80
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL
+ *     cdef char *c_sender_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_sender_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":82
+ *     cdef char *c_sender_alias = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username:
+ *         username = c_username
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":83
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:             # <<<<<<<<<<<<<<
+ *         username = c_username
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":84
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":86
+ *         username = c_username
+ *     else:
+ *         username = None             # <<<<<<<<<<<<<<
+ * 
+ *     if who == NULL:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":88
+ *         username = None
+ * 
+ *     if who == NULL:             # <<<<<<<<<<<<<<
+ *         who = conversation.purple_conversation_get_name(conv)
+ * 
+ */
+  __pyx_1 = (__pyx_v_who == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":89
+ * 
+ *     if who == NULL:
+ *         who = conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
+ * 
+ *     sender = <char *> who
+ */
+    __pyx_v_who = purple_conversation_get_name(__pyx_v_conv);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":91
+ *         who = conversation.purple_conversation_get_name(conv)
+ * 
+ *     sender = <char *> who             # <<<<<<<<<<<<<<
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_who)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_sender);
+  __pyx_v_sender = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":92
+ * 
+ *     sender = <char *> who
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)             # <<<<<<<<<<<<<<
+ *     if buddy:
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+  __pyx_v_buddy = purple_find_buddy(__pyx_v_acc, ((char *)__pyx_v_who));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":93
+ *     sender = <char *> who
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:             # <<<<<<<<<<<<<<
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ * 
+ */
+  __pyx_1 = (__pyx_v_buddy != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":94
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_sender_alias:
+ */
+    __pyx_v_c_sender_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":96
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ * 
+ *     if c_sender_alias:             # <<<<<<<<<<<<<<
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_sender_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":97
+ * 
+ *     if c_sender_alias:
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')             # <<<<<<<<<<<<<<
+ *     else:
+ *         sender_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_sender_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+    Py_INCREF(__pyx_kp_184);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_kp_184);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyUnicode_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_v_sender_alias);
+    __pyx_v_sender_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":99
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')
+ *     else:
+ *         sender_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_sender_alias);
+    __pyx_v_sender_alias = Py_None;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":101
+ *         sender_alias = None
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":102
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L7;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":104
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     # FIXME: Maybe we need add more purple flags in the future
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L7:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":107
+ * 
+ *     # FIXME: Maybe we need add more purple flags in the future
+ *     if flags & conversation.PURPLE_MESSAGE_SEND:             # <<<<<<<<<<<<<<
+ *         flag = "SEND"
+ *     else:
+ */
+  __pyx_4 = (__pyx_v_flags & PURPLE_MESSAGE_SEND);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":108
+ *     # FIXME: Maybe we need add more purple flags in the future
+ *     if flags & conversation.PURPLE_MESSAGE_SEND:
+ *         flag = "SEND"             # <<<<<<<<<<<<<<
+ *     else:
+ *         flag = "RECV"
+ */
+    Py_INCREF(__pyx_kp_185);
+    Py_DECREF(__pyx_v_flag);
+    __pyx_v_flag = __pyx_kp_185;
+    goto __pyx_L8;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":110
+ *         flag = "SEND"
+ *     else:
+ *         flag = "RECV"             # <<<<<<<<<<<<<<
+ * 
+ *     if conversation_cbs.has_key("write-im"):
+ */
+    Py_INCREF(__pyx_kp_186);
+    Py_DECREF(__pyx_v_flag);
+    __pyx_v_flag = __pyx_kp_186;
+  }
+  __pyx_L8:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":112
+ *         flag = "RECV"
+ * 
+ *     if conversation_cbs.has_key("write-im"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-im"])(username, sender, \
+ *                             sender_alias, message, flag)
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_187);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_187);
+  __pyx_5 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":113
+ * 
+ *     if conversation_cbs.has_key("write-im"):
+ *         (<object> conversation_cbs["write-im"])(username, sender, \             # <<<<<<<<<<<<<<
+ *                             sender_alias, message, flag)
+ * 
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_188); if (!__pyx_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":114
+ *     if conversation_cbs.has_key("write-im"):
+ *         (<object> conversation_cbs["write-im"])(username, sender, \
+ *                             sender_alias, message, flag)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_conv(conversation.PurpleConversation *conv, const_char *name, \
+ */
+    __pyx_5 = PyTuple_New(5); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_sender);
+    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_sender);
+    Py_INCREF(__pyx_v_sender_alias);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_sender_alias);
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 3, __pyx_v_message);
+    Py_INCREF(__pyx_v_flag);
+    PyTuple_SET_ITEM(__pyx_5, 4, __pyx_v_flag);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L9;
+  }
+  __pyx_L9:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.write_im");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_sender);
+  Py_DECREF(__pyx_v_sender_alias);
+  Py_DECREF(__pyx_v_message);
+  Py_DECREF(__pyx_v_flag);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":116
+ *                             sender_alias, message, flag)
+ * 
+ * cdef void write_conv(conversation.PurpleConversation *conv, const_char *name, \             # <<<<<<<<<<<<<<
+ *         const_char *alias, const_char *message, \
+ *         conversation.PurpleMessageFlags flags, time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_conv(PurpleConversation *__pyx_v_conv, const char *__pyx_v_name, const char *__pyx_v_alias, const char *__pyx_v_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":127
+ *     @see purple_conversation_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("write-conv"):
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ */
+  purple_debug_info(__pyx_k_189, __pyx_k_190, __pyx_k_191);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":128
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")
+ *     if conversation_cbs.has_key("write-conv"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_192);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_192);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":129
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")
+ *     if conversation_cbs.has_key("write-conv"):
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_add_users(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_193); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_194);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_194);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.write_conv");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":131
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ * 
+ * cdef void chat_add_users(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         glib.GList *cbuddies, glib.gboolean new_arrivals):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_add_users(PurpleConversation *__pyx_v_conv, GList *__pyx_v_cbuddies, gboolean __pyx_v_new_arrivals) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":141
+ *     @see purple_conv_chat_add_users()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-add-users"):
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ */
+  purple_debug_info(__pyx_k_195, __pyx_k_196, __pyx_k_197);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":142
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")
+ *     if conversation_cbs.has_key("chat-add-users"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_198);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_198);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":143
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")
+ *     if conversation_cbs.has_key("chat-add-users"):
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_rename_user(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_199); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_200);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_200);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_add_users");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":145
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ * 
+ * cdef void chat_rename_user(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *old_name, const_char *new_name,
+ *         const_char *new_alias):
+ */
+
+static  void __pyx_f_6purple_chat_rename_user(PurpleConversation *__pyx_v_conv, const char *__pyx_v_old_name, const char *__pyx_v_new_name, const char *__pyx_v_new_alias) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":154
+ *     @see purple_conv_chat_rename_user()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-rename-user"):
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ */
+  purple_debug_info(__pyx_k_201, __pyx_k_202, __pyx_k_203);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":155
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")
+ *     if conversation_cbs.has_key("chat-rename-user"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_204);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_204);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":156
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")
+ *     if conversation_cbs.has_key("chat-rename-user"):
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_remove_users(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_205); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_206);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_206);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_rename_user");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":158
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ * 
+ * cdef void chat_remove_users(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         glib.GList *users):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_remove_users(PurpleConversation *__pyx_v_conv, GList *__pyx_v_users) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":164
+ *     @param  users  A GList of const char *s.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-remove-users"):
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ */
+  purple_debug_info(__pyx_k_207, __pyx_k_208, __pyx_k_209);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":165
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")
+ *     if conversation_cbs.has_key("chat-remove-users"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_210);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_210);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":166
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")
+ *     if conversation_cbs.has_key("chat-remove-users"):
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_update_user(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_211); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_212);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_212);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_remove_users");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":168
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ * 
+ * cdef void chat_update_user(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *user):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_update_user(PurpleConversation *__pyx_v_conv, const char *__pyx_v_user) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":174
+ *     @see purple_conv_chat_user_set_flags()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-update-user"):
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ */
+  purple_debug_info(__pyx_k_213, __pyx_k_214, __pyx_k_215);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":175
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")
+ *     if conversation_cbs.has_key("chat-update-user"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_216);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_216);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":176
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")
+ *     if conversation_cbs.has_key("chat-update-user"):
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void present(conversation.PurpleConversation *conv):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_217); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_218);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_218);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_update_user");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":178
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ * 
+ * cdef void present(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Present this conversation to the user; for example, by displaying the IM
+ */
+
+static  void __pyx_f_6purple_present(PurpleConversation *__pyx_v_conv) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":183
+ *     dialog.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "present\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("present"):
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ */
+  purple_debug_info(__pyx_k_219, __pyx_k_220, __pyx_k_221);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":184
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "present\n")
+ *     if conversation_cbs.has_key("present"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_222);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_222);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":185
+ *     debug.purple_debug_info("conversation", "%s", "present\n")
+ *     if conversation_cbs.has_key("present"):
+ *         (<object> conversation_cbs["present"])("present: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.gboolean has_focus(conversation.PurpleConversation *conv):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_223); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_224);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_224);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.present");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":187
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ * 
+ * cdef glib.gboolean has_focus(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     If this UI has a concept of focus (as in a windowing system) and this
+ */
+
+static  gboolean __pyx_f_6purple_has_focus(PurpleConversation *__pyx_v_conv) {
+  gboolean __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":192
+ *     conversation has the focus, return TRUE; otherwise, return FALSE.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ */
+  purple_debug_info(__pyx_k_225, __pyx_k_226, __pyx_k_227);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":193
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")
+ *     if conversation_cbs.has_key("has-focus"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ *     return False
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_228);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_228);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":194
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")             # <<<<<<<<<<<<<<
+ *     return False
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_229); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_230);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_230);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":195
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ *     return False             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.gboolean custom_smiley_add(conversation.PurpleConversation *conv, \
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.has_focus");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":197
+ *     return False
+ * 
+ * cdef glib.gboolean custom_smiley_add(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile, glib.gboolean remote):
+ *     """
+ */
+
+static  gboolean __pyx_f_6purple_custom_smiley_add(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile, gboolean __pyx_v_remote) {
+  gboolean __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":202
+ *     Custom smileys (add).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ */
+  purple_debug_info(__pyx_k_231, __pyx_k_232, __pyx_k_233);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":203
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")
+ *     if conversation_cbs.has_key("custom-smiley-add"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ *     return False
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_234);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_234);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":204
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")             # <<<<<<<<<<<<<<
+ *     return False
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_235); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_236);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_236);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":205
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ *     return False             # <<<<<<<<<<<<<<
+ * 
+ * cdef void custom_smiley_write(conversation.PurpleConversation *conv, \
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_add");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":207
+ *     return False
+ * 
+ * cdef void custom_smiley_write(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile, const_guchar *data, glib.gsize size):
+ *     """
+ */
+
+static  void __pyx_f_6purple_custom_smiley_write(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile, const guchar *__pyx_v_data, gsize __pyx_v_size) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":212
+ *     Custom smileys (write).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-write"):
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ */
+  purple_debug_info(__pyx_k_237, __pyx_k_238, __pyx_k_239);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":213
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")
+ *     if conversation_cbs.has_key("custom-smiley-write"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_240);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_240);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":214
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")
+ *     if conversation_cbs.has_key("custom-smiley-write"):
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void custom_smiley_close(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_241); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_242);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_242);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_write");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":216
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ * 
+ * cdef void custom_smiley_close(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile):
+ *     """
+ */
+
+static  void __pyx_f_6purple_custom_smiley_close(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":221
+ *     Custom smileys (close).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-close"):
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ */
+  purple_debug_info(__pyx_k_243, __pyx_k_244, __pyx_k_245);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":222
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")
+ *     if conversation_cbs.has_key("custom-smiley-close"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_246);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_246);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":223
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")
+ *     if conversation_cbs.has_key("custom-smiley-close"):
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void send_confirm(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_247); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_248);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_248);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_close");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":225
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ * 
+ * cdef void send_confirm(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *message):
+ *     """
+ */
+
+static  void __pyx_f_6purple_send_confirm(PurpleConversation *__pyx_v_conv, const char *__pyx_v_message) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":232
+ *     is NULL, libpurple will fall back to using purple_request_action().
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("send-confirm"):
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")
+ */
+  purple_debug_info(__pyx_k_249, __pyx_k_250, __pyx_k_251);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":233
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")
+ *     if conversation_cbs.has_key("send-confirm"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_252);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_252);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":234
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")
+ *     if conversation_cbs.has_key("send-confirm"):
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_253); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_254);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_254);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.send_confirm");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":28
+ * notify_cbs = {}
+ * 
+ * cdef void *notify_message(notify.PurpleNotifyMsgType type, \             # <<<<<<<<<<<<<<
+ *         const_char *title, const_char *primary, const_char *secondary):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_message(PurpleNotifyMsgType __pyx_v_type, const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":33
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notif-message"):
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ */
+  purple_debug_info(__pyx_k_255, __pyx_k_256, __pyx_k_257);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":34
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")
+ *     if notify_cbs.has_key("notif-message"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_258);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_258);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":35
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")
+ *     if notify_cbs.has_key("notif-message"):
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_email(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_259); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_260);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_260);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_message");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":37
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ * 
+ * cdef void *notify_email(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         const_char *subject, const_char *_from, const_char *to, \
+ *         const_char *url):
+ */
+
+static  void *__pyx_f_6purple_notify_email(PurpleConnection *__pyx_v_gc, const char *__pyx_v_subject, const char *__pyx_v__from, const char *__pyx_v_to, const char *__pyx_v_url) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":43
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-email"):
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ */
+  purple_debug_info(__pyx_k_261, __pyx_k_262, __pyx_k_263);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":44
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")
+ *     if notify_cbs.has_key("notify-email"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_264);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_264);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":45
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")
+ *     if notify_cbs.has_key("notify-email"):
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_emails(connection.PurpleConnection *gc, size_t count, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_265); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_266);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_266);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_email");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":47
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ * 
+ * cdef void *notify_emails(connection.PurpleConnection *gc, size_t count, \             # <<<<<<<<<<<<<<
+ *         glib.gboolean detailed, const_char **subjects, \
+ *         const_char **froms, const_char **tos, const_char **urls):
+ */
+
+static  void *__pyx_f_6purple_notify_emails(PurpleConnection *__pyx_v_gc, size_t __pyx_v_count, gboolean __pyx_v_detailed, const char **__pyx_v_subjects, const char **__pyx_v_froms, const char **__pyx_v_tos, const char **__pyx_v_urls) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":53
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-emails"):
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ */
+  purple_debug_info(__pyx_k_267, __pyx_k_268, __pyx_k_269);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":54
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")
+ *     if notify_cbs.has_key("notify-emails"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_270);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_270);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":55
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")
+ *     if notify_cbs.has_key("notify-emails"):
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_formatted(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_271); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_272);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_272);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_emails");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":57
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ * 
+ * cdef void *notify_formatted(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, const_char *text):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_formatted(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, const char *__pyx_v_text) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":62
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-formatted"):
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ */
+  purple_debug_info(__pyx_k_273, __pyx_k_274, __pyx_k_275);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":63
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")
+ *     if notify_cbs.has_key("notify-formatted"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_276);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_276);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":64
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")
+ *     if notify_cbs.has_key("notify-formatted"):
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_searchresults(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_277); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_278);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_278);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_formatted");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":66
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ * 
+ * cdef void *notify_searchresults(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         const_char *title, const_char *primary, const_char *secondary, \
+ *         notify.PurpleNotifySearchResults *results, glib.gpointer user_data):
+ */
+
+static  void *__pyx_f_6purple_notify_searchresults(PurpleConnection *__pyx_v_gc, const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, PurpleNotifySearchResults *__pyx_v_results, gpointer __pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":72
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-searchresults"):
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ */
+  purple_debug_info(__pyx_k_279, __pyx_k_280, __pyx_k_281);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":73
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")
+ *     if notify_cbs.has_key("notify-searchresults"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_282);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_282);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":74
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")
+ *     if notify_cbs.has_key("notify-searchresults"):
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notify_searchresults_new_rows(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_283); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_284);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_284);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_searchresults");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":76
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ * 
+ * cdef void notify_searchresults_new_rows(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         notify.PurpleNotifySearchResults *results, void *data):
+ *     """
+ */
+
+static  void __pyx_f_6purple_notify_searchresults_new_rows(PurpleConnection *__pyx_v_gc, PurpleNotifySearchResults *__pyx_v_results, void *__pyx_v_data) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":81
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ */
+  purple_debug_info(__pyx_k_285, __pyx_k_286, __pyx_k_287);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":82
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_288);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_288);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":83
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_userinfo(connection.PurpleConnection *gc, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_289); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_290);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_290);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_searchresults_new_rows");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":85
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ * 
+ * cdef void *notify_userinfo(connection.PurpleConnection *gc, const_char *who, \             # <<<<<<<<<<<<<<
+ *         notify.PurpleNotifyUserInfo *user_info):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_userinfo(PurpleConnection *__pyx_v_gc, const char *__pyx_v_who, PurpleNotifyUserInfo *__pyx_v_user_info) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":90
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-userinfo"):
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ */
+  purple_debug_info(__pyx_k_291, __pyx_k_292, __pyx_k_293);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":91
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")
+ *     if notify_cbs.has_key("notify-userinfo"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_294);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_294);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":92
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")
+ *     if notify_cbs.has_key("notify-userinfo"):
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_uri(const_char *uri):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_295); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_296);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_296);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_userinfo");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":94
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ * 
+ * cdef void *notify_uri(const_char *uri):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void *__pyx_f_6purple_notify_uri(const char *__pyx_v_uri) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":98
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-uri"):
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ */
+  purple_debug_info(__pyx_k_297, __pyx_k_298, __pyx_k_299);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":99
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")
+ *     if notify_cbs.has_key("notify-uri"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_300);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_300);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":100
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")
+ *     if notify_cbs.has_key("notify-uri"):
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_notify(notify.PurpleNotifyType type, void *ui_handle):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_301); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_302);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_302);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_uri");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":102
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ * 
+ * cdef void close_notify(notify.PurpleNotifyType type, void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_close_notify(PurpleNotifyType __pyx_v_type, void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":106
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("close-notify"):
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")
+ */
+  purple_debug_info(__pyx_k_303, __pyx_k_304, __pyx_k_305);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":107
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")
+ *     if notify_cbs.has_key("close-notify"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_306);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_306);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":108
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")
+ *     if notify_cbs.has_key("close-notify"):
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_307); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_308);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_308);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_notify");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":29
+ * request_cbs = {}
+ * 
+ * cdef void *request_input(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, const_char *default_value, \
+ *         glib.gboolean multiline, glib.gboolean masked, glib.gchar *hint, \
+ */
+
+static  void *__pyx_f_6purple_request_input(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, const char *__pyx_v_default_value, gboolean __pyx_v_multiline, gboolean __pyx_v_masked, gchar *__pyx_v_hint, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":39
+ *     @see purple_request_input().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-input\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-input"):
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ */
+  purple_debug_info(__pyx_k_309, __pyx_k_310, __pyx_k_311);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":40
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-input\n")
+ *     if request_cbs.has_key("request-input"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_312);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_312);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":41
+ *     debug.purple_debug_info("request", "%s", "request-input\n")
+ *     if request_cbs.has_key("request-input"):
+ *         (<object> request_cbs["request-input"])("request-input: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_choice(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_313); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_314);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_314);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_input");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":43
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ * 
+ * cdef void *request_choice(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, int default_value, const_char *ok_text, \
+ *         glib.GCallback ok_cb, const_char *cancel_text, \
+ */
+
+static  void *__pyx_f_6purple_request_choice(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, int __pyx_v_default_value, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data, va_list __pyx_v_choices) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":52
+ *     @see purple_request_choice_varg().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-choice"):
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ */
+  purple_debug_info(__pyx_k_315, __pyx_k_316, __pyx_k_317);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":53
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")
+ *     if request_cbs.has_key("request-choice"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_318);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_318);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":54
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")
+ *     if request_cbs.has_key("request-choice"):
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_action(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_319); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_320);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_320);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_choice");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":56
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ * 
+ * cdef void *request_action(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, int default_action, \
+ *         account.PurpleAccount *account, const_char *who, \
+ */
+
+static  void *__pyx_f_6purple_request_action(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, int __pyx_v_default_action, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data, size_t __pyx_v_action_count, va_list __pyx_v_actions) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":64
+ *     @see purple_request_action_varg().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-action\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-action"):
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ */
+  purple_debug_info(__pyx_k_321, __pyx_k_322, __pyx_k_323);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-action\n")
+ *     if request_cbs.has_key("request-action"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_324);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_324);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":66
+ *     debug.purple_debug_info("request", "%s", "request-action\n")
+ *     if request_cbs.has_key("request-action"):
+ *         (<object> request_cbs["request-action"])("request-action: TODo")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_fields(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_325); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_326);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_326);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_action");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":68
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ * 
+ * cdef void *request_fields(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, request.PurpleRequestFields *fields, \
+ *         const_char *ok_text, glib.GCallback ok_cb, const_char *cancel_text, \
+ */
+
+static  void *__pyx_f_6purple_request_fields(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, PurpleRequestFields *__pyx_v_fields, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":77
+ *     @see purple_request_fields().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-fields"):
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ */
+  purple_debug_info(__pyx_k_327, __pyx_k_328, __pyx_k_329);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":78
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")
+ *     if request_cbs.has_key("request-fields"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_330);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_330);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":79
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")
+ *     if request_cbs.has_key("request-fields"):
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_file(const_char *title, const_char *filename, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_331); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_332);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_332);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_fields");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":81
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ * 
+ * cdef void *request_file(const_char *title, const_char *filename, \             # <<<<<<<<<<<<<<
+ *         glib.gboolean savedialog, glib.GCallback ok_cb, \
+ *         glib.GCallback cancel_cb, account.PurpleAccount *account, \
+ */
+
+static  void *__pyx_f_6purple_request_file(const char *__pyx_v_title, const char *__pyx_v_filename, gboolean __pyx_v_savedialog, GCallback __pyx_v_ok_cb, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":89
+ *     @see purple_request_file().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-file\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-file"):
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ */
+  purple_debug_info(__pyx_k_333, __pyx_k_334, __pyx_k_335);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":90
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-file\n")
+ *     if request_cbs.has_key("request-file"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_336);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_336);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":91
+ *     debug.purple_debug_info("request", "%s", "request-file\n")
+ *     if request_cbs.has_key("request-file"):
+ *         (<object> request_cbs["request-file"])("request-file: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_request(request.PurpleRequestType type, void *ui_handle):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_337); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_338);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_338);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_file");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":93
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ * 
+ * cdef void close_request(request.PurpleRequestType type, void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_close_request(PurpleRequestType __pyx_v_type, void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":97
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("request", "%s", "close-request\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("close-request"):
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ */
+  purple_debug_info(__pyx_k_339, __pyx_k_340, __pyx_k_341);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":98
+ *     """
+ *     debug.purple_debug_info("request", "%s", "close-request\n")
+ *     if request_cbs.has_key("close-request"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_342);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_342);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":99
+ *     debug.purple_debug_info("request", "%s", "close-request\n")
+ *     if request_cbs.has_key("close-request"):
+ *         (<object> request_cbs["close-request"])("close-request: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_folder(const_char *title, const_char *dirname, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_343); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_344);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_344);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_request");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":101
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ * 
+ * cdef void *request_folder(const_char *title, const_char *dirname, \             # <<<<<<<<<<<<<<
+ *         glib.GCallback ok_cb, glib.GCallback cancel_cb, \
+ *         account.PurpleAccount *account, const_char *who, \
+ */
+
+static  void *__pyx_f_6purple_request_folder(const char *__pyx_v_title, const char *__pyx_v_dirname, GCallback __pyx_v_ok_cb, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":108
+ *     @see purple_request_folder().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-folder"):
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")
+ */
+  purple_debug_info(__pyx_k_345, __pyx_k_346, __pyx_k_347);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":109
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")
+ *     if request_cbs.has_key("request-folder"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_348);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_348);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":110
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")
+ *     if request_cbs.has_key("request-folder"):
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_349); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_350);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_350);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_folder");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":27
+ *     ctypedef char const_gchar "const gchar"
+ * 
+ * cdef void signal_signed_on_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         glib.gpointer null):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_signed_on_cb(PurpleConnection *__pyx_v_gc, gpointer __pyx_v_null) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":33
+ *     @params gc  The connection that has signed on.
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":34
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":35
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":37
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username == NULL:
+ *         username = None
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":38
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:             # <<<<<<<<<<<<<<
+ *         username = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":39
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:
+ *         username = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = c_username
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":41
+ *         username = None
+ *     else:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":43
+ *         username = c_username
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":44
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:             # <<<<<<<<<<<<<<
+ *         protocol_id = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":45
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = c_protocol_id
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":47
+ *         protocol_id = None
+ *     else:
+ *         protocol_id = c_protocol_id             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("signed-on"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_protocol_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":49
+ *         protocol_id = c_protocol_id
+ * 
+ *     if signal_cbs.has_key("signed-on"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_351);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_351);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":50
+ * 
+ *     if signal_cbs.has_key("signed-on"):
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_signed_off_cb(connection.PurpleConnection *gc, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_352); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_signed_on_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":52
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)
+ * 
+ * cdef void signal_signed_off_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         glib.gpointer null):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_signed_off_cb(PurpleConnection *__pyx_v_gc, gpointer __pyx_v_null) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":58
+ *     @params gc  The connection that has signed off.
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":59
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":60
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":62
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username == NULL:
+ *         username = None
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":63
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:             # <<<<<<<<<<<<<<
+ *         username = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":64
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:
+ *         username = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = c_username
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":66
+ *         username = None
+ *     else:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":68
+ *         username = c_username
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":69
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:             # <<<<<<<<<<<<<<
+ *         protocol_id = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":70
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = c_protocol_id
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":72
+ *         protocol_id = None
+ *     else:
+ *         protocol_id = c_protocol_id             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("signed-off"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_protocol_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":74
+ *         protocol_id = c_protocol_id
+ * 
+ *     if signal_cbs.has_key("signed-off"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_353);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_353);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":75
+ * 
+ *     if signal_cbs.has_key("signed-off"):
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_connection_error_cb(connection.PurpleConnection *gc, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_354); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_signed_off_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":77
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)
+ * 
+ * cdef void signal_connection_error_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         connection.PurpleConnectionError err, const_gchar *c_desc):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_connection_error_cb(PurpleConnection *__pyx_v_gc, PurpleConnectionError __pyx_v_err, const gchar *__pyx_v_c_desc) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_short_desc;
+  PyObject *__pyx_v_desc;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_short_desc = Py_None; Py_INCREF(Py_None);
+  __pyx_v_desc = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":85
+ *     @params desc A description of the error, giving more information
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":86
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":87
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":89
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username:
+ *         username = <char *> c_username
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":90
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:             # <<<<<<<<<<<<<<
+ *         username = <char *> c_username
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":91
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:
+ *         username = <char *> c_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_username)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":93
+ *         username = <char *> c_username
+ *     else:
+ *         username = None             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":95
+ *         username = None
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id:
+ *         protocol_id = <char *> c_protocol_id
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":96
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id:             # <<<<<<<<<<<<<<
+ *         protocol_id = <char *> c_protocol_id
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":97
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id:
+ *         protocol_id = <char *> c_protocol_id             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_protocol_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":99
+ *         protocol_id = <char *> c_protocol_id
+ *     else:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ * 
+ *     short_desc = {
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":118
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_desc:
+ */
+  __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":102
+ * 
+ *     short_desc = {
+ *         0: "Network error",             # <<<<<<<<<<<<<<
+ *         1: "Invalid username",
+ *         2: "Authentication failed",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_0, __pyx_kp_355) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":103
+ *     short_desc = {
+ *         0: "Network error",
+ *         1: "Invalid username",             # <<<<<<<<<<<<<<
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_1, __pyx_kp_356) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":104
+ *         0: "Network error",
+ *         1: "Invalid username",
+ *         2: "Authentication failed",             # <<<<<<<<<<<<<<
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_2, __pyx_kp_357) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":105
+ *         1: "Invalid username",
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",             # <<<<<<<<<<<<<<
+ *         4: "No SSL support",
+ *         5: "Encryption error",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_3, __pyx_kp_358) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":106
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",             # <<<<<<<<<<<<<<
+ *         5: "Encryption error",
+ *         6: "Name in use",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_4, __pyx_kp_359) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":107
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",
+ *         5: "Encryption error",             # <<<<<<<<<<<<<<
+ *         6: "Name in use",
+ *         7: "Invalid settings",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_5, __pyx_kp_360) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":108
+ *         4: "No SSL support",
+ *         5: "Encryption error",
+ *         6: "Name in use",             # <<<<<<<<<<<<<<
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_6, __pyx_kp_361) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":109
+ *         5: "Encryption error",
+ *         6: "Name in use",
+ *         7: "Invalid settings",             # <<<<<<<<<<<<<<
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_7, __pyx_kp_362) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":110
+ *         6: "Name in use",
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",             # <<<<<<<<<<<<<<
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_8, __pyx_kp_363) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":111
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",             # <<<<<<<<<<<<<<
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_9, __pyx_kp_364) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":112
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",             # <<<<<<<<<<<<<<
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_10, __pyx_kp_365) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":113
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",             # <<<<<<<<<<<<<<
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_11, __pyx_kp_366) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":114
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",             # <<<<<<<<<<<<<<
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_12, __pyx_kp_367) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":115
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",             # <<<<<<<<<<<<<<
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_13, __pyx_kp_368) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":116
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",             # <<<<<<<<<<<<<<
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_14, __pyx_kp_369) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":117
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",             # <<<<<<<<<<<<<<
+ *         16: "Other error" }[<int> err]
+ * 
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_15, __pyx_kp_370) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":118
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_desc:
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_16, __pyx_kp_371) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = ((int)__pyx_v_err);
+  __pyx_4 = __Pyx_GetItemInt(((PyObject *)__pyx_2), __pyx_3, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  Py_DECREF(__pyx_v_short_desc);
+  __pyx_v_short_desc = __pyx_4;
+  __pyx_4 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":120
+ *         16: "Other error" }[<int> err]
+ * 
+ *     if c_desc:             # <<<<<<<<<<<<<<
+ *         desc = str(<char *> c_desc)
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_desc != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":121
+ * 
+ *     if c_desc:
+ *         desc = str(<char *> c_desc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         desc = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_desc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_desc);
+    __pyx_v_desc = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":123
+ *         desc = str(<char *> c_desc)
+ *     else:
+ *         desc = None             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("connection-error"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_desc);
+    __pyx_v_desc = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":125
+ *         desc = None
+ * 
+ *     if signal_cbs.has_key("connection-error"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["connection-error"])(username, protocol_id, \
+ *                 short_desc, desc)
+ */
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_372);
+  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_kp_372);
+  __pyx_5 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":126
+ * 
+ *     if signal_cbs.has_key("connection-error"):
+ *         (<object> signal_cbs["connection-error"])(username, protocol_id, \             # <<<<<<<<<<<<<<
+ *                 short_desc, desc)
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyObject_GetItem(__pyx_2, __pyx_kp_373); if (!__pyx_4) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":127
+ *     if signal_cbs.has_key("connection-error"):
+ *         (<object> signal_cbs["connection-error"])(username, protocol_id, \
+ *                 short_desc, desc)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_buddy_signed_on_cb(blist.PurpleBuddy *buddy):
+ */
+    __pyx_5 = PyTuple_New(4); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_protocol_id);
+    Py_INCREF(__pyx_v_short_desc);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_short_desc);
+    Py_INCREF(__pyx_v_desc);
+    PyTuple_SET_ITEM(__pyx_5, 3, __pyx_v_desc);
+    __pyx_2 = PyObject_Call(__pyx_4, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.signal_connection_error_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_short_desc);
+  Py_DECREF(__pyx_v_desc);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":129
+ *                 short_desc, desc)
+ * 
+ * cdef void signal_buddy_signed_on_cb(blist.PurpleBuddy *buddy):             # <<<<<<<<<<<<<<
+ *     """
+ *     Emitted when a buddy on your buddy list signs on.
+ */
+
+static  void __pyx_f_6purple_signal_buddy_signed_on_cb(PurpleBuddy *__pyx_v_buddy) {
+  char *__pyx_v_c_name;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":134
+ *     @params buddy  The buddy that signed on.
+ *     """
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":135
+ *     """
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":137
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":138
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":139
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":141
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":143
+ *         name = c_name
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":144
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":145
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":147
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("buddy-signed-on"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":149
+ *         alias = c_alias
+ * 
+ *     if signal_cbs.has_key("buddy-signed-on"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["buddy-signed-on"])(name, alias)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_374);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_374);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":150
+ * 
+ *     if signal_cbs.has_key("buddy-signed-on"):
+ *         (<object> signal_cbs["buddy-signed-on"])(name, alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_buddy_signed_off_cb(blist.PurpleBuddy *buddy):
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_375); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_name);
+    Py_INCREF(__pyx_v_alias);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_alias);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_buddy_signed_on_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":152
+ *         (<object> signal_cbs["buddy-signed-on"])(name, alias)
+ * 
+ * cdef void signal_buddy_signed_off_cb(blist.PurpleBuddy *buddy):             # <<<<<<<<<<<<<<
+ *     """
+ *     Emitted when a buddy on your buddy list signs off.
+ */
+
+static  void __pyx_f_6purple_signal_buddy_signed_off_cb(PurpleBuddy *__pyx_v_buddy) {
+  char *__pyx_v_c_name;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":157
+ *     @params buddy  The buddy that signed off.
+ *     """
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":158
+ *     """
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":160
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":161
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":162
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":164
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":166
+ *         name = c_name
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":167
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":168
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":170
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("buddy-signed-off"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":172
+ *         alias = c_alias
+ * 
+ *     if signal_cbs.has_key("buddy-signed-off"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["buddy-signed-off"])(name, alias)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_376);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_376);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":173
+ * 
+ *     if signal_cbs.has_key("buddy-signed-off"):
+ *         (<object> signal_cbs["buddy-signed-off"])(name, alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.gboolean signal_receiving_im_msg_cb(account.PurpleAccount *account, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_377); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_name);
+    Py_INCREF(__pyx_v_alias);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_alias);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_buddy_signed_off_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":175
+ *         (<object> signal_cbs["buddy-signed-off"])(name, alias)
+ * 
+ * cdef glib.gboolean signal_receiving_im_msg_cb(account.PurpleAccount *account, \             # <<<<<<<<<<<<<<
+ *         char **sender, char **message, conversation.PurpleConversation *conv, \
+ *         conversation.PurpleMessageFlags *flags):
+ */
+
+static  gboolean __pyx_f_6purple_signal_receiving_im_msg_cb(PurpleAccount *__pyx_v_account, char **__pyx_v_sender, char **__pyx_v_message, PurpleConversation *__pyx_v_conv, PurpleMessageFlags *__pyx_v_flags) {
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_alias;
+  PyObject *__pyx_v_stripped;
+  gboolean __pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  gboolean __pyx_5;
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_stripped = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":190
+ *     @params flags    A pointer to the IM message flags.
+ *     """
+ *     cdef blist.PurpleBuddy *buddy = blist.purple_find_buddy(account, sender[0])             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_buddy = purple_find_buddy(__pyx_v_account, (__pyx_v_sender[0]));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":191
+ *     """
+ *     cdef blist.PurpleBuddy *buddy = blist.purple_find_buddy(account, sender[0])
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":193
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":194
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":195
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":197
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     stripped = util.purple_markup_strip_html(message[0])
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":199
+ *         alias = c_alias
+ * 
+ *     stripped = util.purple_markup_strip_html(message[0])             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("receiving-im-msg"):
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_markup_strip_html((__pyx_v_message[0]))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_stripped);
+  __pyx_v_stripped = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":201
+ *     stripped = util.purple_markup_strip_html(message[0])
+ * 
+ *     if signal_cbs.has_key("receiving-im-msg"):             # <<<<<<<<<<<<<<
+ *         return (<object> signal_cbs["receiving-im-msg"])(sender[0], alias, stripped)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_378);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_378);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":202
+ * 
+ *     if signal_cbs.has_key("receiving-im-msg"):
+ *         return (<object> signal_cbs["receiving-im-msg"])(sender[0], alias, stripped)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void jabber_receiving_xmlnode_cb(connection.PurpleConnection *gc, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_379); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = __Pyx_PyBytes_FromString((__pyx_v_sender[0])); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_alias);
+    Py_INCREF(__pyx_v_stripped);
+    PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_stripped);
+    __pyx_4 = 0;
+    __pyx_4 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    __pyx_5 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    __pyx_r = __pyx_5;
+    goto __pyx_L0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_receiving_im_msg_cb");
+  __pyx_r = 0;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_alias);
+  Py_DECREF(__pyx_v_stripped);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":204
+ *         return (<object> signal_cbs["receiving-im-msg"])(sender[0], alias, stripped)
+ * 
+ * cdef void jabber_receiving_xmlnode_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         xmlnode.xmlnode **packet, glib.gpointer null):
+ *     """
+ */
+
+static  void __pyx_f_6purple_jabber_receiving_xmlnode_cb(PurpleConnection *__pyx_v_gc, xmlnode **__pyx_v_packet, gpointer __pyx_v_null) {
+  PyObject *__pyx_v_message;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":209
+ *     Emitted when jabber receives a XML node.
+ *     """
+ *     message = xmlnode.xmlnode_to_str(packet[0], NULL)             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("jabber-receiving-xmlnode"):
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(xmlnode_to_str((__pyx_v_packet[0]), NULL)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_message);
+  __pyx_v_message = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":211
+ *     message = xmlnode.xmlnode_to_str(packet[0], NULL)
+ * 
+ *     if signal_cbs.has_key("jabber-receiving-xmlnode"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["jabber-receiving-xmlnode"])(message)
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_380);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_380);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":212
+ * 
+ *     if signal_cbs.has_key("jabber-receiving-xmlnode"):
+ *         (<object> signal_cbs["jabber-receiving-xmlnode"])(message)             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_381); if (!__pyx_1) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_message);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.jabber_receiving_xmlnode_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_message);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/util.pxd":22
+ * cimport purple
+ * 
+ * def markup_strip_html(message):             # <<<<<<<<<<<<<<
+ *     if message is None:
+ *         return None
+ */
+
+static PyObject *__pyx_pf_6purple_markup_strip_html(PyObject *__pyx_self, PyObject *__pyx_v_message); /*proto*/
+static PyObject *__pyx_pf_6purple_markup_strip_html(PyObject *__pyx_self, PyObject *__pyx_v_message) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+  __pyx_self = __pyx_self;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/util.pxd":23
+ * 
+ * def markup_strip_html(message):
+ *     if message is None:             # <<<<<<<<<<<<<<
+ *         return None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_message == Py_None);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/util.pxd":24
+ * def markup_strip_html(message):
+ *     if message is None:
+ *         return None             # <<<<<<<<<<<<<<
+ *     else:
+ *         return util.purple_markup_strip_html(message)
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/util.pxd":26
+ *         return None
+ *     else:
+ *         return util.purple_markup_strip_html(message)             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_message); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_PyBytes_FromString(purple_markup_strip_html(__pyx_2)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.markup_strip_html");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":68
+ *     """
+ * 
+ *     def __init__(self, ui_name, ui_version, ui_website, ui_dev_website, \             # <<<<<<<<<<<<<<
+ *             debug_enabled=None, default_path=None):
+ * 
+ */
+
+static int __pyx_pf_6purple_6Purple___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_6Purple___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ui_name = 0;
+  PyObject *__pyx_v_ui_version = 0;
+  PyObject *__pyx_v_ui_website = 0;
+  PyObject *__pyx_v_ui_dev_website = 0;
+  PyObject *__pyx_v_debug_enabled = 0;
+  PyObject *__pyx_v_default_path = 0;
+  int __pyx_r;
+  char *__pyx_1;
+  int __pyx_2;
+  gboolean __pyx_3;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_ui_name,&__pyx_kp_ui_version,&__pyx_kp_ui_website,&__pyx_kp_ui_dev_website,&__pyx_kp_debug_enabled,&__pyx_kp_default_path,0};
+  __pyx_v_debug_enabled = Py_None;
+  __pyx_v_default_path = Py_None;
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[6] = {0,0,0,0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_ui_name);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_ui_version);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  2:
+      values[2] = PyDict_GetItem(__pyx_kwds, __pyx_kp_ui_website);
+      if (likely(values[2])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  3:
+      values[3] = PyDict_GetItem(__pyx_kwds, __pyx_kp_ui_dev_website);
+      if (likely(values[3])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_ui_name = values[0];
+    __pyx_v_ui_version = values[1];
+    __pyx_v_ui_website = values[2];
+    __pyx_v_ui_dev_website = values[3];
+    if (values[4]) {
+      __pyx_v_debug_enabled = values[4];
+    }
+    if (values[5]) {
+      __pyx_v_default_path = values[5];
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  6:
+      __pyx_v_default_path = PyTuple_GET_ITEM(__pyx_args, 5);
+      case  5:
+      __pyx_v_debug_enabled = PyTuple_GET_ITEM(__pyx_args, 4);
+      case  4:
+      __pyx_v_ui_dev_website = PyTuple_GET_ITEM(__pyx_args, 3);
+      __pyx_v_ui_website = PyTuple_GET_ITEM(__pyx_args, 2);
+      __pyx_v_ui_version = PyTuple_GET_ITEM(__pyx_args, 1);
+      __pyx_v_ui_name = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Purple.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":76
+ *         global c_ui_dev_website
+ * 
+ *         c_ui_name = ui_name             # <<<<<<<<<<<<<<
+ *         c_ui_version = ui_version
+ *         c_ui_website = ui_website
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_ui_name); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_6purple_c_ui_name = __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":77
+ * 
+ *         c_ui_name = ui_name
+ *         c_ui_version = ui_version             # <<<<<<<<<<<<<<
+ *         c_ui_website = ui_website
+ *         c_ui_dev_website = ui_dev_website
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_ui_version); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_6purple_c_ui_version = __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":78
+ *         c_ui_name = ui_name
+ *         c_ui_version = ui_version
+ *         c_ui_website = ui_website             # <<<<<<<<<<<<<<
+ *         c_ui_dev_website = ui_dev_website
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_ui_website); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_6purple_c_ui_website = __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":79
+ *         c_ui_version = ui_version
+ *         c_ui_website = ui_website
+ *         c_ui_dev_website = ui_dev_website             # <<<<<<<<<<<<<<
+ * 
+ *         if debug_enabled:
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_ui_dev_website); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_6purple_c_ui_dev_website = __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":81
+ *         c_ui_dev_website = ui_dev_website
+ * 
+ *         if debug_enabled:             # <<<<<<<<<<<<<<
+ *             debug.purple_debug_set_enabled(debug_enabled)
+ * 
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_v_debug_enabled); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":82
+ * 
+ *         if debug_enabled:
+ *             debug.purple_debug_set_enabled(debug_enabled)             # <<<<<<<<<<<<<<
+ * 
+ *         if default_path:
+ */
+    __pyx_3 = __pyx_PyInt_int(__pyx_v_debug_enabled); if (unlikely((__pyx_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_debug_set_enabled(__pyx_3);
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":84
+ *             debug.purple_debug_set_enabled(debug_enabled)
+ * 
+ *         if default_path:             # <<<<<<<<<<<<<<
+ *             util.purple_util_set_user_dir(default_path)
+ * 
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_v_default_path); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":85
+ * 
+ *         if default_path:
+ *             util.purple_util_set_user_dir(default_path)             # <<<<<<<<<<<<<<
+ * 
+ *         # adds glib iteration inside ecore main loop
+ */
+    __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_default_path); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_util_set_user_dir(__pyx_1);
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":88
+ * 
+ *         # adds glib iteration inside ecore main loop
+ *         ecore.timer_add(0.001, self.__glib_iteration_when_idle)             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
+ */
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_ecore); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_kp_timer_add); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_4 = PyFloat_FromDouble(0.001); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyObject_GetAttr(__pyx_v_self, __pyx_kp_1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_7, 0, __pyx_4);
+  PyTuple_SET_ITEM(__pyx_7, 1, __pyx_6);
+  __pyx_4 = 0;
+  __pyx_6 = 0;
+  __pyx_4 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
+  __Pyx_AddTraceback("purple.Purple.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":90
+ *         ecore.timer_add(0.001, self.__glib_iteration_when_idle)
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         core.purple_core_quit()
+ * 
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_destroy(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple_destroy(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":91
+ * 
+ *     def destroy(self):
+ *         core.purple_core_quit()             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_ui_name(self):
+ */
+  purple_core_quit();
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":93
+ *         core.purple_core_quit()
+ * 
+ *     def __get_ui_name(self):             # <<<<<<<<<<<<<<
+ *         global c_ui_name
+ *         return str(c_ui_name)
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple___get_ui_name(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple___get_ui_name(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":95
+ *     def __get_ui_name(self):
+ *         global c_ui_name
+ *         return str(c_ui_name)             # <<<<<<<<<<<<<<
+ *     ui_name = property(__get_ui_name)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(__pyx_v_6purple_c_ui_name); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_r = __pyx_1;
+  __pyx_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Purple.__get_ui_name");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":98
+ *     ui_name = property(__get_ui_name)
+ * 
+ *     cdef void __core_ui_ops_ui_prefs_init(self):             # <<<<<<<<<<<<<<
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_prefs_init\n")
+ *         prefs.purple_prefs_load()
+ */
+
+static  void __pyx_f_6purple_6Purple___core_ui_ops_ui_prefs_init(struct __pyx_obj_6purple_Purple *__pyx_v_self) {
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":99
+ * 
+ *     cdef void __core_ui_ops_ui_prefs_init(self):
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_prefs_init\n")             # <<<<<<<<<<<<<<
+ *         prefs.purple_prefs_load()
+ * 
+ */
+  purple_debug_info(__pyx_k_382, __pyx_k_383, __pyx_k_384);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":100
+ *     cdef void __core_ui_ops_ui_prefs_init(self):
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_prefs_init\n")
+ *         prefs.purple_prefs_load()             # <<<<<<<<<<<<<<
+ * 
+ *         prefs.purple_prefs_add_none("/carman")
+ */
+  purple_prefs_load();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":102
+ *         prefs.purple_prefs_load()
+ * 
+ *         prefs.purple_prefs_add_none("/carman")             # <<<<<<<<<<<<<<
+ * 
+ *     cdef void __core_ui_ops_debug_init(self):
+ */
+  purple_prefs_add_none(__pyx_k_385);
+
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":104
+ *         prefs.purple_prefs_add_none("/carman")
+ * 
+ *     cdef void __core_ui_ops_debug_init(self):             # <<<<<<<<<<<<<<
+ *         debug.purple_debug_info("core_ui_ops", "%s", "debug_ui_init\n")
+ *         pass
+ */
+
+static  void __pyx_f_6purple_6Purple___core_ui_ops_debug_init(struct __pyx_obj_6purple_Purple *__pyx_v_self) {
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":105
+ * 
+ *     cdef void __core_ui_ops_debug_init(self):
+ *         debug.purple_debug_info("core_ui_ops", "%s", "debug_ui_init\n")             # <<<<<<<<<<<<<<
+ *         pass
+ * 
+ */
+  purple_debug_info(__pyx_k_386, __pyx_k_387, __pyx_k_388);
+
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":108
+ *         pass
+ * 
+ *     cdef void __core_ui_ops_ui_init(self):             # <<<<<<<<<<<<<<
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_init\n")
+ * 
+ */
+
+static  void __pyx_f_6purple_6Purple___core_ui_ops_ui_init(struct __pyx_obj_6purple_Purple *__pyx_v_self) {
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":109
+ * 
+ *     cdef void __core_ui_ops_ui_init(self):
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_init\n")             # <<<<<<<<<<<<<<
+ * 
+ *         account.purple_accounts_set_ui_ops(&c_account_ui_ops)
+ */
+  purple_debug_info(__pyx_k_389, __pyx_k_390, __pyx_k_391);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":111
+ *         debug.purple_debug_info("core_ui_ops", "%s", "ui_init\n")
+ * 
+ *         account.purple_accounts_set_ui_ops(&c_account_ui_ops)             # <<<<<<<<<<<<<<
+ *         connection.purple_connections_set_ui_ops(&c_conn_ui_ops)
+ *         blist.purple_blist_set_ui_ops(&c_blist_ui_ops)
+ */
+  purple_accounts_set_ui_ops((&__pyx_v_6purple_c_account_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":112
+ * 
+ *         account.purple_accounts_set_ui_ops(&c_account_ui_ops)
+ *         connection.purple_connections_set_ui_ops(&c_conn_ui_ops)             # <<<<<<<<<<<<<<
+ *         blist.purple_blist_set_ui_ops(&c_blist_ui_ops)
+ *         conversation.purple_conversations_set_ui_ops(&c_conv_ui_ops)
+ */
+  purple_connections_set_ui_ops((&__pyx_v_6purple_c_conn_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":113
+ *         account.purple_accounts_set_ui_ops(&c_account_ui_ops)
+ *         connection.purple_connections_set_ui_ops(&c_conn_ui_ops)
+ *         blist.purple_blist_set_ui_ops(&c_blist_ui_ops)             # <<<<<<<<<<<<<<
+ *         conversation.purple_conversations_set_ui_ops(&c_conv_ui_ops)
+ *         notify.purple_notify_set_ui_ops(&c_notify_ui_ops)
+ */
+  purple_blist_set_ui_ops((&__pyx_v_6purple_c_blist_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":114
+ *         connection.purple_connections_set_ui_ops(&c_conn_ui_ops)
+ *         blist.purple_blist_set_ui_ops(&c_blist_ui_ops)
+ *         conversation.purple_conversations_set_ui_ops(&c_conv_ui_ops)             # <<<<<<<<<<<<<<
+ *         notify.purple_notify_set_ui_ops(&c_notify_ui_ops)
+ *         #privacy.purple_privacy_set_ui_ops(&c_privacy_ui_ops)
+ */
+  purple_conversations_set_ui_ops((&__pyx_v_6purple_c_conv_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":115
+ *         blist.purple_blist_set_ui_ops(&c_blist_ui_ops)
+ *         conversation.purple_conversations_set_ui_ops(&c_conv_ui_ops)
+ *         notify.purple_notify_set_ui_ops(&c_notify_ui_ops)             # <<<<<<<<<<<<<<
+ *         #privacy.purple_privacy_set_ui_ops(&c_privacy_ui_ops)
+ *         request.purple_request_set_ui_ops(&c_request_ui_ops)
+ */
+  purple_notify_set_ui_ops((&__pyx_v_6purple_c_notify_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":117
+ *         notify.purple_notify_set_ui_ops(&c_notify_ui_ops)
+ *         #privacy.purple_privacy_set_ui_ops(&c_privacy_ui_ops)
+ *         request.purple_request_set_ui_ops(&c_request_ui_ops)             # <<<<<<<<<<<<<<
+ *         #ft.purple_xfers_set_ui_ops(&c_ft_ui_ops)
+ *         #roomlist.purple_roomlist_set_ui_ops(&c_rlist_ui_ops)
+ */
+  purple_request_set_ui_ops((&__pyx_v_6purple_c_request_ui_ops));
+
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":121
+ *         #roomlist.purple_roomlist_set_ui_ops(&c_rlist_ui_ops)
+ * 
+ *     cdef void __core_ui_ops_quit(self):             # <<<<<<<<<<<<<<
+ *         debug.purple_debug_info("core_ui_ops", "%s", "quit\n")
+ * 
+ */
+
+static  void __pyx_f_6purple_6Purple___core_ui_ops_quit(struct __pyx_obj_6purple_Purple *__pyx_v_self) {
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":122
+ * 
+ *     cdef void __core_ui_ops_quit(self):
+ *         debug.purple_debug_info("core_ui_ops", "%s", "quit\n")             # <<<<<<<<<<<<<<
+ * 
+ *         account.purple_accounts_set_ui_ops(NULL)
+ */
+  purple_debug_info(__pyx_k_392, __pyx_k_393, __pyx_k_394);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":124
+ *         debug.purple_debug_info("core_ui_ops", "%s", "quit\n")
+ * 
+ *         account.purple_accounts_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         connection.purple_connections_set_ui_ops(NULL)
+ *         blist.purple_blist_set_ui_ops(NULL)
+ */
+  purple_accounts_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":125
+ * 
+ *         account.purple_accounts_set_ui_ops(NULL)
+ *         connection.purple_connections_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         blist.purple_blist_set_ui_ops(NULL)
+ *         conversation.purple_conversations_set_ui_ops(NULL)
+ */
+  purple_connections_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":126
+ *         account.purple_accounts_set_ui_ops(NULL)
+ *         connection.purple_connections_set_ui_ops(NULL)
+ *         blist.purple_blist_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         conversation.purple_conversations_set_ui_ops(NULL)
+ *         notify.purple_notify_set_ui_ops(NULL)
+ */
+  purple_blist_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":127
+ *         connection.purple_connections_set_ui_ops(NULL)
+ *         blist.purple_blist_set_ui_ops(NULL)
+ *         conversation.purple_conversations_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         notify.purple_notify_set_ui_ops(NULL)
+ *         #privacy.purple_privacy_set_ui_ops(NULL)
+ */
+  purple_conversations_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":128
+ *         blist.purple_blist_set_ui_ops(NULL)
+ *         conversation.purple_conversations_set_ui_ops(NULL)
+ *         notify.purple_notify_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         #privacy.purple_privacy_set_ui_ops(NULL)
+ *         request.purple_request_set_ui_ops(NULL)
+ */
+  purple_notify_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":130
+ *         notify.purple_notify_set_ui_ops(NULL)
+ *         #privacy.purple_privacy_set_ui_ops(NULL)
+ *         request.purple_request_set_ui_ops(NULL)             # <<<<<<<<<<<<<<
+ *         #ft.purple_xfers_set_ui_ops(NULL)
+ *         #roomlist.purple_roomlist_set_ui_ops(NULL)
+ */
+  purple_request_set_ui_ops(NULL);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":134
+ *         #roomlist.purple_roomlist_set_ui_ops(NULL)
+ * 
+ *         if self.c_ui_info:             # <<<<<<<<<<<<<<
+ *             glib.g_hash_table_destroy(<glib.GHashTable *> self.c_ui_info)
+ * 
+ */
+  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_c_ui_info); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_1); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":135
+ * 
+ *         if self.c_ui_info:
+ *             glib.g_hash_table_destroy(<glib.GHashTable *> self.c_ui_info)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef glib.GHashTable *__core_ui_ops_get_ui_info(self):
+ */
+    __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_c_ui_info); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    g_hash_table_destroy(((GHashTable *)__pyx_1));
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  __Pyx_WriteUnraisable("purple.Purple.__core_ui_ops_quit");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":137
+ *             glib.g_hash_table_destroy(<glib.GHashTable *> self.c_ui_info)
+ * 
+ *     cdef glib.GHashTable *__core_ui_ops_get_ui_info(self):             # <<<<<<<<<<<<<<
+ *         global c_ui_info
+ *         global c_ui_name
+ */
+
+static  GHashTable *__pyx_f_6purple_6Purple___core_ui_ops_get_ui_info(struct __pyx_obj_6purple_Purple *__pyx_v_self) {
+  GHashTable *__pyx_r;
+  int __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":144
+ *         global c_ui_dev_website
+ * 
+ *         if c_ui_info == NULL:             # <<<<<<<<<<<<<<
+ *             c_ui_info = glib.g_hash_table_new(glib.g_str_hash, \
+ *                     glib.g_str_equal)
+ */
+  __pyx_1 = (__pyx_v_6purple_c_ui_info == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":146
+ *         if c_ui_info == NULL:
+ *             c_ui_info = glib.g_hash_table_new(glib.g_str_hash, \
+ *                     glib.g_str_equal)             # <<<<<<<<<<<<<<
+ * 
+ *             glib.g_hash_table_insert(c_ui_info, "name", c_ui_name)
+ */
+    __pyx_v_6purple_c_ui_info = g_hash_table_new(g_str_hash, g_str_equal);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":148
+ *                     glib.g_str_equal)
+ * 
+ *             glib.g_hash_table_insert(c_ui_info, "name", c_ui_name)             # <<<<<<<<<<<<<<
+ *             glib.g_hash_table_insert(c_ui_info, "version", c_ui_version)
+ *             glib.g_hash_table_insert(c_ui_info, "website", c_ui_website)
+ */
+    g_hash_table_insert(__pyx_v_6purple_c_ui_info, __pyx_k_395, __pyx_v_6purple_c_ui_name);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":149
+ * 
+ *             glib.g_hash_table_insert(c_ui_info, "name", c_ui_name)
+ *             glib.g_hash_table_insert(c_ui_info, "version", c_ui_version)             # <<<<<<<<<<<<<<
+ *             glib.g_hash_table_insert(c_ui_info, "website", c_ui_website)
+ *             glib.g_hash_table_insert(c_ui_info, "dev_website", c_ui_dev_website)
+ */
+    g_hash_table_insert(__pyx_v_6purple_c_ui_info, __pyx_k_396, __pyx_v_6purple_c_ui_version);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":150
+ *             glib.g_hash_table_insert(c_ui_info, "name", c_ui_name)
+ *             glib.g_hash_table_insert(c_ui_info, "version", c_ui_version)
+ *             glib.g_hash_table_insert(c_ui_info, "website", c_ui_website)             # <<<<<<<<<<<<<<
+ *             glib.g_hash_table_insert(c_ui_info, "dev_website", c_ui_dev_website)
+ *         return c_ui_info
+ */
+    g_hash_table_insert(__pyx_v_6purple_c_ui_info, __pyx_k_397, __pyx_v_6purple_c_ui_website);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":151
+ *             glib.g_hash_table_insert(c_ui_info, "version", c_ui_version)
+ *             glib.g_hash_table_insert(c_ui_info, "website", c_ui_website)
+ *             glib.g_hash_table_insert(c_ui_info, "dev_website", c_ui_dev_website)             # <<<<<<<<<<<<<<
+ *         return c_ui_info
+ * 
+ */
+    g_hash_table_insert(__pyx_v_6purple_c_ui_info, __pyx_k_398, __pyx_v_6purple_c_ui_dev_website);
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":152
+ *             glib.g_hash_table_insert(c_ui_info, "website", c_ui_website)
+ *             glib.g_hash_table_insert(c_ui_info, "dev_website", c_ui_dev_website)
+ *         return c_ui_info             # <<<<<<<<<<<<<<
+ * 
+ *     def __glib_iteration_when_idle(self):
+ */
+  __pyx_r = __pyx_v_6purple_c_ui_info;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":154
+ *         return c_ui_info
+ * 
+ *     def __glib_iteration_when_idle(self):             # <<<<<<<<<<<<<<
+ *         glib.g_main_context_iteration(NULL, False)
+ *         return True
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple___glib_iteration_when_idle(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple___glib_iteration_when_idle(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":155
+ * 
+ *     def __glib_iteration_when_idle(self):
+ *         glib.g_main_context_iteration(NULL, False)             # <<<<<<<<<<<<<<
+ *         return True
+ * 
+ */
+  g_main_context_iteration(NULL, 0);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":156
+ *     def __glib_iteration_when_idle(self):
+ *         glib.g_main_context_iteration(NULL, False)
+ *         return True             # <<<<<<<<<<<<<<
+ * 
+ *     def purple_init(self):
+ */
+  __pyx_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_1;
+  __pyx_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  __Pyx_AddTraceback("purple.Purple.__glib_iteration_when_idle");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":158
+ *         return True
+ * 
+ *     def purple_init(self):             # <<<<<<<<<<<<<<
+ *         """ Initializes libpurple """
+ *         global c_ui_name
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_purple_init(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_6Purple_purple_init[] = " Initializes libpurple ";
+static PyObject *__pyx_pf_6purple_6Purple_purple_init(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_v_ret;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  __pyx_v_ret = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":162
+ *         global c_ui_name
+ * 
+ *         c_account_ui_ops.notify_added = notify_added             # <<<<<<<<<<<<<<
+ *         c_account_ui_ops.status_changed = status_changed
+ *         c_account_ui_ops.request_add = request_add
+ */
+  __pyx_v_6purple_c_account_ui_ops.notify_added = __pyx_f_6purple_notify_added;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":163
+ * 
+ *         c_account_ui_ops.notify_added = notify_added
+ *         c_account_ui_ops.status_changed = status_changed             # <<<<<<<<<<<<<<
+ *         c_account_ui_ops.request_add = request_add
+ *         c_account_ui_ops.request_authorize = request_authorize
+ */
+  __pyx_v_6purple_c_account_ui_ops.status_changed = __pyx_f_6purple_status_changed;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":164
+ *         c_account_ui_ops.notify_added = notify_added
+ *         c_account_ui_ops.status_changed = status_changed
+ *         c_account_ui_ops.request_add = request_add             # <<<<<<<<<<<<<<
+ *         c_account_ui_ops.request_authorize = request_authorize
+ *         c_account_ui_ops.close_account_request = close_account_request
+ */
+  __pyx_v_6purple_c_account_ui_ops.request_add = __pyx_f_6purple_request_add;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":165
+ *         c_account_ui_ops.status_changed = status_changed
+ *         c_account_ui_ops.request_add = request_add
+ *         c_account_ui_ops.request_authorize = request_authorize             # <<<<<<<<<<<<<<
+ *         c_account_ui_ops.close_account_request = close_account_request
+ * 
+ */
+  __pyx_v_6purple_c_account_ui_ops.request_authorize = __pyx_f_6purple_request_authorize;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":166
+ *         c_account_ui_ops.request_add = request_add
+ *         c_account_ui_ops.request_authorize = request_authorize
+ *         c_account_ui_ops.close_account_request = close_account_request             # <<<<<<<<<<<<<<
+ * 
+ *         c_blist_ui_ops.new_list = new_list
+ */
+  __pyx_v_6purple_c_account_ui_ops.close_account_request = __pyx_f_6purple_close_account_request;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":168
+ *         c_account_ui_ops.close_account_request = close_account_request
+ * 
+ *         c_blist_ui_ops.new_list = new_list             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.new_node = new_node
+ *         c_blist_ui_ops.show = show
+ */
+  __pyx_v_6purple_c_blist_ui_ops.new_list = __pyx_f_6purple_new_list;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":169
+ * 
+ *         c_blist_ui_ops.new_list = new_list
+ *         c_blist_ui_ops.new_node = new_node             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.show = show
+ *         c_blist_ui_ops.update = update
+ */
+  __pyx_v_6purple_c_blist_ui_ops.new_node = __pyx_f_6purple_new_node;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":170
+ *         c_blist_ui_ops.new_list = new_list
+ *         c_blist_ui_ops.new_node = new_node
+ *         c_blist_ui_ops.show = show             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.update = update
+ *         c_blist_ui_ops.remove = remove
+ */
+  __pyx_v_6purple_c_blist_ui_ops.show = __pyx_f_6purple_show;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":171
+ *         c_blist_ui_ops.new_node = new_node
+ *         c_blist_ui_ops.show = show
+ *         c_blist_ui_ops.update = update             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.remove = remove
+ *         c_blist_ui_ops.destroy = destroy
+ */
+  __pyx_v_6purple_c_blist_ui_ops.update = __pyx_f_6purple_update;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":172
+ *         c_blist_ui_ops.show = show
+ *         c_blist_ui_ops.update = update
+ *         c_blist_ui_ops.remove = remove             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.destroy = destroy
+ *         c_blist_ui_ops.set_visible = set_visible
+ */
+  __pyx_v_6purple_c_blist_ui_ops.remove = __pyx_f_6purple_remove;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":173
+ *         c_blist_ui_ops.update = update
+ *         c_blist_ui_ops.remove = remove
+ *         c_blist_ui_ops.destroy = destroy             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.set_visible = set_visible
+ *         c_blist_ui_ops.request_add_buddy = request_add_buddy
+ */
+  __pyx_v_6purple_c_blist_ui_ops.destroy = __pyx_f_6purple_destroy;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":174
+ *         c_blist_ui_ops.remove = remove
+ *         c_blist_ui_ops.destroy = destroy
+ *         c_blist_ui_ops.set_visible = set_visible             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.request_add_buddy = request_add_buddy
+ *         c_blist_ui_ops.request_add_chat = request_add_chat
+ */
+  __pyx_v_6purple_c_blist_ui_ops.set_visible = __pyx_f_6purple_set_visible;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":175
+ *         c_blist_ui_ops.destroy = destroy
+ *         c_blist_ui_ops.set_visible = set_visible
+ *         c_blist_ui_ops.request_add_buddy = request_add_buddy             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.request_add_chat = request_add_chat
+ *         c_blist_ui_ops.request_add_group = request_add_group
+ */
+  __pyx_v_6purple_c_blist_ui_ops.request_add_buddy = __pyx_f_6purple_request_add_buddy;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":176
+ *         c_blist_ui_ops.set_visible = set_visible
+ *         c_blist_ui_ops.request_add_buddy = request_add_buddy
+ *         c_blist_ui_ops.request_add_chat = request_add_chat             # <<<<<<<<<<<<<<
+ *         c_blist_ui_ops.request_add_group = request_add_group
+ * 
+ */
+  __pyx_v_6purple_c_blist_ui_ops.request_add_chat = __pyx_f_6purple_request_add_chat;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":177
+ *         c_blist_ui_ops.request_add_buddy = request_add_buddy
+ *         c_blist_ui_ops.request_add_chat = request_add_chat
+ *         c_blist_ui_ops.request_add_group = request_add_group             # <<<<<<<<<<<<<<
+ * 
+ *         c_conn_ui_ops.connect_progress = connect_progress
+ */
+  __pyx_v_6purple_c_blist_ui_ops.request_add_group = __pyx_f_6purple_request_add_group;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":179
+ *         c_blist_ui_ops.request_add_group = request_add_group
+ * 
+ *         c_conn_ui_ops.connect_progress = connect_progress             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.connected = connected
+ *         c_conn_ui_ops.disconnected = disconnected
+ */
+  __pyx_v_6purple_c_conn_ui_ops.connect_progress = __pyx_f_6purple_connect_progress;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":180
+ * 
+ *         c_conn_ui_ops.connect_progress = connect_progress
+ *         c_conn_ui_ops.connected = connected             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.disconnected = disconnected
+ *         c_conn_ui_ops.notice = notice
+ */
+  __pyx_v_6purple_c_conn_ui_ops.connected = __pyx_f_6purple_connected;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":181
+ *         c_conn_ui_ops.connect_progress = connect_progress
+ *         c_conn_ui_ops.connected = connected
+ *         c_conn_ui_ops.disconnected = disconnected             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.notice = notice
+ *         c_conn_ui_ops.report_disconnect = report_disconnect
+ */
+  __pyx_v_6purple_c_conn_ui_ops.disconnected = __pyx_f_6purple_disconnected;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":182
+ *         c_conn_ui_ops.connected = connected
+ *         c_conn_ui_ops.disconnected = disconnected
+ *         c_conn_ui_ops.notice = notice             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.report_disconnect = report_disconnect
+ *         c_conn_ui_ops.network_connected = network_connected
+ */
+  __pyx_v_6purple_c_conn_ui_ops.notice = __pyx_f_6purple_notice;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":183
+ *         c_conn_ui_ops.disconnected = disconnected
+ *         c_conn_ui_ops.notice = notice
+ *         c_conn_ui_ops.report_disconnect = report_disconnect             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.network_connected = network_connected
+ *         c_conn_ui_ops.network_disconnected = network_disconnected
+ */
+  __pyx_v_6purple_c_conn_ui_ops.report_disconnect = __pyx_f_6purple_report_disconnect;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":184
+ *         c_conn_ui_ops.notice = notice
+ *         c_conn_ui_ops.report_disconnect = report_disconnect
+ *         c_conn_ui_ops.network_connected = network_connected             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.network_disconnected = network_disconnected
+ *         c_conn_ui_ops.report_disconnect_reason = report_disconnect_reason
+ */
+  __pyx_v_6purple_c_conn_ui_ops.network_connected = __pyx_f_6purple_network_connected;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":185
+ *         c_conn_ui_ops.report_disconnect = report_disconnect
+ *         c_conn_ui_ops.network_connected = network_connected
+ *         c_conn_ui_ops.network_disconnected = network_disconnected             # <<<<<<<<<<<<<<
+ *         c_conn_ui_ops.report_disconnect_reason = report_disconnect_reason
+ * 
+ */
+  __pyx_v_6purple_c_conn_ui_ops.network_disconnected = __pyx_f_6purple_network_disconnected;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":186
+ *         c_conn_ui_ops.network_connected = network_connected
+ *         c_conn_ui_ops.network_disconnected = network_disconnected
+ *         c_conn_ui_ops.report_disconnect_reason = report_disconnect_reason             # <<<<<<<<<<<<<<
+ * 
+ *         c_conv_ui_ops.create_conversation = create_conversation
+ */
+  __pyx_v_6purple_c_conn_ui_ops.report_disconnect_reason = __pyx_f_6purple_report_disconnect_reason;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":188
+ *         c_conn_ui_ops.report_disconnect_reason = report_disconnect_reason
+ * 
+ *         c_conv_ui_ops.create_conversation = create_conversation             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.destroy_conversation = destroy_conversation
+ *         c_conv_ui_ops.write_chat = write_chat
+ */
+  __pyx_v_6purple_c_conv_ui_ops.create_conversation = __pyx_f_6purple_create_conversation;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":189
+ * 
+ *         c_conv_ui_ops.create_conversation = create_conversation
+ *         c_conv_ui_ops.destroy_conversation = destroy_conversation             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_chat = write_chat
+ *         c_conv_ui_ops.write_im = write_im
+ */
+  __pyx_v_6purple_c_conv_ui_ops.destroy_conversation = __pyx_f_6purple_destroy_conversation;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":190
+ *         c_conv_ui_ops.create_conversation = create_conversation
+ *         c_conv_ui_ops.destroy_conversation = destroy_conversation
+ *         c_conv_ui_ops.write_chat = write_chat             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_im = write_im
+ *         c_conv_ui_ops.write_conv = write_conv
+ */
+  __pyx_v_6purple_c_conv_ui_ops.write_chat = __pyx_f_6purple_write_chat;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":191
+ *         c_conv_ui_ops.destroy_conversation = destroy_conversation
+ *         c_conv_ui_ops.write_chat = write_chat
+ *         c_conv_ui_ops.write_im = write_im             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_conv = write_conv
+ *         c_conv_ui_ops.chat_add_users = chat_add_users
+ */
+  __pyx_v_6purple_c_conv_ui_ops.write_im = __pyx_f_6purple_write_im;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":192
+ *         c_conv_ui_ops.write_chat = write_chat
+ *         c_conv_ui_ops.write_im = write_im
+ *         c_conv_ui_ops.write_conv = write_conv             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_add_users = chat_add_users
+ *         c_conv_ui_ops.chat_rename_user = chat_rename_user
+ */
+  __pyx_v_6purple_c_conv_ui_ops.write_conv = __pyx_f_6purple_write_conv;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":193
+ *         c_conv_ui_ops.write_im = write_im
+ *         c_conv_ui_ops.write_conv = write_conv
+ *         c_conv_ui_ops.chat_add_users = chat_add_users             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_rename_user = chat_rename_user
+ *         c_conv_ui_ops.chat_remove_users = chat_remove_users
+ */
+  __pyx_v_6purple_c_conv_ui_ops.chat_add_users = __pyx_f_6purple_chat_add_users;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":194
+ *         c_conv_ui_ops.write_conv = write_conv
+ *         c_conv_ui_ops.chat_add_users = chat_add_users
+ *         c_conv_ui_ops.chat_rename_user = chat_rename_user             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_remove_users = chat_remove_users
+ *         c_conv_ui_ops.chat_update_user = chat_update_user
+ */
+  __pyx_v_6purple_c_conv_ui_ops.chat_rename_user = __pyx_f_6purple_chat_rename_user;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":195
+ *         c_conv_ui_ops.chat_add_users = chat_add_users
+ *         c_conv_ui_ops.chat_rename_user = chat_rename_user
+ *         c_conv_ui_ops.chat_remove_users = chat_remove_users             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_update_user = chat_update_user
+ *         c_conv_ui_ops.present = present
+ */
+  __pyx_v_6purple_c_conv_ui_ops.chat_remove_users = __pyx_f_6purple_chat_remove_users;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":196
+ *         c_conv_ui_ops.chat_rename_user = chat_rename_user
+ *         c_conv_ui_ops.chat_remove_users = chat_remove_users
+ *         c_conv_ui_ops.chat_update_user = chat_update_user             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.present = present
+ *         c_conv_ui_ops.has_focus = has_focus
+ */
+  __pyx_v_6purple_c_conv_ui_ops.chat_update_user = __pyx_f_6purple_chat_update_user;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":197
+ *         c_conv_ui_ops.chat_remove_users = chat_remove_users
+ *         c_conv_ui_ops.chat_update_user = chat_update_user
+ *         c_conv_ui_ops.present = present             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.has_focus = has_focus
+ *         c_conv_ui_ops.custom_smiley_add = custom_smiley_add
+ */
+  __pyx_v_6purple_c_conv_ui_ops.present = __pyx_f_6purple_present;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":198
+ *         c_conv_ui_ops.chat_update_user = chat_update_user
+ *         c_conv_ui_ops.present = present
+ *         c_conv_ui_ops.has_focus = has_focus             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_add = custom_smiley_add
+ *         c_conv_ui_ops.custom_smiley_write = custom_smiley_write
+ */
+  __pyx_v_6purple_c_conv_ui_ops.has_focus = __pyx_f_6purple_has_focus;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":199
+ *         c_conv_ui_ops.present = present
+ *         c_conv_ui_ops.has_focus = has_focus
+ *         c_conv_ui_ops.custom_smiley_add = custom_smiley_add             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_write = custom_smiley_write
+ *         c_conv_ui_ops.custom_smiley_close = custom_smiley_close
+ */
+  __pyx_v_6purple_c_conv_ui_ops.custom_smiley_add = __pyx_f_6purple_custom_smiley_add;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":200
+ *         c_conv_ui_ops.has_focus = has_focus
+ *         c_conv_ui_ops.custom_smiley_add = custom_smiley_add
+ *         c_conv_ui_ops.custom_smiley_write = custom_smiley_write             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_close = custom_smiley_close
+ *         c_conv_ui_ops.send_confirm = send_confirm
+ */
+  __pyx_v_6purple_c_conv_ui_ops.custom_smiley_write = __pyx_f_6purple_custom_smiley_write;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":201
+ *         c_conv_ui_ops.custom_smiley_add = custom_smiley_add
+ *         c_conv_ui_ops.custom_smiley_write = custom_smiley_write
+ *         c_conv_ui_ops.custom_smiley_close = custom_smiley_close             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.send_confirm = send_confirm
+ * 
+ */
+  __pyx_v_6purple_c_conv_ui_ops.custom_smiley_close = __pyx_f_6purple_custom_smiley_close;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":202
+ *         c_conv_ui_ops.custom_smiley_write = custom_smiley_write
+ *         c_conv_ui_ops.custom_smiley_close = custom_smiley_close
+ *         c_conv_ui_ops.send_confirm = send_confirm             # <<<<<<<<<<<<<<
+ * 
+ *         c_notify_ui_ops.notify_message = notify_message
+ */
+  __pyx_v_6purple_c_conv_ui_ops.send_confirm = __pyx_f_6purple_send_confirm;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":204
+ *         c_conv_ui_ops.send_confirm = send_confirm
+ * 
+ *         c_notify_ui_ops.notify_message = notify_message             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_email = notify_email
+ *         c_notify_ui_ops.notify_emails = notify_emails
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_message = __pyx_f_6purple_notify_message;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":205
+ * 
+ *         c_notify_ui_ops.notify_message = notify_message
+ *         c_notify_ui_ops.notify_email = notify_email             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_emails = notify_emails
+ *         c_notify_ui_ops.notify_formatted = notify_formatted
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_email = __pyx_f_6purple_notify_email;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":206
+ *         c_notify_ui_ops.notify_message = notify_message
+ *         c_notify_ui_ops.notify_email = notify_email
+ *         c_notify_ui_ops.notify_emails = notify_emails             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_formatted = notify_formatted
+ *         c_notify_ui_ops.notify_searchresults = notify_searchresults
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_emails = __pyx_f_6purple_notify_emails;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":207
+ *         c_notify_ui_ops.notify_email = notify_email
+ *         c_notify_ui_ops.notify_emails = notify_emails
+ *         c_notify_ui_ops.notify_formatted = notify_formatted             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_searchresults = notify_searchresults
+ *         c_notify_ui_ops.notify_searchresults_new_rows = notify_searchresults_new_rows
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_formatted = __pyx_f_6purple_notify_formatted;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":208
+ *         c_notify_ui_ops.notify_emails = notify_emails
+ *         c_notify_ui_ops.notify_formatted = notify_formatted
+ *         c_notify_ui_ops.notify_searchresults = notify_searchresults             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_searchresults_new_rows = notify_searchresults_new_rows
+ *         c_notify_ui_ops.notify_userinfo = notify_userinfo
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_searchresults = __pyx_f_6purple_notify_searchresults;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":209
+ *         c_notify_ui_ops.notify_formatted = notify_formatted
+ *         c_notify_ui_ops.notify_searchresults = notify_searchresults
+ *         c_notify_ui_ops.notify_searchresults_new_rows = notify_searchresults_new_rows             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_userinfo = notify_userinfo
+ *         c_notify_ui_ops.notify_uri = notify_uri
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_searchresults_new_rows = __pyx_f_6purple_notify_searchresults_new_rows;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":210
+ *         c_notify_ui_ops.notify_searchresults = notify_searchresults
+ *         c_notify_ui_ops.notify_searchresults_new_rows = notify_searchresults_new_rows
+ *         c_notify_ui_ops.notify_userinfo = notify_userinfo             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.notify_uri = notify_uri
+ *         c_notify_ui_ops.close_notify = close_notify
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_userinfo = __pyx_f_6purple_notify_userinfo;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":211
+ *         c_notify_ui_ops.notify_searchresults_new_rows = notify_searchresults_new_rows
+ *         c_notify_ui_ops.notify_userinfo = notify_userinfo
+ *         c_notify_ui_ops.notify_uri = notify_uri             # <<<<<<<<<<<<<<
+ *         c_notify_ui_ops.close_notify = close_notify
+ * 
+ */
+  __pyx_v_6purple_c_notify_ui_ops.notify_uri = __pyx_f_6purple_notify_uri;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":212
+ *         c_notify_ui_ops.notify_userinfo = notify_userinfo
+ *         c_notify_ui_ops.notify_uri = notify_uri
+ *         c_notify_ui_ops.close_notify = close_notify             # <<<<<<<<<<<<<<
+ * 
+ *         c_request_ui_ops.request_input = request_input
+ */
+  __pyx_v_6purple_c_notify_ui_ops.close_notify = __pyx_f_6purple_close_notify;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":214
+ *         c_notify_ui_ops.close_notify = close_notify
+ * 
+ *         c_request_ui_ops.request_input = request_input             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.request_choice = request_choice
+ *         c_request_ui_ops.request_action = request_action
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_input = __pyx_f_6purple_request_input;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":215
+ * 
+ *         c_request_ui_ops.request_input = request_input
+ *         c_request_ui_ops.request_choice = request_choice             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.request_action = request_action
+ *         c_request_ui_ops.request_fields = request_fields
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_choice = __pyx_f_6purple_request_choice;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":216
+ *         c_request_ui_ops.request_input = request_input
+ *         c_request_ui_ops.request_choice = request_choice
+ *         c_request_ui_ops.request_action = request_action             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.request_fields = request_fields
+ *         c_request_ui_ops.request_file = request_file
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_action = __pyx_f_6purple_request_action;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":217
+ *         c_request_ui_ops.request_choice = request_choice
+ *         c_request_ui_ops.request_action = request_action
+ *         c_request_ui_ops.request_fields = request_fields             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.request_file = request_file
+ *         c_request_ui_ops.close_request = close_request
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_fields = __pyx_f_6purple_request_fields;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":218
+ *         c_request_ui_ops.request_action = request_action
+ *         c_request_ui_ops.request_fields = request_fields
+ *         c_request_ui_ops.request_file = request_file             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.close_request = close_request
+ *         c_request_ui_ops.request_folder = request_folder
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_file = __pyx_f_6purple_request_file;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":219
+ *         c_request_ui_ops.request_fields = request_fields
+ *         c_request_ui_ops.request_file = request_file
+ *         c_request_ui_ops.close_request = close_request             # <<<<<<<<<<<<<<
+ *         c_request_ui_ops.request_folder = request_folder
+ * 
+ */
+  __pyx_v_6purple_c_request_ui_ops.close_request = __pyx_f_6purple_close_request;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":220
+ *         c_request_ui_ops.request_file = request_file
+ *         c_request_ui_ops.close_request = close_request
+ *         c_request_ui_ops.request_folder = request_folder             # <<<<<<<<<<<<<<
+ * 
+ *         c_core_ui_ops.ui_prefs_init = <void (*)()> self.__core_ui_ops_ui_prefs_init
+ */
+  __pyx_v_6purple_c_request_ui_ops.request_folder = __pyx_f_6purple_request_folder;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":222
+ *         c_request_ui_ops.request_folder = request_folder
+ * 
+ *         c_core_ui_ops.ui_prefs_init = <void (*)()> self.__core_ui_ops_ui_prefs_init             # <<<<<<<<<<<<<<
+ *         c_core_ui_ops.debug_ui_init = <void (*)()> self.__core_ui_ops_debug_init
+ *         c_core_ui_ops.ui_init = <void (*)()> self.__core_ui_ops_ui_init
+ */
+  __pyx_v_6purple_c_core_ui_ops.ui_prefs_init = ((void (*)(void))((struct __pyx_vtabstruct_6purple_Purple *)((struct __pyx_obj_6purple_Purple *)__pyx_v_self)->__pyx_vtab)->__core_ui_ops_ui_prefs_init);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":223
+ * 
+ *         c_core_ui_ops.ui_prefs_init = <void (*)()> self.__core_ui_ops_ui_prefs_init
+ *         c_core_ui_ops.debug_ui_init = <void (*)()> self.__core_ui_ops_debug_init             # <<<<<<<<<<<<<<
+ *         c_core_ui_ops.ui_init = <void (*)()> self.__core_ui_ops_ui_init
+ *         c_core_ui_ops.quit = <void (*)()> self.__core_ui_ops_quit
+ */
+  __pyx_v_6purple_c_core_ui_ops.debug_ui_init = ((void (*)(void))((struct __pyx_vtabstruct_6purple_Purple *)((struct __pyx_obj_6purple_Purple *)__pyx_v_self)->__pyx_vtab)->__core_ui_ops_debug_init);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":224
+ *         c_core_ui_ops.ui_prefs_init = <void (*)()> self.__core_ui_ops_ui_prefs_init
+ *         c_core_ui_ops.debug_ui_init = <void (*)()> self.__core_ui_ops_debug_init
+ *         c_core_ui_ops.ui_init = <void (*)()> self.__core_ui_ops_ui_init             # <<<<<<<<<<<<<<
+ *         c_core_ui_ops.quit = <void (*)()> self.__core_ui_ops_quit
+ *         c_core_ui_ops.get_ui_info = <glib.GHashTable* (*)()> self.__core_ui_ops_get_ui_info
+ */
+  __pyx_v_6purple_c_core_ui_ops.ui_init = ((void (*)(void))((struct __pyx_vtabstruct_6purple_Purple *)((struct __pyx_obj_6purple_Purple *)__pyx_v_self)->__pyx_vtab)->__core_ui_ops_ui_init);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":225
+ *         c_core_ui_ops.debug_ui_init = <void (*)()> self.__core_ui_ops_debug_init
+ *         c_core_ui_ops.ui_init = <void (*)()> self.__core_ui_ops_ui_init
+ *         c_core_ui_ops.quit = <void (*)()> self.__core_ui_ops_quit             # <<<<<<<<<<<<<<
+ *         c_core_ui_ops.get_ui_info = <glib.GHashTable* (*)()> self.__core_ui_ops_get_ui_info
+ * 
+ */
+  __pyx_v_6purple_c_core_ui_ops.quit = ((void (*)(void))((struct __pyx_vtabstruct_6purple_Purple *)((struct __pyx_obj_6purple_Purple *)__pyx_v_self)->__pyx_vtab)->__core_ui_ops_quit);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":226
+ *         c_core_ui_ops.ui_init = <void (*)()> self.__core_ui_ops_ui_init
+ *         c_core_ui_ops.quit = <void (*)()> self.__core_ui_ops_quit
+ *         c_core_ui_ops.get_ui_info = <glib.GHashTable* (*)()> self.__core_ui_ops_get_ui_info             # <<<<<<<<<<<<<<
+ * 
+ *         c_eventloop_ui_ops.timeout_add = glib.g_timeout_add
+ */
+  __pyx_v_6purple_c_core_ui_ops.get_ui_info = ((GHashTable *(*)(void))((struct __pyx_vtabstruct_6purple_Purple *)((struct __pyx_obj_6purple_Purple *)__pyx_v_self)->__pyx_vtab)->__core_ui_ops_get_ui_info);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":228
+ *         c_core_ui_ops.get_ui_info = <glib.GHashTable* (*)()> self.__core_ui_ops_get_ui_info
+ * 
+ *         c_eventloop_ui_ops.timeout_add = glib.g_timeout_add             # <<<<<<<<<<<<<<
+ *         c_eventloop_ui_ops.timeout_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_add = glib_input_add
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.timeout_add = g_timeout_add;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":229
+ * 
+ *         c_eventloop_ui_ops.timeout_add = glib.g_timeout_add
+ *         c_eventloop_ui_ops.timeout_remove = glib.g_source_remove             # <<<<<<<<<<<<<<
+ *         c_eventloop_ui_ops.input_add = glib_input_add
+ *         c_eventloop_ui_ops.input_remove = glib.g_source_remove
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.timeout_remove = g_source_remove;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":230
+ *         c_eventloop_ui_ops.timeout_add = glib.g_timeout_add
+ *         c_eventloop_ui_ops.timeout_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_add = glib_input_add             # <<<<<<<<<<<<<<
+ *         c_eventloop_ui_ops.input_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_get_error = NULL
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.input_add = glib_input_add;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":231
+ *         c_eventloop_ui_ops.timeout_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_add = glib_input_add
+ *         c_eventloop_ui_ops.input_remove = glib.g_source_remove             # <<<<<<<<<<<<<<
+ *         c_eventloop_ui_ops.input_get_error = NULL
+ *         c_eventloop_ui_ops.timeout_add_seconds = NULL
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.input_remove = g_source_remove;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":232
+ *         c_eventloop_ui_ops.input_add = glib_input_add
+ *         c_eventloop_ui_ops.input_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_get_error = NULL             # <<<<<<<<<<<<<<
+ *         c_eventloop_ui_ops.timeout_add_seconds = NULL
+ * 
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.input_get_error = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":233
+ *         c_eventloop_ui_ops.input_remove = glib.g_source_remove
+ *         c_eventloop_ui_ops.input_get_error = NULL
+ *         c_eventloop_ui_ops.timeout_add_seconds = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         core.purple_core_set_ui_ops(&c_core_ui_ops)
+ */
+  __pyx_v_6purple_c_eventloop_ui_ops.timeout_add_seconds = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":235
+ *         c_eventloop_ui_ops.timeout_add_seconds = NULL
+ * 
+ *         core.purple_core_set_ui_ops(&c_core_ui_ops)             # <<<<<<<<<<<<<<
+ *         eventloop.purple_eventloop_set_ui_ops(&c_eventloop_ui_ops)
+ * 
+ */
+  purple_core_set_ui_ops((&__pyx_v_6purple_c_core_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":236
+ * 
+ *         core.purple_core_set_ui_ops(&c_core_ui_ops)
+ *         eventloop.purple_eventloop_set_ui_ops(&c_eventloop_ui_ops)             # <<<<<<<<<<<<<<
+ * 
+ *         # initialize purple core
+ */
+  purple_eventloop_set_ui_ops((&__pyx_v_6purple_c_eventloop_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":239
+ * 
+ *         # initialize purple core
+ *         ret = core.purple_core_init(c_ui_name)             # <<<<<<<<<<<<<<
+ *         if ret is False:
+ *             debug.purple_debug_fatal("main", "%s", "libpurple " \
+ */
+  __pyx_1 = PyInt_FromLong(purple_core_init(__pyx_v_6purple_c_ui_name)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_ret);
+  __pyx_v_ret = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":240
+ *         # initialize purple core
+ *         ret = core.purple_core_init(c_ui_name)
+ *         if ret is False:             # <<<<<<<<<<<<<<
+ *             debug.purple_debug_fatal("main", "%s", "libpurple " \
+ *                                        "initialization failed.\n")
+ */
+  __pyx_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = (__pyx_v_ret == __pyx_1);
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":241
+ *         ret = core.purple_core_init(c_ui_name)
+ *         if ret is False:
+ *             debug.purple_debug_fatal("main", "%s", "libpurple " \             # <<<<<<<<<<<<<<
+ *                                        "initialization failed.\n")
+ *             return False
+ */
+    purple_debug_fatal(__pyx_k_399, __pyx_k_400, __pyx_k_401);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":243
+ *             debug.purple_debug_fatal("main", "%s", "libpurple " \
+ *                                        "initialization failed.\n")
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *         # check if there is another instance of libpurple running
+ */
+    __pyx_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":246
+ * 
+ *         # check if there is another instance of libpurple running
+ *         if core.purple_core_ensure_single_instance() == False:             # <<<<<<<<<<<<<<
+ *             debug.purple_debug_fatal("main", "%s", "Another instance of " \
+ *                                       "libpurple is already running.\n")
+ */
+  __pyx_2 = (purple_core_ensure_single_instance() == 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":247
+ *         # check if there is another instance of libpurple running
+ *         if core.purple_core_ensure_single_instance() == False:
+ *             debug.purple_debug_fatal("main", "%s", "Another instance of " \             # <<<<<<<<<<<<<<
+ *                                       "libpurple is already running.\n")
+ *             core.purple_core_quit()
+ */
+    purple_debug_fatal(__pyx_k_402, __pyx_k_403, __pyx_k_404);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":249
+ *             debug.purple_debug_fatal("main", "%s", "Another instance of " \
+ *                                       "libpurple is already running.\n")
+ *             core.purple_core_quit()             # <<<<<<<<<<<<<<
+ *             return False
+ * 
+ */
+    purple_core_quit();
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":250
+ *                                       "libpurple is already running.\n")
+ *             core.purple_core_quit()
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *         # create and load the buddy list
+ */
+    __pyx_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":253
+ * 
+ *         # create and load the buddy list
+ *         blist.purple_set_blist(blist.purple_blist_new())             # <<<<<<<<<<<<<<
+ *         blist.purple_blist_load()
+ * 
+ */
+  purple_set_blist(purple_blist_new());
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":254
+ *         # create and load the buddy list
+ *         blist.purple_set_blist(blist.purple_blist_new())
+ *         blist.purple_blist_load()             # <<<<<<<<<<<<<<
+ * 
+ *         # load pounces
+ */
+  purple_blist_load();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":257
+ * 
+ *         # load pounces
+ *         pounce.purple_pounces_load()             # <<<<<<<<<<<<<<
+ * 
+ *         return ret
+ */
+  purple_pounces_load();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":259
+ *         pounce.purple_pounces_load()
+ * 
+ *         return ret             # <<<<<<<<<<<<<<
+ * 
+ *     def add_callback(self, type, name, callback):
+ */
+  Py_INCREF(__pyx_v_ret);
+  __pyx_r = __pyx_v_ret;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  __Pyx_AddTraceback("purple.Purple.purple_init");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_ret);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":261
+ *         return ret
+ * 
+ *     def add_callback(self, type, name, callback):             # <<<<<<<<<<<<<<
+ *         """
+ *         Adds a callback with given name inside callback's type.
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_add_callback(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_6purple_6Purple_add_callback[] = "\n        Adds a callback with given name inside callback's type.\n\n        @param type     Callback type (e.g. \"account\")\n        @param name     Callback name (e.g. \"notify-added\")\n        @param callback Callback to be called\n        ";
+static PyObject *__pyx_pf_6purple_6Purple_add_callback(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_type = 0;
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_callback = 0;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_type,&__pyx_kp_name,&__pyx_kp_callback,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[3] = {0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_type);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_name);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("add_callback", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  2:
+      values[2] = PyDict_GetItem(__pyx_kwds, __pyx_kp_callback);
+      if (likely(values[2])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("add_callback", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "add_callback") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_type = values[0];
+    __pyx_v_name = values[1];
+    __pyx_v_callback = values[2];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_name = PyTuple_GET_ITEM(__pyx_args, 1);
+    __pyx_v_callback = PyTuple_GET_ITEM(__pyx_args, 2);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("add_callback", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Purple.add_callback");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":281
+ *           "conversation": conversation_cbs,
+ *           "notify": notify_cbs,
+ *           "request": request_cbs }[type][name] = callback             # <<<<<<<<<<<<<<
+ * 
+ *     def signal_connect(self, name=None, cb=None):
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":276
+ *         global request_cbs
+ * 
+ *         { "account": account_cbs,             # <<<<<<<<<<<<<<
+ *           "blist": blist_cbs,
+ *           "connection": connection_cbs,
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_405, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":277
+ * 
+ *         { "account": account_cbs,
+ *           "blist": blist_cbs,             # <<<<<<<<<<<<<<
+ *           "connection": connection_cbs,
+ *           "conversation": conversation_cbs,
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_406, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":278
+ *         { "account": account_cbs,
+ *           "blist": blist_cbs,
+ *           "connection": connection_cbs,             # <<<<<<<<<<<<<<
+ *           "conversation": conversation_cbs,
+ *           "notify": notify_cbs,
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_407, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":279
+ *           "blist": blist_cbs,
+ *           "connection": connection_cbs,
+ *           "conversation": conversation_cbs,             # <<<<<<<<<<<<<<
+ *           "notify": notify_cbs,
+ *           "request": request_cbs }[type][name] = callback
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_408, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":280
+ *           "connection": connection_cbs,
+ *           "conversation": conversation_cbs,
+ *           "notify": notify_cbs,             # <<<<<<<<<<<<<<
+ *           "request": request_cbs }[type][name] = callback
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_409, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":281
+ *           "conversation": conversation_cbs,
+ *           "notify": notify_cbs,
+ *           "request": request_cbs }[type][name] = callback             # <<<<<<<<<<<<<<
+ * 
+ *     def signal_connect(self, name=None, cb=None):
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_410, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyObject_GetItem(((PyObject *)__pyx_1), __pyx_v_type); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyObject_SetItem(__pyx_2, __pyx_v_name, __pyx_v_callback) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Purple.add_callback");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":283
+ *           "request": request_cbs }[type][name] = callback
+ * 
+ *     def signal_connect(self, name=None, cb=None):             # <<<<<<<<<<<<<<
+ *         cdef int handle
+ *         cdef plugin.PurplePlugin *jabber
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_signal_connect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple_signal_connect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_cb = 0;
+  int __pyx_v_handle;
+  PurplePlugin *__pyx_v_jabber;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_name,&__pyx_kp_cb,0};
+  __pyx_v_name = Py_None;
+  __pyx_v_cb = Py_None;
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "signal_connect") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    if (values[0]) {
+      __pyx_v_name = values[0];
+    }
+    if (values[1]) {
+      __pyx_v_cb = values[1];
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_cb = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_name = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("signal_connect", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Purple.signal_connect");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":287
+ *         cdef plugin.PurplePlugin *jabber
+ * 
+ *         if name is None:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  __pyx_1 = (__pyx_v_name == Py_None);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":288
+ * 
+ *         if name is None:
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         jabber = prpl.purple_find_prpl("prpl-jabber")
+ */
+    __pyx_r = Py_None; Py_INCREF(Py_None);
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":290
+ *             return
+ * 
+ *         jabber = prpl.purple_find_prpl("prpl-jabber")             # <<<<<<<<<<<<<<
+ *         if jabber == NULL:
+ *             return
+ */
+  __pyx_v_jabber = purple_find_prpl(__pyx_k_411);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":291
+ * 
+ *         jabber = prpl.purple_find_prpl("prpl-jabber")
+ *         if jabber == NULL:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  __pyx_1 = (__pyx_v_jabber == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":292
+ *         jabber = prpl.purple_find_prpl("prpl-jabber")
+ *         if jabber == NULL:
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         global signal_cbs
+ */
+    __pyx_r = Py_None; Py_INCREF(Py_None);
+    goto __pyx_L0;
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":295
+ * 
+ *         global signal_cbs
+ *         signal_cbs[name] = cb             # <<<<<<<<<<<<<<
+ * 
+ *         if name == "signed-on":
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_2, __pyx_v_name, __pyx_v_cb) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":297
+ *         signal_cbs[name] = cb
+ * 
+ *         if name == "signed-on":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     connection.purple_connections_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_412, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":301
+ *                     connection.purple_connections_get_handle(),
+ *                     "signed-on", &handle,
+ *                     <signals.PurpleCallback> signal_signed_on_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "signed-off":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_connections_get_handle(), __pyx_k_413, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_signed_on_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":302
+ *                     "signed-on", &handle,
+ *                     <signals.PurpleCallback> signal_signed_on_cb, NULL)
+ *         elif name == "signed-off":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     connection.purple_connections_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_414, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":306
+ *                     connection.purple_connections_get_handle(),
+ *                     "signed-off", &handle,
+ *                     <signals.PurpleCallback> signal_signed_off_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "connection-error":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_connections_get_handle(), __pyx_k_415, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_signed_off_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":307
+ *                     "signed-off", &handle,
+ *                     <signals.PurpleCallback> signal_signed_off_cb, NULL)
+ *         elif name == "connection-error":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     connection.purple_connections_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_416, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":311
+ *                     connection.purple_connections_get_handle(),
+ *                     "connection-error", &handle,
+ *                     <signals.PurpleCallback> signal_connection_error_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "buddy-signed-on":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_connections_get_handle(), __pyx_k_417, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_connection_error_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":312
+ *                     "connection-error", &handle,
+ *                     <signals.PurpleCallback> signal_connection_error_cb, NULL)
+ *         elif name == "buddy-signed-on":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     blist.purple_blist_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_418, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":316
+ *                     blist.purple_blist_get_handle(),
+ *                     "buddy-signed-on", &handle,
+ *                     <signals.PurpleCallback> signal_buddy_signed_on_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "buddy-signed-off":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_blist_get_handle(), __pyx_k_419, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_buddy_signed_on_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":317
+ *                     "buddy-signed-on", &handle,
+ *                     <signals.PurpleCallback> signal_buddy_signed_on_cb, NULL)
+ *         elif name == "buddy-signed-off":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     blist.purple_blist_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_420, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":321
+ *                     blist.purple_blist_get_handle(),
+ *                     "buddy-signed-off", &handle,
+ *                     <signals.PurpleCallback> signal_buddy_signed_off_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "receiving-im-msg":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_blist_get_handle(), __pyx_k_421, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_buddy_signed_off_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":322
+ *                     "buddy-signed-off", &handle,
+ *                     <signals.PurpleCallback> signal_buddy_signed_off_cb, NULL)
+ *         elif name == "receiving-im-msg":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     conversation.purple_conversations_get_handle(),
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_422, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":326
+ *                     conversation.purple_conversations_get_handle(),
+ *                     "receiving-im-msg", &handle,
+ *                     <signals.PurpleCallback> signal_receiving_im_msg_cb, NULL)             # <<<<<<<<<<<<<<
+ *         elif name == "jabber-receiving-xmlnode":
+ *             signals.purple_signal_connect(
+ */
+    purple_signal_connect(purple_conversations_get_handle(), __pyx_k_423, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_signal_receiving_im_msg_cb), NULL);
+    goto __pyx_L8;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":327
+ *                     "receiving-im-msg", &handle,
+ *                     <signals.PurpleCallback> signal_receiving_im_msg_cb, NULL)
+ *         elif name == "jabber-receiving-xmlnode":             # <<<<<<<<<<<<<<
+ *             signals.purple_signal_connect(
+ *                     jabber, "jabber-receiving-xmlnode", &handle,
+ */
+  __pyx_2 = PyObject_RichCompare(__pyx_v_name, __pyx_kp_424, Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":330
+ *             signals.purple_signal_connect(
+ *                     jabber, "jabber-receiving-xmlnode", &handle,
+ *                     <signals.PurpleCallback> jabber_receiving_xmlnode_cb, NULL)             # <<<<<<<<<<<<<<
+ * 
+ *     def accounts_get_all(self):
+ */
+    purple_signal_connect(__pyx_v_jabber, __pyx_k_425, (&__pyx_v_handle), ((void (*)(void))__pyx_f_6purple_jabber_receiving_xmlnode_cb), NULL);
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Purple.signal_connect");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":332
+ *                     <signals.PurpleCallback> jabber_receiving_xmlnode_cb, NULL)
+ * 
+ *     def accounts_get_all(self):             # <<<<<<<<<<<<<<
+ *         cdef glib.GList *iter
+ *         cdef account.PurpleAccount *acc
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_accounts_get_all(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple_accounts_get_all(PyObject *__pyx_v_self, PyObject *unused) {
+  GList *__pyx_v_iter;
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_username;
+  char *__pyx_v_protocol_id;
+  PyObject *__pyx_v_account_list;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_account_list = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":338
+ *         cdef char *protocol_id
+ * 
+ *         iter = account.purple_accounts_get_all()             # <<<<<<<<<<<<<<
+ *         account_list = []
+ * 
+ */
+  __pyx_v_iter = purple_accounts_get_all();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":339
+ * 
+ *         iter = account.purple_accounts_get_all()
+ *         account_list = []             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_1 = PyList_New(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_account_list);
+  __pyx_v_account_list = ((PyObject *)__pyx_1);
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":341
+ *         account_list = []
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ *             acc = <account.PurpleAccount *> iter.data
+ * 
+ */
+  while (1) {
+    __pyx_2 = (__pyx_v_iter != 0);
+    if (!__pyx_2) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":342
+ * 
+ *         while iter:
+ *             acc = <account.PurpleAccount *> iter.data             # <<<<<<<<<<<<<<
+ * 
+ *             if <account.PurpleAccount *>acc:
+ */
+    __pyx_v_acc = ((PurpleAccount *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":344
+ *             acc = <account.PurpleAccount *> iter.data
+ * 
+ *             if <account.PurpleAccount *>acc:             # <<<<<<<<<<<<<<
+ *                 username = <char *> account.purple_account_get_username(acc)
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = (((PurpleAccount *)__pyx_v_acc) != 0);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":345
+ * 
+ *             if <account.PurpleAccount *>acc:
+ *                 username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ * 
+ */
+      __pyx_v_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":346
+ *             if <account.PurpleAccount *>acc:
+ *                 username = <char *> account.purple_account_get_username(acc)
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ * 
+ *                 if username != NULL and protocol_id != NULL:
+ */
+      __pyx_v_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":348
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ * 
+ *                 if username != NULL and protocol_id != NULL:             # <<<<<<<<<<<<<<
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))
+ */
+      __pyx_2 = (__pyx_v_username != NULL);
+      if (__pyx_2) {
+        __pyx_2 = (__pyx_v_protocol_id != NULL);
+      }
+      if (__pyx_2) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":349
+ * 
+ *                 if username != NULL and protocol_id != NULL:
+ *                     account_list.append(Account(username, \             # <<<<<<<<<<<<<<
+ *                             Protocol(protocol_id), self))
+ *             iter = iter.next
+ */
+        __pyx_1 = __Pyx_PyBytes_FromString(__pyx_v_username); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":350
+ *                 if username != NULL and protocol_id != NULL:
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))             # <<<<<<<<<<<<<<
+ *             iter = iter.next
+ * 
+ */
+        __pyx_3 = __Pyx_PyBytes_FromString(__pyx_v_protocol_id); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+        __pyx_3 = 0;
+        __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Protocol)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+        __pyx_4 = PyTuple_New(3); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
+        PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
+        Py_INCREF(__pyx_v_self);
+        PyTuple_SET_ITEM(__pyx_4, 2, __pyx_v_self);
+        __pyx_1 = 0;
+        __pyx_3 = 0;
+        __pyx_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Account)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+        __pyx_3 = __Pyx_PyObject_Append(__pyx_v_account_list, __pyx_1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_1); __pyx_1 = 0;
+        Py_DECREF(__pyx_3); __pyx_3 = 0;
+        goto __pyx_L8;
+      }
+      __pyx_L8:;
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":351
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *         return account_list
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":353
+ *             iter = iter.next
+ * 
+ *         return account_list             # <<<<<<<<<<<<<<
+ * 
+ *     def accounts_get_all_active(self):
+ */
+  Py_INCREF(__pyx_v_account_list);
+  __pyx_r = __pyx_v_account_list;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Purple.accounts_get_all");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_account_list);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":355
+ *         return account_list
+ * 
+ *     def accounts_get_all_active(self):             # <<<<<<<<<<<<<<
+ *         cdef glib.GList *iter
+ *         cdef account.PurpleAccount *acc
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_accounts_get_all_active(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple_accounts_get_all_active(PyObject *__pyx_v_self, PyObject *unused) {
+  GList *__pyx_v_iter;
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_username;
+  char *__pyx_v_protocol_id;
+  PyObject *__pyx_v_account_list;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_account_list = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":361
+ *         cdef char *protocol_id
+ * 
+ *         iter = account.purple_accounts_get_all_active()             # <<<<<<<<<<<<<<
+ *         account_list = []
+ * 
+ */
+  __pyx_v_iter = purple_accounts_get_all_active();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":362
+ * 
+ *         iter = account.purple_accounts_get_all_active()
+ *         account_list = []             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_1 = PyList_New(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_account_list);
+  __pyx_v_account_list = ((PyObject *)__pyx_1);
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":364
+ *         account_list = []
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ *             acc = <account.PurpleAccount *> iter.data
+ * 
+ */
+  while (1) {
+    __pyx_2 = (__pyx_v_iter != 0);
+    if (!__pyx_2) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":365
+ * 
+ *         while iter:
+ *             acc = <account.PurpleAccount *> iter.data             # <<<<<<<<<<<<<<
+ * 
+ *             if <account.PurpleAccount *>acc:
+ */
+    __pyx_v_acc = ((PurpleAccount *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":367
+ *             acc = <account.PurpleAccount *> iter.data
+ * 
+ *             if <account.PurpleAccount *>acc:             # <<<<<<<<<<<<<<
+ *                 username = <char *> account.purple_account_get_username(acc)
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = (((PurpleAccount *)__pyx_v_acc) != 0);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":368
+ * 
+ *             if <account.PurpleAccount *>acc:
+ *                 username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ * 
+ */
+      __pyx_v_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":369
+ *             if <account.PurpleAccount *>acc:
+ *                 username = <char *> account.purple_account_get_username(acc)
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ * 
+ *                 if username != NULL and protocol_id != NULL:
+ */
+      __pyx_v_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":371
+ *                 protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ * 
+ *                 if username != NULL and protocol_id != NULL:             # <<<<<<<<<<<<<<
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))
+ */
+      __pyx_2 = (__pyx_v_username != NULL);
+      if (__pyx_2) {
+        __pyx_2 = (__pyx_v_protocol_id != NULL);
+      }
+      if (__pyx_2) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":372
+ * 
+ *                 if username != NULL and protocol_id != NULL:
+ *                     account_list.append(Account(username, \             # <<<<<<<<<<<<<<
+ *                             Protocol(protocol_id), self))
+ *             iter = iter.next
+ */
+        __pyx_1 = __Pyx_PyBytes_FromString(__pyx_v_username); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":373
+ *                 if username != NULL and protocol_id != NULL:
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))             # <<<<<<<<<<<<<<
+ *             iter = iter.next
+ * 
+ */
+        __pyx_3 = __Pyx_PyBytes_FromString(__pyx_v_protocol_id); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+        __pyx_3 = 0;
+        __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Protocol)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+        __pyx_4 = PyTuple_New(3); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
+        PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
+        Py_INCREF(__pyx_v_self);
+        PyTuple_SET_ITEM(__pyx_4, 2, __pyx_v_self);
+        __pyx_1 = 0;
+        __pyx_3 = 0;
+        __pyx_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Account)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+        __pyx_3 = __Pyx_PyObject_Append(__pyx_v_account_list, __pyx_1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_1); __pyx_1 = 0;
+        Py_DECREF(__pyx_3); __pyx_3 = 0;
+        goto __pyx_L8;
+      }
+      __pyx_L8:;
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":374
+ *                     account_list.append(Account(username, \
+ *                             Protocol(protocol_id), self))
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *         return account_list
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":376
+ *             iter = iter.next
+ * 
+ *         return account_list             # <<<<<<<<<<<<<<
+ * 
+ *     def protocols_get_all(self):
+ */
+  Py_INCREF(__pyx_v_account_list);
+  __pyx_r = __pyx_v_account_list;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Purple.accounts_get_all_active");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_account_list);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":378
+ *         return account_list
+ * 
+ *     def protocols_get_all(self):             # <<<<<<<<<<<<<<
+ *         cdef glib.GList *iter
+ *         cdef plugin.PurplePlugin *pp
+ */
+
+static PyObject *__pyx_pf_6purple_6Purple_protocols_get_all(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_6Purple_protocols_get_all(PyObject *__pyx_v_self, PyObject *unused) {
+  GList *__pyx_v_iter;
+  PurplePlugin *__pyx_v_pp;
+  PyObject *__pyx_v_protocol_list;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_protocol_list = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":382
+ *         cdef plugin.PurplePlugin *pp
+ * 
+ *         iter = plugin.purple_plugins_get_protocols()             # <<<<<<<<<<<<<<
+ *         protocol_list = []
+ *         while iter:
+ */
+  __pyx_v_iter = purple_plugins_get_protocols();
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":383
+ * 
+ *         iter = plugin.purple_plugins_get_protocols()
+ *         protocol_list = []             # <<<<<<<<<<<<<<
+ *         while iter:
+ *             pp = <plugin.PurplePlugin*> iter.data
+ */
+  __pyx_1 = PyList_New(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_list);
+  __pyx_v_protocol_list = ((PyObject *)__pyx_1);
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":384
+ *         iter = plugin.purple_plugins_get_protocols()
+ *         protocol_list = []
+ *         while iter:             # <<<<<<<<<<<<<<
+ *             pp = <plugin.PurplePlugin*> iter.data
+ *             if pp.info and pp.info.name:
+ */
+  while (1) {
+    __pyx_2 = (__pyx_v_iter != 0);
+    if (!__pyx_2) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":385
+ *         protocol_list = []
+ *         while iter:
+ *             pp = <plugin.PurplePlugin*> iter.data             # <<<<<<<<<<<<<<
+ *             if pp.info and pp.info.name:
+ *                 protocol_list.append(Protocol(pp.info.id))
+ */
+    __pyx_v_pp = ((PurplePlugin *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":386
+ *         while iter:
+ *             pp = <plugin.PurplePlugin*> iter.data
+ *             if pp.info and pp.info.name:             # <<<<<<<<<<<<<<
+ *                 protocol_list.append(Protocol(pp.info.id))
+ *             iter = iter.next
+ */
+    __pyx_2 = (__pyx_v_pp->info != 0);
+    if (__pyx_2) {
+      __pyx_2 = (__pyx_v_pp->info->name != 0);
+    }
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":387
+ *             pp = <plugin.PurplePlugin*> iter.data
+ *             if pp.info and pp.info.name:
+ *                 protocol_list.append(Protocol(pp.info.id))             # <<<<<<<<<<<<<<
+ *             iter = iter.next
+ *         return protocol_list
+ */
+      __pyx_1 = __Pyx_PyBytes_FromString(__pyx_v_pp->info->id); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
+      __pyx_1 = 0;
+      __pyx_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Protocol)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      __pyx_3 = __Pyx_PyObject_Append(__pyx_v_protocol_list, __pyx_1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":388
+ *             if pp.info and pp.info.name:
+ *                 protocol_list.append(Protocol(pp.info.id))
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ *         return protocol_list
+ * 
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":389
+ *                 protocol_list.append(Protocol(pp.info.id))
+ *             iter = iter.next
+ *         return protocol_list             # <<<<<<<<<<<<<<
+ * 
+ * include "protocol.pyx"
+ */
+  Py_INCREF(__pyx_v_protocol_list);
+  __pyx_r = __pyx_v_protocol_list;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Purple.protocols_get_all");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_protocol_list);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":30
+ *     cdef object __exists
+ * 
+ *     def __init__(self, id):             # <<<<<<<<<<<<<<
+ *         self.__id = id
+ * 
+ */
+
+static int __pyx_pf_6purple_8Protocol___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_8Protocol___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_id = 0;
+  int __pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_id,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[1] = {0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_id);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_id = values[0];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_id = PyTuple_GET_ITEM(__pyx_args, 0);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Protocol.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":31
+ * 
+ *     def __init__(self, id):
+ *         self.__id = id             # <<<<<<<<<<<<<<
+ * 
+ *         if self._get_structure() != NULL:
+ */
+  Py_INCREF(__pyx_v_id);
+  Py_DECREF(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__id);
+  ((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__id = __pyx_v_id;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":33
+ *         self.__id = id
+ * 
+ *         if self._get_structure() != NULL:             # <<<<<<<<<<<<<<
+ *             self.__exists = True
+ *         else:
+ */
+  __pyx_1 = (((struct __pyx_vtabstruct_6purple_Protocol *)((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":34
+ * 
+ *         if self._get_structure() != NULL:
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.__exists = False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":36
+ *             self.__exists = True
+ *         else:
+ *             self.__exists = False             # <<<<<<<<<<<<<<
+ * 
+ *     cdef plugin.PurplePlugin *_get_structure(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Protocol.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":38
+ *             self.__exists = False
+ * 
+ *     cdef plugin.PurplePlugin *_get_structure(self):             # <<<<<<<<<<<<<<
+ *         return plugin.purple_plugins_find_with_id(self.__id)
+ * 
+ */
+
+static  PurplePlugin *__pyx_f_6purple_8Protocol__get_structure(struct __pyx_obj_6purple_Protocol *__pyx_v_self) {
+  PurplePlugin *__pyx_r;
+  char *__pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":39
+ * 
+ *     cdef plugin.PurplePlugin *_get_structure(self):
+ *         return plugin.purple_plugins_find_with_id(self.__id)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_exists(self):
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_self->__id); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = purple_plugins_find_with_id(__pyx_1);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_WriteUnraisable("purple.Protocol._get_structure");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":41
+ *         return plugin.purple_plugins_find_with_id(self.__id)
+ * 
+ *     def __get_exists(self):             # <<<<<<<<<<<<<<
+ *         return self.__exists
+ *     exists = property(__get_exists)
+ */
+
+static PyObject *__pyx_pf_6purple_8Protocol___get_exists(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_8Protocol___get_exists(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":42
+ * 
+ *     def __get_exists(self):
+ *         return self.__exists             # <<<<<<<<<<<<<<
+ *     exists = property(__get_exists)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists);
+  __pyx_r = ((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":45
+ *     exists = property(__get_exists)
+ * 
+ *     def __get_id(self):             # <<<<<<<<<<<<<<
+ *         return self.__id
+ *     id = property(__get_id)
+ */
+
+static PyObject *__pyx_pf_6purple_8Protocol___get_id(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_8Protocol___get_id(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":46
+ * 
+ *     def __get_id(self):
+ *         return self.__id             # <<<<<<<<<<<<<<
+ *     id = property(__get_id)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__id);
+  __pyx_r = ((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__id;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":49
+ *     id = property(__get_id)
+ * 
+ *     def __get_name(self):             # <<<<<<<<<<<<<<
+ *         cdef char *name = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_8Protocol___get_name(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_8Protocol___get_name(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_name;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":50
+ * 
+ *     def __get_name(self):
+ *         cdef char *name = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             name = <char *> plugin.purple_plugin_get_name(self._get_structure())
+ */
+  __pyx_v_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":51
+ *     def __get_name(self):
+ *         cdef char *name = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             name = <char *> plugin.purple_plugin_get_name(self._get_structure())
+ *             if name != NULL:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":52
+ *         cdef char *name = NULL
+ *         if self.__exists:
+ *             name = <char *> plugin.purple_plugin_get_name(self._get_structure())             # <<<<<<<<<<<<<<
+ *             if name != NULL:
+ *                 return name
+ */
+    __pyx_v_name = ((char *)purple_plugin_get_name(((struct __pyx_vtabstruct_6purple_Protocol *)((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":53
+ *         if self.__exists:
+ *             name = <char *> plugin.purple_plugin_get_name(self._get_structure())
+ *             if name != NULL:             # <<<<<<<<<<<<<<
+ *                 return name
+ *             else:
+ */
+    __pyx_1 = (__pyx_v_name != NULL);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":54
+ *             name = <char *> plugin.purple_plugin_get_name(self._get_structure())
+ *             if name != NULL:
+ *                 return name             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return None
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":56
+ *                 return name
+ *             else:
+ *                 return None             # <<<<<<<<<<<<<<
+ *         return None
+ *     name = property(__get_name)
+ */
+      Py_INCREF(Py_None);
+      __pyx_r = Py_None;
+      goto __pyx_L0;
+    }
+    __pyx_L6:;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":57
+ *             else:
+ *                 return None
+ *         return None             # <<<<<<<<<<<<<<
+ *     name = property(__get_name)
+ * 
+ */
+  Py_INCREF(Py_None);
+  __pyx_r = Py_None;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Protocol.__get_name");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":60
+ *     name = property(__get_name)
+ * 
+ *     def __get_options_labels(self):             # <<<<<<<<<<<<<<
+ *         cdef prpl.PurplePluginProtocolInfo *prpl_info
+ *         cdef glib.GList *iter
+ */
+
+static PyObject *__pyx_pf_6purple_8Protocol___get_options_labels(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_8Protocol___get_options_labels(PyObject *__pyx_v_self, PyObject *unused) {
+  PurplePluginProtocolInfo *__pyx_v_prpl_info;
+  GList *__pyx_v_iter;
+  PurpleAccountOption *__pyx_v_option;
+  PurplePrefType __pyx_v_type;
+  const char *__pyx_v_label_name;
+  const char *__pyx_v_setting;
+  PyObject *__pyx_v_po;
+  PyObject *__pyx_v_sett;
+  PyObject *__pyx_v_label;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_po = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sett = Py_None; Py_INCREF(Py_None);
+  __pyx_v_label = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":68
+ *         cdef const_char *setting
+ * 
+ *         if not self.__exists:             # <<<<<<<<<<<<<<
+ *             return None
+ * 
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = (!__pyx_1);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":69
+ * 
+ *         if not self.__exists:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":71
+ *             return None
+ * 
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())             # <<<<<<<<<<<<<<
+ * 
+ *         po = {}
+ */
+  __pyx_v_prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(((struct __pyx_vtabstruct_6purple_Protocol *)((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":73
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())
+ * 
+ *         po = {}             # <<<<<<<<<<<<<<
+ * 
+ *         iter = prpl_info.protocol_options
+ */
+  __pyx_3 = PyDict_New(); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_po);
+  __pyx_v_po = ((PyObject *)__pyx_3);
+  __pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":75
+ *         po = {}
+ * 
+ *         iter = prpl_info.protocol_options             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_v_iter = __pyx_v_prpl_info->protocol_options;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":77
+ *         iter = prpl_info.protocol_options
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ */
+  while (1) {
+    __pyx_1 = (__pyx_v_iter != 0);
+    if (!__pyx_1) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":79
+ *         while iter:
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data             # <<<<<<<<<<<<<<
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = accountopt.purple_account_option_get_text(option)
+ */
+    __pyx_v_option = ((PurpleAccountOption *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":80
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)             # <<<<<<<<<<<<<<
+ *             label_name = accountopt.purple_account_option_get_text(option)
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ */
+    __pyx_v_type = purple_account_option_get_type(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":81
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = accountopt.purple_account_option_get_text(option)             # <<<<<<<<<<<<<<
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ * 
+ */
+    __pyx_v_label_name = purple_account_option_get_text(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":82
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = accountopt.purple_account_option_get_text(option)
+ *             setting = accountopt.purple_account_option_get_setting(option)             # <<<<<<<<<<<<<<
+ * 
+ *             sett = str(<char *> setting)
+ */
+    __pyx_v_setting = purple_account_option_get_setting(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":84
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ * 
+ *             sett = str(<char *> setting)             # <<<<<<<<<<<<<<
+ *             label = str(<char *> label_name)
+ * 
+ */
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_setting)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_sett);
+    __pyx_v_sett = __pyx_3;
+    __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":85
+ * 
+ *             sett = str(<char *> setting)
+ *             label = str(<char *> label_name)             # <<<<<<<<<<<<<<
+ * 
+ *             iter = iter.next
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_label_name)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    __pyx_4 = 0;
+    __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_v_label);
+    __pyx_v_label = __pyx_4;
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":87
+ *             label = str(<char *> label_name)
+ * 
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *             po[sett] = label
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":89
+ *             iter = iter.next
+ * 
+ *             po[sett] = label             # <<<<<<<<<<<<<<
+ * 
+ *         return po
+ */
+    if (PyObject_SetItem(__pyx_v_po, __pyx_v_sett, __pyx_v_label) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":91
+ *             po[sett] = label
+ * 
+ *         return po             # <<<<<<<<<<<<<<
+ *     options_labels = property(__get_options_labels)
+ * 
+ */
+  Py_INCREF(__pyx_v_po);
+  __pyx_r = __pyx_v_po;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Protocol.__get_options_labels");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_po);
+  Py_DECREF(__pyx_v_sett);
+  Py_DECREF(__pyx_v_label);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":94
+ *     options_labels = property(__get_options_labels)
+ * 
+ *     def __get_options_values(self):             # <<<<<<<<<<<<<<
+ *         cdef prpl.PurplePluginProtocolInfo *prpl_info
+ *         cdef glib.GList *iter
+ */
+
+static PyObject *__pyx_pf_6purple_8Protocol___get_options_values(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_8Protocol___get_options_values(PyObject *__pyx_v_self, PyObject *unused) {
+  PurplePluginProtocolInfo *__pyx_v_prpl_info;
+  GList *__pyx_v_iter;
+  PurpleAccountOption *__pyx_v_option;
+  PurplePrefType __pyx_v_type;
+  const char *__pyx_v_str_value;
+  const char *__pyx_v_setting;
+  int __pyx_v_int_value;
+  gboolean __pyx_v_bool_value;
+  PyObject *__pyx_v_po;
+  PyObject *__pyx_v_sett;
+  PyObject *__pyx_v_val;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_po = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sett = Py_None; Py_INCREF(Py_None);
+  __pyx_v_val = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":104
+ *         cdef glib.gboolean bool_value
+ * 
+ *         if not self.__exists:             # <<<<<<<<<<<<<<
+ *             return None
+ * 
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = (!__pyx_1);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":105
+ * 
+ *         if not self.__exists:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":107
+ *             return None
+ * 
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())             # <<<<<<<<<<<<<<
+ * 
+ *         po = {}
+ */
+  __pyx_v_prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(((struct __pyx_vtabstruct_6purple_Protocol *)((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Protocol *)__pyx_v_self)));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":109
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(self._get_structure())
+ * 
+ *         po = {}             # <<<<<<<<<<<<<<
+ * 
+ *         iter = prpl_info.protocol_options
+ */
+  __pyx_3 = PyDict_New(); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_po);
+  __pyx_v_po = ((PyObject *)__pyx_3);
+  __pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":111
+ *         po = {}
+ * 
+ *         iter = prpl_info.protocol_options             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_v_iter = __pyx_v_prpl_info->protocol_options;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":113
+ *         iter = prpl_info.protocol_options
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ */
+  while (1) {
+    __pyx_1 = (__pyx_v_iter != 0);
+    if (!__pyx_1) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":115
+ *         while iter:
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data             # <<<<<<<<<<<<<<
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ */
+    __pyx_v_option = ((PurpleAccountOption *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":116
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)             # <<<<<<<<<<<<<<
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ * 
+ */
+    __pyx_v_type = purple_account_option_get_type(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":117
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             setting = accountopt.purple_account_option_get_setting(option)             # <<<<<<<<<<<<<<
+ * 
+ *             sett = str(<char *> setting)
+ */
+    __pyx_v_setting = purple_account_option_get_setting(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":119
+ *             setting = accountopt.purple_account_option_get_setting(option)
+ * 
+ *             sett = str(<char *> setting)             # <<<<<<<<<<<<<<
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:
+ */
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_setting)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_sett);
+    __pyx_v_sett = __pyx_3;
+    __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":121
+ *             sett = str(<char *> setting)
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:             # <<<<<<<<<<<<<<
+ *                 str_value = accountopt.purple_account_option_get_default_string(option)
+ *                 # Hack to set string "" as default value when the
+ */
+    __pyx_2 = (__pyx_v_type == PURPLE_PREF_STRING);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":122
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:
+ *                 str_value = accountopt.purple_account_option_get_default_string(option)             # <<<<<<<<<<<<<<
+ *                 # Hack to set string "" as default value when the
+ *                 # protocol's option is NULL
+ */
+      __pyx_v_str_value = purple_account_option_get_default_string(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":125
+ *                 # Hack to set string "" as default value when the
+ *                 # protocol's option is NULL
+ *                 if str_value == NULL:             # <<<<<<<<<<<<<<
+ *                     str_value = ""
+ *                 val = str(<char *> str_value)
+ */
+      __pyx_1 = (__pyx_v_str_value == NULL);
+      if (__pyx_1) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":126
+ *                 # protocol's option is NULL
+ *                 if str_value == NULL:
+ *                     str_value = ""             # <<<<<<<<<<<<<<
+ *                 val = str(<char *> str_value)
+ * 
+ */
+        __pyx_v_str_value = __pyx_k_426;
+        goto __pyx_L9;
+      }
+      __pyx_L9:;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":127
+ *                 if str_value == NULL:
+ *                     str_value = ""
+ *                 val = str(<char *> str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:
+ */
+      __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_str_value)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+      __pyx_4 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":129
+ *                 val = str(<char *> str_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:             # <<<<<<<<<<<<<<
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)
+ *                 val = int(int_value)
+ */
+    __pyx_2 = (__pyx_v_type == PURPLE_PREF_INT);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":130
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)             # <<<<<<<<<<<<<<
+ *                 val = int(int_value)
+ * 
+ */
+      __pyx_v_int_value = purple_account_option_get_default_int(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":131
+ *             elif type == prefs.PURPLE_PREF_INT:
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)
+ *                 val = int(int_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ */
+      __pyx_3 = PyInt_FromLong(__pyx_v_int_value); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+      __pyx_3 = 0;
+      __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)&PyInt_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_3;
+      __pyx_3 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":133
+ *                 val = int(int_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:             # <<<<<<<<<<<<<<
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)
+ * 
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_BOOLEAN);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":134
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = bool(bool_value)
+ */
+      __pyx_v_bool_value = purple_account_option_get_default_bool(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":136
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)
+ * 
+ *                 val = bool(bool_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ */
+      __pyx_4 = PyInt_FromLong(__pyx_v_bool_value); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+      __pyx_4 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyBool_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":138
+ *                 val = bool(bool_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:             # <<<<<<<<<<<<<<
+ *                 str_value = accountopt.purple_account_option_get_default_list_value(option)
+ * 
+ */
+    __pyx_2 = (__pyx_v_type == PURPLE_PREF_STRING_LIST);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":139
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ *                 str_value = accountopt.purple_account_option_get_default_list_value(option)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = str(<char *> str_value)
+ */
+      __pyx_v_str_value = purple_account_option_get_default_list_value(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":141
+ *                 str_value = accountopt.purple_account_option_get_default_list_value(option)
+ * 
+ *                 val = str(<char *> str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             iter = iter.next
+ */
+      __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_str_value)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
+      __pyx_3 = 0;
+      __pyx_3 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_3;
+      __pyx_3 = 0;
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":143
+ *                 val = str(<char *> str_value)
+ * 
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *             po[sett] = val
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":145
+ *             iter = iter.next
+ * 
+ *             po[sett] = val             # <<<<<<<<<<<<<<
+ * 
+ *         return po
+ */
+    if (PyObject_SetItem(__pyx_v_po, __pyx_v_sett, __pyx_v_val) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":147
+ *             po[sett] = val
+ * 
+ *         return po             # <<<<<<<<<<<<<<
+ *     options_values = property(__get_options_values)
+ */
+  Py_INCREF(__pyx_v_po);
+  __pyx_r = __pyx_v_po;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Protocol.__get_options_values");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_po);
+  Py_DECREF(__pyx_v_sett);
+  Py_DECREF(__pyx_v_val);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":25
+ *     cdef proxy.PurpleProxyType c_type
+ * 
+ *     def __init__(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_NONE
+ * 
+ */
+
+static int __pyx_pf_6purple_13ProxyInfoType___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_13ProxyInfoType___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":26
+ * 
+ *     def __init__(self):
+ *         self.c_type = proxy.PURPLE_PROXY_NONE             # <<<<<<<<<<<<<<
+ * 
+ *     def get_NONE(self):
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_NONE;
+
+  __pyx_r = 0;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":28
+ *         self.c_type = proxy.PURPLE_PROXY_NONE
+ * 
+ *     def get_NONE(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_NONE
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_NONE(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_NONE(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":29
+ * 
+ *     def get_NONE(self):
+ *         self.c_type = proxy.PURPLE_PROXY_NONE             # <<<<<<<<<<<<<<
+ *         return self
+ *     NONE = property(get_NONE)
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_NONE;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":30
+ *     def get_NONE(self):
+ *         self.c_type = proxy.PURPLE_PROXY_NONE
+ *         return self             # <<<<<<<<<<<<<<
+ *     NONE = property(get_NONE)
+ * 
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":33
+ *     NONE = property(get_NONE)
+ * 
+ *     def get_USE_GLOBAL(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_USE_GLOBAL
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_USE_GLOBAL(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_USE_GLOBAL(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":34
+ * 
+ *     def get_USE_GLOBAL(self):
+ *         self.c_type = proxy.PURPLE_PROXY_USE_GLOBAL             # <<<<<<<<<<<<<<
+ *         return self
+ *     USE_GLOBAL = property(get_USE_GLOBAL)
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_USE_GLOBAL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":35
+ *     def get_USE_GLOBAL(self):
+ *         self.c_type = proxy.PURPLE_PROXY_USE_GLOBAL
+ *         return self             # <<<<<<<<<<<<<<
+ *     USE_GLOBAL = property(get_USE_GLOBAL)
+ * 
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":38
+ *     USE_GLOBAL = property(get_USE_GLOBAL)
+ * 
+ *     def get_HTTP(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_HTTP
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_HTTP(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_HTTP(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":39
+ * 
+ *     def get_HTTP(self):
+ *         self.c_type = proxy.PURPLE_PROXY_HTTP             # <<<<<<<<<<<<<<
+ *         return self
+ *     HTTP = property(get_HTTP)
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_HTTP;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":40
+ *     def get_HTTP(self):
+ *         self.c_type = proxy.PURPLE_PROXY_HTTP
+ *         return self             # <<<<<<<<<<<<<<
+ *     HTTP = property(get_HTTP)
+ * 
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":43
+ *     HTTP = property(get_HTTP)
+ * 
+ *     def get_SOCKS4(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS4
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_SOCKS4(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_SOCKS4(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":44
+ * 
+ *     def get_SOCKS4(self):
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS4             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_SOCKS4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":45
+ *     def get_SOCKS4(self):
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS4
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def get_SOCKS5(self):
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":47
+ *         return self
+ * 
+ *     def get_SOCKS5(self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS5
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_SOCKS5(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_SOCKS5(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":48
+ * 
+ *     def get_SOCKS5(self):
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS5             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_SOCKS5;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":49
+ *     def get_SOCKS5(self):
+ *         self.c_type = proxy.PURPLE_PROXY_SOCKS5
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def get_USE_ENVVAR (self):
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":51
+ *         return self
+ * 
+ *     def get_USE_ENVVAR (self):             # <<<<<<<<<<<<<<
+ *         self.c_type = proxy.PURPLE_PROXY_USE_ENVVAR
+ *         return self
+ */
+
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_USE_ENVVAR(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_13ProxyInfoType_get_USE_ENVVAR(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":52
+ * 
+ *     def get_USE_ENVVAR (self):
+ *         self.c_type = proxy.PURPLE_PROXY_USE_ENVVAR             # <<<<<<<<<<<<<<
+ *         return self
+ *     USE_ENVVAR = property(get_USE_ENVVAR)
+ */
+  ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_self)->c_type = PURPLE_PROXY_USE_ENVVAR;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":53
+ *     def get_USE_ENVVAR (self):
+ *         self.c_type = proxy.PURPLE_PROXY_USE_ENVVAR
+ *         return self             # <<<<<<<<<<<<<<
+ *     USE_ENVVAR = property(get_USE_ENVVAR)
+ * 
+ */
+  Py_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":61
+ *     cdef object types
+ * 
+ *     def __init__(self):             # <<<<<<<<<<<<<<
+ *         self.c_proxyinfo = NULL
+ * 
+ */
+
+static int __pyx_pf_6purple_9ProxyInfo___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_9ProxyInfo___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":62
+ * 
+ *     def __init__(self):
+ *         self.c_proxyinfo = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         self.types = {"HTTP": proxy.PURPLE_PROXY_HTTP,
+ */
+  ((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":64
+ *         self.c_proxyinfo = NULL
+ * 
+ *         self.types = {"HTTP": proxy.PURPLE_PROXY_HTTP,             # <<<<<<<<<<<<<<
+ *                 "USER_GLOBAL": proxy.PURPLE_PROXY_USE_GLOBAL,
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_HTTP); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_427, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":65
+ * 
+ *         self.types = {"HTTP": proxy.PURPLE_PROXY_HTTP,
+ *                 "USER_GLOBAL": proxy.PURPLE_PROXY_USE_GLOBAL,             # <<<<<<<<<<<<<<
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,
+ *                 "SOCKS4": proxy.PURPLE_PROXY_SOCKS4,
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_USE_GLOBAL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_428, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":66
+ *         self.types = {"HTTP": proxy.PURPLE_PROXY_HTTP,
+ *                 "USER_GLOBAL": proxy.PURPLE_PROXY_USE_GLOBAL,
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,             # <<<<<<<<<<<<<<
+ *                 "SOCKS4": proxy.PURPLE_PROXY_SOCKS4,
+ *                 "SOCKS5": proxy.PURPLE_PROXY_SOCKS5,
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_USE_ENVVAR); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_429, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":67
+ *                 "USER_GLOBAL": proxy.PURPLE_PROXY_USE_GLOBAL,
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,
+ *                 "SOCKS4": proxy.PURPLE_PROXY_SOCKS4,             # <<<<<<<<<<<<<<
+ *                 "SOCKS5": proxy.PURPLE_PROXY_SOCKS5,
+ *                 "NONE": proxy.PURPLE_PROXY_NONE}
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_SOCKS4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_430, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":68
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,
+ *                 "SOCKS4": proxy.PURPLE_PROXY_SOCKS4,
+ *                 "SOCKS5": proxy.PURPLE_PROXY_SOCKS5,             # <<<<<<<<<<<<<<
+ *                 "NONE": proxy.PURPLE_PROXY_NONE}
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_SOCKS5); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_431, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":69
+ *                 "SOCKS4": proxy.PURPLE_PROXY_SOCKS4,
+ *                 "SOCKS5": proxy.PURPLE_PROXY_SOCKS5,
+ *                 "NONE": proxy.PURPLE_PROXY_NONE}             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_PROXY_NONE); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_432, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":64
+ *         self.c_proxyinfo = NULL
+ * 
+ *         self.types = {"HTTP": proxy.PURPLE_PROXY_HTTP,             # <<<<<<<<<<<<<<
+ *                 "USER_GLOBAL": proxy.PURPLE_PROXY_USE_GLOBAL,
+ *                 "USE_ENVVAR": proxy.PURPLE_PROXY_USE_ENVVAR,
+ */
+  Py_DECREF(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->types);
+  ((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->types = ((PyObject *)__pyx_1);
+  __pyx_1 = 0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.ProxyInfo.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":72
+ * 
+ * 
+ *     def set_type(self, ProxyInfoType type):             # <<<<<<<<<<<<<<
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_type(self.c_proxyinfo, type.c_type)
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_type(PyObject *__pyx_v_self, PyObject *__pyx_v_type); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_type(PyObject *__pyx_v_self, PyObject *__pyx_v_type) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_type), __pyx_ptype_6purple_ProxyInfoType, 1, "type", 0))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":73
+ * 
+ *     def set_type(self, ProxyInfoType type):
+ *         if self.c_proxyinfo:             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_type(self.c_proxyinfo, type.c_type)
+ * 
+ */
+  __pyx_1 = (((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":74
+ *     def set_type(self, ProxyInfoType type):
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_type(self.c_proxyinfo, type.c_type)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_host(self, char *host):
+ */
+    purple_proxy_info_set_type(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo, ((struct __pyx_obj_6purple_ProxyInfoType *)__pyx_v_type)->c_type);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_type");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":76
+ *             proxy.c_purple_proxy_info_set_type(self.c_proxyinfo, type.c_type)
+ * 
+ *     def set_host(self, char *host):             # <<<<<<<<<<<<<<
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_host(self.c_proxyinfo, host)
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_host(PyObject *__pyx_v_self, PyObject *__pyx_arg_host); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_host(PyObject *__pyx_v_self, PyObject *__pyx_arg_host) {
+  char *__pyx_v_host;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  assert(__pyx_arg_host); {
+    __pyx_v_host = __Pyx_PyBytes_AsString(__pyx_arg_host); if (unlikely((!__pyx_v_host) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_host");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":77
+ * 
+ *     def set_host(self, char *host):
+ *         if self.c_proxyinfo:             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_host(self.c_proxyinfo, host)
+ * 
+ */
+  __pyx_1 = (((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":78
+ *     def set_host(self, char *host):
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_host(self.c_proxyinfo, host)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_port(self, int port):
+ */
+    purple_proxy_info_set_host(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo, __pyx_v_host);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":80
+ *             proxy.c_purple_proxy_info_set_host(self.c_proxyinfo, host)
+ * 
+ *     def set_port(self, int port):             # <<<<<<<<<<<<<<
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_port(self.c_proxyinfo, port)
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_port(PyObject *__pyx_v_self, PyObject *__pyx_arg_port); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_port(PyObject *__pyx_v_self, PyObject *__pyx_arg_port) {
+  int __pyx_v_port;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  assert(__pyx_arg_port); {
+    __pyx_v_port = __pyx_PyInt_int(__pyx_arg_port); if (unlikely((__pyx_v_port == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_port");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":81
+ * 
+ *     def set_port(self, int port):
+ *         if self.c_proxyinfo:             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_port(self.c_proxyinfo, port)
+ * 
+ */
+  __pyx_1 = (((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":82
+ *     def set_port(self, int port):
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_port(self.c_proxyinfo, port)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_username(self, char *username):
+ */
+    purple_proxy_info_set_port(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo, __pyx_v_port);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":84
+ *             proxy.c_purple_proxy_info_set_port(self.c_proxyinfo, port)
+ * 
+ *     def set_username(self, char *username):             # <<<<<<<<<<<<<<
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_username(self.c_proxyinfo, username)
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_username(PyObject *__pyx_v_self, PyObject *__pyx_arg_username); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_username(PyObject *__pyx_v_self, PyObject *__pyx_arg_username) {
+  char *__pyx_v_username;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  assert(__pyx_arg_username); {
+    __pyx_v_username = __Pyx_PyBytes_AsString(__pyx_arg_username); if (unlikely((!__pyx_v_username) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_username");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":85
+ * 
+ *     def set_username(self, char *username):
+ *         if self.c_proxyinfo:             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_username(self.c_proxyinfo, username)
+ * 
+ */
+  __pyx_1 = (((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":86
+ *     def set_username(self, char *username):
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_username(self.c_proxyinfo, username)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_password(self, char *password):
+ */
+    purple_proxy_info_set_username(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo, __pyx_v_username);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":88
+ *             proxy.c_purple_proxy_info_set_username(self.c_proxyinfo, username)
+ * 
+ *     def set_password(self, char *password):             # <<<<<<<<<<<<<<
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_password(self.c_proxyinfo, password)
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_password(PyObject *__pyx_v_self, PyObject *__pyx_arg_password); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_password(PyObject *__pyx_v_self, PyObject *__pyx_arg_password) {
+  char *__pyx_v_password;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  assert(__pyx_arg_password); {
+    __pyx_v_password = __Pyx_PyBytes_AsString(__pyx_arg_password); if (unlikely((!__pyx_v_password) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_password");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":89
+ * 
+ *     def set_password(self, char *password):
+ *         if self.c_proxyinfo:             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_password(self.c_proxyinfo, password)
+ * 
+ */
+  __pyx_1 = (((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":90
+ *     def set_password(self, char *password):
+ *         if self.c_proxyinfo:
+ *             proxy.c_purple_proxy_info_set_password(self.c_proxyinfo, password)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_types(self):
+ */
+    purple_proxy_info_set_password(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->c_proxyinfo, __pyx_v_password);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":92
+ *             proxy.c_purple_proxy_info_set_password(self.c_proxyinfo, password)
+ * 
+ *     def get_types(self):             # <<<<<<<<<<<<<<
+ *         return self.types.keys()
+ * 
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_get_types(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_9ProxyInfo_get_types(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":93
+ * 
+ *     def get_types(self):
+ *         return self.types.keys()             # <<<<<<<<<<<<<<
+ * 
+ *     def set_info(self, acc, info):
+ */
+  __pyx_1 = PyObject_GetAttr(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->types, __pyx_kp_keys); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_r = __pyx_2;
+  __pyx_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.ProxyInfo.get_types");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":95
+ *         return self.types.keys()
+ * 
+ *     def set_info(self, acc, info):             # <<<<<<<<<<<<<<
+ *         ''' @param acc Tuple (username, protocol id) '''
+ *         ''' @param info Dictionary {'type': "HTTP", 'port': "1234", '''
+ */
+
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_6purple_9ProxyInfo_set_info[] = " @param acc Tuple (username, protocol id) ";
+static PyObject *__pyx_pf_6purple_9ProxyInfo_set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_acc = 0;
+  PyObject *__pyx_v_info = 0;
+  PurpleAccount *__pyx_v_c_account;
+  PurpleProxyInfo *__pyx_v_c_proxyinfo;
+  PyObject *__pyx_v_type;
+  PyObject *__pyx_v_host;
+  PyObject *__pyx_v_port;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_password;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  char *__pyx_2;
+  char *__pyx_3;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  int __pyx_7;
+  PurpleProxyType __pyx_8;
+  int __pyx_9;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_acc,&__pyx_kp_info,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_acc);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_info);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("set_info", 1, 2, 2, 1); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "set_info") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_acc = values[0];
+    __pyx_v_info = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_acc = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_info = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("set_info", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.ProxyInfo.set_info");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_v_type = Py_None; Py_INCREF(Py_None);
+  __pyx_v_host = Py_None; Py_INCREF(Py_None);
+  __pyx_v_port = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_password = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":102
+ *         cdef account.PurpleAccount *c_account
+ *         cdef proxy.PurpleProxyInfo *c_proxyinfo
+ *         c_account = account.purple_accounts_find(acc[0], acc[1])             # <<<<<<<<<<<<<<
+ * 
+ *         if c_account == NULL:
+ */
+  __pyx_1 = __Pyx_GetItemInt(__pyx_v_acc, 0, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_PyBytes_AsString(__pyx_1); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = __Pyx_GetItemInt(__pyx_v_acc, 1, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = __Pyx_PyBytes_AsString(__pyx_1); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_v_c_account = purple_accounts_find(__pyx_2, __pyx_3);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":104
+ *         c_account = account.purple_accounts_find(acc[0], acc[1])
+ * 
+ *         if c_account == NULL:             # <<<<<<<<<<<<<<
+ *             #FIXME: Message error or call a callback handle to error
+ *             return False
+ */
+  __pyx_4 = (__pyx_v_c_account == NULL);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":106
+ *         if c_account == NULL:
+ *             #FIXME: Message error or call a callback handle to error
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *         c_proxyinfo = account.purple_account_get_proxy_info(c_account)
+ */
+    __pyx_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":108
+ *             return False
+ * 
+ *         c_proxyinfo = account.purple_account_get_proxy_info(c_account)             # <<<<<<<<<<<<<<
+ *         if c_proxyinfo == NULL:
+ *                 c_proxyinfo = proxy.c_purple_proxy_info_new()
+ */
+  __pyx_v_c_proxyinfo = purple_account_get_proxy_info(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":109
+ * 
+ *         c_proxyinfo = account.purple_account_get_proxy_info(c_account)
+ *         if c_proxyinfo == NULL:             # <<<<<<<<<<<<<<
+ *                 c_proxyinfo = proxy.c_purple_proxy_info_new()
+ *                 account.purple_account_set_proxy_info(c_account, c_proxyinfo)
+ */
+  __pyx_4 = (__pyx_v_c_proxyinfo == NULL);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":110
+ *         c_proxyinfo = account.purple_account_get_proxy_info(c_account)
+ *         if c_proxyinfo == NULL:
+ *                 c_proxyinfo = proxy.c_purple_proxy_info_new()             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_proxy_info(c_account, c_proxyinfo)
+ * 
+ */
+    __pyx_v_c_proxyinfo = purple_proxy_info_new();
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":111
+ *         if c_proxyinfo == NULL:
+ *                 c_proxyinfo = proxy.c_purple_proxy_info_new()
+ *                 account.purple_account_set_proxy_info(c_account, c_proxyinfo)             # <<<<<<<<<<<<<<
+ * 
+ *         if info.has_key('type') and info['type']:
+ */
+    purple_account_set_proxy_info(__pyx_v_c_account, __pyx_v_c_proxyinfo);
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":113
+ *                 account.purple_account_set_proxy_info(c_account, c_proxyinfo)
+ * 
+ *         if info.has_key('type') and info['type']:             # <<<<<<<<<<<<<<
+ *             type = info['type']
+ *             if not type in self.types.keys():
+ */
+  __pyx_1 = PyObject_GetAttr(__pyx_v_info, __pyx_kp_has_key); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_433);
+  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_kp_433);
+  __pyx_6 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_6); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_6); __pyx_6 = 0;
+  if (__pyx_4) {
+    __pyx_1 = PyObject_GetItem(__pyx_v_info, __pyx_kp_434); if (!__pyx_1) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_1); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+  }
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":114
+ * 
+ *         if info.has_key('type') and info['type']:
+ *             type = info['type']             # <<<<<<<<<<<<<<
+ *             if not type in self.types.keys():
+ *                 type = 'HTTP'
+ */
+    __pyx_5 = PyObject_GetItem(__pyx_v_info, __pyx_kp_435); if (!__pyx_5) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_type);
+    __pyx_v_type = __pyx_5;
+    __pyx_5 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":115
+ *         if info.has_key('type') and info['type']:
+ *             type = info['type']
+ *             if not type in self.types.keys():             # <<<<<<<<<<<<<<
+ *                 type = 'HTTP'
+ *             proxy.c_purple_proxy_info_set_type(c_proxyinfo, self.types[type])
+ */
+    __pyx_6 = PyObject_GetAttr(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->types, __pyx_kp_keys); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_6); __pyx_6 = 0;
+    __pyx_7 = (PySequence_Contains(__pyx_1, __pyx_v_type)); if (unlikely(__pyx_7 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    __pyx_4 = (!__pyx_7);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":116
+ *             type = info['type']
+ *             if not type in self.types.keys():
+ *                 type = 'HTTP'             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_type(c_proxyinfo, self.types[type])
+ * 
+ */
+      Py_INCREF(__pyx_kp_436);
+      Py_DECREF(__pyx_v_type);
+      __pyx_v_type = __pyx_kp_436;
+      goto __pyx_L9;
+    }
+    __pyx_L9:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":117
+ *             if not type in self.types.keys():
+ *                 type = 'HTTP'
+ *             proxy.c_purple_proxy_info_set_type(c_proxyinfo, self.types[type])             # <<<<<<<<<<<<<<
+ * 
+ *         if info.has_key('host') and info['host']:
+ */
+    __pyx_5 = PyObject_GetItem(((struct __pyx_obj_6purple_ProxyInfo *)__pyx_v_self)->types, __pyx_v_type); if (!__pyx_5) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_8 = ((PurpleProxyType)PyInt_AsLong(__pyx_5)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+    purple_proxy_info_set_type(__pyx_v_c_proxyinfo, __pyx_8);
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":119
+ *             proxy.c_purple_proxy_info_set_type(c_proxyinfo, self.types[type])
+ * 
+ *         if info.has_key('host') and info['host']:             # <<<<<<<<<<<<<<
+ *             host = info['host']
+ *             proxy.c_purple_proxy_info_set_host(c_proxyinfo, host)
+ */
+  __pyx_6 = PyObject_GetAttr(__pyx_v_info, __pyx_kp_has_key); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_437);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_437);
+  __pyx_5 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_6); __pyx_6 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_7 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_7 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_7) {
+    __pyx_6 = PyObject_GetItem(__pyx_v_info, __pyx_kp_438); if (!__pyx_6) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_7 = __Pyx_PyObject_IsTrue(__pyx_6); if (unlikely(__pyx_7 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_6); __pyx_6 = 0;
+  }
+  if (__pyx_7) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":120
+ * 
+ *         if info.has_key('host') and info['host']:
+ *             host = info['host']             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_host(c_proxyinfo, host)
+ * 
+ */
+    __pyx_1 = PyObject_GetItem(__pyx_v_info, __pyx_kp_439); if (!__pyx_1) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_host);
+    __pyx_v_host = __pyx_1;
+    __pyx_1 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":121
+ *         if info.has_key('host') and info['host']:
+ *             host = info['host']
+ *             proxy.c_purple_proxy_info_set_host(c_proxyinfo, host)             # <<<<<<<<<<<<<<
+ * 
+ *         if info.has_key('port') and info['port']:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_host); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_proxy_info_set_host(__pyx_v_c_proxyinfo, __pyx_2);
+    goto __pyx_L10;
+  }
+  __pyx_L10:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":123
+ *             proxy.c_purple_proxy_info_set_host(c_proxyinfo, host)
+ * 
+ *         if info.has_key('port') and info['port']:             # <<<<<<<<<<<<<<
+ *             port = int(info['port'])
+ *             proxy.c_purple_proxy_info_set_port(c_proxyinfo, port)
+ */
+  __pyx_5 = PyObject_GetAttr(__pyx_v_info, __pyx_kp_has_key); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyTuple_New(1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_440);
+  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_kp_440);
+  __pyx_1 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_1); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  if (__pyx_4) {
+    __pyx_5 = PyObject_GetItem(__pyx_v_info, __pyx_kp_441); if (!__pyx_5) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+  }
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":124
+ * 
+ *         if info.has_key('port') and info['port']:
+ *             port = int(info['port'])             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_port(c_proxyinfo, port)
+ * 
+ */
+    __pyx_6 = PyObject_GetItem(__pyx_v_info, __pyx_kp_442); if (!__pyx_6) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_6);
+    __pyx_6 = 0;
+    __pyx_5 = PyObject_Call(((PyObject *)((PyObject*)&PyInt_Type)), ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+    Py_DECREF(__pyx_v_port);
+    __pyx_v_port = __pyx_5;
+    __pyx_5 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":125
+ *         if info.has_key('port') and info['port']:
+ *             port = int(info['port'])
+ *             proxy.c_purple_proxy_info_set_port(c_proxyinfo, port)             # <<<<<<<<<<<<<<
+ * 
+ *         if info.has_key('username') and info['username']:
+ */
+    __pyx_9 = __pyx_PyInt_int(__pyx_v_port); if (unlikely((__pyx_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_proxy_info_set_port(__pyx_v_c_proxyinfo, __pyx_9);
+    goto __pyx_L11;
+  }
+  __pyx_L11:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":127
+ *             proxy.c_purple_proxy_info_set_port(c_proxyinfo, port)
+ * 
+ *         if info.has_key('username') and info['username']:             # <<<<<<<<<<<<<<
+ *             username = info['username']
+ *             proxy.c_purple_proxy_info_set_username(c_proxyinfo, username)
+ */
+  __pyx_6 = PyObject_GetAttr(__pyx_v_info, __pyx_kp_has_key); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_443);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_443);
+  __pyx_5 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_6); __pyx_6 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_7 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_7 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_7) {
+    __pyx_6 = PyObject_GetItem(__pyx_v_info, __pyx_kp_444); if (!__pyx_6) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_7 = __Pyx_PyObject_IsTrue(__pyx_6); if (unlikely(__pyx_7 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_6); __pyx_6 = 0;
+  }
+  if (__pyx_7) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":128
+ * 
+ *         if info.has_key('username') and info['username']:
+ *             username = info['username']             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_username(c_proxyinfo, username)
+ * 
+ */
+    __pyx_1 = PyObject_GetItem(__pyx_v_info, __pyx_kp_445); if (!__pyx_1) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_1;
+    __pyx_1 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":129
+ *         if info.has_key('username') and info['username']:
+ *             username = info['username']
+ *             proxy.c_purple_proxy_info_set_username(c_proxyinfo, username)             # <<<<<<<<<<<<<<
+ * 
+ *         if info.has_key('password') and info['password']:
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_username); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_proxy_info_set_username(__pyx_v_c_proxyinfo, __pyx_3);
+    goto __pyx_L12;
+  }
+  __pyx_L12:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":131
+ *             proxy.c_purple_proxy_info_set_username(c_proxyinfo, username)
+ * 
+ *         if info.has_key('password') and info['password']:             # <<<<<<<<<<<<<<
+ *             password = info['password']
+ *             proxy.c_purple_proxy_info_set_password(c_proxyinfo, password)
+ */
+  __pyx_5 = PyObject_GetAttr(__pyx_v_info, __pyx_kp_has_key); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyTuple_New(1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_446);
+  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_kp_446);
+  __pyx_1 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_1); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  if (__pyx_4) {
+    __pyx_5 = PyObject_GetItem(__pyx_v_info, __pyx_kp_447); if (!__pyx_5) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+  }
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":132
+ * 
+ *         if info.has_key('password') and info['password']:
+ *             password = info['password']             # <<<<<<<<<<<<<<
+ *             proxy.c_purple_proxy_info_set_password(c_proxyinfo, password)
+ * 
+ */
+    __pyx_6 = PyObject_GetItem(__pyx_v_info, __pyx_kp_448); if (!__pyx_6) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_password);
+    __pyx_v_password = __pyx_6;
+    __pyx_6 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":133
+ *         if info.has_key('password') and info['password']:
+ *             password = info['password']
+ *             proxy.c_purple_proxy_info_set_password(c_proxyinfo, password)             # <<<<<<<<<<<<<<
+ * 
+ *         return True
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_password); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_proxy_info_set_password(__pyx_v_c_proxyinfo, __pyx_2);
+    goto __pyx_L13;
+  }
+  __pyx_L13:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":135
+ *             proxy.c_purple_proxy_info_set_password(c_proxyinfo, password)
+ * 
+ *         return True             # <<<<<<<<<<<<<<
+ */
+  __pyx_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_1;
+  __pyx_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_AddTraceback("purple.ProxyInfo.set_info");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_type);
+  Py_DECREF(__pyx_v_host);
+  Py_DECREF(__pyx_v_port);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_password);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":35
+ *     cdef object __exists
+ * 
+ *     def __init__(self, username, protocol, core):             # <<<<<<<<<<<<<<
+ *         self.__username = username
+ *         self.__protocol = protocol
+ */
+
+static int __pyx_pf_6purple_7Account___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_7Account___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_username = 0;
+  PyObject *__pyx_v_protocol = 0;
+  PyObject *__pyx_v_core = 0;
+  int __pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_username,&__pyx_kp_protocol,&__pyx_kp_core,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[3] = {0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_username);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_protocol);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  2:
+      values[2] = PyDict_GetItem(__pyx_kwds, __pyx_kp_core);
+      if (likely(values[2])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_username = values[0];
+    __pyx_v_protocol = values[1];
+    __pyx_v_core = values[2];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_username = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_protocol = PyTuple_GET_ITEM(__pyx_args, 1);
+    __pyx_v_core = PyTuple_GET_ITEM(__pyx_args, 2);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Account.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":36
+ * 
+ *     def __init__(self, username, protocol, core):
+ *         self.__username = username             # <<<<<<<<<<<<<<
+ *         self.__protocol = protocol
+ *         self.__core = core
+ */
+  Py_INCREF(__pyx_v_username);
+  Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__username);
+  ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__username = __pyx_v_username;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":37
+ *     def __init__(self, username, protocol, core):
+ *         self.__username = username
+ *         self.__protocol = protocol             # <<<<<<<<<<<<<<
+ *         self.__core = core
+ * 
+ */
+  Py_INCREF(__pyx_v_protocol);
+  Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol);
+  ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol = __pyx_v_protocol;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":38
+ *         self.__username = username
+ *         self.__protocol = protocol
+ *         self.__core = core             # <<<<<<<<<<<<<<
+ * 
+ *         if protocol.exists and self._get_structure() != NULL:
+ */
+  Py_INCREF(__pyx_v_core);
+  Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core);
+  ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core = __pyx_v_core;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":40
+ *         self.__core = core
+ * 
+ *         if protocol.exists and self._get_structure() != NULL:             # <<<<<<<<<<<<<<
+ *             self.__exists = True
+ *         else:
+ */
+  __pyx_2 = PyObject_GetAttr(__pyx_v_protocol, __pyx_kp_exists); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+    __pyx_1 = (((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)) != NULL);
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":41
+ * 
+ *         if protocol.exists and self._get_structure() != NULL:
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.__exists = False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":43
+ *             self.__exists = True
+ *         else:
+ *             self.__exists = False             # <<<<<<<<<<<<<<
+ * 
+ *     cdef account.PurpleAccount *_get_structure(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":45
+ *             self.__exists = False
+ * 
+ *     cdef account.PurpleAccount *_get_structure(self):             # <<<<<<<<<<<<<<
+ *         return account.purple_accounts_find(self.__username, \
+ *                 self.__protocol.id)
+ */
+
+static  PurpleAccount *__pyx_f_6purple_7Account__get_structure(struct __pyx_obj_6purple_Account *__pyx_v_self) {
+  PurpleAccount *__pyx_r;
+  char *__pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":46
+ * 
+ *     cdef account.PurpleAccount *_get_structure(self):
+ *         return account.purple_accounts_find(self.__username, \             # <<<<<<<<<<<<<<
+ *                 self.__protocol.id)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_AsString(__pyx_v_self->__username); if (unlikely((!__pyx_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":47
+ *     cdef account.PurpleAccount *_get_structure(self):
+ *         return account.purple_accounts_find(self.__username, \
+ *                 self.__protocol.id)             # <<<<<<<<<<<<<<
+ * 
+ *     def __is_connected(self):
+ */
+  __pyx_2 = PyObject_GetAttr(__pyx_v_self->__protocol, __pyx_kp_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_r = purple_accounts_find(__pyx_1, __pyx_3);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_WriteUnraisable("purple.Account._get_structure");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":49
+ *                 self.__protocol.id)
+ * 
+ *     def __is_connected(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_is_connected(self._get_structure())
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___is_connected(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___is_connected(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":50
+ * 
+ *     def __is_connected(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return account.purple_account_is_connected(self._get_structure())
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":51
+ *     def __is_connected(self):
+ *         if self.__exists:
+ *             return account.purple_account_is_connected(self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_account_is_connected(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":53
+ *             return account.purple_account_is_connected(self._get_structure())
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     is_connected = property(__is_connected)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__is_connected");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":56
+ *     is_connected = property(__is_connected)
+ * 
+ *     def __is_connecting(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_is_connecting(self._get_structure())
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___is_connecting(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___is_connecting(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":57
+ * 
+ *     def __is_connecting(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return account.purple_account_is_connecting(self._get_structure())
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":58
+ *     def __is_connecting(self):
+ *         if self.__exists:
+ *             return account.purple_account_is_connecting(self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_account_is_connecting(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":60
+ *             return account.purple_account_is_connecting(self._get_structure())
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     is_connecting = property(__is_connecting)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__is_connecting");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":63
+ *     is_connecting = property(__is_connecting)
+ * 
+ *     def __is_disconnected(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_is_disconnected( \
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___is_disconnected(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___is_disconnected(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":64
+ * 
+ *     def __is_disconnected(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return account.purple_account_is_disconnected( \
+ *                     self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":66
+ *         if self.__exists:
+ *             return account.purple_account_is_disconnected( \
+ *                     self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_account_is_disconnected(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":68
+ *                     self._get_structure())
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     is_disconnected = property(__is_disconnected)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__is_disconnected");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":71
+ *     is_disconnected = property(__is_disconnected)
+ * 
+ *     def __get_core(self):             # <<<<<<<<<<<<<<
+ *         return self.__core
+ *     core = property(__get_core)
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_core(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_core(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":72
+ * 
+ *     def __get_core(self):
+ *         return self.__core             # <<<<<<<<<<<<<<
+ *     core = property(__get_core)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core);
+  __pyx_r = ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":75
+ *     core = property(__get_core)
+ * 
+ *     def __get_exists(self):             # <<<<<<<<<<<<<<
+ *         return self.__exists
+ *     exists = property(__get_exists)
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_exists(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_exists(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":76
+ * 
+ *     def __get_exists(self):
+ *         return self.__exists             # <<<<<<<<<<<<<<
+ *     exists = property(__get_exists)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists);
+  __pyx_r = ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":79
+ *     exists = property(__get_exists)
+ * 
+ *     def __get_username(self):             # <<<<<<<<<<<<<<
+ *         cdef char *username = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_username(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_username(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_username;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":80
+ * 
+ *     def __get_username(self):
+ *         cdef char *username = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             username = <char *> account.purple_account_get_username( \
+ */
+  __pyx_v_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":81
+ *     def __get_username(self):
+ *         cdef char *username = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             username = <char *> account.purple_account_get_username( \
+ *                     self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":83
+ *         if self.__exists:
+ *             username = <char *> account.purple_account_get_username( \
+ *                     self._get_structure())             # <<<<<<<<<<<<<<
+ *             if username:
+ *                 return username
+ */
+    __pyx_v_username = ((char *)purple_account_get_username(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":84
+ *             username = <char *> account.purple_account_get_username( \
+ *                     self._get_structure())
+ *             if username:             # <<<<<<<<<<<<<<
+ *                 return username
+ *             else:
+ */
+    __pyx_1 = (__pyx_v_username != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":85
+ *                     self._get_structure())
+ *             if username:
+ *                 return username             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return None
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":87
+ *                 return username
+ *             else:
+ *                 return None             # <<<<<<<<<<<<<<
+ *         else:
+ *             return self.__username
+ */
+      Py_INCREF(Py_None);
+      __pyx_r = Py_None;
+      goto __pyx_L0;
+    }
+    __pyx_L6:;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":89
+ *                 return None
+ *         else:
+ *             return self.__username             # <<<<<<<<<<<<<<
+ *     username = property(__get_username)
+ * 
+ */
+    Py_INCREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__username);
+    __pyx_r = ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__username;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_username");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":92
+ *     username = property(__get_username)
+ * 
+ *     def __get_protocol(self):             # <<<<<<<<<<<<<<
+ *         return self.__protocol
+ *     protocol = property(__get_protocol)
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_protocol(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_protocol(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":93
+ * 
+ *     def __get_protocol(self):
+ *         return self.__protocol             # <<<<<<<<<<<<<<
+ *     protocol = property(__get_protocol)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol);
+  __pyx_r = ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":96
+ *     protocol = property(__get_protocol)
+ * 
+ *     def _get_protocol_options(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         @return Dictionary {'setting': value, ...}
+ */
+
+static PyObject *__pyx_pf_6purple_7Account__get_protocol_options(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_7Account__get_protocol_options[] = "\n        @return Dictionary {'setting': value, ...}\n        ";
+static PyObject *__pyx_pf_6purple_7Account__get_protocol_options(PyObject *__pyx_v_self, PyObject *unused) {
+  GList *__pyx_v_iter;
+  PurpleAccount *__pyx_v_c_account;
+  PurplePlugin *__pyx_v_c_plugin;
+  PurplePluginProtocolInfo *__pyx_v_prpl_info;
+  PurpleAccountOption *__pyx_v_option;
+  PurplePrefType __pyx_v_type;
+  char *__pyx_v_label_name;
+  char *__pyx_v_str_value;
+  char *__pyx_v_setting;
+  int __pyx_v_int_value;
+  gboolean __pyx_v_bool_value;
+  PyObject *__pyx_v_po;
+  PyObject *__pyx_v_sett;
+  PyObject *__pyx_v_val;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_po = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sett = Py_None; Py_INCREF(Py_None);
+  __pyx_v_val = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":112
+ *         cdef glib.gboolean bool_value
+ * 
+ *         c_account = self._get_structure()             # <<<<<<<<<<<<<<
+ * 
+ *         if c_account == NULL:
+ */
+  __pyx_v_c_account = ((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":114
+ *         c_account = self._get_structure()
+ * 
+ *         if c_account == NULL:             # <<<<<<<<<<<<<<
+ *             return None
+ * 
+ */
+  __pyx_1 = (__pyx_v_c_account == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":115
+ * 
+ *         if c_account == NULL:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *         po = {}
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":117
+ *             return None
+ * 
+ *         po = {}             # <<<<<<<<<<<<<<
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ */
+  __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_po);
+  __pyx_v_po = ((PyObject *)__pyx_2);
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":119
+ *         po = {}
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)             # <<<<<<<<<<<<<<
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)
+ *         iter = prpl_info.protocol_options
+ */
+  __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol, __pyx_kp_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_v_c_plugin = purple_plugins_find_with_id(__pyx_3);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":120
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)             # <<<<<<<<<<<<<<
+ *         iter = prpl_info.protocol_options
+ * 
+ */
+  __pyx_v_prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(__pyx_v_c_plugin);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":121
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)
+ *         iter = prpl_info.protocol_options             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_v_iter = __pyx_v_prpl_info->protocol_options;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":123
+ *         iter = prpl_info.protocol_options
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ */
+  while (1) {
+    __pyx_1 = (__pyx_v_iter != 0);
+    if (!__pyx_1) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":125
+ *         while iter:
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data             # <<<<<<<<<<<<<<
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = <char *> accountopt.purple_account_option_get_text(option)
+ */
+    __pyx_v_option = ((PurpleAccountOption *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":126
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)             # <<<<<<<<<<<<<<
+ *             label_name = <char *> accountopt.purple_account_option_get_text(option)
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ */
+    __pyx_v_type = purple_account_option_get_type(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":127
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = <char *> accountopt.purple_account_option_get_text(option)             # <<<<<<<<<<<<<<
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ * 
+ */
+    __pyx_v_label_name = ((char *)purple_account_option_get_text(__pyx_v_option));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":128
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             label_name = <char *> accountopt.purple_account_option_get_text(option)
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)             # <<<<<<<<<<<<<<
+ * 
+ *             sett = str(<char *> setting)
+ */
+    __pyx_v_setting = ((char *)purple_account_option_get_setting(__pyx_v_option));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":130
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ * 
+ *             sett = str(<char *> setting)             # <<<<<<<<<<<<<<
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_setting)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_sett);
+    __pyx_v_sett = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":132
+ *             sett = str(<char *> setting)
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:             # <<<<<<<<<<<<<<
+ * 
+ *                 str_value = <char *> accountopt.purple_account_option_get_default_string(option)
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_STRING);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":134
+ *             if type == prefs.PURPLE_PREF_STRING:
+ * 
+ *                 str_value = <char *> accountopt.purple_account_option_get_default_string(option)             # <<<<<<<<<<<<<<
+ * 
+ *                 # Hack to set string "" as default value to Account options when
+ */
+      __pyx_v_str_value = ((char *)purple_account_option_get_default_string(__pyx_v_option));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":138
+ *                 # Hack to set string "" as default value to Account options when
+ *                 # the default value of the protocol is NULL
+ *                 if str_value == NULL:             # <<<<<<<<<<<<<<
+ *                     str_value = ""
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)
+ */
+      __pyx_1 = (__pyx_v_str_value == NULL);
+      if (__pyx_1) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":139
+ *                 # the default value of the protocol is NULL
+ *                 if str_value == NULL:
+ *                     str_value = ""             # <<<<<<<<<<<<<<
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)
+ * 
+ */
+        __pyx_v_str_value = __pyx_k_449;
+        goto __pyx_L9;
+      }
+      __pyx_L9:;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":140
+ *                 if str_value == NULL:
+ *                     str_value = ""
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = str(<char *> str_value)
+ */
+      __pyx_v_str_value = ((char *)purple_account_get_string(__pyx_v_c_account, __pyx_v_setting, __pyx_v_str_value));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":142
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)
+ * 
+ *                 val = str(<char *> str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:
+ */
+      __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_str_value)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4);
+      __pyx_4 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":144
+ *                 val = str(<char *> str_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:             # <<<<<<<<<<<<<<
+ * 
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_INT);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":146
+ *             elif type == prefs.PURPLE_PREF_INT:
+ * 
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)             # <<<<<<<<<<<<<<
+ *                 int_value = account.purple_account_get_int(c_account, setting, int_value)
+ * 
+ */
+      __pyx_v_int_value = purple_account_option_get_default_int(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":147
+ * 
+ *                 int_value = accountopt.purple_account_option_get_default_int(option)
+ *                 int_value = account.purple_account_get_int(c_account, setting, int_value)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = int(int_value)
+ */
+      __pyx_v_int_value = purple_account_get_int(__pyx_v_c_account, __pyx_v_setting, __pyx_v_int_value);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":149
+ *                 int_value = account.purple_account_get_int(c_account, setting, int_value)
+ * 
+ *                 val = int(int_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ */
+      __pyx_2 = PyInt_FromLong(__pyx_v_int_value); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+      __pyx_2 = 0;
+      __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyInt_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":151
+ *                 val = int(int_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:             # <<<<<<<<<<<<<<
+ * 
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_BOOLEAN);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":153
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ * 
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)             # <<<<<<<<<<<<<<
+ *                 bool_value = account.purple_account_get_bool(c_account, setting, bool_value)
+ * 
+ */
+      __pyx_v_bool_value = purple_account_option_get_default_bool(__pyx_v_option);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":154
+ * 
+ *                 bool_value = accountopt.purple_account_option_get_default_bool(option)
+ *                 bool_value = account.purple_account_get_bool(c_account, setting, bool_value)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = bool(bool_value)
+ */
+      __pyx_v_bool_value = purple_account_get_bool(__pyx_v_c_account, __pyx_v_setting, __pyx_v_bool_value);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":156
+ *                 bool_value = account.purple_account_get_bool(c_account, setting, bool_value)
+ * 
+ *                 val = bool(bool_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ */
+      __pyx_4 = PyInt_FromLong(__pyx_v_bool_value); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4);
+      __pyx_4 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyBool_Type)), ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L8;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":158
+ *                 val = bool(bool_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:             # <<<<<<<<<<<<<<
+ * 
+ *                 str_value = <char *> accountopt.purple_account_option_get_default_list_value(option)
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_STRING_LIST);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":160
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ * 
+ *                 str_value = <char *> accountopt.purple_account_option_get_default_list_value(option)             # <<<<<<<<<<<<<<
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)
+ * 
+ */
+      __pyx_v_str_value = ((char *)purple_account_option_get_default_list_value(__pyx_v_option));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":161
+ * 
+ *                 str_value = <char *> accountopt.purple_account_option_get_default_list_value(option)
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)             # <<<<<<<<<<<<<<
+ * 
+ *                 val = str(<char *> str_value)
+ */
+      __pyx_v_str_value = ((char *)purple_account_get_string(__pyx_v_c_account, __pyx_v_setting, __pyx_v_str_value));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":163
+ *                 str_value = <char *> account.purple_account_get_string(c_account, setting, str_value)
+ * 
+ *                 val = str(<char *> str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             iter = iter.next
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_str_value)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+      __pyx_2 = 0;
+      __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+      Py_DECREF(__pyx_v_val);
+      __pyx_v_val = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":165
+ *                 val = str(<char *> str_value)
+ * 
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *             po[sett] = val
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":167
+ *             iter = iter.next
+ * 
+ *             po[sett] = val             # <<<<<<<<<<<<<<
+ * 
+ *         return po
+ */
+    if (PyObject_SetItem(__pyx_v_po, __pyx_v_sett, __pyx_v_val) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":169
+ *             po[sett] = val
+ * 
+ *         return po             # <<<<<<<<<<<<<<
+ *     protocol_options = property(_get_protocol_options)
+ * 
+ */
+  Py_INCREF(__pyx_v_po);
+  __pyx_r = __pyx_v_po;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account._get_protocol_options");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_po);
+  Py_DECREF(__pyx_v_sett);
+  Py_DECREF(__pyx_v_val);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":172
+ *     protocol_options = property(_get_protocol_options)
+ * 
+ *     def __get_password(self):             # <<<<<<<<<<<<<<
+ *         cdef char *password = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_password(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_password(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_password;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":173
+ * 
+ *     def __get_password(self):
+ *         cdef char *password = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             password = <char *> account.purple_account_get_password( \
+ */
+  __pyx_v_password = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":174
+ *     def __get_password(self):
+ *         cdef char *password = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             password = <char *> account.purple_account_get_password( \
+ *                     self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":176
+ *         if self.__exists:
+ *             password = <char *> account.purple_account_get_password( \
+ *                     self._get_structure())             # <<<<<<<<<<<<<<
+ *             if password:
+ *                 return password
+ */
+    __pyx_v_password = ((char *)purple_account_get_password(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":177
+ *             password = <char *> account.purple_account_get_password( \
+ *                     self._get_structure())
+ *             if password:             # <<<<<<<<<<<<<<
+ *                 return password
+ *             else:
+ */
+    __pyx_1 = (__pyx_v_password != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":178
+ *                     self._get_structure())
+ *             if password:
+ *                 return password             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return None
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_password); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":180
+ *                 return password
+ *             else:
+ *                 return None             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+      Py_INCREF(Py_None);
+      __pyx_r = Py_None;
+      goto __pyx_L0;
+    }
+    __pyx_L6:;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":182
+ *                 return None
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     password = property(__get_password)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_password");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":185
+ *     password = property(__get_password)
+ * 
+ *     def __get_alias(self):             # <<<<<<<<<<<<<<
+ *         cdef char *alias = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_alias(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_alias(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":186
+ * 
+ *     def __get_alias(self):
+ *         cdef char *alias = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             alias = <char *> account.purple_account_get_alias(self._get_structure())
+ */
+  __pyx_v_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":187
+ *     def __get_alias(self):
+ *         cdef char *alias = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             alias = <char *> account.purple_account_get_alias(self._get_structure())
+ *             if alias:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":188
+ *         cdef char *alias = NULL
+ *         if self.__exists:
+ *             alias = <char *> account.purple_account_get_alias(self._get_structure())             # <<<<<<<<<<<<<<
+ *             if alias:
+ *                 return alias
+ */
+    __pyx_v_alias = ((char *)purple_account_get_alias(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":189
+ *         if self.__exists:
+ *             alias = <char *> account.purple_account_get_alias(self._get_structure())
+ *             if alias:             # <<<<<<<<<<<<<<
+ *                 return alias
+ *             else:
+ */
+    __pyx_1 = (__pyx_v_alias != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":190
+ *             alias = <char *> account.purple_account_get_alias(self._get_structure())
+ *             if alias:
+ *                 return alias             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return None
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":192
+ *                 return alias
+ *             else:
+ *                 return None             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+      Py_INCREF(Py_None);
+      __pyx_r = Py_None;
+      goto __pyx_L0;
+    }
+    __pyx_L6:;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":194
+ *                 return None
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     alias = property(__get_alias)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":197
+ *     alias = property(__get_alias)
+ * 
+ *     def __get_user_info(self):             # <<<<<<<<<<<<<<
+ *         cdef char *user_info = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_user_info(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_user_info(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_user_info;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":198
+ * 
+ *     def __get_user_info(self):
+ *         cdef char *user_info = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             user_info = <char *> account.purple_account_get_user_info(self._get_structure())
+ */
+  __pyx_v_user_info = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":199
+ *     def __get_user_info(self):
+ *         cdef char *user_info = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             user_info = <char *> account.purple_account_get_user_info(self._get_structure())
+ *             if user_info:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":200
+ *         cdef char *user_info = NULL
+ *         if self.__exists:
+ *             user_info = <char *> account.purple_account_get_user_info(self._get_structure())             # <<<<<<<<<<<<<<
+ *             if user_info:
+ *                 return user_info
+ */
+    __pyx_v_user_info = ((char *)purple_account_get_user_info(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":201
+ *         if self.__exists:
+ *             user_info = <char *> account.purple_account_get_user_info(self._get_structure())
+ *             if user_info:             # <<<<<<<<<<<<<<
+ *                 return user_info
+ *             else:
+ */
+    __pyx_1 = (__pyx_v_user_info != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":202
+ *             user_info = <char *> account.purple_account_get_user_info(self._get_structure())
+ *             if user_info:
+ *                 return user_info             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return None
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_user_info); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_2;
+      __pyx_2 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":204
+ *                 return user_info
+ *             else:
+ *                 return None             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+      Py_INCREF(Py_None);
+      __pyx_r = Py_None;
+      goto __pyx_L0;
+    }
+    __pyx_L6:;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":206
+ *                 return None
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     user_info = property(__get_user_info)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_user_info");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":209
+ *     user_info = property(__get_user_info)
+ * 
+ *     def __get_remember_password(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_get_remember_password( \
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_remember_password(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_remember_password(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":210
+ * 
+ *     def __get_remember_password(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return account.purple_account_get_remember_password( \
+ *                     self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":212
+ *         if self.__exists:
+ *             return account.purple_account_get_remember_password( \
+ *                     self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_account_get_remember_password(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":214
+ *                     self._get_structure())
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     remember_password = property(__get_remember_password)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_remember_password");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":217
+ *     remember_password = property(__get_remember_password)
+ * 
+ *     def __get_enabled(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_get_enabled(self._get_structure(), \
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_enabled(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_enabled(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":218
+ * 
+ *     def __get_enabled(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return account.purple_account_get_enabled(self._get_structure(), \
+ *                     self.__core.ui_name)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":220
+ *         if self.__exists:
+ *             return account.purple_account_get_enabled(self._get_structure(), \
+ *                     self.__core.ui_name)             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core, __pyx_kp_ui_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_2 = PyInt_FromLong(purple_account_get_enabled(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_3)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":222
+ *                     self.__core.ui_name)
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     enabled = property(__get_enabled)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_enabled");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":225
+ *     enabled = property(__get_enabled)
+ * 
+ *     def __get_status_types(self):             # <<<<<<<<<<<<<<
+ *         cdef glib.GList *iter = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_status_types(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_status_types(PyObject *__pyx_v_self, PyObject *unused) {
+  GList *__pyx_v_iter;
+  PurpleStatusType *__pyx_v_c_statustype;
+  char *__pyx_v_id;
+  char *__pyx_v_name;
+  PyObject *__pyx_v_status_types;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_status_types = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":226
+ * 
+ *     def __get_status_types(self):
+ *         cdef glib.GList *iter = NULL             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef char *id = NULL
+ */
+  __pyx_v_iter = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":227
+ *     def __get_status_types(self):
+ *         cdef glib.GList *iter = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *id = NULL
+ *         cdef char *name = NULL
+ */
+  __pyx_v_c_statustype = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":228
+ *         cdef glib.GList *iter = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef char *id = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *name = NULL
+ * 
+ */
+  __pyx_v_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":229
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef char *id = NULL
+ *         cdef char *name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists:
+ */
+  __pyx_v_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":231
+ *         cdef char *name = NULL
+ * 
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             status_types = []
+ *             iter = account.purple_account_get_status_types(self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":232
+ * 
+ *         if self.__exists:
+ *             status_types = []             # <<<<<<<<<<<<<<
+ *             iter = account.purple_account_get_status_types(self._get_structure())
+ *             while iter:
+ */
+    __pyx_2 = PyList_New(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_status_types);
+    __pyx_v_status_types = ((PyObject *)__pyx_2);
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":233
+ *         if self.__exists:
+ *             status_types = []
+ *             iter = account.purple_account_get_status_types(self._get_structure())             # <<<<<<<<<<<<<<
+ *             while iter:
+ *                 c_statustype = <status.PurpleStatusType *> iter.data
+ */
+    __pyx_v_iter = purple_account_get_status_types(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":234
+ *             status_types = []
+ *             iter = account.purple_account_get_status_types(self._get_structure())
+ *             while iter:             # <<<<<<<<<<<<<<
+ *                 c_statustype = <status.PurpleStatusType *> iter.data
+ *                 id = <char *> status.purple_status_type_get_id(c_statustype)
+ */
+    while (1) {
+      __pyx_1 = (__pyx_v_iter != 0);
+      if (!__pyx_1) break;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":235
+ *             iter = account.purple_account_get_status_types(self._get_structure())
+ *             while iter:
+ *                 c_statustype = <status.PurpleStatusType *> iter.data             # <<<<<<<<<<<<<<
+ *                 id = <char *> status.purple_status_type_get_id(c_statustype)
+ *                 name = <char *> status.purple_status_type_get_name(c_statustype)
+ */
+      __pyx_v_c_statustype = ((PurpleStatusType *)__pyx_v_iter->data);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":236
+ *             while iter:
+ *                 c_statustype = <status.PurpleStatusType *> iter.data
+ *                 id = <char *> status.purple_status_type_get_id(c_statustype)             # <<<<<<<<<<<<<<
+ *                 name = <char *> status.purple_status_type_get_name(c_statustype)
+ *                 status_types.append((id, name))
+ */
+      __pyx_v_id = ((char *)purple_status_type_get_id(__pyx_v_c_statustype));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":237
+ *                 c_statustype = <status.PurpleStatusType *> iter.data
+ *                 id = <char *> status.purple_status_type_get_id(c_statustype)
+ *                 name = <char *> status.purple_status_type_get_name(c_statustype)             # <<<<<<<<<<<<<<
+ *                 status_types.append((id, name))
+ *                 iter = iter.next
+ */
+      __pyx_v_name = ((char *)purple_status_type_get_name(__pyx_v_c_statustype));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":238
+ *                 id = <char *> status.purple_status_type_get_id(c_statustype)
+ *                 name = <char *> status.purple_status_type_get_name(c_statustype)
+ *                 status_types.append((id, name))             # <<<<<<<<<<<<<<
+ *                 iter = iter.next
+ *             return status_types
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+      PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
+      __pyx_2 = 0;
+      __pyx_3 = 0;
+      __pyx_2 = __Pyx_PyObject_Append(__pyx_v_status_types, ((PyObject *)__pyx_4)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":239
+ *                 name = <char *> status.purple_status_type_get_name(c_statustype)
+ *                 status_types.append((id, name))
+ *                 iter = iter.next             # <<<<<<<<<<<<<<
+ *             return status_types
+ *         else:
+ */
+      __pyx_v_iter = __pyx_v_iter->next;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":240
+ *                 status_types.append((id, name))
+ *                 iter = iter.next
+ *             return status_types             # <<<<<<<<<<<<<<
+ *         else:
+ *              return None
+ */
+    Py_INCREF(__pyx_v_status_types);
+    __pyx_r = __pyx_v_status_types;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":242
+ *             return status_types
+ *         else:
+ *              return None             # <<<<<<<<<<<<<<
+ * 
+ *     status_types = property(__get_status_types)
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.__get_status_types");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_status_types);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":246
+ *     status_types = property(__get_status_types)
+ * 
+ *     def __get_active_status(self):             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_7Account___get_active_status(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account___get_active_status(PyObject *__pyx_v_self, PyObject *unused) {
+  PurpleStatus *__pyx_v_c_status;
+  char *__pyx_v_type;
+  char *__pyx_v_name;
+  char *__pyx_v_msg;
+  PyObject *__pyx_v_active;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  __pyx_v_active = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":247
+ * 
+ *     def __get_active_status(self):
+ *         cdef status.PurpleStatus* c_status = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL
+ */
+  __pyx_v_c_status = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":248
+ *     def __get_active_status(self):
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL
+ */
+  __pyx_v_type = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":249
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *msg = NULL
+ *         if self.__exists:
+ */
+  __pyx_v_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":250
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             active = {}
+ */
+  __pyx_v_msg = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":251
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             active = {}
+ *             c_status = <status.PurpleStatus*> account.purple_account_get_active_status(self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":252
+ *         cdef char *msg = NULL
+ *         if self.__exists:
+ *             active = {}             # <<<<<<<<<<<<<<
+ *             c_status = <status.PurpleStatus*> account.purple_account_get_active_status(self._get_structure())
+ *             type = <char *> status.purple_status_get_id(c_status)
+ */
+    __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_active);
+    __pyx_v_active = ((PyObject *)__pyx_2);
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":253
+ *         if self.__exists:
+ *             active = {}
+ *             c_status = <status.PurpleStatus*> account.purple_account_get_active_status(self._get_structure())             # <<<<<<<<<<<<<<
+ *             type = <char *> status.purple_status_get_id(c_status)
+ *             name = <char *> status.purple_status_get_name(c_status)
+ */
+    __pyx_v_c_status = ((PurpleStatus *)purple_account_get_active_status(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":254
+ *             active = {}
+ *             c_status = <status.PurpleStatus*> account.purple_account_get_active_status(self._get_structure())
+ *             type = <char *> status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
+ *             name = <char *> status.purple_status_get_name(c_status)
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ */
+    __pyx_v_type = ((char *)purple_status_get_id(__pyx_v_c_status));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":255
+ *             c_status = <status.PurpleStatus*> account.purple_account_get_active_status(self._get_structure())
+ *             type = <char *> status.purple_status_get_id(c_status)
+ *             name = <char *> status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ *                 "message")
+ */
+    __pyx_v_name = ((char *)purple_status_get_name(__pyx_v_c_status));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":257
+ *             name = <char *> status.purple_status_get_name(c_status)
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ *                 "message")             # <<<<<<<<<<<<<<
+ * 
+ *             active['type'] = type
+ */
+    __pyx_v_msg = ((char *)purple_status_get_attr_string(__pyx_v_c_status, __pyx_k_450));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":259
+ *                 "message")
+ * 
+ *             active['type'] = type             # <<<<<<<<<<<<<<
+ *             active['name'] = name
+ *             if msg:
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetItem(__pyx_v_active, __pyx_kp_451, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":260
+ * 
+ *             active['type'] = type
+ *             active['name'] = name             # <<<<<<<<<<<<<<
+ *             if msg:
+ *                 active['message'] = msg
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetItem(__pyx_v_active, __pyx_kp_452, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":261
+ *             active['type'] = type
+ *             active['name'] = name
+ *             if msg:             # <<<<<<<<<<<<<<
+ *                 active['message'] = msg
+ * 
+ */
+    __pyx_1 = (__pyx_v_msg != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":262
+ *             active['name'] = name
+ *             if msg:
+ *                 active['message'] = msg             # <<<<<<<<<<<<<<
+ * 
+ *             return active
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_msg); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (PyObject_SetItem(__pyx_v_active, __pyx_kp_453, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L6;
+    }
+    __pyx_L6:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":264
+ *                 active['message'] = msg
+ * 
+ *             return active             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    Py_INCREF(__pyx_v_active);
+    __pyx_r = __pyx_v_active;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":266
+ *             return active
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     active_status = property(__get_active_status)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.__get_active_status");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_active);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":269
+ *     active_status = property(__get_active_status)
+ * 
+ *     def set_username(self, username):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the account's username.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_username(PyObject *__pyx_v_self, PyObject *__pyx_v_username); /*proto*/
+static char __pyx_doc_6purple_7Account_set_username[] = "\n        Sets the account's username.\n\n        @param username The username\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_username(PyObject *__pyx_v_self, PyObject *__pyx_v_username) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":276
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_username(self._get_structure(), \
+ *                     username)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":278
+ *         if self.__exists:
+ *             account.purple_account_set_username(self._get_structure(), \
+ *                     username)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_username); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_account_set_username(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":279
+ *             account.purple_account_set_username(self._get_structure(), \
+ *                     username)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":281
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_protocol(self, protocol):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Account.set_username");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":283
+ *             return False
+ * 
+ *     def set_protocol(self, protocol):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the account's protocol.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_protocol(PyObject *__pyx_v_self, PyObject *__pyx_v_protocol); /*proto*/
+static char __pyx_doc_6purple_7Account_set_protocol[] = "\n        Sets the account's protocol.\n\n        @param protocol A Protocol class instance\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_protocol(PyObject *__pyx_v_self, PyObject *__pyx_v_protocol) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  char *__pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":290
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if protocol.exists and self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_protocol_id(self._get_structure(), \
+ *                         protocol.id)
+ */
+  __pyx_2 = PyObject_GetAttr(__pyx_v_protocol, __pyx_kp_exists); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_1) {
+    __pyx_3 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_3 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __pyx_3;
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":292
+ *         if protocol.exists and self.__exists:
+ *             account.purple_account_set_protocol_id(self._get_structure(), \
+ *                         protocol.id)             # <<<<<<<<<<<<<<
+ *             self.__protocol = protocol
+ *             return True
+ */
+    __pyx_2 = PyObject_GetAttr(__pyx_v_protocol, __pyx_kp_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    purple_account_set_protocol_id(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_4);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":293
+ *             account.purple_account_set_protocol_id(self._get_structure(), \
+ *                         protocol.id)
+ *             self.__protocol = protocol             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    Py_INCREF(__pyx_v_protocol);
+    Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol);
+    ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol = __pyx_v_protocol;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":294
+ *                         protocol.id)
+ *             self.__protocol = protocol
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":296
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_protocol_options(self, po):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.set_protocol");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":298
+ *             return False
+ * 
+ *     def set_protocol_options(self, po):             # <<<<<<<<<<<<<<
+ *         """
+ *         @param po Dictionary {'setting': value, ...} options to be updated
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_protocol_options(PyObject *__pyx_v_self, PyObject *__pyx_v_po); /*proto*/
+static char __pyx_doc_6purple_7Account_set_protocol_options[] = "\n        @param po Dictionary {'setting': value, ...} options to be updated\n        @return True to success or False to failure\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_protocol_options(PyObject *__pyx_v_self, PyObject *__pyx_v_po) {
+  GList *__pyx_v_iter;
+  PurpleAccount *__pyx_v_c_account;
+  PurplePlugin *__pyx_v_c_plugin;
+  PurplePluginProtocolInfo *__pyx_v_prpl_info;
+  PurpleAccountOption *__pyx_v_option;
+  PurplePrefType __pyx_v_type;
+  char *__pyx_v_str_value;
+  char *__pyx_v_setting;
+  int __pyx_v_int_value;
+  gboolean __pyx_v_bool_value;
+  PyObject *__pyx_v_sett;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  int __pyx_6;
+  int __pyx_7;
+  gboolean __pyx_8;
+  __pyx_v_sett = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":314
+ *         cdef glib.gboolean bool_value
+ * 
+ *         c_account = self._get_structure()             # <<<<<<<<<<<<<<
+ * 
+ *         if c_account == NULL:
+ */
+  __pyx_v_c_account = ((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":316
+ *         c_account = self._get_structure()
+ * 
+ *         if c_account == NULL:             # <<<<<<<<<<<<<<
+ *             return False
+ * 
+ */
+  __pyx_1 = (__pyx_v_c_account == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":317
+ * 
+ *         if c_account == NULL:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":319
+ *             return False
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)             # <<<<<<<<<<<<<<
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)
+ *         iter = prpl_info.protocol_options
+ */
+  __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol, __pyx_kp_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_v_c_plugin = purple_plugins_find_with_id(__pyx_3);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":320
+ * 
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)             # <<<<<<<<<<<<<<
+ *         iter = prpl_info.protocol_options
+ * 
+ */
+  __pyx_v_prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(__pyx_v_c_plugin);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":321
+ *         c_plugin = plugin.purple_plugins_find_with_id(self.__protocol.id)
+ *         prpl_info = plugin.PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)
+ *         iter = prpl_info.protocol_options             # <<<<<<<<<<<<<<
+ * 
+ *         while iter:
+ */
+  __pyx_v_iter = __pyx_v_prpl_info->protocol_options;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":323
+ *         iter = prpl_info.protocol_options
+ * 
+ *         while iter:             # <<<<<<<<<<<<<<
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ */
+  while (1) {
+    __pyx_1 = (__pyx_v_iter != 0);
+    if (!__pyx_1) break;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":325
+ *         while iter:
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data             # <<<<<<<<<<<<<<
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ */
+    __pyx_v_option = ((PurpleAccountOption *)__pyx_v_iter->data);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":326
+ * 
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)             # <<<<<<<<<<<<<<
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ * 
+ */
+    __pyx_v_type = purple_account_option_get_type(__pyx_v_option);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":327
+ *             option = <accountopt.PurpleAccountOption *> iter.data
+ *             type = accountopt.purple_account_option_get_type(option)
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)             # <<<<<<<<<<<<<<
+ * 
+ *             sett = str(<char *> setting)
+ */
+    __pyx_v_setting = ((char *)purple_account_option_get_setting(__pyx_v_option));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":329
+ *             setting = <char *> accountopt.purple_account_option_get_setting(option)
+ * 
+ *             sett = str(<char *> setting)             # <<<<<<<<<<<<<<
+ * 
+ *             if not po.has_key(sett):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_setting)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_sett);
+    __pyx_v_sett = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":331
+ *             sett = str(<char *> setting)
+ * 
+ *             if not po.has_key(sett):             # <<<<<<<<<<<<<<
+ *                 iter = iter.next
+ *                 continue
+ */
+    __pyx_4 = PyObject_GetAttr(__pyx_v_po, __pyx_kp_has_key); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_sett);
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_sett);
+    __pyx_5 = PyObject_Call(__pyx_4, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+    __pyx_6 = (!__pyx_1);
+    if (__pyx_6) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":332
+ * 
+ *             if not po.has_key(sett):
+ *                 iter = iter.next             # <<<<<<<<<<<<<<
+ *                 continue
+ * 
+ */
+      __pyx_v_iter = __pyx_v_iter->next;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":333
+ *             if not po.has_key(sett):
+ *                 iter = iter.next
+ *                 continue             # <<<<<<<<<<<<<<
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:
+ */
+      goto __pyx_L6;
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":335
+ *                 continue
+ * 
+ *             if type == prefs.PURPLE_PREF_STRING:             # <<<<<<<<<<<<<<
+ * 
+ *                 str_value = <char *> po[sett]
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_STRING);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":337
+ *             if type == prefs.PURPLE_PREF_STRING:
+ * 
+ *                 str_value = <char *> po[sett]             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_string(c_account, setting, str_value)
+ * 
+ */
+      __pyx_4 = PyObject_GetItem(__pyx_v_po, __pyx_v_sett); if (!__pyx_4) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_4); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_4); __pyx_4 = 0;
+      __pyx_v_str_value = ((char *)__pyx_3);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":338
+ * 
+ *                 str_value = <char *> po[sett]
+ *                 account.purple_account_set_string(c_account, setting, str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:
+ */
+      purple_account_set_string(__pyx_v_c_account, __pyx_v_setting, __pyx_v_str_value);
+      goto __pyx_L9;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":340
+ *                 account.purple_account_set_string(c_account, setting, str_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_INT:             # <<<<<<<<<<<<<<
+ * 
+ *                 int_value = int(po[sett])
+ */
+    __pyx_6 = (__pyx_v_type == PURPLE_PREF_INT);
+    if (__pyx_6) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":342
+ *             elif type == prefs.PURPLE_PREF_INT:
+ * 
+ *                 int_value = int(po[sett])             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_int(c_account, setting, int_value)
+ * 
+ */
+      __pyx_2 = PyObject_GetItem(__pyx_v_po, __pyx_v_sett); if (!__pyx_2) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
+      __pyx_2 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyInt_Type)), ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+      __pyx_7 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_4); __pyx_4 = 0;
+      __pyx_v_int_value = __pyx_7;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":343
+ * 
+ *                 int_value = int(po[sett])
+ *                 account.purple_account_set_int(c_account, setting, int_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ */
+      purple_account_set_int(__pyx_v_c_account, __pyx_v_setting, __pyx_v_int_value);
+      goto __pyx_L9;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":345
+ *                 account.purple_account_set_int(c_account, setting, int_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:             # <<<<<<<<<<<<<<
+ * 
+ *                 bool_value = bool(po[sett])
+ */
+    __pyx_1 = (__pyx_v_type == PURPLE_PREF_BOOLEAN);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":347
+ *             elif type == prefs.PURPLE_PREF_BOOLEAN:
+ * 
+ *                 bool_value = bool(po[sett])             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_bool(c_account, setting, bool_value)
+ * 
+ */
+      __pyx_2 = PyObject_GetItem(__pyx_v_po, __pyx_v_sett); if (!__pyx_2) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
+      __pyx_2 = 0;
+      __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyBool_Type)), ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+      __pyx_8 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_4); __pyx_4 = 0;
+      __pyx_v_bool_value = __pyx_8;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":348
+ * 
+ *                 bool_value = bool(po[sett])
+ *                 account.purple_account_set_bool(c_account, setting, bool_value)             # <<<<<<<<<<<<<<
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ */
+      purple_account_set_bool(__pyx_v_c_account, __pyx_v_setting, __pyx_v_bool_value);
+      goto __pyx_L9;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":350
+ *                 account.purple_account_set_bool(c_account, setting, bool_value)
+ * 
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:             # <<<<<<<<<<<<<<
+ * 
+ *                 str_value = <char *> po[sett]
+ */
+    __pyx_6 = (__pyx_v_type == PURPLE_PREF_STRING_LIST);
+    if (__pyx_6) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":352
+ *             elif type == prefs.PURPLE_PREF_STRING_LIST:
+ * 
+ *                 str_value = <char *> po[sett]             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_string(c_account, setting, str_value)
+ * 
+ */
+      __pyx_2 = PyObject_GetItem(__pyx_v_po, __pyx_v_sett); if (!__pyx_2) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_v_str_value = ((char *)__pyx_3);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":353
+ * 
+ *                 str_value = <char *> po[sett]
+ *                 account.purple_account_set_string(c_account, setting, str_value)             # <<<<<<<<<<<<<<
+ * 
+ *             iter = iter.next
+ */
+      purple_account_set_string(__pyx_v_c_account, __pyx_v_setting, __pyx_v_str_value);
+      goto __pyx_L9;
+    }
+    __pyx_L9:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":355
+ *                 account.purple_account_set_string(c_account, setting, str_value)
+ * 
+ *             iter = iter.next             # <<<<<<<<<<<<<<
+ * 
+ *         return True
+ */
+    __pyx_v_iter = __pyx_v_iter->next;
+    __pyx_L6:;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":357
+ *             iter = iter.next
+ * 
+ *         return True             # <<<<<<<<<<<<<<
+ * 
+ *     def set_password(self, password):
+ */
+  __pyx_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_5;
+  __pyx_5 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_AddTraceback("purple.Account.set_protocol_options");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_sett);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":359
+ *         return True
+ * 
+ *     def set_password(self, password):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the account's password.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_password(PyObject *__pyx_v_self, PyObject *__pyx_v_password); /*proto*/
+static char __pyx_doc_6purple_7Account_set_password[] = "\n        Sets the account's password.\n\n        @param password The password\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_password(PyObject *__pyx_v_self, PyObject *__pyx_v_password) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":366
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_password(self._get_structure(), \
+ *                     password)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":368
+ *         if self.__exists:
+ *             account.purple_account_set_password(self._get_structure(), \
+ *                     password)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_password); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_account_set_password(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":369
+ *             account.purple_account_set_password(self._get_structure(), \
+ *                     password)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":371
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_alias(self, alias):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Account.set_password");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":373
+ *             return False
+ * 
+ *     def set_alias(self, alias):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the account's alias
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_alias(PyObject *__pyx_v_self, PyObject *__pyx_v_alias); /*proto*/
+static char __pyx_doc_6purple_7Account_set_alias[] = "\n        Sets the account's alias\n\n        @param alias The alias\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_alias(PyObject *__pyx_v_self, PyObject *__pyx_v_alias) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":380
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_alias(self._get_structure(), \
+ *                     alias)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":382
+ *         if self.__exists:
+ *             account.purple_account_set_alias(self._get_structure(), \
+ *                     alias)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_alias); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_account_set_alias(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":383
+ *             account.purple_account_set_alias(self._get_structure(), \
+ *                     alias)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":385
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_user_info(self, user_info):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Account.set_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":387
+ *             return False
+ * 
+ *     def set_user_info(self, user_info):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the account's user information
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_user_info(PyObject *__pyx_v_self, PyObject *__pyx_v_user_info); /*proto*/
+static char __pyx_doc_6purple_7Account_set_user_info[] = "\n        Sets the account's user information\n\n        @param user_info The user information\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_user_info(PyObject *__pyx_v_self, PyObject *__pyx_v_user_info) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":394
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_user_info(self._get_structure(), \
+ *                     user_info)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":396
+ *         if self.__exists:
+ *             account.purple_account_set_user_info(self._get_structure(), \
+ *                     user_info)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_user_info); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_account_set_user_info(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":397
+ *             account.purple_account_set_user_info(self._get_structure(), \
+ *                     user_info)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":399
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_remember_password(self, remember_password):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Account.set_user_info");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":401
+ *             return False
+ * 
+ *     def set_remember_password(self, remember_password):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets whether or not this account should save its password.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_remember_password(PyObject *__pyx_v_self, PyObject *__pyx_v_remember_password); /*proto*/
+static char __pyx_doc_6purple_7Account_set_remember_password[] = "\n        Sets whether or not this account should save its password.\n\n        @param remember_password True if should remember the password,\n                                 or False otherwise\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_remember_password(PyObject *__pyx_v_self, PyObject *__pyx_v_remember_password) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  gboolean __pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":409
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_remember_password( \
+ *                 self._get_structure(), remember_password)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":411
+ *         if self.__exists:
+ *             account.purple_account_set_remember_password( \
+ *                 self._get_structure(), remember_password)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __pyx_PyInt_int(__pyx_v_remember_password); if (unlikely((__pyx_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_account_set_remember_password(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":412
+ *             account.purple_account_set_remember_password( \
+ *                 self._get_structure(), remember_password)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":414
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_enabled(self, value):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Account.set_remember_password");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":416
+ *             return False
+ * 
+ *     def set_enabled(self, value):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets wheter or not this account is enabled.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_enabled(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static char __pyx_doc_6purple_7Account_set_enabled[] = "\n        Sets wheter or not this account is enabled.\n\n        @param value True if it is enabled, or False otherwise\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_set_enabled(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+  gboolean __pyx_5;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":423
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_set_enabled(self._get_structure(), \
+ *                     self.__core.ui_name, bool(value))
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":425
+ *         if self.__exists:
+ *             account.purple_account_set_enabled(self._get_structure(), \
+ *                     self.__core.ui_name, bool(value))             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__core, __pyx_kp_ui_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_value);
+    __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)&PyBool_Type)), ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    __pyx_5 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    purple_account_set_enabled(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_3, __pyx_5);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":426
+ *             account.purple_account_set_enabled(self._get_structure(), \
+ *                     self.__core.ui_name, bool(value))
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":428
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def new(self):
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.set_enabled");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":430
+ *             return False
+ * 
+ *     def new(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Creates a new account.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_new(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_7Account_new[] = "\n        Creates a new account.\n\n        @return True if successful, False if account already exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_new(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  char *__pyx_3;
+  char *__pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":436
+ *         @return True if successful, False if account already exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return False
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":437
+ *         """
+ *         if self.__exists:
+ *             return False             # <<<<<<<<<<<<<<
+ *         else:
+ *             account.purple_accounts_add(account.purple_account_new( \
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":440
+ *         else:
+ *             account.purple_accounts_add(account.purple_account_new( \
+ *                     self.__username, self.__protocol.id))             # <<<<<<<<<<<<<<
+ * 
+ *             self.__exists = True
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__username); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__protocol, __pyx_kp_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    purple_accounts_add(purple_account_new(__pyx_3, __pyx_4));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":442
+ *                     self.__username, self.__protocol.id))
+ * 
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *             return True
+ * 
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":443
+ * 
+ *             self.__exists = True
+ *             return True             # <<<<<<<<<<<<<<
+ * 
+ *     def remove(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.new");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":445
+ *             return True
+ * 
+ *     def remove(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Removes an existing account.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_remove(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_7Account_remove[] = "\n        Removes an existing account.\n\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_remove(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_v_self__exists;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  __pyx_v_self__exists = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":451
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_accounts_delete(self._get_structure())
+ *             self__exists = False
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":452
+ *         """
+ *         if self.__exists:
+ *             account.purple_accounts_delete(self._get_structure())             # <<<<<<<<<<<<<<
+ *             self__exists = False
+ *             return True
+ */
+    purple_accounts_delete(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":453
+ *         if self.__exists:
+ *             account.purple_accounts_delete(self._get_structure())
+ *             self__exists = False             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_self__exists);
+    __pyx_v_self__exists = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":454
+ *             account.purple_accounts_delete(self._get_structure())
+ *             self__exists = False
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":456
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def connect(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.remove");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_self__exists);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":458
+ *             return False
+ * 
+ *     def connect(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Connects to an account.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_connect(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_7Account_connect[] = "\n        Connects to an account.\n\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_connect(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":464
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_connect(self._get_structure())
+ *             return True
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":465
+ *         """
+ *         if self.__exists:
+ *             account.purple_account_connect(self._get_structure())             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    purple_account_connect(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":466
+ *         if self.__exists:
+ *             account.purple_account_connect(self._get_structure())
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":468
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def disconnect(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.connect");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":470
+ *             return False
+ * 
+ *     def disconnect(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Disconnects from an account.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_disconnect(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_7Account_disconnect[] = "\n        Disconnects from an account.\n\n        @return True if successful, False if account doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_7Account_disconnect(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":476
+ *         @return True if successful, False if account doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             account.purple_account_disconnect(self._get_structure())
+ *             return True
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":477
+ *         """
+ *         if self.__exists:
+ *             account.purple_account_disconnect(self._get_structure())             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    purple_account_disconnect(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":478
+ *         if self.__exists:
+ *             account.purple_account_disconnect(self._get_structure())
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":480
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def add_buddy(self, name, alias=None, group=None):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Account.disconnect");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":482
+ *             return False
+ * 
+ *     def add_buddy(self, name, alias=None, group=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Adds a buddy to account's buddy list.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_add_buddy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_6purple_7Account_add_buddy[] = "\n        Adds a buddy to account's buddy list.\n\n        @param name  Buddy name\n        @param alias Buddy alias (optional)\n        @return True if successfull, False otherwise\n        ";
+static PyObject *__pyx_pf_6purple_7Account_add_buddy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_alias = 0;
+  PyObject *__pyx_v_group = 0;
+  PurpleBuddy *__pyx_v_c_buddy;
+  PurpleGroup *__pyx_v_c_group;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  int __pyx_3;
+  PyObject *__pyx_4 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_name,&__pyx_kp_alias,&__pyx_kp_group,0};
+  __pyx_v_alias = Py_None;
+  __pyx_v_group = Py_None;
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[3] = {0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_name);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "add_buddy") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_name = values[0];
+    if (values[1]) {
+      __pyx_v_alias = values[1];
+    }
+    if (values[2]) {
+      __pyx_v_group = values[2];
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: __pyx_v_group = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: __pyx_v_alias = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_name = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("add_buddy", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Account.add_buddy");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":490
+ *         @return True if successfull, False otherwise
+ *         """
+ *         cdef blist.PurpleBuddy *c_buddy = NULL             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         cdef char *c_alias = NULL
+ */
+  __pyx_v_c_buddy = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":491
+ *         """
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_group = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":492
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if alias:
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":494
+ *         cdef char *c_alias = NULL
+ * 
+ *         if alias:             # <<<<<<<<<<<<<<
+ *             c_alias = alias
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_v_alias); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":495
+ * 
+ *         if alias:
+ *             c_alias = alias             # <<<<<<<<<<<<<<
+ *         else:
+ *             c_alias = NULL
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_alias); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_alias = __pyx_2;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":497
+ *             c_alias = alias
+ *         else:
+ *             c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists and \
+ */
+    __pyx_v_c_alias = NULL;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":499
+ *             c_alias = NULL
+ * 
+ *         if self.__exists and \             # <<<<<<<<<<<<<<
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             if blist.purple_find_buddy(self._get_structure(), name):
+ */
+  __pyx_3 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_3 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_3;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":500
+ * 
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):             # <<<<<<<<<<<<<<
+ *             if blist.purple_find_buddy(self._get_structure(), name):
+ *                 return False
+ */
+    __pyx_1 = purple_account_is_connected(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":501
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             if blist.purple_find_buddy(self._get_structure(), name):             # <<<<<<<<<<<<<<
+ *                 return False
+ * 
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_name); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = (purple_find_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2) != 0);
+    if (__pyx_3) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":502
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             if blist.purple_find_buddy(self._get_structure(), name):
+ *                 return False             # <<<<<<<<<<<<<<
+ * 
+ *             if group:
+ */
+      __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L0;
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":504
+ *                 return False
+ * 
+ *             if group:             # <<<<<<<<<<<<<<
+ *                 c_group = blist.purple_find_group(group)
+ *                 if c_group == NULL:
+ */
+    __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_v_group); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":505
+ * 
+ *             if group:
+ *                 c_group = blist.purple_find_group(group)             # <<<<<<<<<<<<<<
+ *                 if c_group == NULL:
+ *                     c_group = blist.purple_group_new(group)
+ */
+      __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_group); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_c_group = purple_find_group(__pyx_2);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":506
+ *             if group:
+ *                 c_group = blist.purple_find_group(group)
+ *                 if c_group == NULL:             # <<<<<<<<<<<<<<
+ *                     c_group = blist.purple_group_new(group)
+ * 
+ */
+      __pyx_3 = (__pyx_v_c_group == NULL);
+      if (__pyx_3) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":507
+ *                 c_group = blist.purple_find_group(group)
+ *                 if c_group == NULL:
+ *                     c_group = blist.purple_group_new(group)             # <<<<<<<<<<<<<<
+ * 
+ *             c_buddy = blist.purple_buddy_new(self._get_structure(), \
+ */
+        __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_group); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_v_c_group = purple_group_new(__pyx_2);
+        goto __pyx_L10;
+      }
+      __pyx_L10:;
+      goto __pyx_L9;
+    }
+    __pyx_L9:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":510
+ * 
+ *             c_buddy = blist.purple_buddy_new(self._get_structure(), \
+ *                     name, c_alias)             # <<<<<<<<<<<<<<
+ *             if c_buddy == NULL:
+ *                 return False
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_name); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_buddy = purple_buddy_new(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2, __pyx_v_c_alias);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":511
+ *             c_buddy = blist.purple_buddy_new(self._get_structure(), \
+ *                     name, c_alias)
+ *             if c_buddy == NULL:             # <<<<<<<<<<<<<<
+ *                 return False
+ * 
+ */
+    __pyx_1 = (__pyx_v_c_buddy == NULL);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":512
+ *                     name, c_alias)
+ *             if c_buddy == NULL:
+ *                 return False             # <<<<<<<<<<<<<<
+ * 
+ *             blist.purple_blist_add_buddy(c_buddy, NULL, c_group, NULL)
+ */
+      __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L0;
+      goto __pyx_L11;
+    }
+    __pyx_L11:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":514
+ *                 return False
+ * 
+ *             blist.purple_blist_add_buddy(c_buddy, NULL, c_group, NULL)             # <<<<<<<<<<<<<<
+ *             account.purple_account_add_buddy(self._get_structure(), c_buddy)
+ *             if c_alias:
+ */
+    purple_blist_add_buddy(__pyx_v_c_buddy, NULL, __pyx_v_c_group, NULL);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":515
+ * 
+ *             blist.purple_blist_add_buddy(c_buddy, NULL, c_group, NULL)
+ *             account.purple_account_add_buddy(self._get_structure(), c_buddy)             # <<<<<<<<<<<<<<
+ *             if c_alias:
+ *                 blist.purple_blist_alias_buddy(c_buddy, c_alias)
+ */
+    purple_account_add_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_v_c_buddy);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":516
+ *             blist.purple_blist_add_buddy(c_buddy, NULL, c_group, NULL)
+ *             account.purple_account_add_buddy(self._get_structure(), c_buddy)
+ *             if c_alias:             # <<<<<<<<<<<<<<
+ *                 blist.purple_blist_alias_buddy(c_buddy, c_alias)
+ *                 server.serv_alias_buddy(c_buddy)
+ */
+    __pyx_3 = (__pyx_v_c_alias != 0);
+    if (__pyx_3) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":517
+ *             account.purple_account_add_buddy(self._get_structure(), c_buddy)
+ *             if c_alias:
+ *                 blist.purple_blist_alias_buddy(c_buddy, c_alias)             # <<<<<<<<<<<<<<
+ *                 server.serv_alias_buddy(c_buddy)
+ * 
+ */
+      purple_blist_alias_buddy(__pyx_v_c_buddy, __pyx_v_c_alias);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":518
+ *             if c_alias:
+ *                 blist.purple_blist_alias_buddy(c_buddy, c_alias)
+ *                 server.serv_alias_buddy(c_buddy)             # <<<<<<<<<<<<<<
+ * 
+ *             return True
+ */
+      serv_alias_buddy(__pyx_v_c_buddy);
+      goto __pyx_L12;
+    }
+    __pyx_L12:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":520
+ *                 server.serv_alias_buddy(c_buddy)
+ * 
+ *             return True             # <<<<<<<<<<<<<<
+ * 
+ *         else:
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+    goto __pyx_L7;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":523
+ * 
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *     def remove_buddy(self, name):
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L7:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.add_buddy");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":525
+ *             return None
+ * 
+ *     def remove_buddy(self, name):             # <<<<<<<<<<<<<<
+ *         """
+ *         Removes a buddy from account's buddy list.
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_remove_buddy(PyObject *__pyx_v_self, PyObject *__pyx_v_name); /*proto*/
+static char __pyx_doc_6purple_7Account_remove_buddy[] = "\n        Removes a buddy from account's buddy list.\n\n        @param name Buddy name\n        @return True if successful, False otherwise\n        ";
+static PyObject *__pyx_pf_6purple_7Account_remove_buddy(PyObject *__pyx_v_self, PyObject *__pyx_v_name) {
+  PurpleBuddy *__pyx_v_c_buddy;
+  PurpleGroup *__pyx_v_c_group;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":532
+ *         @return True if successful, False otherwise
+ *         """
+ *         cdef blist.PurpleBuddy *c_buddy = NULL             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleGroup *c_group = NULL
+ * 
+ */
+  __pyx_v_c_buddy = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":533
+ *         """
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists and \
+ */
+  __pyx_v_c_group = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":535
+ *         cdef blist.PurpleGroup *c_group = NULL
+ * 
+ *         if self.__exists and \             # <<<<<<<<<<<<<<
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             c_buddy = blist.purple_find_buddy(self._get_structure(), name)
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_2;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":536
+ * 
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):             # <<<<<<<<<<<<<<
+ *             c_buddy = blist.purple_find_buddy(self._get_structure(), name)
+ *             if c_buddy == NULL:
+ */
+    __pyx_1 = purple_account_is_connected(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":537
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             c_buddy = blist.purple_find_buddy(self._get_structure(), name)             # <<<<<<<<<<<<<<
+ *             if c_buddy == NULL:
+ *                 return False
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_name); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_buddy = purple_find_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":538
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             c_buddy = blist.purple_find_buddy(self._get_structure(), name)
+ *             if c_buddy == NULL:             # <<<<<<<<<<<<<<
+ *                 return False
+ * 
+ */
+    __pyx_2 = (__pyx_v_c_buddy == NULL);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":539
+ *             c_buddy = blist.purple_find_buddy(self._get_structure(), name)
+ *             if c_buddy == NULL:
+ *                 return False             # <<<<<<<<<<<<<<
+ * 
+ *             c_group = blist.purple_buddy_get_group(c_buddy)
+ */
+      __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L0;
+      goto __pyx_L6;
+    }
+    __pyx_L6:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":541
+ *                 return False
+ * 
+ *             c_group = blist.purple_buddy_get_group(c_buddy)             # <<<<<<<<<<<<<<
+ * 
+ *             account.purple_account_remove_buddy(self._get_structure(), \
+ */
+    __pyx_v_c_group = purple_buddy_get_group(__pyx_v_c_buddy);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":544
+ * 
+ *             account.purple_account_remove_buddy(self._get_structure(), \
+ *                     c_buddy, c_group)             # <<<<<<<<<<<<<<
+ *             blist.purple_blist_remove_buddy(c_buddy)
+ *             return True
+ */
+    purple_account_remove_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_v_c_buddy, __pyx_v_c_group);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":545
+ *             account.purple_account_remove_buddy(self._get_structure(), \
+ *                     c_buddy, c_group)
+ *             blist.purple_blist_remove_buddy(c_buddy)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    purple_blist_remove_buddy(__pyx_v_c_buddy);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":546
+ *                     c_buddy, c_group)
+ *             blist.purple_blist_remove_buddy(c_buddy)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":548
+ *             return True
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *     def get_buddies_online(self):
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.remove_buddy");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":550
+ *             return None
+ * 
+ *     def get_buddies_online(self):             # <<<<<<<<<<<<<<
+ *         cdef glib.GSList *iter = NULL
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_get_buddies_online(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account_get_buddies_online(PyObject *__pyx_v_self, PyObject *unused) {
+  GSList *__pyx_v_iter;
+  PurpleBuddy *__pyx_v_c_buddy;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_buddies_list;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_new_buddy;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_buddies_list = Py_None; Py_INCREF(Py_None);
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_new_buddy = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":551
+ * 
+ *     def get_buddies_online(self):
+ *         cdef glib.GSList *iter = NULL             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ *         cdef char *c_alias = NULL
+ */
+  __pyx_v_iter = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":552
+ *     def get_buddies_online(self):
+ *         cdef glib.GSList *iter = NULL
+ *         cdef blist.PurpleBuddy *c_buddy = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_buddy = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":553
+ *         cdef glib.GSList *iter = NULL
+ *         cdef blist.PurpleBuddy *c_buddy = NULL
+ *         cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists and \
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":555
+ *         cdef char *c_alias = NULL
+ * 
+ *         if self.__exists and \             # <<<<<<<<<<<<<<
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             iter = blist.purple_find_buddies(self._get_structure(), NULL)
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_2;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":556
+ * 
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):             # <<<<<<<<<<<<<<
+ *             iter = blist.purple_find_buddies(self._get_structure(), NULL)
+ * 
+ */
+    __pyx_1 = purple_account_is_connected(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)));
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":557
+ *         if self.__exists and \
+ *                 account.purple_account_is_connected(self._get_structure()):
+ *             iter = blist.purple_find_buddies(self._get_structure(), NULL)             # <<<<<<<<<<<<<<
+ * 
+ *             buddies_list = []
+ */
+    __pyx_v_iter = purple_find_buddies(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), NULL);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":559
+ *             iter = blist.purple_find_buddies(self._get_structure(), NULL)
+ * 
+ *             buddies_list = []             # <<<<<<<<<<<<<<
+ *             while iter:
+ *                 c_alias = NULL
+ */
+    __pyx_3 = PyList_New(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddies_list);
+    __pyx_v_buddies_list = ((PyObject *)__pyx_3);
+    __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":560
+ * 
+ *             buddies_list = []
+ *             while iter:             # <<<<<<<<<<<<<<
+ *                 c_alias = NULL
+ *                 c_buddy = <blist.PurpleBuddy *> iter.data
+ */
+    while (1) {
+      __pyx_2 = (__pyx_v_iter != 0);
+      if (!__pyx_2) break;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":561
+ *             buddies_list = []
+ *             while iter:
+ *                 c_alias = NULL             # <<<<<<<<<<<<<<
+ *                 c_buddy = <blist.PurpleBuddy *> iter.data
+ *                 if <blist.PurpleBuddy *> c_buddy and \
+ */
+      __pyx_v_c_alias = NULL;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":562
+ *             while iter:
+ *                 c_alias = NULL
+ *                 c_buddy = <blist.PurpleBuddy *> iter.data             # <<<<<<<<<<<<<<
+ *                 if <blist.PurpleBuddy *> c_buddy and \
+ *                         status.purple_presence_is_online( \
+ */
+      __pyx_v_c_buddy = ((PurpleBuddy *)__pyx_v_iter->data);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":563
+ *                 c_alias = NULL
+ *                 c_buddy = <blist.PurpleBuddy *> iter.data
+ *                 if <blist.PurpleBuddy *> c_buddy and \             # <<<<<<<<<<<<<<
+ *                         status.purple_presence_is_online( \
+ *                                 blist.purple_buddy_get_presence(c_buddy)):
+ */
+      __pyx_1 = (((PurpleBuddy *)__pyx_v_c_buddy) != 0);
+      if (__pyx_1) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":565
+ *                 if <blist.PurpleBuddy *> c_buddy and \
+ *                         status.purple_presence_is_online( \
+ *                                 blist.purple_buddy_get_presence(c_buddy)):             # <<<<<<<<<<<<<<
+ *                     name = <char *> blist.purple_buddy_get_name(c_buddy)
+ * 
+ */
+        __pyx_1 = purple_presence_is_online(purple_buddy_get_presence(__pyx_v_c_buddy));
+      }
+      if (__pyx_1) {
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":566
+ *                         status.purple_presence_is_online( \
+ *                                 blist.purple_buddy_get_presence(c_buddy)):
+ *                     name = <char *> blist.purple_buddy_get_name(c_buddy)             # <<<<<<<<<<<<<<
+ * 
+ *                     new_buddy = Buddy(name, self)
+ */
+        __pyx_3 = __Pyx_PyBytes_FromString(((char *)purple_buddy_get_name(__pyx_v_c_buddy))); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_v_name);
+        __pyx_v_name = __pyx_3;
+        __pyx_3 = 0;
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":568
+ *                     name = <char *> blist.purple_buddy_get_name(c_buddy)
+ * 
+ *                     new_buddy = Buddy(name, self)             # <<<<<<<<<<<<<<
+ * 
+ *                     c_alias = <char *> blist.purple_buddy_get_alias_only(c_buddy)
+ */
+        __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_INCREF(__pyx_v_name);
+        PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_name);
+        Py_INCREF(__pyx_v_self);
+        PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_self);
+        __pyx_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6purple_Buddy)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+        Py_DECREF(__pyx_v_new_buddy);
+        __pyx_v_new_buddy = __pyx_4;
+        __pyx_4 = 0;
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":570
+ *                     new_buddy = Buddy(name, self)
+ * 
+ *                     c_alias = <char *> blist.purple_buddy_get_alias_only(c_buddy)             # <<<<<<<<<<<<<<
+ *                     if c_alias:
+ *                         new_buddy.set_alias(c_alias)
+ */
+        __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_c_buddy));
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":571
+ * 
+ *                     c_alias = <char *> blist.purple_buddy_get_alias_only(c_buddy)
+ *                     if c_alias:             # <<<<<<<<<<<<<<
+ *                         new_buddy.set_alias(c_alias)
+ * 
+ */
+        __pyx_2 = (__pyx_v_c_alias != 0);
+        if (__pyx_2) {
+
+          /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":572
+ *                     c_alias = <char *> blist.purple_buddy_get_alias_only(c_buddy)
+ *                     if c_alias:
+ *                         new_buddy.set_alias(c_alias)             # <<<<<<<<<<<<<<
+ * 
+ *                     buddies_list.append(new_buddy)
+ */
+          __pyx_3 = PyObject_GetAttr(__pyx_v_new_buddy, __pyx_kp_set_alias); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_4 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          PyTuple_SET_ITEM(__pyx_5, 0, __pyx_4);
+          __pyx_4 = 0;
+          __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(__pyx_3); __pyx_3 = 0;
+          Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+          Py_DECREF(__pyx_4); __pyx_4 = 0;
+          goto __pyx_L9;
+        }
+        __pyx_L9:;
+
+        /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":574
+ *                         new_buddy.set_alias(c_alias)
+ * 
+ *                     buddies_list.append(new_buddy)             # <<<<<<<<<<<<<<
+ *                 iter = iter.next
+ *             return buddies_list
+ */
+        __pyx_3 = __Pyx_PyObject_Append(__pyx_v_buddies_list, __pyx_v_new_buddy); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_3); __pyx_3 = 0;
+        goto __pyx_L8;
+      }
+      __pyx_L8:;
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":575
+ * 
+ *                     buddies_list.append(new_buddy)
+ *                 iter = iter.next             # <<<<<<<<<<<<<<
+ *             return buddies_list
+ *         else:
+ */
+      __pyx_v_iter = __pyx_v_iter->next;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":576
+ *                     buddies_list.append(new_buddy)
+ *                 iter = iter.next
+ *             return buddies_list             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    Py_INCREF(__pyx_v_buddies_list);
+    __pyx_r = __pyx_v_buddies_list;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":578
+ *             return buddies_list
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ * 
+ *     def request_add_buddy(self, buddy_username, buddy_alias):
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_AddTraceback("purple.Account.get_buddies_online");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_buddies_list);
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_new_buddy);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":580
+ *             return None
+ * 
+ *     def request_add_buddy(self, buddy_username, buddy_alias):             # <<<<<<<<<<<<<<
+ *         if buddy_alias:
+ *             blist.purple_blist_request_add_buddy(self._get_structure(), \
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_request_add_buddy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account_request_add_buddy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_buddy_username = 0;
+  PyObject *__pyx_v_buddy_alias = 0;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  char *__pyx_3;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_buddy_username,&__pyx_kp_buddy_alias,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_buddy_username);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_buddy_alias);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("request_add_buddy", 1, 2, 2, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "request_add_buddy") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_buddy_username = values[0];
+    __pyx_v_buddy_alias = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_buddy_username = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_buddy_alias = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("request_add_buddy", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Account.request_add_buddy");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":581
+ * 
+ *     def request_add_buddy(self, buddy_username, buddy_alias):
+ *         if buddy_alias:             # <<<<<<<<<<<<<<
+ *             blist.purple_blist_request_add_buddy(self._get_structure(), \
+ *                     buddy_username, NULL, buddy_alias)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_v_buddy_alias); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":583
+ *         if buddy_alias:
+ *             blist.purple_blist_request_add_buddy(self._get_structure(), \
+ *                     buddy_username, NULL, buddy_alias)             # <<<<<<<<<<<<<<
+ *         else:
+ *             blist.purple_blist_request_add_buddy(self._get_structure(), \
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_buddy_username); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_buddy_alias); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_blist_request_add_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2, NULL, __pyx_3);
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":586
+ *         else:
+ *             blist.purple_blist_request_add_buddy(self._get_structure(), \
+ *                     buddy_username, NULL, NULL)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_active_status(self, type, msg=None):
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_buddy_username); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_blist_request_add_buddy(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2, NULL, NULL);
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("purple.Account.request_add_buddy");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":588
+ *                     buddy_username, NULL, NULL)
+ * 
+ *     def set_active_status(self, type, msg=None):             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_active_status(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account_set_active_status(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_type = 0;
+  PyObject *__pyx_v_msg = 0;
+  PurpleStatusType *__pyx_v_c_statustype;
+  PurpleSavedStatus *__pyx_v_c_savedstatus;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_type,&__pyx_kp_msg,0};
+  __pyx_v_msg = Py_None;
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_type);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "set_active_status") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_type = values[0];
+    if (values[1]) {
+      __pyx_v_msg = values[1];
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_msg = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("set_active_status", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Account.set_active_status");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":589
+ * 
+ *     def set_active_status(self, type, msg=None):
+ *         cdef status.PurpleStatusType *c_statustype = NULL             # <<<<<<<<<<<<<<
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ * 
+ */
+  __pyx_v_c_statustype = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":590
+ *     def set_active_status(self, type, msg=None):
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists:
+ */
+  __pyx_v_c_savedstatus = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":592
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ * 
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             if msg:
+ *                 account.purple_account_set_status(self._get_structure(),
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":593
+ * 
+ *         if self.__exists:
+ *             if msg:             # <<<<<<<<<<<<<<
+ *                 account.purple_account_set_status(self._get_structure(),
+ *                         <char *> type, True, "message", <char *> msg, NULL)
+ */
+    __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_v_msg); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":595
+ *             if msg:
+ *                 account.purple_account_set_status(self._get_structure(),
+ *                         <char *> type, True, "message", <char *> msg, NULL)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 account.purple_account_set_status(self._get_structure(),
+ */
+      __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_msg); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      purple_account_set_status(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), ((char *)__pyx_2), 1, __pyx_k_454, ((char *)__pyx_3), NULL);
+      goto __pyx_L7;
+    }
+    /*else*/ {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":598
+ *             else:
+ *                 account.purple_account_set_status(self._get_structure(),
+ *                         <char *> type, True, NULL)             # <<<<<<<<<<<<<<
+ * 
+ *             # FIXME: We can create only a savedstatus for each statustype
+ */
+      __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      purple_account_set_status(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), ((char *)__pyx_2), 1, NULL);
+    }
+    __pyx_L7:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":601
+ * 
+ *             # FIXME: We can create only a savedstatus for each statustype
+ *             c_savedstatus = savedstatuses.purple_savedstatus_find(type)             # <<<<<<<<<<<<<<
+ *             if c_savedstatus == NULL:
+ *                 c_statustype = account.purple_account_get_status_type( \
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_savedstatus = purple_savedstatus_find(__pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":602
+ *             # FIXME: We can create only a savedstatus for each statustype
+ *             c_savedstatus = savedstatuses.purple_savedstatus_find(type)
+ *             if c_savedstatus == NULL:             # <<<<<<<<<<<<<<
+ *                 c_statustype = account.purple_account_get_status_type( \
+ *                         self._get_structure(), type)
+ */
+    __pyx_1 = (__pyx_v_c_savedstatus == NULL);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":604
+ *             if c_savedstatus == NULL:
+ *                 c_statustype = account.purple_account_get_status_type( \
+ *                         self._get_structure(), type)             # <<<<<<<<<<<<<<
+ *                 c_savedstatus = savedstatuses.purple_savedstatus_new( \
+ *                         NULL, status.purple_status_type_get_primitive( \
+ */
+      __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_c_statustype = purple_account_get_status_type(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_2);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":607
+ *                 c_savedstatus = savedstatuses.purple_savedstatus_new( \
+ *                         NULL, status.purple_status_type_get_primitive( \
+ *                                 c_statustype))             # <<<<<<<<<<<<<<
+ *                 savedstatuses.purple_savedstatus_set_title(c_savedstatus,
+ *                         type)
+ */
+      __pyx_v_c_savedstatus = purple_savedstatus_new(NULL, purple_status_type_get_primitive(__pyx_v_c_statustype));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":609
+ *                                 c_statustype))
+ *                 savedstatuses.purple_savedstatus_set_title(c_savedstatus,
+ *                         type)             # <<<<<<<<<<<<<<
+ * 
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)
+ */
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      purple_savedstatus_set_title(__pyx_v_c_savedstatus, __pyx_3);
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":611
+ *                         type)
+ * 
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)             # <<<<<<<<<<<<<<
+ *             prefs.purple_prefs_set_int("/purple/savedstatus/idleaway",
+ *                     savedstatuses.purple_savedstatus_get_creation_time(c_savedstatus))
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_msg); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_savedstatus_set_message(__pyx_v_c_savedstatus, __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":613
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)
+ *             prefs.purple_prefs_set_int("/purple/savedstatus/idleaway",
+ *                     savedstatuses.purple_savedstatus_get_creation_time(c_savedstatus))             # <<<<<<<<<<<<<<
+ * 
+ *             return True
+ */
+    purple_prefs_set_int(__pyx_k_455, purple_savedstatus_get_creation_time(__pyx_v_c_savedstatus));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":615
+ *                     savedstatuses.purple_savedstatus_get_creation_time(c_savedstatus))
+ * 
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":617
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_status_message(self, type, msg):
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.set_active_status");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":619
+ *             return False
+ * 
+ *     def set_status_message(self, type, msg):             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_7Account_set_status_message(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_6purple_7Account_set_status_message(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_type = 0;
+  PyObject *__pyx_v_msg = 0;
+  PurpleStatus *__pyx_v_c_status;
+  PurpleStatusType *__pyx_v_c_statustype;
+  PurpleSavedStatus *__pyx_v_c_savedstatus;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_type,&__pyx_kp_msg,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_type);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_msg);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("set_status_message", 1, 2, 2, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "set_status_message") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_type = values[0];
+    __pyx_v_msg = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_msg = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("set_status_message", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Account.set_status_message");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":620
+ * 
+ *     def set_status_message(self, type, msg):
+ *         cdef status.PurpleStatus* c_status = NULL             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ */
+  __pyx_v_c_status = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":621
+ *     def set_status_message(self, type, msg):
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL             # <<<<<<<<<<<<<<
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ * 
+ */
+  __pyx_v_c_statustype = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":622
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef status.PurpleStatusType *c_statustype = NULL
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if self.__exists and msg:
+ */
+  __pyx_v_c_savedstatus = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":624
+ *         cdef savedstatuses.PurpleSavedStatus *c_savedstatus = NULL
+ * 
+ *         if self.__exists and msg:             # <<<<<<<<<<<<<<
+ *             c_status = account.purple_account_get_status(self._get_structure(),
+ *                     type)
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__exists); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_2;
+  if (__pyx_1) {
+    __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_v_msg); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __pyx_2;
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":626
+ *         if self.__exists and msg:
+ *             c_status = account.purple_account_get_status(self._get_structure(),
+ *                     type)             # <<<<<<<<<<<<<<
+ *             if c_status == NULL:
+ *                 return False
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_status = purple_account_get_status(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":627
+ *             c_status = account.purple_account_get_status(self._get_structure(),
+ *                     type)
+ *             if c_status == NULL:             # <<<<<<<<<<<<<<
+ *                 return False
+ *             status.purple_status_set_attr_string(c_status, "message", msg)
+ */
+    __pyx_2 = (__pyx_v_c_status == NULL);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":628
+ *                     type)
+ *             if c_status == NULL:
+ *                 return False             # <<<<<<<<<<<<<<
+ *             status.purple_status_set_attr_string(c_status, "message", msg)
+ * 
+ */
+      __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_r = __pyx_4;
+      __pyx_4 = 0;
+      goto __pyx_L0;
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":629
+ *             if c_status == NULL:
+ *                 return False
+ *             status.purple_status_set_attr_string(c_status, "message", msg)             # <<<<<<<<<<<<<<
+ * 
+ *             # FIXME: We can create only a savedstatus for each statustype
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_msg); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_status_set_attr_string(__pyx_v_c_status, __pyx_k_456, __pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":632
+ * 
+ *             # FIXME: We can create only a savedstatus for each statustype
+ *             c_savedstatus = savedstatuses.purple_savedstatus_find(type)             # <<<<<<<<<<<<<<
+ *             if c_savedstatus == NULL:
+ *                 c_statustype = account.purple_account_get_status_type( \
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_savedstatus = purple_savedstatus_find(__pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":633
+ *             # FIXME: We can create only a savedstatus for each statustype
+ *             c_savedstatus = savedstatuses.purple_savedstatus_find(type)
+ *             if c_savedstatus == NULL:             # <<<<<<<<<<<<<<
+ *                 c_statustype = account.purple_account_get_status_type( \
+ *                         self._get_structure(), type)
+ */
+    __pyx_1 = (__pyx_v_c_savedstatus == NULL);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":635
+ *             if c_savedstatus == NULL:
+ *                 c_statustype = account.purple_account_get_status_type( \
+ *                         self._get_structure(), type)             # <<<<<<<<<<<<<<
+ *                 c_savedstatus = savedstatuses.purple_savedstatus_new( \
+ *                         NULL, status.purple_status_type_get_primitive( \
+ */
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_c_statustype = purple_account_get_status_type(((struct __pyx_vtabstruct_6purple_Account *)((struct __pyx_obj_6purple_Account *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Account *)__pyx_v_self)), __pyx_3);
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":638
+ *                 c_savedstatus = savedstatuses.purple_savedstatus_new( \
+ *                         NULL, status.purple_status_type_get_primitive( \
+ *                                 c_statustype))             # <<<<<<<<<<<<<<
+ *                 savedstatuses.purple_savedstatus_set_title(c_savedstatus,
+ *                         type)
+ */
+      __pyx_v_c_savedstatus = purple_savedstatus_new(NULL, purple_status_type_get_primitive(__pyx_v_c_statustype));
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":640
+ *                                 c_statustype))
+ *                 savedstatuses.purple_savedstatus_set_title(c_savedstatus,
+ *                         type)             # <<<<<<<<<<<<<<
+ * 
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)
+ */
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_type); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      purple_savedstatus_set_title(__pyx_v_c_savedstatus, __pyx_3);
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":642
+ *                         type)
+ * 
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_msg); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_savedstatus_set_message(__pyx_v_c_savedstatus, __pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":643
+ * 
+ *             savedstatuses.purple_savedstatus_set_message(c_savedstatus, msg)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":645
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Account.set_status_message");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":33
+ *     cdef object __exists
+ * 
+ *     def __init__(self, name, account):             # <<<<<<<<<<<<<<
+ *         self.__name = name
+ *         self.__account = account
+ */
+
+static int __pyx_pf_6purple_5Buddy___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_5Buddy___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  PyObject *__pyx_v_account = 0;
+  int __pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_name,&__pyx_kp_account,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_name);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_account);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_name = values[0];
+    __pyx_v_account = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_name = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_account = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Buddy.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":34
+ * 
+ *     def __init__(self, name, account):
+ *         self.__name = name             # <<<<<<<<<<<<<<
+ *         self.__account = account
+ * 
+ */
+  Py_INCREF(__pyx_v_name);
+  Py_DECREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__name);
+  ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__name = __pyx_v_name;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":35
+ *     def __init__(self, name, account):
+ *         self.__name = name
+ *         self.__account = account             # <<<<<<<<<<<<<<
+ * 
+ *         if self._get_structure() != NULL:
+ */
+  Py_INCREF(__pyx_v_account);
+  Py_DECREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__account);
+  ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__account = __pyx_v_account;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":37
+ *         self.__account = account
+ * 
+ *         if self._get_structure() != NULL:             # <<<<<<<<<<<<<<
+ *             self.__exists = True
+ *         else:
+ */
+  __pyx_1 = (((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":38
+ * 
+ *         if self._get_structure() != NULL:
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.__exists = False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":40
+ *             self.__exists = True
+ *         else:
+ *             self.__exists = False             # <<<<<<<<<<<<<<
+ * 
+ *     cdef blist.PurpleBuddy *_get_structure(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":42
+ *             self.__exists = False
+ * 
+ *     cdef blist.PurpleBuddy *_get_structure(self):             # <<<<<<<<<<<<<<
+ *         return blist.purple_find_buddy(account.purple_accounts_find( \
+ *                 self.__account.username, self.__account.protocol.id), \
+ */
+
+static  PurpleBuddy *__pyx_f_6purple_5Buddy__get_structure(struct __pyx_obj_6purple_Buddy *__pyx_v_self) {
+  PurpleBuddy *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+  char *__pyx_4;
+  char *__pyx_5;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":44
+ *     cdef blist.PurpleBuddy *_get_structure(self):
+ *         return blist.purple_find_buddy(account.purple_accounts_find( \
+ *                 self.__account.username, self.__account.protocol.id), \             # <<<<<<<<<<<<<<
+ *                 self.__name)
+ * 
+ */
+  __pyx_1 = PyObject_GetAttr(__pyx_v_self->__account, __pyx_kp_username); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_PyBytes_AsString(__pyx_1); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyObject_GetAttr(__pyx_v_self->__account, __pyx_kp_protocol); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_id); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyBytes_AsString(__pyx_3); if (unlikely((!__pyx_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":45
+ *         return blist.purple_find_buddy(account.purple_accounts_find( \
+ *                 self.__account.username, self.__account.protocol.id), \
+ *                 self.__name)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_exists(self):
+ */
+  __pyx_5 = __Pyx_PyBytes_AsString(__pyx_v_self->__name); if (unlikely((!__pyx_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = purple_find_buddy(purple_accounts_find(__pyx_2, __pyx_4), __pyx_5);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.Buddy._get_structure");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":47
+ *                 self.__name)
+ * 
+ *     def __get_exists(self):             # <<<<<<<<<<<<<<
+ *         return self.__exists
+ *     exists = property(__get_exists)
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_exists(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_exists(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":48
+ * 
+ *     def __get_exists(self):
+ *         return self.__exists             # <<<<<<<<<<<<<<
+ *     exists = property(__get_exists)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists);
+  __pyx_r = ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":51
+ *     exists = property(__get_exists)
+ * 
+ *     def __get_name(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return <char *> blist.purple_buddy_get_name(self._get_structure())
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_name(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_name(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":52
+ * 
+ *     def __get_name(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return <char *> blist.purple_buddy_get_name(self._get_structure())
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":53
+ *     def __get_name(self):
+ *         if self.__exists:
+ *             return <char *> blist.purple_buddy_get_name(self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return self.__name
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)purple_buddy_get_name(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":55
+ *             return <char *> blist.purple_buddy_get_name(self._get_structure())
+ *         else:
+ *             return self.__name             # <<<<<<<<<<<<<<
+ *     name = property(__get_name)
+ * 
+ */
+    Py_INCREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__name);
+    __pyx_r = ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__name;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_name");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":58
+ *     name = property(__get_name)
+ * 
+ *     def __get_account(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return self.__account
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_account(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_account(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":59
+ * 
+ *     def __get_account(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return self.__account
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":60
+ *     def __get_account(self):
+ *         if self.__exists:
+ *             return self.__account             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    Py_INCREF(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__account);
+    __pyx_r = ((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__account;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":62
+ *             return self.__account
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     account = property(__get_account)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("purple.Buddy.__get_account");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":65
+ *     account = property(__get_account)
+ * 
+ *     def __get_alias(self):             # <<<<<<<<<<<<<<
+ *         cdef char *c_alias = NULL
+ *         c_alias = <char *> blist.purple_buddy_get_alias_only( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_alias(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_alias(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":66
+ * 
+ *     def __get_alias(self):
+ *         cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ *         c_alias = <char *> blist.purple_buddy_get_alias_only( \
+ *                 self._get_structure())
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":68
+ *         cdef char *c_alias = NULL
+ *         c_alias = <char *> blist.purple_buddy_get_alias_only( \
+ *                 self._get_structure())             # <<<<<<<<<<<<<<
+ *         if c_alias:
+ *             return unicode(c_alias, 'utf-8')
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":69
+ *         c_alias = <char *> blist.purple_buddy_get_alias_only( \
+ *                 self._get_structure())
+ *         if c_alias:             # <<<<<<<<<<<<<<
+ *             return unicode(c_alias, 'utf-8')
+ *         else:
+ */
+  __pyx_1 = (__pyx_v_c_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":70
+ *                 self._get_structure())
+ *         if c_alias:
+ *             return unicode(c_alias, 'utf-8')             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+    Py_INCREF(__pyx_kp_457);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_kp_457);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyUnicode_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":72
+ *             return unicode(c_alias, 'utf-8')
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     alias = property(__get_alias)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Buddy.__get_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":75
+ *     alias = property(__get_alias)
+ * 
+ *     def __get_group(self):             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists:
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_group(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_group(PyObject *__pyx_v_self, PyObject *unused) {
+  PurpleGroup *__pyx_v_c_group;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":76
+ * 
+ *     def __get_group(self):
+ *         cdef blist.PurpleGroup *c_group = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             c_group = blist.purple_buddy_get_group(self._get_structure())
+ */
+  __pyx_v_c_group = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":77
+ *     def __get_group(self):
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             c_group = blist.purple_buddy_get_group(self._get_structure())
+ *             return <char *> blist.purple_group_get_name(c_group)
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":78
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists:
+ *             c_group = blist.purple_buddy_get_group(self._get_structure())             # <<<<<<<<<<<<<<
+ *             return <char *> blist.purple_group_get_name(c_group)
+ *         else:
+ */
+    __pyx_v_c_group = purple_buddy_get_group(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":79
+ *         if self.__exists:
+ *             c_group = blist.purple_buddy_get_group(self._get_structure())
+ *             return <char *> blist.purple_group_get_name(c_group)             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)purple_group_get_name(__pyx_v_c_group))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":81
+ *             return <char *> blist.purple_group_get_name(c_group)
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     group = property(__get_group)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_group");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":84
+ *     group = property(__get_group)
+ * 
+ *     def __get_server_alias(self):             # <<<<<<<<<<<<<<
+ *         cdef char *c_server_alias = NULL
+ *         c_server_alias = <char *> blist.purple_buddy_get_server_alias( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_server_alias(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_server_alias(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_c_server_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":85
+ * 
+ *     def __get_server_alias(self):
+ *         cdef char *c_server_alias = NULL             # <<<<<<<<<<<<<<
+ *         c_server_alias = <char *> blist.purple_buddy_get_server_alias( \
+ *                 self._get_structure())
+ */
+  __pyx_v_c_server_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":87
+ *         cdef char *c_server_alias = NULL
+ *         c_server_alias = <char *> blist.purple_buddy_get_server_alias( \
+ *                 self._get_structure())             # <<<<<<<<<<<<<<
+ *         if c_server_alias:
+ *             return c_server_alias
+ */
+  __pyx_v_c_server_alias = ((char *)purple_buddy_get_server_alias(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":88
+ *         c_server_alias = <char *> blist.purple_buddy_get_server_alias( \
+ *                 self._get_structure())
+ *         if c_server_alias:             # <<<<<<<<<<<<<<
+ *             return c_server_alias
+ *         else:
+ */
+  __pyx_1 = (__pyx_v_c_server_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":89
+ *                 self._get_structure())
+ *         if c_server_alias:
+ *             return c_server_alias             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_server_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":91
+ *             return c_server_alias
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     server_alias = property(__get_server_alias)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_server_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":94
+ *     server_alias = property(__get_server_alias)
+ * 
+ *     def __get_contact_alias(self):             # <<<<<<<<<<<<<<
+ *         cdef char *c_contact_alias = NULL
+ *         c_contact_alias = <char *> blist.purple_buddy_get_contact_alias( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_contact_alias(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_contact_alias(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_c_contact_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":95
+ * 
+ *     def __get_contact_alias(self):
+ *         cdef char *c_contact_alias = NULL             # <<<<<<<<<<<<<<
+ *         c_contact_alias = <char *> blist.purple_buddy_get_contact_alias( \
+ *                 self._get_structure())
+ */
+  __pyx_v_c_contact_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":97
+ *         cdef char *c_contact_alias = NULL
+ *         c_contact_alias = <char *> blist.purple_buddy_get_contact_alias( \
+ *                 self._get_structure())             # <<<<<<<<<<<<<<
+ *         if c_contact_alias:
+ *             return c_contact_alias
+ */
+  __pyx_v_c_contact_alias = ((char *)purple_buddy_get_contact_alias(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":98
+ *         c_contact_alias = <char *> blist.purple_buddy_get_contact_alias( \
+ *                 self._get_structure())
+ *         if c_contact_alias:             # <<<<<<<<<<<<<<
+ *             return c_contact_alias
+ *         else:
+ */
+  __pyx_1 = (__pyx_v_c_contact_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":99
+ *                 self._get_structure())
+ *         if c_contact_alias:
+ *             return c_contact_alias             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_contact_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":101
+ *             return c_contact_alias
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     contact_alias = property(__get_contact_alias)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_contact_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":104
+ *     contact_alias = property(__get_contact_alias)
+ * 
+ *     def __get_local_alias(self):             # <<<<<<<<<<<<<<
+ *         cdef char *c_local_alias = NULL
+ *         c_local_alias = <char *> blist.purple_buddy_get_local_alias( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_local_alias(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_local_alias(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_c_local_alias;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":105
+ * 
+ *     def __get_local_alias(self):
+ *         cdef char *c_local_alias = NULL             # <<<<<<<<<<<<<<
+ *         c_local_alias = <char *> blist.purple_buddy_get_local_alias( \
+ *                 self._get_structure())
+ */
+  __pyx_v_c_local_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":107
+ *         cdef char *c_local_alias = NULL
+ *         c_local_alias = <char *> blist.purple_buddy_get_local_alias( \
+ *                 self._get_structure())             # <<<<<<<<<<<<<<
+ *         if c_local_alias:
+ *             return c_local_alias
+ */
+  __pyx_v_c_local_alias = ((char *)purple_buddy_get_local_alias(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":108
+ *         c_local_alias = <char *> blist.purple_buddy_get_local_alias( \
+ *                 self._get_structure())
+ *         if c_local_alias:             # <<<<<<<<<<<<<<
+ *             return c_local_alias
+ *         else:
+ */
+  __pyx_1 = (__pyx_v_c_local_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":109
+ *                 self._get_structure())
+ *         if c_local_alias:
+ *             return c_local_alias             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_local_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":111
+ *             return c_local_alias
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     local_alias = property(__get_local_alias)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_local_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":114
+ *     local_alias = property(__get_local_alias)
+ * 
+ *     def __get_available(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return status.purple_presence_is_available( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_available(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_available(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":115
+ * 
+ *     def __get_available(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return status.purple_presence_is_available( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":117
+ *         if self.__exists:
+ *             return status.purple_presence_is_available( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_presence_is_available(purple_buddy_get_presence(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":119
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     available = property(__get_available)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_available");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":122
+ *     available = property(__get_available)
+ * 
+ *     def __get_online(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return status.purple_presence_is_online( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_online(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_online(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":123
+ * 
+ *     def __get_online(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return status.purple_presence_is_online( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":125
+ *         if self.__exists:
+ *             return status.purple_presence_is_online( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_presence_is_online(purple_buddy_get_presence(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":127
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     online = property(__get_online)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_online");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":130
+ *     online = property(__get_online)
+ * 
+ *     def __get_idle(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return status.purple_presence_is_idle( \
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_idle(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_idle(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":131
+ * 
+ *     def __get_idle(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return status.purple_presence_is_idle( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":133
+ *         if self.__exists:
+ *             return status.purple_presence_is_idle( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = PyInt_FromLong(purple_presence_is_idle(purple_buddy_get_presence(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":135
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     idle = property(__get_idle)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_idle");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":138
+ *     idle = property(__get_idle)
+ * 
+ *     def __get_active_status(self):             # <<<<<<<<<<<<<<
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy___get_active_status(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy___get_active_status(PyObject *__pyx_v_self, PyObject *unused) {
+  PurpleStatus *__pyx_v_c_status;
+  char *__pyx_v_type;
+  char *__pyx_v_name;
+  char *__pyx_v_msg;
+  PyObject *__pyx_v_active;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  __pyx_v_active = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":139
+ * 
+ *     def __get_active_status(self):
+ *         cdef status.PurpleStatus* c_status = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL
+ */
+  __pyx_v_c_status = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":140
+ *     def __get_active_status(self):
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL
+ */
+  __pyx_v_type = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":141
+ *         cdef status.PurpleStatus* c_status = NULL
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL             # <<<<<<<<<<<<<<
+ *         cdef char *msg = NULL
+ *         if self.__exists:
+ */
+  __pyx_v_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":142
+ *         cdef char *type = NULL
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             active = {}
+ */
+  __pyx_v_msg = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":143
+ *         cdef char *name = NULL
+ *         cdef char *msg = NULL
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             active = {}
+ *             c_status = status.purple_presence_get_active_status( \
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":144
+ *         cdef char *msg = NULL
+ *         if self.__exists:
+ *             active = {}             # <<<<<<<<<<<<<<
+ *             c_status = status.purple_presence_get_active_status( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ */
+    __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_active);
+    __pyx_v_active = ((PyObject *)__pyx_2);
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":146
+ *             active = {}
+ *             c_status = status.purple_presence_get_active_status( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))             # <<<<<<<<<<<<<<
+ *             type = <char *> status.purple_status_get_id(c_status)
+ *             name = <char *> status.purple_status_get_name(c_status)
+ */
+    __pyx_v_c_status = purple_presence_get_active_status(purple_buddy_get_presence(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self))));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":147
+ *             c_status = status.purple_presence_get_active_status( \
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ *             type = <char *> status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
+ *             name = <char *> status.purple_status_get_name(c_status)
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ */
+    __pyx_v_type = ((char *)purple_status_get_id(__pyx_v_c_status));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":148
+ *                     blist.purple_buddy_get_presence(self._get_structure()))
+ *             type = <char *> status.purple_status_get_id(c_status)
+ *             name = <char *> status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ *                 "message")
+ */
+    __pyx_v_name = ((char *)purple_status_get_name(__pyx_v_c_status));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":150
+ *             name = <char *> status.purple_status_get_name(c_status)
+ *             msg = <char *> status.purple_status_get_attr_string(c_status,
+ *                 "message")             # <<<<<<<<<<<<<<
+ * 
+ *             active['type'] = type
+ */
+    __pyx_v_msg = ((char *)purple_status_get_attr_string(__pyx_v_c_status, __pyx_k_458));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":152
+ *                 "message")
+ * 
+ *             active['type'] = type             # <<<<<<<<<<<<<<
+ *             active['name'] = name
+ *             if msg:
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetItem(__pyx_v_active, __pyx_kp_459, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":153
+ * 
+ *             active['type'] = type
+ *             active['name'] = name             # <<<<<<<<<<<<<<
+ *             if msg:
+ *                 active['message'] = msg
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetItem(__pyx_v_active, __pyx_kp_460, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":154
+ *             active['type'] = type
+ *             active['name'] = name
+ *             if msg:             # <<<<<<<<<<<<<<
+ *                 active['message'] = msg
+ * 
+ */
+    __pyx_1 = (__pyx_v_msg != 0);
+    if (__pyx_1) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":155
+ *             active['name'] = name
+ *             if msg:
+ *                 active['message'] = msg             # <<<<<<<<<<<<<<
+ * 
+ *             return active
+ */
+      __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_msg); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (PyObject_SetItem(__pyx_v_active, __pyx_kp_461, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L6;
+    }
+    __pyx_L6:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":157
+ *                 active['message'] = msg
+ * 
+ *             return active             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    Py_INCREF(__pyx_v_active);
+    __pyx_r = __pyx_v_active;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":159
+ *             return active
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     active_status = property(__get_active_status)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Buddy.__get_active_status");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_active);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":162
+ *     active_status = property(__get_active_status)
+ * 
+ *     def set_alias(self, alias):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             blist.purple_blist_alias_buddy(self._get_structure(), alias)
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy_set_alias(PyObject *__pyx_v_self, PyObject *__pyx_v_alias); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy_set_alias(PyObject *__pyx_v_self, PyObject *__pyx_v_alias) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":163
+ * 
+ *     def set_alias(self, alias):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             blist.purple_blist_alias_buddy(self._get_structure(), alias)
+ *             return True
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":164
+ *     def set_alias(self, alias):
+ *         if self.__exists:
+ *             blist.purple_blist_alias_buddy(self._get_structure(), alias)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_alias); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_blist_alias_buddy(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)), __pyx_2);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":165
+ *         if self.__exists:
+ *             blist.purple_blist_alias_buddy(self._get_structure(), alias)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":167
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_group(self, group):
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  __Pyx_AddTraceback("purple.Buddy.set_alias");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":169
+ *             return False
+ * 
+ *     def set_group(self, group):             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleContact *c_contact = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL
+ */
+
+static PyObject *__pyx_pf_6purple_5Buddy_set_group(PyObject *__pyx_v_self, PyObject *__pyx_v_group); /*proto*/
+static PyObject *__pyx_pf_6purple_5Buddy_set_group(PyObject *__pyx_v_self, PyObject *__pyx_v_group) {
+  PurpleContact *__pyx_v_c_contact;
+  PurpleGroup *__pyx_v_c_group;
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  char *__pyx_3;
+  PyObject *__pyx_4 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":170
+ * 
+ *     def set_group(self, group):
+ *         cdef blist.PurpleContact *c_contact = NULL             # <<<<<<<<<<<<<<
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists and group:
+ */
+  __pyx_v_c_contact = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":171
+ *     def set_group(self, group):
+ *         cdef blist.PurpleContact *c_contact = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL             # <<<<<<<<<<<<<<
+ *         if self.__exists and group:
+ *             c_group = blist.purple_find_group(group)
+ */
+  __pyx_v_c_group = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":172
+ *         cdef blist.PurpleContact *c_contact = NULL
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists and group:             # <<<<<<<<<<<<<<
+ *             c_group = blist.purple_find_group(group)
+ *             if c_group == NULL:
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__exists); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_2;
+  if (__pyx_1) {
+    __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_v_group); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __pyx_2;
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":173
+ *         cdef blist.PurpleGroup *c_group = NULL
+ *         if self.__exists and group:
+ *             c_group = blist.purple_find_group(group)             # <<<<<<<<<<<<<<
+ *             if c_group == NULL:
+ *                 c_group = blist.purple_group_new(group)
+ */
+    __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_group); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_group = purple_find_group(__pyx_3);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":174
+ *         if self.__exists and group:
+ *             c_group = blist.purple_find_group(group)
+ *             if c_group == NULL:             # <<<<<<<<<<<<<<
+ *                 c_group = blist.purple_group_new(group)
+ * 
+ */
+    __pyx_2 = (__pyx_v_c_group == NULL);
+    if (__pyx_2) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":175
+ *             c_group = blist.purple_find_group(group)
+ *             if c_group == NULL:
+ *                 c_group = blist.purple_group_new(group)             # <<<<<<<<<<<<<<
+ * 
+ *             c_contact = blist.purple_buddy_get_contact(self._get_structure())
+ */
+      __pyx_3 = __Pyx_PyBytes_AsString(__pyx_v_group); if (unlikely((!__pyx_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_c_group = purple_group_new(__pyx_3);
+      goto __pyx_L6;
+    }
+    __pyx_L6:;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":177
+ *                 c_group = blist.purple_group_new(group)
+ * 
+ *             c_contact = blist.purple_buddy_get_contact(self._get_structure())             # <<<<<<<<<<<<<<
+ *             blist.purple_blist_add_contact(c_contact, c_group, NULL)
+ *             return True
+ */
+    __pyx_v_c_contact = purple_buddy_get_contact(((struct __pyx_vtabstruct_6purple_Buddy *)((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Buddy *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":178
+ * 
+ *             c_contact = blist.purple_buddy_get_contact(self._get_structure())
+ *             blist.purple_blist_add_contact(c_contact, c_group, NULL)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    purple_blist_add_contact(__pyx_v_c_contact, __pyx_v_c_group, NULL);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":179
+ *             c_contact = blist.purple_buddy_get_contact(self._get_structure())
+ *             blist.purple_blist_add_contact(c_contact, c_group, NULL)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":181
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Buddy.set_group");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":35
+ *     cdef object __exists
+ * 
+ *     def __init__(self, type, account, name):             # <<<<<<<<<<<<<<
+ *         self.__type = {
+ *             "UNKNOWN": conversation.PURPLE_CONV_TYPE_UNKNOWN,
+ */
+
+static int __pyx_pf_6purple_12Conversation___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6purple_12Conversation___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_type = 0;
+  PyObject *__pyx_v_account = 0;
+  PyObject *__pyx_v_name = 0;
+  int __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_type,&__pyx_kp_account,&__pyx_kp_name,0};
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[3] = {0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_type);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_account);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  2:
+      values[2] = PyDict_GetItem(__pyx_kwds, __pyx_kp_name);
+      if (likely(values[2])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_type = values[0];
+    __pyx_v_account = values[1];
+    __pyx_v_name = values[2];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_account = PyTuple_GET_ITEM(__pyx_args, 1);
+    __pyx_v_name = PyTuple_GET_ITEM(__pyx_args, 2);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("purple.Conversation.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":41
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]             # <<<<<<<<<<<<<<
+ *         self.__account = account
+ *         self.__name = name
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":37
+ *     def __init__(self, type, account, name):
+ *         self.__type = {
+ *             "UNKNOWN": conversation.PURPLE_CONV_TYPE_UNKNOWN,             # <<<<<<<<<<<<<<
+ *             "IM": conversation.PURPLE_CONV_TYPE_IM,
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_CONV_TYPE_UNKNOWN); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_462, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":38
+ *         self.__type = {
+ *             "UNKNOWN": conversation.PURPLE_CONV_TYPE_UNKNOWN,
+ *             "IM": conversation.PURPLE_CONV_TYPE_IM,             # <<<<<<<<<<<<<<
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_CONV_TYPE_IM); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_463, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":39
+ *             "UNKNOWN": conversation.PURPLE_CONV_TYPE_UNKNOWN,
+ *             "IM": conversation.PURPLE_CONV_TYPE_IM,
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,             # <<<<<<<<<<<<<<
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_CONV_TYPE_CHAT); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_464, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":40
+ *             "IM": conversation.PURPLE_CONV_TYPE_IM,
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,             # <<<<<<<<<<<<<<
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]
+ *         self.__account = account
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_CONV_TYPE_MISC); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_465, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":41
+ *             "CHAT": conversation.PURPLE_CONV_TYPE_CHAT,
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]             # <<<<<<<<<<<<<<
+ *         self.__account = account
+ *         self.__name = name
+ */
+  __pyx_2 = PyInt_FromLong(PURPLE_CONV_TYPE_ANY); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_466, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyObject_GetItem(((PyObject *)__pyx_1), __pyx_v_type); if (!__pyx_2) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":36
+ * 
+ *     def __init__(self, type, account, name):
+ *         self.__type = {             # <<<<<<<<<<<<<<
+ *             "UNKNOWN": conversation.PURPLE_CONV_TYPE_UNKNOWN,
+ *             "IM": conversation.PURPLE_CONV_TYPE_IM,
+ */
+  Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__type);
+  ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__type = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":42
+ *             "MISC": conversation.PURPLE_CONV_TYPE_MISC,
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]
+ *         self.__account = account             # <<<<<<<<<<<<<<
+ *         self.__name = name
+ * 
+ */
+  Py_INCREF(__pyx_v_account);
+  Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account);
+  ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account = __pyx_v_account;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":43
+ *             "ANY": conversation.PURPLE_CONV_TYPE_ANY }[type]
+ *         self.__account = account
+ *         self.__name = name             # <<<<<<<<<<<<<<
+ * 
+ *         if self._get_structure() != NULL:
+ */
+  Py_INCREF(__pyx_v_name);
+  Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__name);
+  ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__name = __pyx_v_name;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":45
+ *         self.__name = name
+ * 
+ *         if self._get_structure() != NULL:             # <<<<<<<<<<<<<<
+ *             self.__exists = True
+ *         else:
+ */
+  __pyx_3 = (((struct __pyx_vtabstruct_6purple_Conversation *)((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)) != NULL);
+  if (__pyx_3) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":46
+ * 
+ *         if self._get_structure() != NULL:
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.__exists = False
+ */
+    __pyx_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":48
+ *             self.__exists = True
+ *         else:
+ *             self.__exists = False             # <<<<<<<<<<<<<<
+ * 
+ *     cdef conversation.PurpleConversation *_get_structure(self):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Conversation.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":50
+ *             self.__exists = False
+ * 
+ *     cdef conversation.PurpleConversation *_get_structure(self):             # <<<<<<<<<<<<<<
+ *         return conversation.purple_find_conversation_with_account( \
+ *             self.__type, self.__name, account.purple_accounts_find( \
+ */
+
+static  PurpleConversation *__pyx_f_6purple_12Conversation__get_structure(struct __pyx_obj_6purple_Conversation *__pyx_v_self) {
+  PurpleConversation *__pyx_r;
+  PurpleConversationType __pyx_1;
+  char *__pyx_2;
+  PyObject *__pyx_3 = 0;
+  char *__pyx_4;
+  PyObject *__pyx_5 = 0;
+  char *__pyx_6;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":52
+ *     cdef conversation.PurpleConversation *_get_structure(self):
+ *         return conversation.purple_find_conversation_with_account( \
+ *             self.__type, self.__name, account.purple_accounts_find( \             # <<<<<<<<<<<<<<
+ *             self.__account.username, self.__account.protocol.id))
+ * 
+ */
+  __pyx_1 = ((PurpleConversationType)PyInt_AsLong(__pyx_v_self->__type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_PyBytes_AsString(__pyx_v_self->__name); if (unlikely((!__pyx_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":53
+ *         return conversation.purple_find_conversation_with_account( \
+ *             self.__type, self.__name, account.purple_accounts_find( \
+ *             self.__account.username, self.__account.protocol.id))             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_exists(self):
+ */
+  __pyx_3 = PyObject_GetAttr(__pyx_v_self->__account, __pyx_kp_username); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_PyBytes_AsString(__pyx_3); if (unlikely((!__pyx_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_3 = PyObject_GetAttr(__pyx_v_self->__account, __pyx_kp_protocol); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_kp_id); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_6 = __Pyx_PyBytes_AsString(__pyx_5); if (unlikely((!__pyx_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  __pyx_r = purple_find_conversation_with_account(__pyx_1, __pyx_2, purple_accounts_find(__pyx_4, __pyx_6));
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.Conversation._get_structure");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":55
+ *             self.__account.username, self.__account.protocol.id))
+ * 
+ *     def __get_exists(self):             # <<<<<<<<<<<<<<
+ *         return self.__exists
+ *     exists = property(__get_exists)
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation___get_exists(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_12Conversation___get_exists(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":56
+ * 
+ *     def __get_exists(self):
+ *         return self.__exists             # <<<<<<<<<<<<<<
+ *     exists = property(__get_exists)
+ * 
+ */
+  Py_INCREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists);
+  __pyx_r = ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":59
+ *     exists = property(__get_exists)
+ * 
+ *     def __get_account(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return self.__account
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation___get_account(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_12Conversation___get_account(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":60
+ * 
+ *     def __get_account(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return self.__account
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":61
+ *     def __get_account(self):
+ *         if self.__exists:
+ *             return self.__account             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    Py_INCREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account);
+    __pyx_r = ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":63
+ *             return self.__account
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     account = property(__get_account)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("purple.Conversation.__get_account");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":66
+ *     account = property(__get_account)
+ * 
+ *     def __get_name(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return <char *> conversation.purple_conversation_get_name( \
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation___get_name(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_12Conversation___get_name(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":67
+ * 
+ *     def __get_name(self):
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return <char *> conversation.purple_conversation_get_name( \
+ *                     self._get_structure())
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":69
+ *         if self.__exists:
+ *             return <char *> conversation.purple_conversation_get_name( \
+ *                     self._get_structure())             # <<<<<<<<<<<<<<
+ *         else:
+ *             return None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)purple_conversation_get_name(((struct __pyx_vtabstruct_6purple_Conversation *)((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self))))); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":71
+ *                     self._get_structure())
+ *         else:
+ *             return None             # <<<<<<<<<<<<<<
+ *     name = property(__get_name)
+ * 
+ */
+    Py_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Conversation.__get_name");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":74
+ *     name = property(__get_name)
+ * 
+ *     def new(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Creates a new conversation.
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation_new(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_12Conversation_new[] = "\n        Creates a new conversation.\n\n        @return True if successful, False if conversation already exists\n        ";
+static PyObject *__pyx_pf_6purple_12Conversation_new(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  char *__pyx_4;
+  PyObject *__pyx_5 = 0;
+  char *__pyx_6;
+  char *__pyx_7;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":80
+ *         @return True if successful, False if conversation already exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             return False
+ *         else:
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":81
+ *         """
+ *         if self.__exists:
+ *             return False             # <<<<<<<<<<<<<<
+ *         else:
+ *             conversation.purple_conversation_new(self.__type, \
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":83
+ *             return False
+ *         else:
+ *             conversation.purple_conversation_new(self.__type, \             # <<<<<<<<<<<<<<
+ *                     account.purple_accounts_find(self.__account.username, \
+ *                     self.__account.protocol.id), self.__name)
+ */
+    __pyx_3 = __pyx_PyInt_int(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__type); if (unlikely((__pyx_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":84
+ *         else:
+ *             conversation.purple_conversation_new(self.__type, \
+ *                     account.purple_accounts_find(self.__account.username, \             # <<<<<<<<<<<<<<
+ *                     self.__account.protocol.id), self.__name)
+ *             self.__exists = True
+ */
+    __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account, __pyx_kp_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = __Pyx_PyBytes_AsString(__pyx_2); if (unlikely((!__pyx_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":85
+ *             conversation.purple_conversation_new(self.__type, \
+ *                     account.purple_accounts_find(self.__account.username, \
+ *                     self.__account.protocol.id), self.__name)             # <<<<<<<<<<<<<<
+ *             self.__exists = True
+ *             return True
+ */
+    __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__account, __pyx_kp_protocol); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_kp_id); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_6 = __Pyx_PyBytes_AsString(__pyx_5); if (unlikely((!__pyx_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+    __pyx_7 = __Pyx_PyBytes_AsString(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__name); if (unlikely((!__pyx_7) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_conversation_new(__pyx_3, purple_accounts_find(__pyx_4, __pyx_6), __pyx_7);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":86
+ *                     account.purple_accounts_find(self.__account.username, \
+ *                     self.__account.protocol.id), self.__name)
+ *             self.__exists = True             # <<<<<<<<<<<<<<
+ *             return True
+ * 
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":87
+ *                     self.__account.protocol.id), self.__name)
+ *             self.__exists = True
+ *             return True             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
+ */
+    __pyx_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_5;
+    __pyx_5 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_5);
+  __Pyx_AddTraceback("purple.Conversation.new");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":89
+ *             return True
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destroys a conversation.
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation_destroy(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_6purple_12Conversation_destroy[] = "\n        Destroys a conversation.\n\n        @return True if successful, False if conversation doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_12Conversation_destroy(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":95
+ *         @return True if successful, False if conversation doesn't exists
+ *         """
+ *         if self.__exists:             # <<<<<<<<<<<<<<
+ *             conversation.purple_conversation_destroy(self._get_structure())
+ *             self.__exists = False
+ */
+  __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":96
+ *         """
+ *         if self.__exists:
+ *             conversation.purple_conversation_destroy(self._get_structure())             # <<<<<<<<<<<<<<
+ *             self.__exists = False
+ *             return True
+ */
+    purple_conversation_destroy(((struct __pyx_vtabstruct_6purple_Conversation *)((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)));
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":97
+ *         if self.__exists:
+ *             conversation.purple_conversation_destroy(self._get_structure())
+ *             self.__exists = False             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists);
+    ((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":98
+ *             conversation.purple_conversation_destroy(self._get_structure())
+ *             self.__exists = False
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":100
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ * 
+ *     def set_ui_ops(self, cbs):
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple.Conversation.destroy");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":102
+ *             return False
+ * 
+ *     def set_ui_ops(self, cbs):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets UI operations for a conversation.
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation_set_ui_ops(PyObject *__pyx_v_self, PyObject *__pyx_v_cbs); /*proto*/
+static char __pyx_doc_6purple_12Conversation_set_ui_ops[] = "\n        Sets UI operations for a conversation.\n\n        @return True if sucessful, False otherwise\n        ";
+static PyObject *__pyx_pf_6purple_12Conversation_set_ui_ops(PyObject *__pyx_v_self, PyObject *__pyx_v_cbs) {
+  PurpleConversationUiOps __pyx_v_c_conv_ui_ops;
+  PyObject *__pyx_r;
+  PyObject *__pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":111
+ *         cdef conversation.PurpleConversationUiOps c_conv_ui_ops
+ * 
+ *         c_conv_ui_ops.create_conversation = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.destroy_conversation = NULL
+ *         c_conv_ui_ops.write_chat = NULL
+ */
+  __pyx_v_c_conv_ui_ops.create_conversation = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":112
+ * 
+ *         c_conv_ui_ops.create_conversation = NULL
+ *         c_conv_ui_ops.destroy_conversation = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_chat = NULL
+ *         c_conv_ui_ops.write_im = NULL
+ */
+  __pyx_v_c_conv_ui_ops.destroy_conversation = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":113
+ *         c_conv_ui_ops.create_conversation = NULL
+ *         c_conv_ui_ops.destroy_conversation = NULL
+ *         c_conv_ui_ops.write_chat = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_im = NULL
+ *         c_conv_ui_ops.write_conv = NULL
+ */
+  __pyx_v_c_conv_ui_ops.write_chat = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":114
+ *         c_conv_ui_ops.destroy_conversation = NULL
+ *         c_conv_ui_ops.write_chat = NULL
+ *         c_conv_ui_ops.write_im = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.write_conv = NULL
+ *         c_conv_ui_ops.chat_add_users = NULL
+ */
+  __pyx_v_c_conv_ui_ops.write_im = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":115
+ *         c_conv_ui_ops.write_chat = NULL
+ *         c_conv_ui_ops.write_im = NULL
+ *         c_conv_ui_ops.write_conv = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_add_users = NULL
+ *         c_conv_ui_ops.chat_rename_user = NULL
+ */
+  __pyx_v_c_conv_ui_ops.write_conv = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":116
+ *         c_conv_ui_ops.write_im = NULL
+ *         c_conv_ui_ops.write_conv = NULL
+ *         c_conv_ui_ops.chat_add_users = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_rename_user = NULL
+ *         c_conv_ui_ops.chat_remove_users = NULL
+ */
+  __pyx_v_c_conv_ui_ops.chat_add_users = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":117
+ *         c_conv_ui_ops.write_conv = NULL
+ *         c_conv_ui_ops.chat_add_users = NULL
+ *         c_conv_ui_ops.chat_rename_user = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_remove_users = NULL
+ *         c_conv_ui_ops.chat_update_user = NULL
+ */
+  __pyx_v_c_conv_ui_ops.chat_rename_user = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":118
+ *         c_conv_ui_ops.chat_add_users = NULL
+ *         c_conv_ui_ops.chat_rename_user = NULL
+ *         c_conv_ui_ops.chat_remove_users = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.chat_update_user = NULL
+ *         c_conv_ui_ops.present = NULL
+ */
+  __pyx_v_c_conv_ui_ops.chat_remove_users = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":119
+ *         c_conv_ui_ops.chat_rename_user = NULL
+ *         c_conv_ui_ops.chat_remove_users = NULL
+ *         c_conv_ui_ops.chat_update_user = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.present = NULL
+ *         c_conv_ui_ops.has_focus = NULL
+ */
+  __pyx_v_c_conv_ui_ops.chat_update_user = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":120
+ *         c_conv_ui_ops.chat_remove_users = NULL
+ *         c_conv_ui_ops.chat_update_user = NULL
+ *         c_conv_ui_ops.present = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.has_focus = NULL
+ *         c_conv_ui_ops.custom_smiley_add = NULL
+ */
+  __pyx_v_c_conv_ui_ops.present = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":121
+ *         c_conv_ui_ops.chat_update_user = NULL
+ *         c_conv_ui_ops.present = NULL
+ *         c_conv_ui_ops.has_focus = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_add = NULL
+ *         c_conv_ui_ops.custom_smiley_write = NULL
+ */
+  __pyx_v_c_conv_ui_ops.has_focus = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":122
+ *         c_conv_ui_ops.present = NULL
+ *         c_conv_ui_ops.has_focus = NULL
+ *         c_conv_ui_ops.custom_smiley_add = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_write = NULL
+ *         c_conv_ui_ops.custom_smiley_close = NULL
+ */
+  __pyx_v_c_conv_ui_ops.custom_smiley_add = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":123
+ *         c_conv_ui_ops.has_focus = NULL
+ *         c_conv_ui_ops.custom_smiley_add = NULL
+ *         c_conv_ui_ops.custom_smiley_write = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.custom_smiley_close = NULL
+ *         c_conv_ui_ops.send_confirm = NULL
+ */
+  __pyx_v_c_conv_ui_ops.custom_smiley_write = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":124
+ *         c_conv_ui_ops.custom_smiley_add = NULL
+ *         c_conv_ui_ops.custom_smiley_write = NULL
+ *         c_conv_ui_ops.custom_smiley_close = NULL             # <<<<<<<<<<<<<<
+ *         c_conv_ui_ops.send_confirm = NULL
+ * 
+ */
+  __pyx_v_c_conv_ui_ops.custom_smiley_close = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":125
+ *         c_conv_ui_ops.custom_smiley_write = NULL
+ *         c_conv_ui_ops.custom_smiley_close = NULL
+ *         c_conv_ui_ops.send_confirm = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         conversation.purple_conversation_set_ui_ops(self._get_structure(), \
+ */
+  __pyx_v_c_conv_ui_ops.send_confirm = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":128
+ * 
+ *         conversation.purple_conversation_set_ui_ops(self._get_structure(), \
+ *                 &c_conv_ui_ops)             # <<<<<<<<<<<<<<
+ *         return True
+ * 
+ */
+  purple_conversation_set_ui_ops(((struct __pyx_vtabstruct_6purple_Conversation *)((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)), (&__pyx_v_c_conv_ui_ops));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":129
+ *         conversation.purple_conversation_set_ui_ops(self._get_structure(), \
+ *                 &c_conv_ui_ops)
+ *         return True             # <<<<<<<<<<<<<<
+ * 
+ *     def im_send(self, message):
+ */
+  __pyx_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_1;
+  __pyx_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  __Pyx_AddTraceback("purple.Conversation.set_ui_ops");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":131
+ *         return True
+ * 
+ *     def im_send(self, message):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sends a message to this IM conversation.
+ */
+
+static PyObject *__pyx_pf_6purple_12Conversation_im_send(PyObject *__pyx_v_self, PyObject *__pyx_v_message); /*proto*/
+static char __pyx_doc_6purple_12Conversation_im_send[] = "\n        Sends a message to this IM conversation.\n\n        @return True if successful, False if conversation is not IM or conversation doesn't exists\n        ";
+static PyObject *__pyx_pf_6purple_12Conversation_im_send(PyObject *__pyx_v_self, PyObject *__pyx_v_message) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  char *__pyx_5;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":137
+ *         @return True if successful, False if conversation is not IM or conversation doesn't exists
+ *         """
+ *         if self.__exists and self.__type == conversation.PURPLE_CONV_TYPE_IM:             # <<<<<<<<<<<<<<
+ *             conversation.purple_conv_im_send( \
+ *                     conversation.purple_conversation_get_im_data( \
+ */
+  __pyx_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__exists); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __pyx_2;
+  if (__pyx_1) {
+    __pyx_3 = PyInt_FromLong(PURPLE_CONV_TYPE_IM); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyObject_RichCompare(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__type, __pyx_3, Py_EQ); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+  }
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":140
+ *             conversation.purple_conv_im_send( \
+ *                     conversation.purple_conversation_get_im_data( \
+ *                     self._get_structure()), message)             # <<<<<<<<<<<<<<
+ *             return True
+ *         else:
+ */
+    __pyx_5 = __Pyx_PyBytes_AsString(__pyx_v_message); if (unlikely((!__pyx_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    purple_conv_im_send(purple_conversation_get_im_data(((struct __pyx_vtabstruct_6purple_Conversation *)((struct __pyx_obj_6purple_Conversation *)__pyx_v_self)->__pyx_vtab)->_get_structure(((struct __pyx_obj_6purple_Conversation *)__pyx_v_self))), __pyx_5);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":141
+ *                     conversation.purple_conversation_get_im_data( \
+ *                     self._get_structure()), message)
+ *             return True             # <<<<<<<<<<<<<<
+ *         else:
+ *             return False
+ */
+    __pyx_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":143
+ *             return True
+ *         else:
+ *             return False             # <<<<<<<<<<<<<<
+ */
+    __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_r = __pyx_4;
+    __pyx_4 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_AddTraceback("purple.Conversation.im_send");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_6purple_Purple __pyx_vtable_6purple_Purple;
+
+static PyObject *__pyx_tp_new_6purple_Purple(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_Purple *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_Purple *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6purple_Purple;
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_Purple(PyObject *o) {
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_6purple_Purple[] = {
+  {"destroy", (PyCFunction)__pyx_pf_6purple_6Purple_destroy, METH_NOARGS, 0},
+  {"__get_ui_name", (PyCFunction)__pyx_pf_6purple_6Purple___get_ui_name, METH_NOARGS, 0},
+  {"__glib_iteration_when_idle", (PyCFunction)__pyx_pf_6purple_6Purple___glib_iteration_when_idle, METH_NOARGS, 0},
+  {"purple_init", (PyCFunction)__pyx_pf_6purple_6Purple_purple_init, METH_NOARGS, __pyx_doc_6purple_6Purple_purple_init},
+  {"add_callback", (PyCFunction)__pyx_pf_6purple_6Purple_add_callback, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6purple_6Purple_add_callback},
+  {"signal_connect", (PyCFunction)__pyx_pf_6purple_6Purple_signal_connect, METH_VARARGS|METH_KEYWORDS, 0},
+  {"accounts_get_all", (PyCFunction)__pyx_pf_6purple_6Purple_accounts_get_all, METH_NOARGS, 0},
+  {"accounts_get_all_active", (PyCFunction)__pyx_pf_6purple_6Purple_accounts_get_all_active, METH_NOARGS, 0},
+  {"protocols_get_all", (PyCFunction)__pyx_pf_6purple_6Purple_protocols_get_all, METH_NOARGS, 0},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Purple = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Purple = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Purple = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Purple = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_Purple = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.Purple", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_Purple), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_Purple, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Purple, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Purple, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Purple, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Purple, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  " Purple class.\n\n    @param debug_enabled: Toggle debug messages.\n    @param default_path: Full path for libpurple user files.\n    ", /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_Purple, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_6Purple___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_Purple, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+static struct __pyx_vtabstruct_6purple_Protocol __pyx_vtable_6purple_Protocol;
+
+static PyObject *__pyx_tp_new_6purple_Protocol(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_Protocol *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_Protocol *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6purple_Protocol;
+  p->__id = Py_None; Py_INCREF(Py_None);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_Protocol(PyObject *o) {
+  struct __pyx_obj_6purple_Protocol *p = (struct __pyx_obj_6purple_Protocol *)o;
+  Py_XDECREF(p->__id);
+  Py_XDECREF(p->__exists);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6purple_Protocol(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6purple_Protocol *p = (struct __pyx_obj_6purple_Protocol *)o;
+  if (p->__id) {
+    e = (*v)(p->__id, a); if (e) return e;
+  }
+  if (p->__exists) {
+    e = (*v)(p->__exists, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6purple_Protocol(PyObject *o) {
+  struct __pyx_obj_6purple_Protocol *p = (struct __pyx_obj_6purple_Protocol *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->__id);
+  p->__id = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__exists);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6purple_Protocol[] = {
+  {"__get_exists", (PyCFunction)__pyx_pf_6purple_8Protocol___get_exists, METH_NOARGS, 0},
+  {"__get_id", (PyCFunction)__pyx_pf_6purple_8Protocol___get_id, METH_NOARGS, 0},
+  {"__get_name", (PyCFunction)__pyx_pf_6purple_8Protocol___get_name, METH_NOARGS, 0},
+  {"__get_options_labels", (PyCFunction)__pyx_pf_6purple_8Protocol___get_options_labels, METH_NOARGS, 0},
+  {"__get_options_values", (PyCFunction)__pyx_pf_6purple_8Protocol___get_options_values, METH_NOARGS, 0},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Protocol = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Protocol = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Protocol = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Protocol = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_Protocol = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.Protocol", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_Protocol), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_Protocol, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Protocol, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Protocol, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Protocol, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Protocol, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    Protocol class\n    @param id\n    ", /*tp_doc*/
+  __pyx_tp_traverse_6purple_Protocol, /*tp_traverse*/
+  __pyx_tp_clear_6purple_Protocol, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_Protocol, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_8Protocol___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_Protocol, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+
+static PyObject *__pyx_tp_new_6purple_ProxyInfoType(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_ProxyInfoType(PyObject *o) {
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_6purple_ProxyInfoType[] = {
+  {"get_NONE", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_NONE, METH_NOARGS, 0},
+  {"get_USE_GLOBAL", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_USE_GLOBAL, METH_NOARGS, 0},
+  {"get_HTTP", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_HTTP, METH_NOARGS, 0},
+  {"get_SOCKS4", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_SOCKS4, METH_NOARGS, 0},
+  {"get_SOCKS5", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_SOCKS5, METH_NOARGS, 0},
+  {"get_USE_ENVVAR", (PyCFunction)__pyx_pf_6purple_13ProxyInfoType_get_USE_ENVVAR, METH_NOARGS, 0},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_ProxyInfoType = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_ProxyInfoType = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_ProxyInfoType = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_ProxyInfoType = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_ProxyInfoType = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.ProxyInfoType", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_ProxyInfoType), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_ProxyInfoType, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_ProxyInfoType, /*tp_as_number*/
+  &__pyx_tp_as_sequence_ProxyInfoType, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_ProxyInfoType, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_ProxyInfoType, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  0, /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_ProxyInfoType, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_13ProxyInfoType___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_ProxyInfoType, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+
+static PyObject *__pyx_tp_new_6purple_ProxyInfo(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_ProxyInfo *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_ProxyInfo *)o);
+  p->types = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_ProxyInfo(PyObject *o) {
+  struct __pyx_obj_6purple_ProxyInfo *p = (struct __pyx_obj_6purple_ProxyInfo *)o;
+  Py_XDECREF(p->types);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6purple_ProxyInfo(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6purple_ProxyInfo *p = (struct __pyx_obj_6purple_ProxyInfo *)o;
+  if (p->types) {
+    e = (*v)(p->types, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6purple_ProxyInfo(PyObject *o) {
+  struct __pyx_obj_6purple_ProxyInfo *p = (struct __pyx_obj_6purple_ProxyInfo *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->types);
+  p->types = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6purple_ProxyInfo[] = {
+  {"set_type", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_type, METH_O, 0},
+  {"set_host", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_host, METH_O, 0},
+  {"set_port", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_port, METH_O, 0},
+  {"set_username", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_username, METH_O, 0},
+  {"set_password", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_password, METH_O, 0},
+  {"get_types", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_get_types, METH_NOARGS, 0},
+  {"set_info", (PyCFunction)__pyx_pf_6purple_9ProxyInfo_set_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6purple_9ProxyInfo_set_info},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_ProxyInfo = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_ProxyInfo = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_ProxyInfo = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_ProxyInfo = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_ProxyInfo = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.ProxyInfo", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_ProxyInfo), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_ProxyInfo, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_ProxyInfo, /*tp_as_number*/
+  &__pyx_tp_as_sequence_ProxyInfo, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_ProxyInfo, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_ProxyInfo, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_6purple_ProxyInfo, /*tp_traverse*/
+  __pyx_tp_clear_6purple_ProxyInfo, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_ProxyInfo, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_9ProxyInfo___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_ProxyInfo, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+static struct __pyx_vtabstruct_6purple_Account __pyx_vtable_6purple_Account;
+
+static PyObject *__pyx_tp_new_6purple_Account(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_Account *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_Account *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6purple_Account;
+  p->__username = Py_None; Py_INCREF(Py_None);
+  p->__protocol = Py_None; Py_INCREF(Py_None);
+  p->__core = Py_None; Py_INCREF(Py_None);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_Account(PyObject *o) {
+  struct __pyx_obj_6purple_Account *p = (struct __pyx_obj_6purple_Account *)o;
+  Py_XDECREF(p->__username);
+  Py_XDECREF(p->__protocol);
+  Py_XDECREF(p->__core);
+  Py_XDECREF(p->__exists);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6purple_Account(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6purple_Account *p = (struct __pyx_obj_6purple_Account *)o;
+  if (p->__username) {
+    e = (*v)(p->__username, a); if (e) return e;
+  }
+  if (p->__protocol) {
+    e = (*v)(p->__protocol, a); if (e) return e;
+  }
+  if (p->__core) {
+    e = (*v)(p->__core, a); if (e) return e;
+  }
+  if (p->__exists) {
+    e = (*v)(p->__exists, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6purple_Account(PyObject *o) {
+  struct __pyx_obj_6purple_Account *p = (struct __pyx_obj_6purple_Account *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->__username);
+  p->__username = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__protocol);
+  p->__protocol = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__core);
+  p->__core = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__exists);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6purple_Account[] = {
+  {"__is_connected", (PyCFunction)__pyx_pf_6purple_7Account___is_connected, METH_NOARGS, 0},
+  {"__is_connecting", (PyCFunction)__pyx_pf_6purple_7Account___is_connecting, METH_NOARGS, 0},
+  {"__is_disconnected", (PyCFunction)__pyx_pf_6purple_7Account___is_disconnected, METH_NOARGS, 0},
+  {"__get_core", (PyCFunction)__pyx_pf_6purple_7Account___get_core, METH_NOARGS, 0},
+  {"__get_exists", (PyCFunction)__pyx_pf_6purple_7Account___get_exists, METH_NOARGS, 0},
+  {"__get_username", (PyCFunction)__pyx_pf_6purple_7Account___get_username, METH_NOARGS, 0},
+  {"__get_protocol", (PyCFunction)__pyx_pf_6purple_7Account___get_protocol, METH_NOARGS, 0},
+  {"_get_protocol_options", (PyCFunction)__pyx_pf_6purple_7Account__get_protocol_options, METH_NOARGS, __pyx_doc_6purple_7Account__get_protocol_options},
+  {"__get_password", (PyCFunction)__pyx_pf_6purple_7Account___get_password, METH_NOARGS, 0},
+  {"__get_alias", (PyCFunction)__pyx_pf_6purple_7Account___get_alias, METH_NOARGS, 0},
+  {"__get_user_info", (PyCFunction)__pyx_pf_6purple_7Account___get_user_info, METH_NOARGS, 0},
+  {"__get_remember_password", (PyCFunction)__pyx_pf_6purple_7Account___get_remember_password, METH_NOARGS, 0},
+  {"__get_enabled", (PyCFunction)__pyx_pf_6purple_7Account___get_enabled, METH_NOARGS, 0},
+  {"__get_status_types", (PyCFunction)__pyx_pf_6purple_7Account___get_status_types, METH_NOARGS, 0},
+  {"__get_active_status", (PyCFunction)__pyx_pf_6purple_7Account___get_active_status, METH_NOARGS, 0},
+  {"set_username", (PyCFunction)__pyx_pf_6purple_7Account_set_username, METH_O, __pyx_doc_6purple_7Account_set_username},
+  {"set_protocol", (PyCFunction)__pyx_pf_6purple_7Account_set_protocol, METH_O, __pyx_doc_6purple_7Account_set_protocol},
+  {"set_protocol_options", (PyCFunction)__pyx_pf_6purple_7Account_set_protocol_options, METH_O, __pyx_doc_6purple_7Account_set_protocol_options},
+  {"set_password", (PyCFunction)__pyx_pf_6purple_7Account_set_password, METH_O, __pyx_doc_6purple_7Account_set_password},
+  {"set_alias", (PyCFunction)__pyx_pf_6purple_7Account_set_alias, METH_O, __pyx_doc_6purple_7Account_set_alias},
+  {"set_user_info", (PyCFunction)__pyx_pf_6purple_7Account_set_user_info, METH_O, __pyx_doc_6purple_7Account_set_user_info},
+  {"set_remember_password", (PyCFunction)__pyx_pf_6purple_7Account_set_remember_password, METH_O, __pyx_doc_6purple_7Account_set_remember_password},
+  {"set_enabled", (PyCFunction)__pyx_pf_6purple_7Account_set_enabled, METH_O, __pyx_doc_6purple_7Account_set_enabled},
+  {"new", (PyCFunction)__pyx_pf_6purple_7Account_new, METH_NOARGS, __pyx_doc_6purple_7Account_new},
+  {"remove", (PyCFunction)__pyx_pf_6purple_7Account_remove, METH_NOARGS, __pyx_doc_6purple_7Account_remove},
+  {"connect", (PyCFunction)__pyx_pf_6purple_7Account_connect, METH_NOARGS, __pyx_doc_6purple_7Account_connect},
+  {"disconnect", (PyCFunction)__pyx_pf_6purple_7Account_disconnect, METH_NOARGS, __pyx_doc_6purple_7Account_disconnect},
+  {"add_buddy", (PyCFunction)__pyx_pf_6purple_7Account_add_buddy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6purple_7Account_add_buddy},
+  {"remove_buddy", (PyCFunction)__pyx_pf_6purple_7Account_remove_buddy, METH_O, __pyx_doc_6purple_7Account_remove_buddy},
+  {"get_buddies_online", (PyCFunction)__pyx_pf_6purple_7Account_get_buddies_online, METH_NOARGS, 0},
+  {"request_add_buddy", (PyCFunction)__pyx_pf_6purple_7Account_request_add_buddy, METH_VARARGS|METH_KEYWORDS, 0},
+  {"set_active_status", (PyCFunction)__pyx_pf_6purple_7Account_set_active_status, METH_VARARGS|METH_KEYWORDS, 0},
+  {"set_status_message", (PyCFunction)__pyx_pf_6purple_7Account_set_status_message, METH_VARARGS|METH_KEYWORDS, 0},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Account = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Account = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Account = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Account = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_Account = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.Account", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_Account), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_Account, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Account, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Account, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Account, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Account, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    Account class\n    @param username\n    @param protocol Protocol class instance\n    @param core Purple class instance\n    ", /*tp_doc*/
+  __pyx_tp_traverse_6purple_Account, /*tp_traverse*/
+  __pyx_tp_clear_6purple_Account, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_Account, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_7Account___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_Account, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+static struct __pyx_vtabstruct_6purple_Buddy __pyx_vtable_6purple_Buddy;
+
+static PyObject *__pyx_tp_new_6purple_Buddy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_Buddy *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_Buddy *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6purple_Buddy;
+  p->__account = Py_None; Py_INCREF(Py_None);
+  p->__name = Py_None; Py_INCREF(Py_None);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_Buddy(PyObject *o) {
+  struct __pyx_obj_6purple_Buddy *p = (struct __pyx_obj_6purple_Buddy *)o;
+  Py_XDECREF(p->__account);
+  Py_XDECREF(p->__name);
+  Py_XDECREF(p->__exists);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6purple_Buddy(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6purple_Buddy *p = (struct __pyx_obj_6purple_Buddy *)o;
+  if (p->__account) {
+    e = (*v)(p->__account, a); if (e) return e;
+  }
+  if (p->__name) {
+    e = (*v)(p->__name, a); if (e) return e;
+  }
+  if (p->__exists) {
+    e = (*v)(p->__exists, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6purple_Buddy(PyObject *o) {
+  struct __pyx_obj_6purple_Buddy *p = (struct __pyx_obj_6purple_Buddy *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->__account);
+  p->__account = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__name);
+  p->__name = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__exists);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6purple_Buddy[] = {
+  {"__get_exists", (PyCFunction)__pyx_pf_6purple_5Buddy___get_exists, METH_NOARGS, 0},
+  {"__get_name", (PyCFunction)__pyx_pf_6purple_5Buddy___get_name, METH_NOARGS, 0},
+  {"__get_account", (PyCFunction)__pyx_pf_6purple_5Buddy___get_account, METH_NOARGS, 0},
+  {"__get_alias", (PyCFunction)__pyx_pf_6purple_5Buddy___get_alias, METH_NOARGS, 0},
+  {"__get_group", (PyCFunction)__pyx_pf_6purple_5Buddy___get_group, METH_NOARGS, 0},
+  {"__get_server_alias", (PyCFunction)__pyx_pf_6purple_5Buddy___get_server_alias, METH_NOARGS, 0},
+  {"__get_contact_alias", (PyCFunction)__pyx_pf_6purple_5Buddy___get_contact_alias, METH_NOARGS, 0},
+  {"__get_local_alias", (PyCFunction)__pyx_pf_6purple_5Buddy___get_local_alias, METH_NOARGS, 0},
+  {"__get_available", (PyCFunction)__pyx_pf_6purple_5Buddy___get_available, METH_NOARGS, 0},
+  {"__get_online", (PyCFunction)__pyx_pf_6purple_5Buddy___get_online, METH_NOARGS, 0},
+  {"__get_idle", (PyCFunction)__pyx_pf_6purple_5Buddy___get_idle, METH_NOARGS, 0},
+  {"__get_active_status", (PyCFunction)__pyx_pf_6purple_5Buddy___get_active_status, METH_NOARGS, 0},
+  {"set_alias", (PyCFunction)__pyx_pf_6purple_5Buddy_set_alias, METH_O, 0},
+  {"set_group", (PyCFunction)__pyx_pf_6purple_5Buddy_set_group, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Buddy = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Buddy = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Buddy = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Buddy = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_Buddy = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.Buddy", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_Buddy), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_Buddy, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Buddy, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Buddy, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Buddy, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Buddy, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    Buddy class\n    @param name\n    @param account\n    ", /*tp_doc*/
+  __pyx_tp_traverse_6purple_Buddy, /*tp_traverse*/
+  __pyx_tp_clear_6purple_Buddy, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_Buddy, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_5Buddy___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_Buddy, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+static struct __pyx_vtabstruct_6purple_Conversation __pyx_vtable_6purple_Conversation;
+
+static PyObject *__pyx_tp_new_6purple_Conversation(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_6purple_Conversation *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_6purple_Conversation *)o);
+  p->__pyx_vtab = __pyx_vtabptr_6purple_Conversation;
+  p->__account = Py_None; Py_INCREF(Py_None);
+  p->__name = Py_None; Py_INCREF(Py_None);
+  p->__type = Py_None; Py_INCREF(Py_None);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_6purple_Conversation(PyObject *o) {
+  struct __pyx_obj_6purple_Conversation *p = (struct __pyx_obj_6purple_Conversation *)o;
+  Py_XDECREF(p->__account);
+  Py_XDECREF(p->__name);
+  Py_XDECREF(p->__type);
+  Py_XDECREF(p->__exists);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6purple_Conversation(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_6purple_Conversation *p = (struct __pyx_obj_6purple_Conversation *)o;
+  if (p->__account) {
+    e = (*v)(p->__account, a); if (e) return e;
+  }
+  if (p->__name) {
+    e = (*v)(p->__name, a); if (e) return e;
+  }
+  if (p->__type) {
+    e = (*v)(p->__type, a); if (e) return e;
+  }
+  if (p->__exists) {
+    e = (*v)(p->__exists, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_6purple_Conversation(PyObject *o) {
+  struct __pyx_obj_6purple_Conversation *p = (struct __pyx_obj_6purple_Conversation *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->__account);
+  p->__account = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__name);
+  p->__name = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__type);
+  p->__type = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->__exists);
+  p->__exists = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6purple_Conversation[] = {
+  {"__get_exists", (PyCFunction)__pyx_pf_6purple_12Conversation___get_exists, METH_NOARGS, 0},
+  {"__get_account", (PyCFunction)__pyx_pf_6purple_12Conversation___get_account, METH_NOARGS, 0},
+  {"__get_name", (PyCFunction)__pyx_pf_6purple_12Conversation___get_name, METH_NOARGS, 0},
+  {"new", (PyCFunction)__pyx_pf_6purple_12Conversation_new, METH_NOARGS, __pyx_doc_6purple_12Conversation_new},
+  {"destroy", (PyCFunction)__pyx_pf_6purple_12Conversation_destroy, METH_NOARGS, __pyx_doc_6purple_12Conversation_destroy},
+  {"set_ui_ops", (PyCFunction)__pyx_pf_6purple_12Conversation_set_ui_ops, METH_O, __pyx_doc_6purple_12Conversation_set_ui_ops},
+  {"im_send", (PyCFunction)__pyx_pf_6purple_12Conversation_im_send, METH_O, __pyx_doc_6purple_12Conversation_im_send},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Conversation = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  0, /*nb_long*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Conversation = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Conversation = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Conversation = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_6purple_Conversation = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "purple.Conversation", /*tp_name*/
+  sizeof(struct __pyx_obj_6purple_Conversation), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_6purple_Conversation, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Conversation, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Conversation, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Conversation, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Conversation, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    Conversation class\n    @param type    UNKNOWN, IM, CHAT, MISC, ANY\n    @param account Your account\n    @param name    Buddy name\n    ", /*tp_doc*/
+  __pyx_tp_traverse_6purple_Conversation, /*tp_traverse*/
+  __pyx_tp_clear_6purple_Conversation, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_6purple_Conversation, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_6purple_12Conversation___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_6purple_Conversation, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+  {"call_authorize_cb", (PyCFunction)__pyx_pf_6purple_call_authorize_cb, METH_NOARGS, 0},
+  {"call_deny_cb", (PyCFunction)__pyx_pf_6purple_call_deny_cb, METH_NOARGS, 0},
+  {"markup_strip_html", (PyCFunction)__pyx_pf_6purple_markup_strip_html, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+    PyModuleDef_HEAD_INIT,
+    "purple",
+    0, /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp___init__, __pyx_k___init__, sizeof(__pyx_k___init__), 1, 1, 1},
+  {&__pyx_kp_destroy, __pyx_k_destroy, sizeof(__pyx_k_destroy), 1, 1, 1},
+  {&__pyx_kp___get_ui_name, __pyx_k___get_ui_name, sizeof(__pyx_k___get_ui_name), 1, 1, 1},
+  {&__pyx_kp_ui_name, __pyx_k_ui_name, sizeof(__pyx_k_ui_name), 1, 1, 1},
+  {&__pyx_kp_1, __pyx_k_1, sizeof(__pyx_k_1), 1, 1, 1},
+  {&__pyx_kp_purple_init, __pyx_k_purple_init, sizeof(__pyx_k_purple_init), 1, 1, 1},
+  {&__pyx_kp_add_callback, __pyx_k_add_callback, sizeof(__pyx_k_add_callback), 1, 1, 1},
+  {&__pyx_kp_signal_connect, __pyx_k_signal_connect, sizeof(__pyx_k_signal_connect), 1, 1, 1},
+  {&__pyx_kp_accounts_get_all, __pyx_k_accounts_get_all, sizeof(__pyx_k_accounts_get_all), 1, 1, 1},
+  {&__pyx_kp_2, __pyx_k_2, sizeof(__pyx_k_2), 1, 1, 1},
+  {&__pyx_kp_protocols_get_all, __pyx_k_protocols_get_all, sizeof(__pyx_k_protocols_get_all), 1, 1, 1},
+  {&__pyx_kp___get_exists, __pyx_k___get_exists, sizeof(__pyx_k___get_exists), 1, 1, 1},
+  {&__pyx_kp_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 1, 1, 1},
+  {&__pyx_kp___get_id, __pyx_k___get_id, sizeof(__pyx_k___get_id), 1, 1, 1},
+  {&__pyx_kp_id, __pyx_k_id, sizeof(__pyx_k_id), 1, 1, 1},
+  {&__pyx_kp___get_name, __pyx_k___get_name, sizeof(__pyx_k___get_name), 1, 1, 1},
+  {&__pyx_kp_name, __pyx_k_name, sizeof(__pyx_k_name), 1, 1, 1},
+  {&__pyx_kp_3, __pyx_k_3, sizeof(__pyx_k_3), 1, 1, 1},
+  {&__pyx_kp_options_labels, __pyx_k_options_labels, sizeof(__pyx_k_options_labels), 1, 1, 1},
+  {&__pyx_kp_4, __pyx_k_4, sizeof(__pyx_k_4), 1, 1, 1},
+  {&__pyx_kp_options_values, __pyx_k_options_values, sizeof(__pyx_k_options_values), 1, 1, 1},
+  {&__pyx_kp_get_NONE, __pyx_k_get_NONE, sizeof(__pyx_k_get_NONE), 1, 1, 1},
+  {&__pyx_kp_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 1, 1, 1},
+  {&__pyx_kp_get_USE_GLOBAL, __pyx_k_get_USE_GLOBAL, sizeof(__pyx_k_get_USE_GLOBAL), 1, 1, 1},
+  {&__pyx_kp_USE_GLOBAL, __pyx_k_USE_GLOBAL, sizeof(__pyx_k_USE_GLOBAL), 1, 1, 1},
+  {&__pyx_kp_get_HTTP, __pyx_k_get_HTTP, sizeof(__pyx_k_get_HTTP), 1, 1, 1},
+  {&__pyx_kp_HTTP, __pyx_k_HTTP, sizeof(__pyx_k_HTTP), 1, 1, 1},
+  {&__pyx_kp_5, __pyx_k_5, sizeof(__pyx_k_5), 1, 1, 1},
+  {&__pyx_kp_6, __pyx_k_6, sizeof(__pyx_k_6), 1, 1, 1},
+  {&__pyx_kp_get_USE_ENVVAR, __pyx_k_get_USE_ENVVAR, sizeof(__pyx_k_get_USE_ENVVAR), 1, 1, 1},
+  {&__pyx_kp_USE_ENVVAR, __pyx_k_USE_ENVVAR, sizeof(__pyx_k_USE_ENVVAR), 1, 1, 1},
+  {&__pyx_kp_set_type, __pyx_k_set_type, sizeof(__pyx_k_set_type), 1, 1, 1},
+  {&__pyx_kp_set_host, __pyx_k_set_host, sizeof(__pyx_k_set_host), 1, 1, 1},
+  {&__pyx_kp_set_port, __pyx_k_set_port, sizeof(__pyx_k_set_port), 1, 1, 1},
+  {&__pyx_kp_set_username, __pyx_k_set_username, sizeof(__pyx_k_set_username), 1, 1, 1},
+  {&__pyx_kp_set_password, __pyx_k_set_password, sizeof(__pyx_k_set_password), 1, 1, 1},
+  {&__pyx_kp_get_types, __pyx_k_get_types, sizeof(__pyx_k_get_types), 1, 1, 1},
+  {&__pyx_kp_set_info, __pyx_k_set_info, sizeof(__pyx_k_set_info), 1, 1, 1},
+  {&__pyx_kp___is_connected, __pyx_k___is_connected, sizeof(__pyx_k___is_connected), 1, 1, 1},
+  {&__pyx_kp_is_connected, __pyx_k_is_connected, sizeof(__pyx_k_is_connected), 1, 1, 1},
+  {&__pyx_kp___is_connecting, __pyx_k___is_connecting, sizeof(__pyx_k___is_connecting), 1, 1, 1},
+  {&__pyx_kp_is_connecting, __pyx_k_is_connecting, sizeof(__pyx_k_is_connecting), 1, 1, 1},
+  {&__pyx_kp___is_disconnected, __pyx_k___is_disconnected, sizeof(__pyx_k___is_disconnected), 1, 1, 1},
+  {&__pyx_kp_is_disconnected, __pyx_k_is_disconnected, sizeof(__pyx_k_is_disconnected), 1, 1, 1},
+  {&__pyx_kp___get_core, __pyx_k___get_core, sizeof(__pyx_k___get_core), 1, 1, 1},
+  {&__pyx_kp_core, __pyx_k_core, sizeof(__pyx_k_core), 1, 1, 1},
+  {&__pyx_kp___get_username, __pyx_k___get_username, sizeof(__pyx_k___get_username), 1, 1, 1},
+  {&__pyx_kp_username, __pyx_k_username, sizeof(__pyx_k_username), 1, 1, 1},
+  {&__pyx_kp___get_protocol, __pyx_k___get_protocol, sizeof(__pyx_k___get_protocol), 1, 1, 1},
+  {&__pyx_kp_protocol, __pyx_k_protocol, sizeof(__pyx_k_protocol), 1, 1, 1},
+  {&__pyx_kp_7, __pyx_k_7, sizeof(__pyx_k_7), 1, 1, 1},
+  {&__pyx_kp_protocol_options, __pyx_k_protocol_options, sizeof(__pyx_k_protocol_options), 1, 1, 1},
+  {&__pyx_kp___get_password, __pyx_k___get_password, sizeof(__pyx_k___get_password), 1, 1, 1},
+  {&__pyx_kp_password, __pyx_k_password, sizeof(__pyx_k_password), 1, 1, 1},
+  {&__pyx_kp___get_alias, __pyx_k___get_alias, sizeof(__pyx_k___get_alias), 1, 1, 1},
+  {&__pyx_kp_alias, __pyx_k_alias, sizeof(__pyx_k_alias), 1, 1, 1},
+  {&__pyx_kp___get_user_info, __pyx_k___get_user_info, sizeof(__pyx_k___get_user_info), 1, 1, 1},
+  {&__pyx_kp_user_info, __pyx_k_user_info, sizeof(__pyx_k_user_info), 1, 1, 1},
+  {&__pyx_kp_8, __pyx_k_8, sizeof(__pyx_k_8), 1, 1, 1},
+  {&__pyx_kp_remember_password, __pyx_k_remember_password, sizeof(__pyx_k_remember_password), 1, 1, 1},
+  {&__pyx_kp___get_enabled, __pyx_k___get_enabled, sizeof(__pyx_k___get_enabled), 1, 1, 1},
+  {&__pyx_kp_enabled, __pyx_k_enabled, sizeof(__pyx_k_enabled), 1, 1, 1},
+  {&__pyx_kp___get_status_types, __pyx_k___get_status_types, sizeof(__pyx_k___get_status_types), 1, 1, 1},
+  {&__pyx_kp_status_types, __pyx_k_status_types, sizeof(__pyx_k_status_types), 1, 1, 1},
+  {&__pyx_kp___get_active_status, __pyx_k___get_active_status, sizeof(__pyx_k___get_active_status), 1, 1, 1},
+  {&__pyx_kp_active_status, __pyx_k_active_status, sizeof(__pyx_k_active_status), 1, 1, 1},
+  {&__pyx_kp_set_protocol, __pyx_k_set_protocol, sizeof(__pyx_k_set_protocol), 1, 1, 1},
+  {&__pyx_kp_9, __pyx_k_9, sizeof(__pyx_k_9), 1, 1, 1},
+  {&__pyx_kp_set_alias, __pyx_k_set_alias, sizeof(__pyx_k_set_alias), 1, 1, 1},
+  {&__pyx_kp_set_user_info, __pyx_k_set_user_info, sizeof(__pyx_k_set_user_info), 1, 1, 1},
+  {&__pyx_kp_10, __pyx_k_10, sizeof(__pyx_k_10), 1, 1, 1},
+  {&__pyx_kp_set_enabled, __pyx_k_set_enabled, sizeof(__pyx_k_set_enabled), 1, 1, 1},
+  {&__pyx_kp_new, __pyx_k_new, sizeof(__pyx_k_new), 1, 1, 1},
+  {&__pyx_kp_remove, __pyx_k_remove, sizeof(__pyx_k_remove), 1, 1, 1},
+  {&__pyx_kp_connect, __pyx_k_connect, sizeof(__pyx_k_connect), 1, 1, 1},
+  {&__pyx_kp_disconnect, __pyx_k_disconnect, sizeof(__pyx_k_disconnect), 1, 1, 1},
+  {&__pyx_kp_add_buddy, __pyx_k_add_buddy, sizeof(__pyx_k_add_buddy), 1, 1, 1},
+  {&__pyx_kp_remove_buddy, __pyx_k_remove_buddy, sizeof(__pyx_k_remove_buddy), 1, 1, 1},
+  {&__pyx_kp_get_buddies_online, __pyx_k_get_buddies_online, sizeof(__pyx_k_get_buddies_online), 1, 1, 1},
+  {&__pyx_kp_request_add_buddy, __pyx_k_request_add_buddy, sizeof(__pyx_k_request_add_buddy), 1, 1, 1},
+  {&__pyx_kp_set_active_status, __pyx_k_set_active_status, sizeof(__pyx_k_set_active_status), 1, 1, 1},
+  {&__pyx_kp_set_status_message, __pyx_k_set_status_message, sizeof(__pyx_k_set_status_message), 1, 1, 1},
+  {&__pyx_kp___get_account, __pyx_k___get_account, sizeof(__pyx_k___get_account), 1, 1, 1},
+  {&__pyx_kp_account, __pyx_k_account, sizeof(__pyx_k_account), 1, 1, 1},
+  {&__pyx_kp___get_group, __pyx_k___get_group, sizeof(__pyx_k___get_group), 1, 1, 1},
+  {&__pyx_kp_group, __pyx_k_group, sizeof(__pyx_k_group), 1, 1, 1},
+  {&__pyx_kp___get_server_alias, __pyx_k___get_server_alias, sizeof(__pyx_k___get_server_alias), 1, 1, 1},
+  {&__pyx_kp_server_alias, __pyx_k_server_alias, sizeof(__pyx_k_server_alias), 1, 1, 1},
+  {&__pyx_kp___get_contact_alias, __pyx_k___get_contact_alias, sizeof(__pyx_k___get_contact_alias), 1, 1, 1},
+  {&__pyx_kp_contact_alias, __pyx_k_contact_alias, sizeof(__pyx_k_contact_alias), 1, 1, 1},
+  {&__pyx_kp___get_local_alias, __pyx_k___get_local_alias, sizeof(__pyx_k___get_local_alias), 1, 1, 1},
+  {&__pyx_kp_local_alias, __pyx_k_local_alias, sizeof(__pyx_k_local_alias), 1, 1, 1},
+  {&__pyx_kp___get_available, __pyx_k___get_available, sizeof(__pyx_k___get_available), 1, 1, 1},
+  {&__pyx_kp_available, __pyx_k_available, sizeof(__pyx_k_available), 1, 1, 1},
+  {&__pyx_kp___get_online, __pyx_k___get_online, sizeof(__pyx_k___get_online), 1, 1, 1},
+  {&__pyx_kp_online, __pyx_k_online, sizeof(__pyx_k_online), 1, 1, 1},
+  {&__pyx_kp___get_idle, __pyx_k___get_idle, sizeof(__pyx_k___get_idle), 1, 1, 1},
+  {&__pyx_kp_idle, __pyx_k_idle, sizeof(__pyx_k_idle), 1, 1, 1},
+  {&__pyx_kp_set_group, __pyx_k_set_group, sizeof(__pyx_k_set_group), 1, 1, 1},
+  {&__pyx_kp_set_ui_ops, __pyx_k_set_ui_ops, sizeof(__pyx_k_set_ui_ops), 1, 1, 1},
+  {&__pyx_kp_im_send, __pyx_k_im_send, sizeof(__pyx_k_im_send), 1, 1, 1},
+  {&__pyx_kp_message, __pyx_k_message, sizeof(__pyx_k_message), 1, 1, 1},
+  {&__pyx_kp_ui_version, __pyx_k_ui_version, sizeof(__pyx_k_ui_version), 1, 1, 1},
+  {&__pyx_kp_ui_website, __pyx_k_ui_website, sizeof(__pyx_k_ui_website), 1, 1, 1},
+  {&__pyx_kp_ui_dev_website, __pyx_k_ui_dev_website, sizeof(__pyx_k_ui_dev_website), 1, 1, 1},
+  {&__pyx_kp_debug_enabled, __pyx_k_debug_enabled, sizeof(__pyx_k_debug_enabled), 1, 1, 1},
+  {&__pyx_kp_default_path, __pyx_k_default_path, sizeof(__pyx_k_default_path), 1, 1, 1},
+  {&__pyx_kp_type, __pyx_k_type, sizeof(__pyx_k_type), 1, 1, 1},
+  {&__pyx_kp_callback, __pyx_k_callback, sizeof(__pyx_k_callback), 1, 1, 1},
+  {&__pyx_kp_cb, __pyx_k_cb, sizeof(__pyx_k_cb), 1, 1, 1},
+  {&__pyx_kp_host, __pyx_k_host, sizeof(__pyx_k_host), 1, 1, 1},
+  {&__pyx_kp_port, __pyx_k_port, sizeof(__pyx_k_port), 1, 1, 1},
+  {&__pyx_kp_acc, __pyx_k_acc, sizeof(__pyx_k_acc), 1, 1, 1},
+  {&__pyx_kp_info, __pyx_k_info, sizeof(__pyx_k_info), 1, 1, 1},
+  {&__pyx_kp_po, __pyx_k_po, sizeof(__pyx_k_po), 1, 1, 1},
+  {&__pyx_kp_value, __pyx_k_value, sizeof(__pyx_k_value), 1, 1, 1},
+  {&__pyx_kp_buddy_username, __pyx_k_buddy_username, sizeof(__pyx_k_buddy_username), 1, 1, 1},
+  {&__pyx_kp_buddy_alias, __pyx_k_buddy_alias, sizeof(__pyx_k_buddy_alias), 1, 1, 1},
+  {&__pyx_kp_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 1, 1, 1},
+  {&__pyx_kp_cbs, __pyx_k_cbs, sizeof(__pyx_k_cbs), 1, 1, 1},
+  {&__pyx_kp_ecore, __pyx_k_ecore, sizeof(__pyx_k_ecore), 1, 1, 1},
+  {&__pyx_kp_account_cbs, __pyx_k_account_cbs, sizeof(__pyx_k_account_cbs), 1, 1, 1},
+  {&__pyx_kp_blist_cbs, __pyx_k_blist_cbs, sizeof(__pyx_k_blist_cbs), 1, 1, 1},
+  {&__pyx_kp_connection_cbs, __pyx_k_connection_cbs, sizeof(__pyx_k_connection_cbs), 1, 1, 1},
+  {&__pyx_kp_conversation_cbs, __pyx_k_conversation_cbs, sizeof(__pyx_k_conversation_cbs), 1, 1, 1},
+  {&__pyx_kp_notify_cbs, __pyx_k_notify_cbs, sizeof(__pyx_k_notify_cbs), 1, 1, 1},
+  {&__pyx_kp_request_cbs, __pyx_k_request_cbs, sizeof(__pyx_k_request_cbs), 1, 1, 1},
+  {&__pyx_kp_signal_cbs, __pyx_k_signal_cbs, sizeof(__pyx_k_signal_cbs), 1, 1, 1},
+  {&__pyx_kp_property, __pyx_k_property, sizeof(__pyx_k_property), 1, 1, 1},
+  {&__pyx_kp_has_key, __pyx_k_has_key, sizeof(__pyx_k_has_key), 1, 1, 1},
+  {&__pyx_kp_call_authorize_cb, __pyx_k_call_authorize_cb, sizeof(__pyx_k_call_authorize_cb), 1, 1, 1},
+  {&__pyx_kp_call_deny_cb, __pyx_k_call_deny_cb, sizeof(__pyx_k_call_deny_cb), 1, 1, 1},
+  {&__pyx_kp_54, __pyx_k_54, sizeof(__pyx_k_54), 0, 1, 0},
+  {&__pyx_kp_55, __pyx_k_55, sizeof(__pyx_k_55), 0, 1, 0},
+  {&__pyx_kp_60, __pyx_k_60, sizeof(__pyx_k_60), 0, 1, 0},
+  {&__pyx_kp_61, __pyx_k_61, sizeof(__pyx_k_61), 0, 1, 0},
+  {&__pyx_kp_62, __pyx_k_62, sizeof(__pyx_k_62), 0, 1, 0},
+  {&__pyx_kp_63, __pyx_k_63, sizeof(__pyx_k_63), 0, 1, 0},
+  {&__pyx_kp_64, __pyx_k_64, sizeof(__pyx_k_64), 0, 1, 0},
+  {&__pyx_kp_65, __pyx_k_65, sizeof(__pyx_k_65), 0, 1, 0},
+  {&__pyx_kp_69, __pyx_k_69, sizeof(__pyx_k_69), 0, 1, 0},
+  {&__pyx_kp_70, __pyx_k_70, sizeof(__pyx_k_70), 0, 1, 0},
+  {&__pyx_kp_71, __pyx_k_71, sizeof(__pyx_k_71), 0, 1, 0},
+  {&__pyx_kp_72, __pyx_k_72, sizeof(__pyx_k_72), 0, 1, 0},
+  {&__pyx_kp_73, __pyx_k_73, sizeof(__pyx_k_73), 0, 1, 0},
+  {&__pyx_kp_74, __pyx_k_74, sizeof(__pyx_k_74), 0, 1, 0},
+  {&__pyx_kp_78, __pyx_k_78, sizeof(__pyx_k_78), 0, 1, 0},
+  {&__pyx_kp_79, __pyx_k_79, sizeof(__pyx_k_79), 0, 1, 0},
+  {&__pyx_kp_112, __pyx_k_112, sizeof(__pyx_k_112), 0, 1, 0},
+  {&__pyx_kp_113, __pyx_k_113, sizeof(__pyx_k_113), 0, 1, 0},
+  {&__pyx_kp_118, __pyx_k_118, sizeof(__pyx_k_118), 0, 1, 0},
+  {&__pyx_kp_119, __pyx_k_119, sizeof(__pyx_k_119), 0, 1, 0},
+  {&__pyx_kp_124, __pyx_k_124, sizeof(__pyx_k_124), 0, 1, 0},
+  {&__pyx_kp_125, __pyx_k_125, sizeof(__pyx_k_125), 0, 1, 0},
+  {&__pyx_kp_185, __pyx_k_185, sizeof(__pyx_k_185), 0, 1, 0},
+  {&__pyx_kp_186, __pyx_k_186, sizeof(__pyx_k_186), 0, 1, 0},
+  {&__pyx_kp_222, __pyx_k_222, sizeof(__pyx_k_222), 0, 1, 0},
+  {&__pyx_kp_223, __pyx_k_223, sizeof(__pyx_k_223), 0, 1, 0},
+  {&__pyx_kp_timer_add, __pyx_k_timer_add, sizeof(__pyx_k_timer_add), 1, 1, 1},
+  {&__pyx_kp_c_ui_info, __pyx_k_c_ui_info, sizeof(__pyx_k_c_ui_info), 1, 1, 1},
+  {&__pyx_kp_405, __pyx_k_405, sizeof(__pyx_k_405), 0, 1, 0},
+  {&__pyx_kp_406, __pyx_k_406, sizeof(__pyx_k_406), 0, 1, 0},
+  {&__pyx_kp_407, __pyx_k_407, sizeof(__pyx_k_407), 0, 1, 0},
+  {&__pyx_kp_408, __pyx_k_408, sizeof(__pyx_k_408), 0, 1, 0},
+  {&__pyx_kp_409, __pyx_k_409, sizeof(__pyx_k_409), 0, 1, 0},
+  {&__pyx_kp_410, __pyx_k_410, sizeof(__pyx_k_410), 0, 1, 0},
+  {&__pyx_kp_append, __pyx_k_append, sizeof(__pyx_k_append), 1, 1, 1},
+  {&__pyx_kp_427, __pyx_k_427, sizeof(__pyx_k_427), 0, 1, 0},
+  {&__pyx_kp_428, __pyx_k_428, sizeof(__pyx_k_428), 0, 1, 0},
+  {&__pyx_kp_429, __pyx_k_429, sizeof(__pyx_k_429), 0, 1, 0},
+  {&__pyx_kp_430, __pyx_k_430, sizeof(__pyx_k_430), 0, 1, 0},
+  {&__pyx_kp_431, __pyx_k_431, sizeof(__pyx_k_431), 0, 1, 0},
+  {&__pyx_kp_432, __pyx_k_432, sizeof(__pyx_k_432), 0, 1, 0},
+  {&__pyx_kp_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 1, 1, 1},
+  {&__pyx_kp_433, __pyx_k_433, sizeof(__pyx_k_433), 0, 1, 0},
+  {&__pyx_kp_434, __pyx_k_434, sizeof(__pyx_k_434), 0, 1, 0},
+  {&__pyx_kp_435, __pyx_k_435, sizeof(__pyx_k_435), 0, 1, 0},
+  {&__pyx_kp_436, __pyx_k_436, sizeof(__pyx_k_436), 0, 1, 0},
+  {&__pyx_kp_437, __pyx_k_437, sizeof(__pyx_k_437), 0, 1, 0},
+  {&__pyx_kp_438, __pyx_k_438, sizeof(__pyx_k_438), 0, 1, 0},
+  {&__pyx_kp_439, __pyx_k_439, sizeof(__pyx_k_439), 0, 1, 0},
+  {&__pyx_kp_440, __pyx_k_440, sizeof(__pyx_k_440), 0, 1, 0},
+  {&__pyx_kp_441, __pyx_k_441, sizeof(__pyx_k_441), 0, 1, 0},
+  {&__pyx_kp_442, __pyx_k_442, sizeof(__pyx_k_442), 0, 1, 0},
+  {&__pyx_kp_443, __pyx_k_443, sizeof(__pyx_k_443), 0, 1, 0},
+  {&__pyx_kp_444, __pyx_k_444, sizeof(__pyx_k_444), 0, 1, 0},
+  {&__pyx_kp_445, __pyx_k_445, sizeof(__pyx_k_445), 0, 1, 0},
+  {&__pyx_kp_446, __pyx_k_446, sizeof(__pyx_k_446), 0, 1, 0},
+  {&__pyx_kp_447, __pyx_k_447, sizeof(__pyx_k_447), 0, 1, 0},
+  {&__pyx_kp_448, __pyx_k_448, sizeof(__pyx_k_448), 0, 1, 0},
+  {&__pyx_kp_451, __pyx_k_451, sizeof(__pyx_k_451), 0, 1, 0},
+  {&__pyx_kp_452, __pyx_k_452, sizeof(__pyx_k_452), 0, 1, 0},
+  {&__pyx_kp_453, __pyx_k_453, sizeof(__pyx_k_453), 0, 1, 0},
+  {&__pyx_kp_459, __pyx_k_459, sizeof(__pyx_k_459), 0, 1, 0},
+  {&__pyx_kp_460, __pyx_k_460, sizeof(__pyx_k_460), 0, 1, 0},
+  {&__pyx_kp_461, __pyx_k_461, sizeof(__pyx_k_461), 0, 1, 0},
+  {&__pyx_kp_462, __pyx_k_462, sizeof(__pyx_k_462), 0, 1, 0},
+  {&__pyx_kp_463, __pyx_k_463, sizeof(__pyx_k_463), 0, 1, 0},
+  {&__pyx_kp_464, __pyx_k_464, sizeof(__pyx_k_464), 0, 1, 0},
+  {&__pyx_kp_465, __pyx_k_465, sizeof(__pyx_k_465), 0, 1, 0},
+  {&__pyx_kp_466, __pyx_k_466, sizeof(__pyx_k_466), 0, 1, 0},
+  {&__pyx_kp_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 0},
+  {&__pyx_kp_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 0},
+  {&__pyx_kp_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 0},
+  {&__pyx_kp_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 0},
+  {&__pyx_kp_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 0},
+  {&__pyx_kp_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 0},
+  {&__pyx_kp_29, __pyx_k_29, sizeof(__pyx_k_29), 0, 0, 0},
+  {&__pyx_kp_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 0, 0},
+  {&__pyx_kp_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 0, 0},
+  {&__pyx_kp_35, __pyx_k_35, sizeof(__pyx_k_35), 0, 0, 0},
+  {&__pyx_kp_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 0},
+  {&__pyx_kp_40, __pyx_k_40, sizeof(__pyx_k_40), 0, 0, 0},
+  {&__pyx_kp_41, __pyx_k_41, sizeof(__pyx_k_41), 0, 0, 0},
+  {&__pyx_kp_45, __pyx_k_45, sizeof(__pyx_k_45), 0, 0, 0},
+  {&__pyx_kp_46, __pyx_k_46, sizeof(__pyx_k_46), 0, 0, 0},
+  {&__pyx_kp_47, __pyx_k_47, sizeof(__pyx_k_47), 0, 0, 0},
+  {&__pyx_kp_48, __pyx_k_48, sizeof(__pyx_k_48), 0, 0, 0},
+  {&__pyx_kp_49, __pyx_k_49, sizeof(__pyx_k_49), 0, 0, 0},
+  {&__pyx_kp_50, __pyx_k_50, sizeof(__pyx_k_50), 0, 0, 0},
+  {&__pyx_kp_56, __pyx_k_56, sizeof(__pyx_k_56), 0, 0, 0},
+  {&__pyx_kp_80, __pyx_k_80, sizeof(__pyx_k_80), 0, 0, 0},
+  {&__pyx_kp_84, __pyx_k_84, sizeof(__pyx_k_84), 0, 0, 0},
+  {&__pyx_kp_85, __pyx_k_85, sizeof(__pyx_k_85), 0, 0, 0},
+  {&__pyx_kp_86, __pyx_k_86, sizeof(__pyx_k_86), 0, 0, 0},
+  {&__pyx_kp_90, __pyx_k_90, sizeof(__pyx_k_90), 0, 0, 0},
+  {&__pyx_kp_91, __pyx_k_91, sizeof(__pyx_k_91), 0, 0, 0},
+  {&__pyx_kp_95, __pyx_k_95, sizeof(__pyx_k_95), 0, 0, 0},
+  {&__pyx_kp_96, __pyx_k_96, sizeof(__pyx_k_96), 0, 0, 0},
+  {&__pyx_kp_97, __pyx_k_97, sizeof(__pyx_k_97), 0, 0, 0},
+  {&__pyx_kp_101, __pyx_k_101, sizeof(__pyx_k_101), 0, 0, 0},
+  {&__pyx_kp_102, __pyx_k_102, sizeof(__pyx_k_102), 0, 0, 0},
+  {&__pyx_kp_103, __pyx_k_103, sizeof(__pyx_k_103), 0, 0, 0},
+  {&__pyx_kp_107, __pyx_k_107, sizeof(__pyx_k_107), 0, 0, 0},
+  {&__pyx_kp_108, __pyx_k_108, sizeof(__pyx_k_108), 0, 0, 0},
+  {&__pyx_kp_114, __pyx_k_114, sizeof(__pyx_k_114), 0, 0, 0},
+  {&__pyx_kp_120, __pyx_k_120, sizeof(__pyx_k_120), 0, 0, 0},
+  {&__pyx_kp_126, __pyx_k_126, sizeof(__pyx_k_126), 0, 0, 0},
+  {&__pyx_kp_130, __pyx_k_130, sizeof(__pyx_k_130), 0, 0, 0},
+  {&__pyx_kp_131, __pyx_k_131, sizeof(__pyx_k_131), 0, 0, 0},
+  {&__pyx_kp_135, __pyx_k_135, sizeof(__pyx_k_135), 0, 0, 0},
+  {&__pyx_kp_136, __pyx_k_136, sizeof(__pyx_k_136), 0, 0, 0},
+  {&__pyx_kp_140, __pyx_k_140, sizeof(__pyx_k_140), 0, 0, 0},
+  {&__pyx_kp_141, __pyx_k_141, sizeof(__pyx_k_141), 0, 0, 0},
+  {&__pyx_kp_145, __pyx_k_145, sizeof(__pyx_k_145), 0, 0, 0},
+  {&__pyx_kp_146, __pyx_k_146, sizeof(__pyx_k_146), 0, 0, 0},
+  {&__pyx_kp_147, __pyx_k_147, sizeof(__pyx_k_147), 0, 0, 0},
+  {&__pyx_kp_148, __pyx_k_148, sizeof(__pyx_k_148), 0, 0, 0},
+  {&__pyx_kp_149, __pyx_k_149, sizeof(__pyx_k_149), 0, 0, 0},
+  {&__pyx_kp_150, __pyx_k_150, sizeof(__pyx_k_150), 0, 0, 0},
+  {&__pyx_kp_151, __pyx_k_151, sizeof(__pyx_k_151), 0, 0, 0},
+  {&__pyx_kp_152, __pyx_k_152, sizeof(__pyx_k_152), 0, 0, 0},
+  {&__pyx_kp_153, __pyx_k_153, sizeof(__pyx_k_153), 0, 0, 0},
+  {&__pyx_kp_154, __pyx_k_154, sizeof(__pyx_k_154), 0, 0, 0},
+  {&__pyx_kp_155, __pyx_k_155, sizeof(__pyx_k_155), 0, 0, 0},
+  {&__pyx_kp_156, __pyx_k_156, sizeof(__pyx_k_156), 0, 0, 0},
+  {&__pyx_kp_157, __pyx_k_157, sizeof(__pyx_k_157), 0, 0, 0},
+  {&__pyx_kp_158, __pyx_k_158, sizeof(__pyx_k_158), 0, 0, 0},
+  {&__pyx_kp_159, __pyx_k_159, sizeof(__pyx_k_159), 0, 0, 0},
+  {&__pyx_kp_160, __pyx_k_160, sizeof(__pyx_k_160), 0, 0, 0},
+  {&__pyx_kp_161, __pyx_k_161, sizeof(__pyx_k_161), 0, 0, 0},
+  {&__pyx_kp_162, __pyx_k_162, sizeof(__pyx_k_162), 0, 0, 0},
+  {&__pyx_kp_163, __pyx_k_163, sizeof(__pyx_k_163), 0, 0, 0},
+  {&__pyx_kp_167, __pyx_k_167, sizeof(__pyx_k_167), 0, 0, 0},
+  {&__pyx_kp_168, __pyx_k_168, sizeof(__pyx_k_168), 0, 0, 0},
+  {&__pyx_kp_172, __pyx_k_172, sizeof(__pyx_k_172), 0, 0, 0},
+  {&__pyx_kp_173, __pyx_k_173, sizeof(__pyx_k_173), 0, 0, 0},
+  {&__pyx_kp_174, __pyx_k_174, sizeof(__pyx_k_174), 0, 0, 0},
+  {&__pyx_kp_178, __pyx_k_178, sizeof(__pyx_k_178), 0, 0, 0},
+  {&__pyx_kp_179, __pyx_k_179, sizeof(__pyx_k_179), 0, 0, 0},
+  {&__pyx_kp_180, __pyx_k_180, sizeof(__pyx_k_180), 0, 0, 0},
+  {&__pyx_kp_184, __pyx_k_184, sizeof(__pyx_k_184), 0, 0, 0},
+  {&__pyx_kp_187, __pyx_k_187, sizeof(__pyx_k_187), 0, 0, 0},
+  {&__pyx_kp_188, __pyx_k_188, sizeof(__pyx_k_188), 0, 0, 0},
+  {&__pyx_kp_192, __pyx_k_192, sizeof(__pyx_k_192), 0, 0, 0},
+  {&__pyx_kp_193, __pyx_k_193, sizeof(__pyx_k_193), 0, 0, 0},
+  {&__pyx_kp_194, __pyx_k_194, sizeof(__pyx_k_194), 0, 0, 0},
+  {&__pyx_kp_198, __pyx_k_198, sizeof(__pyx_k_198), 0, 0, 0},
+  {&__pyx_kp_199, __pyx_k_199, sizeof(__pyx_k_199), 0, 0, 0},
+  {&__pyx_kp_200, __pyx_k_200, sizeof(__pyx_k_200), 0, 0, 0},
+  {&__pyx_kp_204, __pyx_k_204, sizeof(__pyx_k_204), 0, 0, 0},
+  {&__pyx_kp_205, __pyx_k_205, sizeof(__pyx_k_205), 0, 0, 0},
+  {&__pyx_kp_206, __pyx_k_206, sizeof(__pyx_k_206), 0, 0, 0},
+  {&__pyx_kp_210, __pyx_k_210, sizeof(__pyx_k_210), 0, 0, 0},
+  {&__pyx_kp_211, __pyx_k_211, sizeof(__pyx_k_211), 0, 0, 0},
+  {&__pyx_kp_212, __pyx_k_212, sizeof(__pyx_k_212), 0, 0, 0},
+  {&__pyx_kp_216, __pyx_k_216, sizeof(__pyx_k_216), 0, 0, 0},
+  {&__pyx_kp_217, __pyx_k_217, sizeof(__pyx_k_217), 0, 0, 0},
+  {&__pyx_kp_218, __pyx_k_218, sizeof(__pyx_k_218), 0, 0, 0},
+  {&__pyx_kp_224, __pyx_k_224, sizeof(__pyx_k_224), 0, 0, 0},
+  {&__pyx_kp_228, __pyx_k_228, sizeof(__pyx_k_228), 0, 0, 0},
+  {&__pyx_kp_229, __pyx_k_229, sizeof(__pyx_k_229), 0, 0, 0},
+  {&__pyx_kp_230, __pyx_k_230, sizeof(__pyx_k_230), 0, 0, 0},
+  {&__pyx_kp_234, __pyx_k_234, sizeof(__pyx_k_234), 0, 0, 0},
+  {&__pyx_kp_235, __pyx_k_235, sizeof(__pyx_k_235), 0, 0, 0},
+  {&__pyx_kp_236, __pyx_k_236, sizeof(__pyx_k_236), 0, 0, 0},
+  {&__pyx_kp_240, __pyx_k_240, sizeof(__pyx_k_240), 0, 0, 0},
+  {&__pyx_kp_241, __pyx_k_241, sizeof(__pyx_k_241), 0, 0, 0},
+  {&__pyx_kp_242, __pyx_k_242, sizeof(__pyx_k_242), 0, 0, 0},
+  {&__pyx_kp_246, __pyx_k_246, sizeof(__pyx_k_246), 0, 0, 0},
+  {&__pyx_kp_247, __pyx_k_247, sizeof(__pyx_k_247), 0, 0, 0},
+  {&__pyx_kp_248, __pyx_k_248, sizeof(__pyx_k_248), 0, 0, 0},
+  {&__pyx_kp_252, __pyx_k_252, sizeof(__pyx_k_252), 0, 0, 0},
+  {&__pyx_kp_253, __pyx_k_253, sizeof(__pyx_k_253), 0, 0, 0},
+  {&__pyx_kp_254, __pyx_k_254, sizeof(__pyx_k_254), 0, 0, 0},
+  {&__pyx_kp_258, __pyx_k_258, sizeof(__pyx_k_258), 0, 0, 0},
+  {&__pyx_kp_259, __pyx_k_259, sizeof(__pyx_k_259), 0, 0, 0},
+  {&__pyx_kp_260, __pyx_k_260, sizeof(__pyx_k_260), 0, 0, 0},
+  {&__pyx_kp_264, __pyx_k_264, sizeof(__pyx_k_264), 0, 0, 0},
+  {&__pyx_kp_265, __pyx_k_265, sizeof(__pyx_k_265), 0, 0, 0},
+  {&__pyx_kp_266, __pyx_k_266, sizeof(__pyx_k_266), 0, 0, 0},
+  {&__pyx_kp_270, __pyx_k_270, sizeof(__pyx_k_270), 0, 0, 0},
+  {&__pyx_kp_271, __pyx_k_271, sizeof(__pyx_k_271), 0, 0, 0},
+  {&__pyx_kp_272, __pyx_k_272, sizeof(__pyx_k_272), 0, 0, 0},
+  {&__pyx_kp_276, __pyx_k_276, sizeof(__pyx_k_276), 0, 0, 0},
+  {&__pyx_kp_277, __pyx_k_277, sizeof(__pyx_k_277), 0, 0, 0},
+  {&__pyx_kp_278, __pyx_k_278, sizeof(__pyx_k_278), 0, 0, 0},
+  {&__pyx_kp_282, __pyx_k_282, sizeof(__pyx_k_282), 0, 0, 0},
+  {&__pyx_kp_283, __pyx_k_283, sizeof(__pyx_k_283), 0, 0, 0},
+  {&__pyx_kp_284, __pyx_k_284, sizeof(__pyx_k_284), 0, 0, 0},
+  {&__pyx_kp_288, __pyx_k_288, sizeof(__pyx_k_288), 0, 0, 0},
+  {&__pyx_kp_289, __pyx_k_289, sizeof(__pyx_k_289), 0, 0, 0},
+  {&__pyx_kp_290, __pyx_k_290, sizeof(__pyx_k_290), 0, 0, 0},
+  {&__pyx_kp_294, __pyx_k_294, sizeof(__pyx_k_294), 0, 0, 0},
+  {&__pyx_kp_295, __pyx_k_295, sizeof(__pyx_k_295), 0, 0, 0},
+  {&__pyx_kp_296, __pyx_k_296, sizeof(__pyx_k_296), 0, 0, 0},
+  {&__pyx_kp_300, __pyx_k_300, sizeof(__pyx_k_300), 0, 0, 0},
+  {&__pyx_kp_301, __pyx_k_301, sizeof(__pyx_k_301), 0, 0, 0},
+  {&__pyx_kp_302, __pyx_k_302, sizeof(__pyx_k_302), 0, 0, 0},
+  {&__pyx_kp_306, __pyx_k_306, sizeof(__pyx_k_306), 0, 0, 0},
+  {&__pyx_kp_307, __pyx_k_307, sizeof(__pyx_k_307), 0, 0, 0},
+  {&__pyx_kp_308, __pyx_k_308, sizeof(__pyx_k_308), 0, 0, 0},
+  {&__pyx_kp_312, __pyx_k_312, sizeof(__pyx_k_312), 0, 0, 0},
+  {&__pyx_kp_313, __pyx_k_313, sizeof(__pyx_k_313), 0, 0, 0},
+  {&__pyx_kp_314, __pyx_k_314, sizeof(__pyx_k_314), 0, 0, 0},
+  {&__pyx_kp_318, __pyx_k_318, sizeof(__pyx_k_318), 0, 0, 0},
+  {&__pyx_kp_319, __pyx_k_319, sizeof(__pyx_k_319), 0, 0, 0},
+  {&__pyx_kp_320, __pyx_k_320, sizeof(__pyx_k_320), 0, 0, 0},
+  {&__pyx_kp_324, __pyx_k_324, sizeof(__pyx_k_324), 0, 0, 0},
+  {&__pyx_kp_325, __pyx_k_325, sizeof(__pyx_k_325), 0, 0, 0},
+  {&__pyx_kp_326, __pyx_k_326, sizeof(__pyx_k_326), 0, 0, 0},
+  {&__pyx_kp_330, __pyx_k_330, sizeof(__pyx_k_330), 0, 0, 0},
+  {&__pyx_kp_331, __pyx_k_331, sizeof(__pyx_k_331), 0, 0, 0},
+  {&__pyx_kp_332, __pyx_k_332, sizeof(__pyx_k_332), 0, 0, 0},
+  {&__pyx_kp_336, __pyx_k_336, sizeof(__pyx_k_336), 0, 0, 0},
+  {&__pyx_kp_337, __pyx_k_337, sizeof(__pyx_k_337), 0, 0, 0},
+  {&__pyx_kp_338, __pyx_k_338, sizeof(__pyx_k_338), 0, 0, 0},
+  {&__pyx_kp_342, __pyx_k_342, sizeof(__pyx_k_342), 0, 0, 0},
+  {&__pyx_kp_343, __pyx_k_343, sizeof(__pyx_k_343), 0, 0, 0},
+  {&__pyx_kp_344, __pyx_k_344, sizeof(__pyx_k_344), 0, 0, 0},
+  {&__pyx_kp_348, __pyx_k_348, sizeof(__pyx_k_348), 0, 0, 0},
+  {&__pyx_kp_349, __pyx_k_349, sizeof(__pyx_k_349), 0, 0, 0},
+  {&__pyx_kp_350, __pyx_k_350, sizeof(__pyx_k_350), 0, 0, 0},
+  {&__pyx_kp_351, __pyx_k_351, sizeof(__pyx_k_351), 0, 0, 0},
+  {&__pyx_kp_352, __pyx_k_352, sizeof(__pyx_k_352), 0, 0, 0},
+  {&__pyx_kp_353, __pyx_k_353, sizeof(__pyx_k_353), 0, 0, 0},
+  {&__pyx_kp_354, __pyx_k_354, sizeof(__pyx_k_354), 0, 0, 0},
+  {&__pyx_kp_355, __pyx_k_355, sizeof(__pyx_k_355), 0, 0, 0},
+  {&__pyx_kp_356, __pyx_k_356, sizeof(__pyx_k_356), 0, 0, 0},
+  {&__pyx_kp_357, __pyx_k_357, sizeof(__pyx_k_357), 0, 0, 0},
+  {&__pyx_kp_358, __pyx_k_358, sizeof(__pyx_k_358), 0, 0, 0},
+  {&__pyx_kp_359, __pyx_k_359, sizeof(__pyx_k_359), 0, 0, 0},
+  {&__pyx_kp_360, __pyx_k_360, sizeof(__pyx_k_360), 0, 0, 0},
+  {&__pyx_kp_361, __pyx_k_361, sizeof(__pyx_k_361), 0, 0, 0},
+  {&__pyx_kp_362, __pyx_k_362, sizeof(__pyx_k_362), 0, 0, 0},
+  {&__pyx_kp_363, __pyx_k_363, sizeof(__pyx_k_363), 0, 0, 0},
+  {&__pyx_kp_364, __pyx_k_364, sizeof(__pyx_k_364), 0, 0, 0},
+  {&__pyx_kp_365, __pyx_k_365, sizeof(__pyx_k_365), 0, 0, 0},
+  {&__pyx_kp_366, __pyx_k_366, sizeof(__pyx_k_366), 0, 0, 0},
+  {&__pyx_kp_367, __pyx_k_367, sizeof(__pyx_k_367), 0, 0, 0},
+  {&__pyx_kp_368, __pyx_k_368, sizeof(__pyx_k_368), 0, 0, 0},
+  {&__pyx_kp_369, __pyx_k_369, sizeof(__pyx_k_369), 0, 0, 0},
+  {&__pyx_kp_370, __pyx_k_370, sizeof(__pyx_k_370), 0, 0, 0},
+  {&__pyx_kp_371, __pyx_k_371, sizeof(__pyx_k_371), 0, 0, 0},
+  {&__pyx_kp_372, __pyx_k_372, sizeof(__pyx_k_372), 0, 0, 0},
+  {&__pyx_kp_373, __pyx_k_373, sizeof(__pyx_k_373), 0, 0, 0},
+  {&__pyx_kp_374, __pyx_k_374, sizeof(__pyx_k_374), 0, 0, 0},
+  {&__pyx_kp_375, __pyx_k_375, sizeof(__pyx_k_375), 0, 0, 0},
+  {&__pyx_kp_376, __pyx_k_376, sizeof(__pyx_k_376), 0, 0, 0},
+  {&__pyx_kp_377, __pyx_k_377, sizeof(__pyx_k_377), 0, 0, 0},
+  {&__pyx_kp_378, __pyx_k_378, sizeof(__pyx_k_378), 0, 0, 0},
+  {&__pyx_kp_379, __pyx_k_379, sizeof(__pyx_k_379), 0, 0, 0},
+  {&__pyx_kp_380, __pyx_k_380, sizeof(__pyx_k_380), 0, 0, 0},
+  {&__pyx_kp_381, __pyx_k_381, sizeof(__pyx_k_381), 0, 0, 0},
+  {&__pyx_kp_412, __pyx_k_412, sizeof(__pyx_k_412), 0, 0, 0},
+  {&__pyx_kp_414, __pyx_k_414, sizeof(__pyx_k_414), 0, 0, 0},
+  {&__pyx_kp_416, __pyx_k_416, sizeof(__pyx_k_416), 0, 0, 0},
+  {&__pyx_kp_418, __pyx_k_418, sizeof(__pyx_k_418), 0, 0, 0},
+  {&__pyx_kp_420, __pyx_k_420, sizeof(__pyx_k_420), 0, 0, 0},
+  {&__pyx_kp_422, __pyx_k_422, sizeof(__pyx_k_422), 0, 0, 0},
+  {&__pyx_kp_424, __pyx_k_424, sizeof(__pyx_k_424), 0, 0, 0},
+  {&__pyx_kp_457, __pyx_k_457, sizeof(__pyx_k_457), 0, 0, 0},
+  {0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_kp_property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_12 = PyInt_FromLong(12); if (unlikely(!__pyx_int_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_13 = PyInt_FromLong(13); if (unlikely(!__pyx_int_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_14 = PyInt_FromLong(14); if (unlikely(!__pyx_int_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_16 = PyInt_FromLong(16); if (unlikely(!__pyx_int_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initpurple(void); /*proto*/
+PyMODINIT_FUNC initpurple(void)
+#else
+PyMODINIT_FUNC PyInit_purple(void); /*proto*/
+PyMODINIT_FUNC PyInit_purple(void)
+#endif
+{
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Library function declarations ---*/
+  __pyx_init_filenames();
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4("purple", __pyx_methods, 0, 0, PYTHON_API_VERSION);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  #if PY_MAJOR_VERSION < 3
+  Py_INCREF(__pyx_m);
+  #endif
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME);
+  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_skip_dispatch = 0;
+  /*--- Global init code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_6purple_Purple = &__pyx_vtable_6purple_Purple;
+  *(void(**)(void))&__pyx_vtable_6purple_Purple.__core_ui_ops_ui_prefs_init = (void(*)(void))__pyx_f_6purple_6Purple___core_ui_ops_ui_prefs_init;
+  *(void(**)(void))&__pyx_vtable_6purple_Purple.__core_ui_ops_debug_init = (void(*)(void))__pyx_f_6purple_6Purple___core_ui_ops_debug_init;
+  *(void(**)(void))&__pyx_vtable_6purple_Purple.__core_ui_ops_ui_init = (void(*)(void))__pyx_f_6purple_6Purple___core_ui_ops_ui_init;
+  *(void(**)(void))&__pyx_vtable_6purple_Purple.__core_ui_ops_quit = (void(*)(void))__pyx_f_6purple_6Purple___core_ui_ops_quit;
+  *(void(**)(void))&__pyx_vtable_6purple_Purple.__core_ui_ops_get_ui_info = (void(*)(void))__pyx_f_6purple_6Purple___core_ui_ops_get_ui_info;
+  if (PyType_Ready(&__pyx_type_6purple_Purple) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_6purple_Purple.tp_dict, __pyx_vtabptr_6purple_Purple) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Purple", (PyObject *)&__pyx_type_6purple_Purple) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_Purple = &__pyx_type_6purple_Purple;
+  __pyx_vtabptr_6purple_Protocol = &__pyx_vtable_6purple_Protocol;
+  *(void(**)(void))&__pyx_vtable_6purple_Protocol._get_structure = (void(*)(void))__pyx_f_6purple_8Protocol__get_structure;
+  if (PyType_Ready(&__pyx_type_6purple_Protocol) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_6purple_Protocol.tp_dict, __pyx_vtabptr_6purple_Protocol) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Protocol", (PyObject *)&__pyx_type_6purple_Protocol) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_Protocol = &__pyx_type_6purple_Protocol;
+  if (PyType_Ready(&__pyx_type_6purple_ProxyInfoType) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "ProxyInfoType", (PyObject *)&__pyx_type_6purple_ProxyInfoType) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_ProxyInfoType = &__pyx_type_6purple_ProxyInfoType;
+  if (PyType_Ready(&__pyx_type_6purple_ProxyInfo) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "ProxyInfo", (PyObject *)&__pyx_type_6purple_ProxyInfo) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_ProxyInfo = &__pyx_type_6purple_ProxyInfo;
+  __pyx_vtabptr_6purple_Account = &__pyx_vtable_6purple_Account;
+  *(void(**)(void))&__pyx_vtable_6purple_Account._get_structure = (void(*)(void))__pyx_f_6purple_7Account__get_structure;
+  if (PyType_Ready(&__pyx_type_6purple_Account) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_6purple_Account.tp_dict, __pyx_vtabptr_6purple_Account) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Account", (PyObject *)&__pyx_type_6purple_Account) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_Account = &__pyx_type_6purple_Account;
+  __pyx_vtabptr_6purple_Buddy = &__pyx_vtable_6purple_Buddy;
+  *(void(**)(void))&__pyx_vtable_6purple_Buddy._get_structure = (void(*)(void))__pyx_f_6purple_5Buddy__get_structure;
+  if (PyType_Ready(&__pyx_type_6purple_Buddy) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_6purple_Buddy.tp_dict, __pyx_vtabptr_6purple_Buddy) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Buddy", (PyObject *)&__pyx_type_6purple_Buddy) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_Buddy = &__pyx_type_6purple_Buddy;
+  __pyx_vtabptr_6purple_Conversation = &__pyx_vtable_6purple_Conversation;
+  *(void(**)(void))&__pyx_vtable_6purple_Conversation._get_structure = (void(*)(void))__pyx_f_6purple_12Conversation__get_structure;
+  if (PyType_Ready(&__pyx_type_6purple_Conversation) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_6purple_Conversation.tp_dict, __pyx_vtabptr_6purple_Conversation) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Conversation", (PyObject *)&__pyx_type_6purple_Conversation) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6purple_Conversation = &__pyx_type_6purple_Conversation;
+  /*--- Type import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":25
+ *     glib.guint glib_input_add(glib.gint fd, eventloop.PurpleInputCondition condition, eventloop.PurpleInputFunction function, glib.gpointer data)
+ * 
+ * import ecore             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.GHashTable *c_ui_info
+ */
+  __pyx_1 = __Pyx_Import(__pyx_kp_ecore, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_ecore, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":29
+ * cdef glib.GHashTable *c_ui_info
+ * 
+ * c_ui_info = NULL             # <<<<<<<<<<<<<<
+ * 
+ * cdef char *c_ui_name
+ */
+  __pyx_v_6purple_c_ui_info = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":25
+ *     ctypedef char const_char "const char"
+ * 
+ * account_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_account_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":27
+ * account_cbs = {}
+ * 
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_deny_cb = NULL
+ * cdef void *c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":28
+ * 
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_authorize_cb = NULL
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ * cdef void *c_request_authorize_user_data = NULL
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":29
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_authorize_cb = NULL
+ * cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_deny_cb = NULL
+ * cdef void *c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
+ * 
+ * def call_authorize_cb():
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":25
+ *     ctypedef char const_char "const char"
+ * 
+ * blist_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_blist_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":22
+ * cimport purple
+ * 
+ * cdef extern from *:             # <<<<<<<<<<<<<<
+ *     ctypedef char const_char "const char"
+ * 
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_connection_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":27
+ *     ctypedef long int time_t
+ * 
+ * conversation_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef void create_conversation(conversation.PurpleConversation *conv):
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_conversation_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":26
+ *     ctypedef int size_t
+ * 
+ * notify_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_message(notify.PurpleNotifyMsgType type, \
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_notify_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":27
+ *     ctypedef void* va_list
+ * 
+ * request_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_input(const_char *title, const_char *primary, \
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_request_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":22
+ * cimport purple
+ * 
+ * signal_cbs = {}             # <<<<<<<<<<<<<<
+ * 
+ * cdef extern from *:
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_kp_signal_cbs, ((PyObject *)__pyx_1)) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":96
+ *         global c_ui_name
+ *         return str(c_ui_name)
+ *     ui_name = property(__get_ui_name)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef void __core_ui_ops_ui_prefs_init(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Purple, __pyx_kp___get_ui_name); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Purple->tp_dict, __pyx_kp_ui_name, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Purple);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":43
+ *     def __get_exists(self):
+ *         return self.__exists
+ *     exists = property(__get_exists)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_id(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Protocol, __pyx_kp___get_exists); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Protocol->tp_dict, __pyx_kp_exists, __pyx_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Protocol);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":47
+ *     def __get_id(self):
+ *         return self.__id
+ *     id = property(__get_id)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_name(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Protocol, __pyx_kp___get_id); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Protocol->tp_dict, __pyx_kp_id, __pyx_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Protocol);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":58
+ *                 return None
+ *         return None
+ *     name = property(__get_name)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_options_labels(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Protocol, __pyx_kp___get_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Protocol->tp_dict, __pyx_kp_name, __pyx_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Protocol);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":92
+ * 
+ *         return po
+ *     options_labels = property(__get_options_labels)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_options_values(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Protocol, __pyx_kp_3); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Protocol->tp_dict, __pyx_kp_options_labels, __pyx_1) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Protocol);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":148
+ * 
+ *         return po
+ *     options_values = property(__get_options_values)             # <<<<<<<<<<<<<<
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Protocol, __pyx_kp_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Protocol->tp_dict, __pyx_kp_options_values, __pyx_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Protocol);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":31
+ *         self.c_type = proxy.PURPLE_PROXY_NONE
+ *         return self
+ *     NONE = property(get_NONE)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_USE_GLOBAL(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_ProxyInfoType, __pyx_kp_get_NONE); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_ProxyInfoType->tp_dict, __pyx_kp_NONE, __pyx_1) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_ProxyInfoType);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":36
+ *         self.c_type = proxy.PURPLE_PROXY_USE_GLOBAL
+ *         return self
+ *     USE_GLOBAL = property(get_USE_GLOBAL)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_HTTP(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_ProxyInfoType, __pyx_kp_get_USE_GLOBAL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_ProxyInfoType->tp_dict, __pyx_kp_USE_GLOBAL, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_ProxyInfoType);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":41
+ *         self.c_type = proxy.PURPLE_PROXY_HTTP
+ *         return self
+ *     HTTP = property(get_HTTP)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_SOCKS4(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_ProxyInfoType, __pyx_kp_get_HTTP); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_ProxyInfoType->tp_dict, __pyx_kp_HTTP, __pyx_1) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_ProxyInfoType);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":54
+ *         self.c_type = proxy.PURPLE_PROXY_USE_ENVVAR
+ *         return self
+ *     USE_ENVVAR = property(get_USE_ENVVAR)             # <<<<<<<<<<<<<<
+ * 
+ * cdef class ProxyInfo:
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_ProxyInfoType, __pyx_kp_get_USE_ENVVAR); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_ProxyInfoType->tp_dict, __pyx_kp_USE_ENVVAR, __pyx_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_ProxyInfoType);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":49
+ *                 self.__protocol.id)
+ * 
+ *     def __is_connected(self):             # <<<<<<<<<<<<<<
+ *         if self.__exists:
+ *             return account.purple_account_is_connected(self._get_structure())
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___is_connected); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_is_connected, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":61
+ *         else:
+ *             return None
+ *     is_connecting = property(__is_connecting)             # <<<<<<<<<<<<<<
+ * 
+ *     def __is_disconnected(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___is_connecting); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_is_connecting, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":69
+ *         else:
+ *             return None
+ *     is_disconnected = property(__is_disconnected)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_core(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___is_disconnected); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_is_disconnected, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":73
+ *     def __get_core(self):
+ *         return self.__core
+ *     core = property(__get_core)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_exists(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_core); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_core, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":77
+ *     def __get_exists(self):
+ *         return self.__exists
+ *     exists = property(__get_exists)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_username(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_exists); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_exists, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":90
+ *         else:
+ *             return self.__username
+ *     username = property(__get_username)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_protocol(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_username, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":94
+ *     def __get_protocol(self):
+ *         return self.__protocol
+ *     protocol = property(__get_protocol)             # <<<<<<<<<<<<<<
+ * 
+ *     def _get_protocol_options(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_protocol); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_protocol, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":170
+ * 
+ *         return po
+ *     protocol_options = property(_get_protocol_options)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_password(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp_7); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_protocol_options, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":183
+ *         else:
+ *             return None
+ *     password = property(__get_password)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_alias(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_password); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_password, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":195
+ *         else:
+ *             return None
+ *     alias = property(__get_alias)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_user_info(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_alias, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":207
+ *         else:
+ *             return None
+ *     user_info = property(__get_user_info)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_remember_password(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_user_info); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_user_info, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":215
+ *         else:
+ *             return None
+ *     remember_password = property(__get_remember_password)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_enabled(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp_8); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_remember_password, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":223
+ *         else:
+ *             return None
+ *     enabled = property(__get_enabled)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_status_types(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_enabled); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_enabled, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":244
+ *              return None
+ * 
+ *     status_types = property(__get_status_types)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_active_status(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_status_types); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_status_types, __pyx_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":267
+ *         else:
+ *             return None
+ *     active_status = property(__get_active_status)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_username(self, username):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Account, __pyx_kp___get_active_status); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Account->tp_dict, __pyx_kp_active_status, __pyx_1) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":49
+ *     def __get_exists(self):
+ *         return self.__exists
+ *     exists = property(__get_exists)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_name(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_exists); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_exists, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":56
+ *         else:
+ *             return self.__name
+ *     name = property(__get_name)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_account(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_name); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_name, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":63
+ *         else:
+ *             return None
+ *     account = property(__get_account)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_alias(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_account); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_account, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":73
+ *         else:
+ *             return None
+ *     alias = property(__get_alias)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_group(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_alias); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_alias, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":82
+ *         else:
+ *             return None
+ *     group = property(__get_group)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_server_alias(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_group); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_group, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":92
+ *         else:
+ *             return None
+ *     server_alias = property(__get_server_alias)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_contact_alias(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_server_alias); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_server_alias, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":102
+ *         else:
+ *             return None
+ *     contact_alias = property(__get_contact_alias)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_local_alias(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_contact_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_contact_alias, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":112
+ *         else:
+ *             return None
+ *     local_alias = property(__get_local_alias)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_available(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_local_alias); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_local_alias, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":120
+ *         else:
+ *             return None
+ *     available = property(__get_available)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_online(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_available); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_available, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":128
+ *         else:
+ *             return None
+ *     online = property(__get_online)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_idle(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_online); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_online, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":136
+ *         else:
+ *             return None
+ *     idle = property(__get_idle)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_active_status(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_idle); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_idle, __pyx_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":160
+ *         else:
+ *             return None
+ *     active_status = property(__get_active_status)             # <<<<<<<<<<<<<<
+ * 
+ *     def set_alias(self, alias):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Buddy, __pyx_kp___get_active_status); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Buddy->tp_dict, __pyx_kp_active_status, __pyx_1) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Buddy);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":57
+ *     def __get_exists(self):
+ *         return self.__exists
+ *     exists = property(__get_exists)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_account(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Conversation, __pyx_kp___get_exists); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Conversation->tp_dict, __pyx_kp_exists, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Conversation);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":64
+ *         else:
+ *             return None
+ *     account = property(__get_account)             # <<<<<<<<<<<<<<
+ * 
+ *     def __get_name(self):
+ */
+  __pyx_1 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Conversation, __pyx_kp___get_account); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Conversation->tp_dict, __pyx_kp_account, __pyx_1) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Conversation);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation.pyx":72
+ *         else:
+ *             return None
+ *     name = property(__get_name)             # <<<<<<<<<<<<<<
+ * 
+ *     def new(self):
+ */
+  __pyx_2 = __Pyx_GetName((PyObject *)__pyx_ptype_6purple_Conversation, __pyx_kp___get_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_6purple_Conversation->tp_dict, __pyx_kp_name, __pyx_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyType_Modified(__pyx_ptype_6purple_Conversation);
+
+  /* "libpurple/idle.pxd":1
+ * #             # <<<<<<<<<<<<<<
+ * #  Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia
+ * #
+ */
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_AddTraceback("purple");
+  #if PY_MAJOR_VERSION >= 3
+  return NULL;
+  #endif
+}
+
+static const char *__pyx_filenames[] = {
+  "purple.pyx",
+  "account_cbs.pxd",
+  "blist_cbs.pxd",
+  "connection_cbs.pxd",
+  "conversation_cbs.pxd",
+  "notify_cbs.pxd",
+  "request_cbs.pxd",
+  "signal_cbs.pxd",
+  "util.pxd",
+  "protocol.pyx",
+  "proxy.pyx",
+  "account.pyx",
+  "buddy.pyx",
+  "conversation.pyx",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+  __pyx_f = __pyx_filenames;
+}
+
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AS_STRING(kw_name));
+        #endif
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *number, *more_or_less;
+
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    number = (num_expected == 1) ? "" : "s";
+    PyErr_Format(PyExc_TypeError,
+        #if PY_VERSION_HEX < 0x02050000
+            "%s() takes %s %d positional argument%s (%d given)",
+        #else
+            "%s() takes %s %zd positional argument%s (%zd given)",
+        #endif
+        func_name, more_or_less, num_expected, number, num_found);
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        #if PY_MAJOR_VERSION < 3
+        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+        #else
+        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+        #endif
+            goto invalid_keyword_type;
+        } else {
+            name = argnames;
+            while (*name && (**name != key)) name++;
+            if (*name) {
+                if (name < first_kw_arg) goto arg_passed_twice;
+                values[name-argnames] = value;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        strcmp(PyString_AS_STRING(**name),
+                               PyString_AS_STRING(key)) == 0) break;
+                    #endif
+                }
+                if (*name) {
+                    values[name-argnames] = value;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            strcmp(PyString_AS_STRING(**name),
+                                   PyString_AS_STRING(key)) == 0) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
+                }
+            }
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+static INLINE int __Pyx_CheckKeywordStrings(
+    PyObject *kwdict,
+    const char* function_name,
+    int kw_allowed)
+{
+    PyObject* key = 0;
+    Py_ssize_t pos = 0;
+    while (PyDict_Next(kwdict, &pos, &key, 0)) {
+        #if PY_MAJOR_VERSION < 3
+        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
+        #else
+        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key)))
+        #endif
+            goto invalid_keyword_type;
+    }
+    if ((!kw_allowed) && unlikely(key))
+        goto invalid_keyword;
+    return 1;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    return 0;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+    return 0;
+}
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (!type) {
+        PyErr_Format(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (Py_TYPE(obj) == type) return 1;
+    }
+    else {
+        if (PyObject_TypeCheck(obj, type)) return 1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%s' has incorrect type (expected %s, got %s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+    return 0;
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+    PyObject *__import__ = 0;
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
+    if (!__import__)
+        goto bad;
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    module = PyObject_CallFunction(__import__, "OOOO",
+        name, global_dict, empty_dict, list);
+bad:
+    Py_XDECREF(empty_list);
+    Py_XDECREF(__import__);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
+    PyObject *result;
+    result = PyObject_GetAttr(dict, name);
+    if (!result)
+        PyErr_SetObject(PyExc_NameError, name);
+    return result;
+}
+
+static void __Pyx_WriteUnraisable(const char *name) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
+}
+
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+    PyObject *pycobj = 0;
+    int result;
+    
+    pycobj = PyCObject_FromVoidPtr(vtable, 0);
+    if (!pycobj)
+        goto bad;
+    if (PyDict_SetItemString(dict, "__pyx_vtable__", pycobj) < 0)
+        goto bad;
+    result = 0;
+    goto done;
+
+bad:
+    result = -1;
+done:
+    Py_XDECREF(pycobj);
+    return result;
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(const char *funcname) {
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    PyObject *py_globals = 0;
+    PyObject *empty_string = 0;
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(__pyx_filename);
+    #else
+    py_srcfile = PyUnicode_FromString(__pyx_filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (__pyx_clineno) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
+    #if PY_MAJOR_VERSION < 3
+    empty_string = PyString_FromStringAndSize("", 0);
+    #else
+    empty_string = PyBytes_FromStringAndSize("", 0);
+    #endif
+    if (!empty_string) goto bad;
+    py_code = PyCode_New(
+        0,            /*int argcount,*/
+        #if PY_MAJOR_VERSION >= 3
+        0,            /*int kwonlyargcount,*/
+        #endif
+        0,            /*int nlocals,*/
+        0,            /*int stacksize,*/
+        0,            /*int flags,*/
+        empty_string, /*PyObject *code,*/
+        __pyx_empty_tuple,  /*PyObject *consts,*/
+        __pyx_empty_tuple,  /*PyObject *names,*/
+        __pyx_empty_tuple,  /*PyObject *varnames,*/
+        __pyx_empty_tuple,  /*PyObject *freevars,*/
+        __pyx_empty_tuple,  /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        __pyx_lineno,   /*int firstlineno,*/
+        empty_string  /*PyObject *lnotab*/
+    );
+    if (!py_code) goto bad;
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        py_globals,          /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    py_frame->f_lineno = __pyx_lineno;
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    Py_XDECREF(empty_string);
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode && (!t->is_identifier)) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else  /* Python 3+ has unicode identifiers */
+        if (t->is_identifier || (t->is_unicode && t->intern)) {
+            *t->p = PyUnicode_InternFromString(t->s);
+        } else if (t->is_unicode) {
+            *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        ++t;
+    }
+    return 0;
+}
+
+/* Type Conversion Functions */
+
+static INLINE Py_ssize_t __pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject* x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+
+static INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   if (x == Py_True) return 1;
+   else if (x == Py_False) return 0;
+   else return PyObject_IsTrue(x);
+}
+
+static INLINE PY_LONG_LONG __pyx_PyInt_AsLongLong(PyObject* x) {
+    if (PyInt_CheckExact(x)) {
+        return PyInt_AS_LONG(x);
+    }
+    else if (PyLong_CheckExact(x)) {
+        return PyLong_AsLongLong(x);
+    }
+    else {
+        PY_LONG_LONG val;
+        PyObject* tmp = PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1;
+        val = __pyx_PyInt_AsLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static INLINE unsigned PY_LONG_LONG __pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
+    if (PyInt_CheckExact(x)) {
+        long val = PyInt_AS_LONG(x);
+        if (unlikely(val < 0)) {
+            PyErr_SetString(PyExc_TypeError, "Negative assignment to unsigned type.");
+            return (unsigned PY_LONG_LONG)-1;
+        }
+        return val;
+    }
+    else if (PyLong_CheckExact(x)) {
+        return PyLong_AsUnsignedLongLong(x);
+    }
+    else {
+        PY_LONG_LONG val;
+        PyObject* tmp = PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1;
+        val = __pyx_PyInt_AsUnsignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+
+static INLINE unsigned char __pyx_PyInt_unsigned_char(PyObject* x) {
+    if (sizeof(unsigned char) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        unsigned char val = (unsigned char)long_val;
+        if (unlikely((val != long_val)  || (long_val < 0))) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to unsigned char");
+            return (unsigned char)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE unsigned short __pyx_PyInt_unsigned_short(PyObject* x) {
+    if (sizeof(unsigned short) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        unsigned short val = (unsigned short)long_val;
+        if (unlikely((val != long_val)  || (long_val < 0))) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to unsigned short");
+            return (unsigned short)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE char __pyx_PyInt_char(PyObject* x) {
+    if (sizeof(char) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        char val = (char)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to char");
+            return (char)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE short __pyx_PyInt_short(PyObject* x) {
+    if (sizeof(short) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        short val = (short)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to short");
+            return (short)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE int __pyx_PyInt_int(PyObject* x) {
+    if (sizeof(int) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        int val = (int)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to int");
+            return (int)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE long __pyx_PyInt_long(PyObject* x) {
+    if (sizeof(long) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        long val = (long)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to long");
+            return (long)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE signed char __pyx_PyInt_signed_char(PyObject* x) {
+    if (sizeof(signed char) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        signed char val = (signed char)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed char");
+            return (signed char)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE signed short __pyx_PyInt_signed_short(PyObject* x) {
+    if (sizeof(signed short) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        signed short val = (signed short)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed short");
+            return (signed short)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE signed int __pyx_PyInt_signed_int(PyObject* x) {
+    if (sizeof(signed int) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        signed int val = (signed int)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed int");
+            return (signed int)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE signed long __pyx_PyInt_signed_long(PyObject* x) {
+    if (sizeof(signed long) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        signed long val = (signed long)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed long");
+            return (signed long)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+
+static INLINE long double __pyx_PyInt_long_double(PyObject* x) {
+    if (sizeof(long double) < sizeof(long)) {
+        long long_val = __pyx_PyInt_AsLong(x);
+        long double val = (long double)long_val;
+        if (unlikely((val != long_val) )) {
+            PyErr_SetString(PyExc_OverflowError, "value too large to convert to long double");
+            return (long double)-1;
+        }
+        return val;
+    }
+    else {
+        return __pyx_PyInt_AsLong(x);
+    }
+}
+