ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- include/python3.4m/fileutils.h000064400000002735152342604300012271 0ustar00#ifndef Py_FILEUTILS_H #define Py_FILEUTILS_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(PyObject *) _Py_device_encoding(int); PyAPI_FUNC(wchar_t *) _Py_char2wchar( const char *arg, size_t *size); PyAPI_FUNC(char*) _Py_wchar2char( const wchar_t *text, size_t *error_pos); #if defined(HAVE_STAT) && !defined(MS_WINDOWS) PyAPI_FUNC(int) _Py_wstat( const wchar_t* path, struct stat *buf); #endif #ifdef HAVE_STAT PyAPI_FUNC(int) _Py_stat( PyObject *path, struct stat *statbuf); #endif #ifndef Py_LIMITED_API PyAPI_FUNC(int) _Py_open( const char *pathname, int flags); #endif PyAPI_FUNC(FILE *) _Py_wfopen( const wchar_t *path, const wchar_t *mode); PyAPI_FUNC(FILE*) _Py_fopen( const char *pathname, const char *mode); PyAPI_FUNC(FILE*) _Py_fopen_obj( PyObject *path, const char *mode); #ifdef HAVE_READLINK PyAPI_FUNC(int) _Py_wreadlink( const wchar_t *path, wchar_t *buf, size_t bufsiz); #endif #ifdef HAVE_REALPATH PyAPI_FUNC(wchar_t*) _Py_wrealpath( const wchar_t *path, wchar_t *resolved_path, size_t resolved_path_size); #endif PyAPI_FUNC(wchar_t*) _Py_wgetcwd( wchar_t *buf, size_t size); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _Py_get_inheritable(int fd); PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, int *atomic_flag_works); PyAPI_FUNC(int) _Py_dup(int fd); #endif #ifdef __cplusplus } #endif #endif /* !Py_FILEUTILS_H */ include/python3.4m/pyatomic.h000064400000013470152342604300012114 0ustar00#ifndef Py_LIMITED_API #ifndef Py_ATOMIC_H #define Py_ATOMIC_H /* XXX: When compilers start offering a stdatomic.h with lock-free atomic_int and atomic_address types, include that here and rewrite the atomic operations in terms of it. */ #include "dynamic_annotations.h" #ifdef __cplusplus extern "C" { #endif /* This is modeled after the atomics interface from C1x, according to * the draft at * http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1425.pdf. * Operations and types are named the same except with a _Py_ prefix * and have the same semantics. * * Beware, the implementations here are deep magic. */ typedef enum _Py_memory_order { _Py_memory_order_relaxed, _Py_memory_order_acquire, _Py_memory_order_release, _Py_memory_order_acq_rel, _Py_memory_order_seq_cst } _Py_memory_order; typedef struct _Py_atomic_address { void *_value; } _Py_atomic_address; typedef struct _Py_atomic_int { int _value; } _Py_atomic_int; /* Only support GCC (for expression statements) and x86 (for simple * atomic semantics) for now */ #if defined(__GNUC__) && (defined(__i386__) || defined(__amd64)) static __inline__ void _Py_atomic_signal_fence(_Py_memory_order order) { if (order != _Py_memory_order_relaxed) __asm__ volatile("":::"memory"); } static __inline__ void _Py_atomic_thread_fence(_Py_memory_order order) { if (order != _Py_memory_order_relaxed) __asm__ volatile("mfence":::"memory"); } /* Tell the race checker about this operation's effects. */ static __inline__ void _Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order) { (void)address; /* shut up -Wunused-parameter */ switch(order) { case _Py_memory_order_release: case _Py_memory_order_acq_rel: case _Py_memory_order_seq_cst: _Py_ANNOTATE_HAPPENS_BEFORE(address); break; case _Py_memory_order_relaxed: case _Py_memory_order_acquire: break; } switch(order) { case _Py_memory_order_acquire: case _Py_memory_order_acq_rel: case _Py_memory_order_seq_cst: _Py_ANNOTATE_HAPPENS_AFTER(address); break; case _Py_memory_order_relaxed: case _Py_memory_order_release: break; } } #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ __extension__ ({ \ __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ __typeof__(atomic_val->_value) new_val = NEW_VAL;\ volatile __typeof__(new_val) *volatile_data = &atomic_val->_value; \ _Py_memory_order order = ORDER; \ _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ \ /* Perform the operation. */ \ _Py_ANNOTATE_IGNORE_WRITES_BEGIN(); \ switch(order) { \ case _Py_memory_order_release: \ _Py_atomic_signal_fence(_Py_memory_order_release); \ /* fallthrough */ \ case _Py_memory_order_relaxed: \ *volatile_data = new_val; \ break; \ \ case _Py_memory_order_acquire: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ __asm__ volatile("xchg %0, %1" \ : "+r"(new_val) \ : "m"(atomic_val->_value) \ : "memory"); \ break; \ } \ _Py_ANNOTATE_IGNORE_WRITES_END(); \ }) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ __extension__ ({ \ __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ __typeof__(atomic_val->_value) result; \ volatile __typeof__(result) *volatile_data = &atomic_val->_value; \ _Py_memory_order order = ORDER; \ _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ \ /* Perform the operation. */ \ _Py_ANNOTATE_IGNORE_READS_BEGIN(); \ switch(order) { \ case _Py_memory_order_release: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ /* Loads on x86 are not releases by default, so need a */ \ /* thread fence. */ \ _Py_atomic_thread_fence(_Py_memory_order_release); \ break; \ default: \ /* No fence */ \ break; \ } \ result = *volatile_data; \ switch(order) { \ case _Py_memory_order_acquire: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ /* Loads on x86 are automatically acquire operations so */ \ /* can get by with just a compiler fence. */ \ _Py_atomic_signal_fence(_Py_memory_order_acquire); \ break; \ default: \ /* No fence */ \ break; \ } \ _Py_ANNOTATE_IGNORE_READS_END(); \ result; \ }) #else /* !gcc x86 */ /* Fall back to other compilers and processors by assuming that simple volatile accesses are atomic. This is false, so people should port this. */ #define _Py_atomic_signal_fence(/*memory_order*/ ORDER) ((void)0) #define _Py_atomic_thread_fence(/*memory_order*/ ORDER) ((void)0) #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ ((ATOMIC_VAL)->_value = NEW_VAL) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ ((ATOMIC_VAL)->_value) #endif /* !gcc x86 */ /* Standardized shortcuts. */ #define _Py_atomic_store(ATOMIC_VAL, NEW_VAL) \ _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_seq_cst) #define _Py_atomic_load(ATOMIC_VAL) \ _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_seq_cst) /* Python-local extensions */ #define _Py_atomic_store_relaxed(ATOMIC_VAL, NEW_VAL) \ _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_relaxed) #define _Py_atomic_load_relaxed(ATOMIC_VAL) \ _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed) #ifdef __cplusplus } #endif #endif /* Py_ATOMIC_H */ #endif /* Py_LIMITED_API */ include/python3.4m/marshal.h000064400000001443152342604300011713 0ustar00 /* Interface for marshal.c */ #ifndef Py_MARSHAL_H #define Py_MARSHAL_H #ifdef __cplusplus extern "C" { #endif #define Py_MARSHAL_VERSION 4 PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int); PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int); PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int); #ifndef Py_LIMITED_API PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *); PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *); PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *); PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *); #endif PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(const char *, Py_ssize_t); #ifdef __cplusplus } #endif #endif /* !Py_MARSHAL_H */ include/python3.4m/abstract.h000064400000124106152342604300012071 0ustar00#ifndef Py_ABSTRACTOBJECT_H #define Py_ABSTRACTOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifdef PY_SSIZE_T_CLEAN #define PyObject_CallFunction _PyObject_CallFunction_SizeT #define PyObject_CallMethod _PyObject_CallMethod_SizeT #define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT #endif /* Abstract Object Interface (many thanks to Jim Fulton) */ /* PROPOSAL: A Generic Python Object Interface for Python C Modules Problem Python modules written in C that must access Python objects must do so through routines whose interfaces are described by a set of include files. Unfortunately, these routines vary according to the object accessed. To use these routines, the C programmer must check the type of the object being used and must call a routine based on the object type. For example, to access an element of a sequence, the programmer must determine whether the sequence is a list or a tuple: if(is_tupleobject(o)) e=gettupleitem(o,i) else if(is_listitem(o)) e=getlistitem(o,i) If the programmer wants to get an item from another type of object that provides sequence behavior, there is no clear way to do it correctly. The persistent programmer may peruse object.h and find that the _typeobject structure provides a means of invoking up to (currently about) 41 special operators. So, for example, a routine can get an item from any object that provides sequence behavior. However, to use this mechanism, the programmer must make their code dependent on the current Python implementation. Also, certain semantics, especially memory management semantics, may differ by the type of object being used. Unfortunately, these semantics are not clearly described in the current include files. An abstract interface providing more consistent semantics is needed. Proposal I propose the creation of a standard interface (with an associated library of routines and/or macros) for generically obtaining the services of Python objects. This proposal can be viewed as one components of a Python C interface consisting of several components. From the viewpoint of C access to Python services, we have (as suggested by Guido in off-line discussions): - "Very high level layer": two or three functions that let you exec or eval arbitrary Python code given as a string in a module whose name is given, passing C values in and getting C values out using mkvalue/getargs style format strings. This does not require the user to declare any variables of type "PyObject *". This should be enough to write a simple application that gets Python code from the user, execs it, and returns the output or errors. (Error handling must also be part of this API.) - "Abstract objects layer": which is the subject of this proposal. It has many functions operating on objects, and lest you do many things from C that you can also write in Python, without going through the Python parser. - "Concrete objects layer": This is the public type-dependent interface provided by the standard built-in types, such as floats, strings, and lists. This interface exists and is currently documented by the collection of include files provided with the Python distributions. From the point of view of Python accessing services provided by C modules: - "Python module interface": this interface consist of the basic routines used to define modules and their members. Most of the current extensions-writing guide deals with this interface. - "Built-in object interface": this is the interface that a new built-in type must provide and the mechanisms and rules that a developer of a new built-in type must use and follow. This proposal is a "first-cut" that is intended to spur discussion. See especially the lists of notes. The Python C object interface will provide four protocols: object, numeric, sequence, and mapping. Each protocol consists of a collection of related operations. If an operation that is not provided by a particular type is invoked, then a standard exception, NotImplementedError is raised with an operation name as an argument. In addition, for convenience this interface defines a set of constructors for building objects of built-in types. This is needed so new objects can be returned from C functions that otherwise treat objects generically. Memory Management For all of the functions described in this proposal, if a function retains a reference to a Python object passed as an argument, then the function will increase the reference count of the object. It is unnecessary for the caller to increase the reference count of an argument in anticipation of the object's retention. All Python objects returned from functions should be treated as new objects. Functions that return objects assume that the caller will retain a reference and the reference count of the object has already been incremented to account for this fact. A caller that does not retain a reference to an object that is returned from a function must decrement the reference count of the object (using DECREF(object)) to prevent memory leaks. Note that the behavior mentioned here is different from the current behavior for some objects (e.g. lists and tuples) when certain type-specific routines are called directly (e.g. setlistitem). The proposed abstraction layer will provide a consistent memory management interface, correcting for inconsistent behavior for some built-in types. Protocols xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ /* Object Protocol: */ /* Implemented elsewhere: int PyObject_Print(PyObject *o, FILE *fp, int flags); Print an object, o, on file, fp. Returns -1 on error. The flags argument is used to enable certain printing options. The only option currently supported is Py_Print_RAW. (What should be said about Py_Print_RAW?) */ /* Implemented elsewhere: int PyObject_HasAttrString(PyObject *o, const char *attr_name); Returns 1 if o has the attribute attr_name, and 0 otherwise. This is equivalent to the Python expression: hasattr(o,attr_name). This function always succeeds. */ /* Implemented elsewhere: PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name); Retrieve an attributed named attr_name form object o. Returns the attribute value on success, or NULL on failure. This is the equivalent of the Python expression: o.attr_name. */ /* Implemented elsewhere: int PyObject_HasAttr(PyObject *o, PyObject *attr_name); Returns 1 if o has the attribute attr_name, and 0 otherwise. This is equivalent to the Python expression: hasattr(o,attr_name). This function always succeeds. */ /* Implemented elsewhere: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); Retrieve an attributed named attr_name form object o. Returns the attribute value on success, or NULL on failure. This is the equivalent of the Python expression: o.attr_name. */ /* Implemented elsewhere: int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v); Set the value of the attribute named attr_name, for object o, to the value, v. Returns -1 on failure. This is the equivalent of the Python statement: o.attr_name=v. */ /* Implemented elsewhere: int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v); Set the value of the attribute named attr_name, for object o, to the value, v. Returns -1 on failure. This is the equivalent of the Python statement: o.attr_name=v. */ /* implemented as a macro: int PyObject_DelAttrString(PyObject *o, const char *attr_name); Delete attribute named attr_name, for object o. Returns -1 on failure. This is the equivalent of the Python statement: del o.attr_name. */ #define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL) /* implemented as a macro: int PyObject_DelAttr(PyObject *o, PyObject *attr_name); Delete attribute named attr_name, for object o. Returns -1 on failure. This is the equivalent of the Python statement: del o.attr_name. */ #define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL) /* Implemented elsewhere: PyObject *PyObject_Repr(PyObject *o); Compute the string representation of object, o. Returns the string representation on success, NULL on failure. This is the equivalent of the Python expression: repr(o). Called by the repr() built-in function. */ /* Implemented elsewhere: PyObject *PyObject_Str(PyObject *o); Compute the string representation of object, o. Returns the string representation on success, NULL on failure. This is the equivalent of the Python expression: str(o).) Called by the str() and print() built-in functions. */ /* Declared elsewhere PyAPI_FUNC(int) PyCallable_Check(PyObject *o); Determine if the object, o, is callable. Return 1 if the object is callable and 0 otherwise. This function always succeeds. */ PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw); /* Call a callable Python object, callable_object, with arguments and keywords arguments. The 'args' argument can not be NULL, but the 'kw' argument can be NULL. */ PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object, PyObject *args); /* Call a callable Python object, callable_object, with arguments given by the tuple, args. If no arguments are needed, then args may be NULL. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression: o(*args). */ PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object, const char *format, ...); /* Call a callable Python object, callable_object, with a variable number of C arguments. The C arguments are described using a mkvalue-style format string. The format may be NULL, indicating that no arguments are provided. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression: o(*args). */ PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, const char *method, const char *format, ...); /* Call the method named m of object o with a variable number of C arguments. The C arguments are described by a mkvalue format string. The format may be NULL, indicating that no arguments are provided. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression: o.method(args). */ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *o, _Py_Identifier *method, const char *format, ...); /* Like PyObject_CallMethod, but expect a _Py_Identifier* as the method name. */ PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable, const char *format, ...); PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *o, const char *name, const char *format, ...); PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *o, _Py_Identifier *name, const char *format, ...); PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable, ...); /* Call a callable Python object, callable_object, with a variable number of C arguments. The C arguments are provided as PyObject * values, terminated by a NULL. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression: o(*args). */ PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o, PyObject *method, ...); PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(PyObject *o, struct _Py_Identifier *method, ...); /* Call the method named m of object o with a variable number of C arguments. The C arguments are provided as PyObject * values, terminated by NULL. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression: o.method(args). */ /* Implemented elsewhere: long PyObject_Hash(PyObject *o); Compute and return the hash, hash_value, of an object, o. On failure, return -1. This is the equivalent of the Python expression: hash(o). */ /* Implemented elsewhere: int PyObject_IsTrue(PyObject *o); Returns 1 if the object, o, is considered to be true, 0 if o is considered to be false and -1 on failure. This is equivalent to the Python expression: not not o */ /* Implemented elsewhere: int PyObject_Not(PyObject *o); Returns 0 if the object, o, is considered to be true, 1 if o is considered to be false and -1 on failure. This is equivalent to the Python expression: not o */ PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o); /* On success, returns a type object corresponding to the object type of object o. On failure, returns NULL. This is equivalent to the Python expression: type(o). */ PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o); /* Return the size of object o. If the object, o, provides both sequence and mapping protocols, the sequence size is returned. On error, -1 is returned. This is the equivalent to the Python expression: len(o). */ /* For DLL compatibility */ #undef PyObject_Length PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o); #define PyObject_Length PyObject_Size #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o); PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t); #endif /* Guess the size of object o using len(o) or o.__length_hint__(). If neither of those return a non-negative value, then return the default value. If one of the calls fails, this function returns -1. */ PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key); /* Return element of o corresponding to the object, key, or NULL on failure. This is the equivalent of the Python expression: o[key]. */ PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v); /* Map the object, key, to the value, v. Returns -1 on failure. This is the equivalent of the Python statement: o[key]=v. */ PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key); /* Remove the mapping for object, key, from the object *o. Returns -1 on failure. This is equivalent to the Python statement: del o[key]. */ PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key); /* Delete the mapping for key from *o. Returns -1 on failure. This is the equivalent of the Python statement: del o[key]. */ /* old buffer API FIXME: usage of these should all be replaced in Python itself but for backwards compatibility we will implement them. Their usage without a corresponding "unlock" mechansim may create issues (but they would already be there). */ PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len); /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. 0 is returned on success. buffer and buffer_len are only set in case no error occurs. Otherwise, -1 is returned and an exception set. */ PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj); /* Checks whether an arbitrary object supports the (character, single segment) buffer interface. Returns 1 on success, 0 on failure. */ PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len); /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. 0 is returned on success. buffer and buffer_len are only set in case no error occurs. Otherwise, -1 is returned and an exception set. */ PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len); /* Takes an arbitrary object which must support the (writable, single segment) buffer interface and returns a pointer to a writable memory location in buffer of size buffer_len. 0 is returned on success. buffer and buffer_len are only set in case no error occurs. Otherwise, -1 is returned and an exception set. */ /* new buffer API */ #ifndef Py_LIMITED_API #define PyObject_CheckBuffer(obj) \ (((obj)->ob_type->tp_as_buffer != NULL) && \ ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL)) /* Return 1 if the getbuffer function is available, otherwise return 0 */ PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags); /* This is a C-API version of the getbuffer function call. It checks to make sure object has the required function pointer and issues the call. Returns -1 and raises an error on failure and returns 0 on success */ PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices); /* Get the memory area pointed to by the indices for the buffer given. Note that view->ndim is the assumed size of indices */ PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *); /* Return the implied itemsize of the data-format area from a struct-style description */ /* Implementation in memoryobject.c */ PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char order); PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char order); /* Copy len bytes of data from the contiguous chunk of memory pointed to by buf into the buffer exported by obj. Return 0 on success and return -1 and raise a PyBuffer_Error on error (i.e. the object does not have a buffer interface or it is not working). If fort is 'F', then if the object is multi-dimensional, then the data will be copied into the array in Fortran-style (first dimension varies the fastest). If fort is 'C', then the data will be copied into the array in C-style (last dimension varies the fastest). If fort is 'A', then it does not matter and the copy will be made in whatever way is more efficient. */ PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src); /* Copy the data from the src buffer to the buffer of destination */ PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort); PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims, Py_ssize_t *shape, Py_ssize_t *strides, int itemsize, char fort); /* Fill the strides array with byte-strides of a contiguous (Fortran-style if fort is 'F' or C-style otherwise) array of the given shape with the given number of bytes per element. */ PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf, Py_ssize_t len, int readonly, int flags); /* Fills in a buffer-info structure correctly for an exporter that can only share a contiguous chunk of memory of "unsigned bytes" of the given length. Returns 0 on success and -1 (with raising an error) on error. */ PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view); /* Releases a Py_buffer obtained from getbuffer ParseTuple's s*. */ #endif /* Py_LIMITED_API */ PyAPI_FUNC(PyObject *) PyObject_Format(PyObject* obj, PyObject *format_spec); /* Takes an arbitrary object and returns the result of calling obj.__format__(format_spec). */ /* Iterators */ PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *); /* Takes an object and returns an iterator for it. This is typically a new iterator but if the argument is an iterator, this returns itself. */ #define PyIter_Check(obj) \ ((obj)->ob_type->tp_iternext != NULL && \ (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented) PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); /* Takes an iterator object and calls its tp_iternext slot, returning the next value. If the iterator is exhausted, this returns NULL without setting an exception. NULL with an exception means an error occurred. */ /* Number Protocol:*/ PyAPI_FUNC(int) PyNumber_Check(PyObject *o); /* Returns 1 if the object, o, provides numeric protocols, and false otherwise. This function always succeeds. */ PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2); /* Returns the result of adding o1 and o2, or null on failure. This is the equivalent of the Python expression: o1+o2. */ PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2); /* Returns the result of subtracting o2 from o1, or null on failure. This is the equivalent of the Python expression: o1-o2. */ PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2); /* Returns the result of multiplying o1 and o2, or null on failure. This is the equivalent of the Python expression: o1*o2. */ PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2); /* Returns the result of dividing o1 by o2 giving an integral result, or null on failure. This is the equivalent of the Python expression: o1//o2. */ PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2); /* Returns the result of dividing o1 by o2 giving a float result, or null on failure. This is the equivalent of the Python expression: o1/o2. */ PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2); /* Returns the remainder of dividing o1 by o2, or null on failure. This is the equivalent of the Python expression: o1%o2. */ PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2); /* See the built-in function divmod. Returns NULL on failure. This is the equivalent of the Python expression: divmod(o1,o2). */ PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3); /* See the built-in function pow. Returns NULL on failure. This is the equivalent of the Python expression: pow(o1,o2,o3), where o3 is optional. */ PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o); /* Returns the negation of o on success, or null on failure. This is the equivalent of the Python expression: -o. */ PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o); /* Returns the (what?) of o on success, or NULL on failure. This is the equivalent of the Python expression: +o. */ PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o); /* Returns the absolute value of o, or null on failure. This is the equivalent of the Python expression: abs(o). */ PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o); /* Returns the bitwise negation of o on success, or NULL on failure. This is the equivalent of the Python expression: ~o. */ PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2); /* Returns the result of left shifting o1 by o2 on success, or NULL on failure. This is the equivalent of the Python expression: o1 << o2. */ PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2); /* Returns the result of right shifting o1 by o2 on success, or NULL on failure. This is the equivalent of the Python expression: o1 >> o2. */ PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2); /* Returns the result of bitwise and of o1 and o2 on success, or NULL on failure. This is the equivalent of the Python expression: o1&o2. */ PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2); /* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure. This is the equivalent of the Python expression: o1^o2. */ PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2); /* Returns the result of bitwise or on o1 and o2 on success, or NULL on failure. This is the equivalent of the Python expression: o1|o2. */ #define PyIndex_Check(obj) \ ((obj)->ob_type->tp_as_number != NULL && \ (obj)->ob_type->tp_as_number->nb_index != NULL) PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o); /* Returns the object converted to a Python int or NULL with an error raised on failure. */ PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc); /* Returns the object converted to Py_ssize_t by going through PyNumber_Index first. If an overflow error occurs while converting the int to Py_ssize_t, then the second argument is the error-type to return. If it is NULL, then the overflow error is cleared and the value is clipped. */ PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); /* Returns the o converted to an integer object on success, or NULL on failure. This is the equivalent of the Python expression: int(o). */ PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o); /* Returns the o converted to a float object on success, or NULL on failure. This is the equivalent of the Python expression: float(o). */ /* In-place variants of (some of) the above number protocol functions */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); /* Returns the result of adding o2 to o1, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 += o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); /* Returns the result of subtracting o2 from o1, possibly in-place or null on failure. This is the equivalent of the Python expression: o1 -= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); /* Returns the result of multiplying o1 by o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 *= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2); /* Returns the result of dividing o1 by o2 giving an integral result, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 /= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2); /* Returns the result of dividing o1 by o2 giving a float result, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 /= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); /* Returns the remainder of dividing o1 by o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 %= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3); /* Returns the result of raising o1 to the power of o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); /* Returns the result of left shifting o1 by o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 <<= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); /* Returns the result of right shifting o1 by o2, possibly in-place or null on failure. This is the equivalent of the Python expression: o1 >>= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); /* Returns the result of bitwise and of o1 and o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 &= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); /* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 ^= o2. */ PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); /* Returns the result of bitwise or of o1 and o2, possibly in-place, or null on failure. This is the equivalent of the Python expression: o1 |= o2. */ PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base); /* Returns the integer n converted to a string with a base, with a base marker of 0b, 0o or 0x prefixed if applicable. If n is not an int object, it is converted with PyNumber_Index first. */ /* Sequence protocol:*/ PyAPI_FUNC(int) PySequence_Check(PyObject *o); /* Return 1 if the object provides sequence protocol, and zero otherwise. This function always succeeds. */ PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o); /* Return the size of sequence object o, or -1 on failure. */ /* For DLL compatibility */ #undef PySequence_Length PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o); #define PySequence_Length PySequence_Size PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2); /* Return the concatenation of o1 and o2 on success, and NULL on failure. This is the equivalent of the Python expression: o1+o2. */ PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count); /* Return the result of repeating sequence object o count times, or NULL on failure. This is the equivalent of the Python expression: o1*count. */ PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i); /* Return the ith element of o, or NULL on failure. This is the equivalent of the Python expression: o[i]. */ PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); /* Return the slice of sequence object o between i1 and i2, or NULL on failure. This is the equivalent of the Python expression: o[i1:i2]. */ PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v); /* Assign object v to the ith element of o. Returns -1 on failure. This is the equivalent of the Python statement: o[i]=v. */ PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i); /* Delete the ith element of object v. Returns -1 on failure. This is the equivalent of the Python statement: del o[i]. */ PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v); /* Assign the sequence object, v, to the slice in sequence object, o, from i1 to i2. Returns -1 on failure. This is the equivalent of the Python statement: o[i1:i2]=v. */ PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); /* Delete the slice in sequence object, o, from i1 to i2. Returns -1 on failure. This is the equivalent of the Python statement: del o[i1:i2]. */ PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o); /* Returns the sequence, o, as a tuple on success, and NULL on failure. This is equivalent to the Python expression: tuple(o) */ PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o); /* Returns the sequence, o, as a list on success, and NULL on failure. This is equivalent to the Python expression: list(o) */ PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); /* Return the sequence, o, as a list, unless it's already a tuple or list. Use PySequence_Fast_GET_ITEM to access the members of this list, and PySequence_Fast_GET_SIZE to get its length. Returns NULL on failure. If the object does not support iteration, raises a TypeError exception with m as the message text. */ #define PySequence_Fast_GET_SIZE(o) \ (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o)) /* Return the size of o, assuming that o was returned by PySequence_Fast and is not NULL. */ #define PySequence_Fast_GET_ITEM(o, i)\ (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) /* Return the ith element of o, assuming that o was returned by PySequence_Fast, and that i is within bounds. */ #define PySequence_ITEM(o, i)\ ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) ) /* Assume tp_as_sequence and sq_item exist and that i does not need to be corrected for a negative index */ #define PySequence_Fast_ITEMS(sf) \ (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ : ((PyTupleObject *)(sf))->ob_item) /* Return a pointer to the underlying item array for an object retured by PySequence_Fast */ PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value); /* Return the number of occurrences on value on o, that is, return the number of keys for which o[key]==value. On failure, return -1. This is equivalent to the Python expression: o.count(value). */ PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob); /* Return -1 if error; 1 if ob in seq; 0 if ob not in seq. Use __contains__ if possible, else _PySequence_IterSearch(). */ #ifndef Py_LIMITED_API #define PY_ITERSEARCH_COUNT 1 #define PY_ITERSEARCH_INDEX 2 #define PY_ITERSEARCH_CONTAINS 3 PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation); #endif /* Iterate over seq. Result depends on the operation: PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if error. PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of obj in seq; set ValueError and return -1 if none found; also return -1 on error. PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error. */ /* For DLL-level backwards compatibility */ #undef PySequence_In PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value); /* For source-level backwards compatibility */ #define PySequence_In PySequence_Contains /* Determine if o contains value. If an item in o is equal to X, return 1, otherwise return 0. On error, return -1. This is equivalent to the Python expression: value in o. */ PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value); /* Return the first index for which o[i]=value. On error, return -1. This is equivalent to the Python expression: o.index(value). */ /* In-place versions of some of the above Sequence functions. */ PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); /* Append o2 to o1, in-place when possible. Return the resulting object, which could be o1, or NULL on failure. This is the equivalent of the Python expression: o1 += o2. */ PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count); /* Repeat o1 by count, in-place when possible. Return the resulting object, which could be o1, or NULL on failure. This is the equivalent of the Python expression: o1 *= count. */ /* Mapping protocol:*/ PyAPI_FUNC(int) PyMapping_Check(PyObject *o); /* Return 1 if the object provides mapping protocol, and zero otherwise. This function always succeeds. */ PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o); /* Returns the number of keys in object o on success, and -1 on failure. For objects that do not provide sequence protocol, this is equivalent to the Python expression: len(o). */ /* For DLL compatibility */ #undef PyMapping_Length PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o); #define PyMapping_Length PyMapping_Size /* implemented as a macro: int PyMapping_DelItemString(PyObject *o, const char *key); Remove the mapping for object, key, from the object *o. Returns -1 on failure. This is equivalent to the Python statement: del o[key]. */ #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K)) /* implemented as a macro: int PyMapping_DelItem(PyObject *o, PyObject *key); Remove the mapping for object, key, from the object *o. Returns -1 on failure. This is equivalent to the Python statement: del o[key]. */ #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K)) PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key); /* On success, return 1 if the mapping object has the key, key, and 0 otherwise. This is equivalent to the Python expression: key in o. This function always succeeds. */ PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); /* Return 1 if the mapping object has the key, key, and 0 otherwise. This is equivalent to the Python expression: key in o. This function always succeeds. */ PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); /* On success, return a list or tuple of the keys in object o. On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o); /* On success, return a list or tuple of the values in object o. On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o); /* On success, return a list or tuple of the items in object o, where each item is a tuple containing a key-value pair. On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, const char *key); /* Return element of o corresponding to the object, key, or NULL on failure. This is the equivalent of the Python expression: o[key]. */ PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key, PyObject *value); /* Map the object, key, to the value, v. Returns -1 on failure. This is the equivalent of the Python statement: o[key]=v. */ PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass); /* isinstance(object, typeorclass) */ PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass); /* issubclass(object, typeorclass) */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls); PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls); PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self); PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]); #endif /* For internal use by buffer API functions */ PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index, const Py_ssize_t *shape); PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index, const Py_ssize_t *shape); #ifdef __cplusplus } #endif #endif /* Py_ABSTRACTOBJECT_H */ include/python3.4m/fileobject.h000064400000003506152342604300012374 0ustar00/* File object interface (what's left of it -- see io.py) */ #ifndef Py_FILEOBJECT_H #define Py_FILEOBJECT_H #ifdef __cplusplus extern "C" { #endif #define PY_STDIOTEXTMODE "b" PyAPI_FUNC(PyObject *) PyFile_FromFd(int, const char *, const char *, int, const char *, const char *, const char *, int); PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int); PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int); PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *); PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); #endif /* The default encoding used by the platform file system APIs If non-NULL, this is different than the default encoding for strings */ PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; /* Internal API The std printer acts as a preliminary sys.stderr until the new io infrastructure is in place. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int); PyAPI_DATA(PyTypeObject) PyStdPrinter_Type; #if defined _MSC_VER && _MSC_VER >= 1400 /* A routine to check if a file descriptor is valid on Windows. Returns 0 * and sets errno to EBADF if it isn't. This is to avoid Assertions * from various functions in the Windows CRT beginning with * Visual Studio 2005 */ int _PyVerify_fd(int fd); #else #define _PyVerify_fd(A) (1) /* dummy */ #endif #endif /* Py_LIMITED_API */ /* A routine to check if a file descriptor can be select()-ed. */ #ifdef HAVE_SELECT #define _PyIsSelectable_fd(FD) (((FD) >= 0) && ((FD) < FD_SETSIZE)) #else #define _PyIsSelectable_fd(FD) (1) #endif /* HAVE_SELECT */ #ifdef __cplusplus } #endif #endif /* !Py_FILEOBJECT_H */ include/python3.4m/weakrefobject.h000064400000005462152342604300013104 0ustar00/* Weak references objects for Python. */ #ifndef Py_WEAKREFOBJECT_H #define Py_WEAKREFOBJECT_H #ifdef __cplusplus extern "C" { #endif typedef struct _PyWeakReference PyWeakReference; /* PyWeakReference is the base struct for the Python ReferenceType, ProxyType, * and CallableProxyType. */ #ifndef Py_LIMITED_API struct _PyWeakReference { PyObject_HEAD /* The object to which this is a weak reference, or Py_None if none. * Note that this is a stealth reference: wr_object's refcount is * not incremented to reflect this pointer. */ PyObject *wr_object; /* A callable to invoke when wr_object dies, or NULL if none. */ PyObject *wr_callback; /* A cache for wr_object's hash code. As usual for hashes, this is -1 * if the hash code isn't known yet. */ Py_hash_t hash; /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL- * terminated list of weak references to it. These are the list pointers. * If wr_object goes away, wr_object is set to Py_None, and these pointers * have no meaning then. */ PyWeakReference *wr_prev; PyWeakReference *wr_next; }; #endif PyAPI_DATA(PyTypeObject) _PyWeakref_RefType; PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType; PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; #define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) #define PyWeakref_CheckRefExact(op) \ (Py_TYPE(op) == &_PyWeakref_RefType) #define PyWeakref_CheckProxy(op) \ ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \ (Py_TYPE(op) == &_PyWeakref_CallableProxyType)) #define PyWeakref_Check(op) \ (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob, PyObject *callback); PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob, PyObject *callback); PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref); #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head); PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self); #endif /* Explanation for the Py_REFCNT() check: when a weakref's target is part of a long chain of deallocations which triggers the trashcan mechanism, clearing the weakrefs can be delayed long after the target's refcount has dropped to zero. In the meantime, code accessing the weakref will be able to "see" the target object even though it is supposed to be unreachable. See issue #16602. */ #define PyWeakref_GET_OBJECT(ref) \ (Py_REFCNT(((PyWeakReference *)(ref))->wr_object) > 0 \ ? ((PyWeakReference *)(ref))->wr_object \ : Py_None) #ifdef __cplusplus } #endif #endif /* !Py_WEAKREFOBJECT_H */ include/python3.4m/funcobject.h000064400000007273152342604300012415 0ustar00 /* Function object interface */ #ifndef Py_LIMITED_API #ifndef Py_FUNCOBJECT_H #define Py_FUNCOBJECT_H #ifdef __cplusplus extern "C" { #endif /* Function objects and code objects should not be confused with each other: * * Function objects are created by the execution of the 'def' statement. * They reference a code object in their __code__ attribute, which is a * purely syntactic object, i.e. nothing more than a compiled version of some * source code lines. There is one code object per source code "fragment", * but each code object can be referenced by zero or many function objects * depending only on how many times the 'def' statement in the source was * executed so far. */ typedef struct { PyObject_HEAD PyObject *func_code; /* A code object, the __code__ attribute */ PyObject *func_globals; /* A dictionary (other mappings won't do) */ PyObject *func_defaults; /* NULL or a tuple */ PyObject *func_kwdefaults; /* NULL or a dict */ PyObject *func_closure; /* NULL or a tuple of cell objects */ PyObject *func_doc; /* The __doc__ attribute, can be anything */ PyObject *func_name; /* The __name__ attribute, a string object */ PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */ PyObject *func_weakreflist; /* List of weak references */ PyObject *func_module; /* The __module__ attribute, can be anything */ PyObject *func_annotations; /* Annotations, a dict or NULL */ PyObject *func_qualname; /* The qualified name */ /* Invariant: * func_closure contains the bindings for func_code->co_freevars, so * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code) * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0). */ } PyFunctionObject; PyAPI_DATA(PyTypeObject) PyFunction_Type; #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type) PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *); PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *); PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *); PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); /* Macros for direct access to these values. Type checks are *not* done, so use with care. */ #define PyFunction_GET_CODE(func) \ (((PyFunctionObject *)func) -> func_code) #define PyFunction_GET_GLOBALS(func) \ (((PyFunctionObject *)func) -> func_globals) #define PyFunction_GET_MODULE(func) \ (((PyFunctionObject *)func) -> func_module) #define PyFunction_GET_DEFAULTS(func) \ (((PyFunctionObject *)func) -> func_defaults) #define PyFunction_GET_KW_DEFAULTS(func) \ (((PyFunctionObject *)func) -> func_kwdefaults) #define PyFunction_GET_CLOSURE(func) \ (((PyFunctionObject *)func) -> func_closure) #define PyFunction_GET_ANNOTATIONS(func) \ (((PyFunctionObject *)func) -> func_annotations) /* The classmethod and staticmethod types lives here, too */ PyAPI_DATA(PyTypeObject) PyClassMethod_Type; PyAPI_DATA(PyTypeObject) PyStaticMethod_Type; PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *); PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *); #ifdef __cplusplus } #endif #endif /* !Py_FUNCOBJECT_H */ #endif /* Py_LIMITED_API */ include/python3.4m/pyerrors.h000064400000037227152342604300012162 0ustar00#ifndef Py_ERRORS_H #define Py_ERRORS_H #ifdef __cplusplus extern "C" { #endif /* Error objects */ #ifndef Py_LIMITED_API /* PyException_HEAD defines the initial segment of every exception class. */ #define PyException_HEAD PyObject_HEAD PyObject *dict;\ PyObject *args; PyObject *traceback;\ PyObject *context; PyObject *cause;\ char suppress_context; typedef struct { PyException_HEAD } PyBaseExceptionObject; typedef struct { PyException_HEAD PyObject *msg; PyObject *filename; PyObject *lineno; PyObject *offset; PyObject *text; PyObject *print_file_and_line; } PySyntaxErrorObject; typedef struct { PyException_HEAD PyObject *msg; PyObject *name; PyObject *path; } PyImportErrorObject; typedef struct { PyException_HEAD PyObject *encoding; PyObject *object; Py_ssize_t start; Py_ssize_t end; PyObject *reason; } PyUnicodeErrorObject; typedef struct { PyException_HEAD PyObject *code; } PySystemExitObject; typedef struct { PyException_HEAD PyObject *myerrno; PyObject *strerror; PyObject *filename; PyObject *filename2; #ifdef MS_WINDOWS PyObject *winerror; #endif Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */ } PyOSErrorObject; typedef struct { PyException_HEAD PyObject *value; } PyStopIterationObject; /* Compatibility typedefs */ typedef PyOSErrorObject PyEnvironmentErrorObject; #ifdef MS_WINDOWS typedef PyOSErrorObject PyWindowsErrorObject; #endif #endif /* !Py_LIMITED_API */ /* Error handling definitions */ PyAPI_FUNC(void) PyErr_SetNone(PyObject *); PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); #endif PyAPI_FUNC(void) PyErr_SetString( PyObject *exception, const char *string /* decoded from utf-8 */ ); PyAPI_FUNC(PyObject *) PyErr_Occurred(void); PyAPI_FUNC(void) PyErr_Clear(void); PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **); PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); #if defined(__clang__) || \ (defined(__GNUC_MAJOR__) && \ ((__GNUC_MAJOR__ >= 3) || \ (__GNUC_MAJOR__ == 2) && (__GNUC_MINOR__ >= 5))) #define _Py_NO_RETURN __attribute__((__noreturn__)) #else #define _Py_NO_RETURN #endif PyAPI_FUNC(void) Py_FatalError(const char *message) _Py_NO_RETURN; #if defined(Py_DEBUG) || defined(Py_LIMITED_API) #define _PyErr_OCCURRED() PyErr_Occurred() #else #define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type) #endif /* Error testing and normalization */ PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *); PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *); PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**); /* Traceback manipulation (PEP 3134) */ PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *); /* Cause manipulation (PEP 3134) */ PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *); PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *); /* Context manipulation (PEP 3134) */ PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *); PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); #endif /* */ #define PyExceptionClass_Check(x) \ (PyType_Check((x)) && \ PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)) #define PyExceptionInstance_Check(x) \ PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) #define PyExceptionClass_Name(x) \ ((char *)(((PyTypeObject*)(x))->tp_name)) #define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) /* Predefined exceptions */ PyAPI_DATA(PyObject *) PyExc_BaseException; PyAPI_DATA(PyObject *) PyExc_Exception; PyAPI_DATA(PyObject *) PyExc_StopIteration; PyAPI_DATA(PyObject *) PyExc_GeneratorExit; PyAPI_DATA(PyObject *) PyExc_ArithmeticError; PyAPI_DATA(PyObject *) PyExc_LookupError; PyAPI_DATA(PyObject *) PyExc_AssertionError; PyAPI_DATA(PyObject *) PyExc_AttributeError; PyAPI_DATA(PyObject *) PyExc_BufferError; PyAPI_DATA(PyObject *) PyExc_EOFError; PyAPI_DATA(PyObject *) PyExc_FloatingPointError; PyAPI_DATA(PyObject *) PyExc_OSError; PyAPI_DATA(PyObject *) PyExc_ImportError; PyAPI_DATA(PyObject *) PyExc_IndexError; PyAPI_DATA(PyObject *) PyExc_KeyError; PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt; PyAPI_DATA(PyObject *) PyExc_MemoryError; PyAPI_DATA(PyObject *) PyExc_NameError; PyAPI_DATA(PyObject *) PyExc_OverflowError; PyAPI_DATA(PyObject *) PyExc_RuntimeError; PyAPI_DATA(PyObject *) PyExc_NotImplementedError; PyAPI_DATA(PyObject *) PyExc_SyntaxError; PyAPI_DATA(PyObject *) PyExc_IndentationError; PyAPI_DATA(PyObject *) PyExc_TabError; PyAPI_DATA(PyObject *) PyExc_ReferenceError; PyAPI_DATA(PyObject *) PyExc_SystemError; PyAPI_DATA(PyObject *) PyExc_SystemExit; PyAPI_DATA(PyObject *) PyExc_TypeError; PyAPI_DATA(PyObject *) PyExc_UnboundLocalError; PyAPI_DATA(PyObject *) PyExc_UnicodeError; PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError; PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError; PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError; PyAPI_DATA(PyObject *) PyExc_ValueError; PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError; PyAPI_DATA(PyObject *) PyExc_BlockingIOError; PyAPI_DATA(PyObject *) PyExc_BrokenPipeError; PyAPI_DATA(PyObject *) PyExc_ChildProcessError; PyAPI_DATA(PyObject *) PyExc_ConnectionError; PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError; PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError; PyAPI_DATA(PyObject *) PyExc_ConnectionResetError; PyAPI_DATA(PyObject *) PyExc_FileExistsError; PyAPI_DATA(PyObject *) PyExc_FileNotFoundError; PyAPI_DATA(PyObject *) PyExc_InterruptedError; PyAPI_DATA(PyObject *) PyExc_IsADirectoryError; PyAPI_DATA(PyObject *) PyExc_NotADirectoryError; PyAPI_DATA(PyObject *) PyExc_PermissionError; PyAPI_DATA(PyObject *) PyExc_ProcessLookupError; PyAPI_DATA(PyObject *) PyExc_TimeoutError; /* Compatibility aliases */ PyAPI_DATA(PyObject *) PyExc_EnvironmentError; PyAPI_DATA(PyObject *) PyExc_IOError; #ifdef MS_WINDOWS PyAPI_DATA(PyObject *) PyExc_WindowsError; #endif PyAPI_DATA(PyObject *) PyExc_RecursionErrorInst; /* Predefined warning categories */ PyAPI_DATA(PyObject *) PyExc_Warning; PyAPI_DATA(PyObject *) PyExc_UserWarning; PyAPI_DATA(PyObject *) PyExc_DeprecationWarning; PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning; PyAPI_DATA(PyObject *) PyExc_SyntaxWarning; PyAPI_DATA(PyObject *) PyExc_RuntimeWarning; PyAPI_DATA(PyObject *) PyExc_FutureWarning; PyAPI_DATA(PyObject *) PyExc_ImportWarning; PyAPI_DATA(PyObject *) PyExc_UnicodeWarning; PyAPI_DATA(PyObject *) PyExc_BytesWarning; PyAPI_DATA(PyObject *) PyExc_ResourceWarning; /* Convenience functions */ PyAPI_FUNC(int) PyErr_BadArgument(void); PyAPI_FUNC(PyObject *) PyErr_NoMemory(void); PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects( PyObject *, PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename( PyObject *exc, const char *filename /* decoded from the filesystem encoding */ ); #if defined(MS_WINDOWS) && !defined(Py_LIMITED_API) PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( PyObject *, const Py_UNICODE *); #endif /* MS_WINDOWS */ PyAPI_FUNC(PyObject *) PyErr_Format( PyObject *exception, const char *format, /* ASCII-encoded string */ ... ); #ifdef MS_WINDOWS PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( int ierr, const char *filename /* decoded from the filesystem encoding */ ); #ifndef Py_LIMITED_API /* XXX redeclare to use WSTRING */ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( int, const Py_UNICODE *); #endif PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int); PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( PyObject *,int, PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects( PyObject *,int, PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( PyObject *exc, int ierr, const char *filename /* decoded from the filesystem encoding */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( PyObject *,int, const Py_UNICODE *); #endif PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int); #endif /* MS_WINDOWS */ PyAPI_FUNC(PyObject *) PyErr_SetExcWithArgsKwargs(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *, PyObject *); /* Export the old function so that the existing API remains available: */ PyAPI_FUNC(void) PyErr_BadInternalCall(void); PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno); /* Mask the old API with a call to the new API for code compiled under Python 2.0: */ #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) /* Function to create a new exception */ PyAPI_FUNC(PyObject *) PyErr_NewException( const char *name, PyObject *base, PyObject *dict); PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc( const char *name, const char *doc, PyObject *base, PyObject *dict); PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *); /* In exceptions.c */ #ifndef Py_LIMITED_API /* Helper that attempts to replace the current exception with one of the * same type but with a prefix added to the exception text. The resulting * exception description looks like: * * prefix (exc_type: original_exc_str) * * Only some exceptions can be safely replaced. If the function determines * it isn't safe to perform the replacement, it will leave the original * unmodified exception in place. * * Returns a borrowed reference to the new exception (if any), NULL if the * existing exception was left in place. */ PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause( const char *prefix_format, /* ASCII-encoded string */ ... ); #endif /* In sigcheck.c or signalmodule.c */ PyAPI_FUNC(int) PyErr_CheckSignals(void); PyAPI_FUNC(void) PyErr_SetInterrupt(void); /* In signalmodule.c */ #ifndef Py_LIMITED_API int PySignal_SetWakeupFd(int fd); #endif /* Support for adding program text to SyntaxErrors */ PyAPI_FUNC(void) PyErr_SyntaxLocation( const char *filename, /* decoded from the filesystem encoding */ int lineno); PyAPI_FUNC(void) PyErr_SyntaxLocationEx( const char *filename, /* decoded from the filesystem encoding */ int lineno, int col_offset); #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyErr_SyntaxLocationObject( PyObject *filename, int lineno, int col_offset); #endif PyAPI_FUNC(PyObject *) PyErr_ProgramText( const char *filename, /* decoded from the filesystem encoding */ int lineno); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); #endif /* The following functions are used to create and modify unicode exceptions from C */ /* create a UnicodeDecodeError object */ PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create( const char *encoding, /* UTF-8 encoded string */ const char *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason /* UTF-8 encoded string */ ); /* create a UnicodeEncodeError object */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *encoding, /* UTF-8 encoded string */ const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason /* UTF-8 encoded string */ ); #endif /* create a UnicodeTranslateError object */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create( PyObject *object, Py_ssize_t start, Py_ssize_t end, const char *reason /* UTF-8 encoded string */ ); #endif /* get the encoding attribute */ PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *); PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *); /* get the object attribute */ PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *); PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *); PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *); /* get the value of the start attribute (the int * may not be NULL) return 0 on success, -1 on failure */ PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *); PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *); PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *); /* assign a new value to the start attribute return 0 on success, -1 on failure */ PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t); /* get the value of the end attribute (the int *may not be NULL) return 0 on success, -1 on failure */ PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *); PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *); PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *); /* assign a new value to the end attribute return 0 on success, -1 on failure */ PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t); /* get the value of the reason attribute */ PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *); PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *); PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *); /* assign a new value to the reason attribute return 0 on success, -1 on failure */ PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason( PyObject *exc, const char *reason /* UTF-8 encoded string */ ); PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason( PyObject *exc, const char *reason /* UTF-8 encoded string */ ); PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( PyObject *exc, const char *reason /* UTF-8 encoded string */ ); /* These APIs aren't really part of the error implementation, but often needed to format error messages; the native C lib APIs are not available on all platforms, which is why we provide emulations for those platforms in Python/mysnprintf.c, WARNING: The return value of snprintf varies across platforms; do not rely on any particular behavior; eventually the C99 defn may be reliable. */ #if defined(MS_WIN32) && !defined(HAVE_SNPRINTF) # define HAVE_SNPRINTF # define snprintf _snprintf # define vsnprintf _vsnprintf #endif #include PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 3, 4))); PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) Py_GCC_ATTRIBUTE((format(printf, 3, 0))); #ifdef __cplusplus } #endif #endif /* !Py_ERRORS_H */ include/python3.4m/sysmodule.h000064400000002513152342604300012307 0ustar00 /* System module interface */ #ifndef Py_SYSMODULE_H #define Py_SYSMODULE_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(PyObject *) PySys_GetObject(const char *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PySys_GetObjectId(_Py_Identifier *key); #endif PyAPI_FUNC(int) PySys_SetObject(const char *, PyObject *); PyAPI_FUNC(int) _PySys_SetObjectId(_Py_Identifier *key, PyObject *); PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **); PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); PyAPI_FUNC(void) PySys_SetPath(const wchar_t *); PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 1, 2))); PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 1, 2))); PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); PyAPI_FUNC(void) PySys_ResetWarnOptions(void); PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *); PyAPI_FUNC(void) PySys_AddWarnOptionUnicode(PyObject *); PyAPI_FUNC(int) PySys_HasWarnOptions(void); PyAPI_FUNC(void) PySys_AddXOption(const wchar_t *); PyAPI_FUNC(PyObject *) PySys_GetXOptions(void); #ifndef Py_LIMITED_API PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *); #endif #ifdef __cplusplus } #endif #endif /* !Py_SYSMODULE_H */ include/python3.4m/pygetopt.h000064400000000604152342604300012135 0ustar00 #ifndef Py_PYGETOPT_H #define Py_PYGETOPT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API PyAPI_DATA(int) _PyOS_opterr; PyAPI_DATA(int) _PyOS_optind; PyAPI_DATA(wchar_t *) _PyOS_optarg; PyAPI_FUNC(void) _PyOS_ResetGetOpt(void); #endif PyAPI_FUNC(int) _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring); #ifdef __cplusplus } #endif #endif /* !Py_PYGETOPT_H */ include/python3.4m/floatobject.h000064400000011041152342604300012553 0ustar00 /* Float object interface */ /* PyFloatObject represents a (double precision) floating point number. */ #ifndef Py_FLOATOBJECT_H #define Py_FLOATOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API typedef struct { PyObject_HEAD double ob_fval; } PyFloatObject; #endif PyAPI_DATA(PyTypeObject) PyFloat_Type; #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) #define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type) #ifdef Py_NAN #define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN) #endif #define Py_RETURN_INF(sign) do \ if (copysign(1., sign) == 1.) { \ return PyFloat_FromDouble(Py_HUGE_VAL); \ } else { \ return PyFloat_FromDouble(-Py_HUGE_VAL); \ } while(0) PyAPI_FUNC(double) PyFloat_GetMax(void); PyAPI_FUNC(double) PyFloat_GetMin(void); PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void); /* Return Python float from string PyObject. */ PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*); /* Return Python float from C double. */ PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double); /* Extract C double from Python float. The macro version trades safety for speed. */ PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *); #ifndef Py_LIMITED_API #define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) #endif #ifndef Py_LIMITED_API /* _PyFloat_{Pack,Unpack}{4,8} * * The struct and pickle (at least) modules need an efficient platform- * independent way to store floating-point values as byte strings. * The Pack routines produce a string from a C double, and the Unpack * routines produce a C double from such a string. The suffix (4 or 8) * specifies the number of bytes in the string. * * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats * these functions work by copying bits. On other platforms, the formats the * 4- byte format is identical to the IEEE-754 single precision format, and * the 8-byte format to the IEEE-754 double precision format, although the * packing of INFs and NaNs (if such things exist on the platform) isn't * handled correctly, and attempting to unpack a string containing an IEEE * INF or NaN will raise an exception. * * On non-IEEE platforms with more precision, or larger dynamic range, than * 754 supports, not all values can be packed; on non-IEEE platforms with less * precision, or smaller dynamic range, not all values can be unpacked. What * happens in such cases is partly accidental (alas). */ /* The pack routines write 4 or 8 bytes, starting at p. le is a bool * argument, true if you want the string in little-endian format (exponent * last, at p+3 or p+7), false if you want big-endian format (exponent * first, at p). * Return value: 0 if all is OK, -1 if error (and an exception is * set, most likely OverflowError). * There are two problems on non-IEEE platforms: * 1): What this does is undefined if x is a NaN or infinity. * 2): -0.0 and +0.0 produce the same string. */ PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le); PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le); /* Needed for the old way for marshal to store a floating point number. Returns the string length copied into p, -1 on error. */ PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len); /* Used to get the important decimal digits of a double */ PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum); PyAPI_FUNC(void) _PyFloat_DigitsInit(void); /* The unpack routines read 4 or 8 bytes, starting at p. le is a bool * argument, true if the string is in little-endian format (exponent * last, at p+3 or p+7), false if big-endian (exponent first, at p). * Return value: The unpacked double. On error, this is -1.0 and * PyErr_Occurred() is true (and an exception is set, most likely * OverflowError). Note that on a non-IEEE platform this will refuse * to unpack a string that represents a NaN or infinity. */ PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le); PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le); /* free list api */ PyAPI_FUNC(int) PyFloat_ClearFreeList(void); PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out); /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ PyAPI_FUNC(int) _PyFloat_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); #endif /* Py_LIMITED_API */ #ifdef __cplusplus } #endif #endif /* !Py_FLOATOBJECT_H */ include/python3.4m/descrobject.h000064400000005541152342604300012556 0ustar00/* Descriptors */ #ifndef Py_DESCROBJECT_H #define Py_DESCROBJECT_H #ifdef __cplusplus extern "C" { #endif typedef PyObject *(*getter)(PyObject *, void *); typedef int (*setter)(PyObject *, PyObject *, void *); typedef struct PyGetSetDef { char *name; getter get; setter set; char *doc; void *closure; } PyGetSetDef; #ifndef Py_LIMITED_API typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, void *wrapped); typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, void *wrapped, PyObject *kwds); struct wrapperbase { char *name; int offset; void *function; wrapperfunc wrapper; char *doc; int flags; PyObject *name_strobj; }; /* Flags for above struct */ #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ /* Various kinds of descriptor objects */ typedef struct { PyObject_HEAD PyTypeObject *d_type; PyObject *d_name; PyObject *d_qualname; } PyDescrObject; #define PyDescr_COMMON PyDescrObject d_common #define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) #define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) typedef struct { PyDescr_COMMON; PyMethodDef *d_method; } PyMethodDescrObject; typedef struct { PyDescr_COMMON; struct PyMemberDef *d_member; } PyMemberDescrObject; typedef struct { PyDescr_COMMON; PyGetSetDef *d_getset; } PyGetSetDescrObject; typedef struct { PyDescr_COMMON; struct wrapperbase *d_base; void *d_wrapped; /* This can be any function pointer */ } PyWrapperDescrObject; #endif /* Py_LIMITED_API */ PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type; PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; PyAPI_DATA(PyTypeObject) PyMethodDescr_Type; PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; PyAPI_DATA(PyTypeObject) PyDictProxy_Type; PyAPI_DATA(PyTypeObject) _PyMethodWrapper_Type; PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); struct PyMemberDef; /* forward declaration for following prototype */ PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, struct PyMemberDef *); PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, struct PyGetSetDef *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, struct wrapperbase *, void *); #define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL) #endif PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); PyAPI_DATA(PyTypeObject) PyProperty_Type; #ifdef __cplusplus } #endif #endif /* !Py_DESCROBJECT_H */ include/python3.4m/accu.h000064400000001770152342604300011202 0ustar00#ifndef Py_LIMITED_API #ifndef Py_ACCU_H #define Py_ACCU_H /*** This is a private API for use by the interpreter and the stdlib. *** Its definition may be changed or removed at any moment. ***/ /* * A two-level accumulator of unicode objects that avoids both the overhead * of keeping a huge number of small separate objects, and the quadratic * behaviour of using a naive repeated concatenation scheme. */ #ifdef __cplusplus extern "C" { #endif #undef small /* defined by some Windows headers */ typedef struct { PyObject *large; /* A list of previously accumulated large strings */ PyObject *small; /* Pending small strings */ } _PyAccu; PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc); PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode); PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc); PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc); PyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc); #ifdef __cplusplus } #endif #endif /* Py_ACCU_H */ #endif /* Py_LIMITED_API */ include/python3.4m/pyctype.h000064400000002450152342604300011760 0ustar00#ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 #define PY_CTF_ALPHA (PY_CTF_LOWER|PY_CTF_UPPER) #define PY_CTF_DIGIT 0x04 #define PY_CTF_ALNUM (PY_CTF_ALPHA|PY_CTF_DIGIT) #define PY_CTF_SPACE 0x08 #define PY_CTF_XDIGIT 0x10 PyAPI_DATA(const unsigned int) _Py_ctype_table[256]; /* Unlike their C counterparts, the following macros are not meant to * handle an int with any of the values [EOF, 0-UCHAR_MAX]. The argument * must be a signed/unsigned char. */ #define Py_ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_LOWER) #define Py_ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_UPPER) #define Py_ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA) #define Py_ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT) #define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT) #define Py_ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM) #define Py_ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE) PyAPI_DATA(const unsigned char) _Py_ctype_tolower[256]; PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ include/python3.4m/genobject.h000064400000002153152342604300012223 0ustar00 /* Generator object interface */ #ifndef Py_LIMITED_API #ifndef Py_GENOBJECT_H #define Py_GENOBJECT_H #ifdef __cplusplus extern "C" { #endif struct _frame; /* Avoid including frameobject.h */ typedef struct { PyObject_HEAD /* The gi_ prefix is intended to remind of generator-iterator. */ /* Note: gi_frame can be NULL if the generator is "finished" */ struct _frame *gi_frame; /* True if generator is being executed. */ char gi_running; /* The code object backing the generator */ PyObject *gi_code; /* List of weak reference. */ PyObject *gi_weakreflist; } PyGenObject; PyAPI_DATA(PyTypeObject) PyGen_Type; #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) #define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type) PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); PyObject *_PyGen_Send(PyGenObject *, PyObject *); PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self); #ifdef __cplusplus } #endif #endif /* !Py_GENOBJECT_H */ #endif /* Py_LIMITED_API */ include/python3.4m/ucnhash.h000064400000002041152342604300011710 0ustar00/* Unicode name database interface */ #ifndef Py_LIMITED_API #ifndef Py_UCNHASH_H #define Py_UCNHASH_H #ifdef __cplusplus extern "C" { #endif /* revised ucnhash CAPI interface (exported through a "wrapper") */ #define PyUnicodeData_CAPSULE_NAME "unicodedata.ucnhash_CAPI" typedef struct { /* Size of this struct */ int size; /* Get name for a given character code. Returns non-zero if success, zero if not. Does not set Python exceptions. If self is NULL, data come from the default version of the database. If it is not NULL, it should be a unicodedata.ucd_X_Y_Z object */ int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen, int with_alias_and_seq); /* Get character code for a given name. Same error handling as for getname. */ int (*getcode)(PyObject *self, const char* name, int namelen, Py_UCS4* code, int with_named_seq); } _PyUnicode_Name_CAPI; #ifdef __cplusplus } #endif #endif /* !Py_UCNHASH_H */ #endif /* !Py_LIMITED_API */ include/python3.4m/grammar.h000064400000003775152342604300011724 0ustar00 /* Grammar interface */ #ifndef Py_GRAMMAR_H #define Py_GRAMMAR_H #ifdef __cplusplus extern "C" { #endif #include "bitset.h" /* Sigh... */ /* A label of an arc */ typedef struct { int lb_type; char *lb_str; } label; #define EMPTY 0 /* Label number 0 is by definition the empty label */ /* A list of labels */ typedef struct { int ll_nlabels; label *ll_label; } labellist; /* An arc from one state to another */ typedef struct { short a_lbl; /* Label of this arc */ short a_arrow; /* State where this arc goes to */ } arc; /* A state in a DFA */ typedef struct { int s_narcs; arc *s_arc; /* Array of arcs */ /* Optional accelerators */ int s_lower; /* Lowest label index */ int s_upper; /* Highest label index */ int *s_accel; /* Accelerator */ int s_accept; /* Nonzero for accepting state */ } state; /* A DFA */ typedef struct { int d_type; /* Non-terminal this represents */ char *d_name; /* For printing */ int d_initial; /* Initial state */ int d_nstates; state *d_state; /* Array of states */ bitset d_first; } dfa; /* A grammar */ typedef struct { int g_ndfas; dfa *g_dfa; /* Array of DFAs */ labellist g_ll; int g_start; /* Start symbol of the grammar */ int g_accel; /* Set if accelerators present */ } grammar; /* FUNCTIONS */ grammar *newgrammar(int start); dfa *adddfa(grammar *g, int type, const char *name); int addstate(dfa *d); void addarc(dfa *d, int from, int to, int lbl); dfa *PyGrammar_FindDFA(grammar *g, int type); int addlabel(labellist *ll, int type, const char *str); int findlabel(labellist *ll, int type, const char *str); const char *PyGrammar_LabelRepr(label *lb); void translatelabels(grammar *g); void addfirstsets(grammar *g); void PyGrammar_AddAccelerators(grammar *g); void PyGrammar_RemoveAccelerators(grammar *); void printgrammar(grammar *g, FILE *fp); void printnonterminals(grammar *g, FILE *fp); #ifdef __cplusplus } #endif #endif /* !Py_GRAMMAR_H */ include/python3.4m/sliceobject.h000064400000003066152342604300012555 0ustar00#ifndef Py_SLICEOBJECT_H #define Py_SLICEOBJECT_H #ifdef __cplusplus extern "C" { #endif /* The unique ellipsis object "..." */ PyAPI_DATA(PyObject) _Py_EllipsisObject; /* Don't use this directly */ #define Py_Ellipsis (&_Py_EllipsisObject) /* Slice object interface */ /* A slice object containing start, stop, and step data members (the names are from range). After much talk with Guido, it was decided to let these be any arbitrary python type. Py_None stands for omitted values. */ #ifndef Py_LIMITED_API typedef struct { PyObject_HEAD PyObject *start, *stop, *step; /* not NULL */ } PySliceObject; #endif PyAPI_DATA(PyTypeObject) PySlice_Type; PyAPI_DATA(PyTypeObject) PyEllipsis_Type; #define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type) PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, PyObject* step); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop); PyAPI_FUNC(int) _PySlice_GetLongIndices(PySliceObject *self, PyObject *length, PyObject **start_ptr, PyObject **stop_ptr, PyObject **step_ptr); #endif PyAPI_FUNC(int) PySlice_GetIndices(PyObject *r, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); PyAPI_FUNC(int) PySlice_GetIndicesEx(PyObject *r, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength); #ifdef __cplusplus } #endif #endif /* !Py_SLICEOBJECT_H */ include/python3.4m/pythonrun.h000064400000023710152342604300012333 0ustar00 /* Interfaces to parse and execute pieces of python code */ #ifndef Py_PYTHONRUN_H #define Py_PYTHONRUN_H #ifdef __cplusplus extern "C" { #endif #define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \ CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \ CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL) #define PyCF_MASK_OBSOLETE (CO_NESTED) #define PyCF_SOURCE_IS_UTF8 0x0100 #define PyCF_DONT_IMPLY_DEDENT 0x0200 #define PyCF_ONLY_AST 0x0400 #define PyCF_IGNORE_COOKIE 0x0800 #ifndef Py_LIMITED_API typedef struct { int cf_flags; /* bitmask of CO_xxx flags relevant to future */ } PyCompilerFlags; #endif PyAPI_FUNC(void) Py_SetProgramName(wchar_t *); PyAPI_FUNC(wchar_t *) Py_GetProgramName(void); PyAPI_FUNC(void) Py_SetPythonHome(wchar_t *); PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void); #ifndef Py_LIMITED_API /* Only used by applications that embed the interpreter and need to * override the standard encoding determination mechanism */ PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding, const char *errors); #endif PyAPI_FUNC(void) Py_Initialize(void); PyAPI_FUNC(void) Py_InitializeEx(int); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _Py_InitializeEx_Private(int, int); #endif PyAPI_FUNC(void) Py_Finalize(void); PyAPI_FUNC(int) Py_IsInitialized(void); PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *); PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *); PyAPI_FUNC(int) PyRun_AnyFileExFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ int closeit, PyCompilerFlags *flags); PyAPI_FUNC(int) PyRun_SimpleFileExFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ int closeit, PyCompilerFlags *flags); PyAPI_FUNC(int) PyRun_InteractiveOneFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ PyCompilerFlags *flags); PyAPI_FUNC(int) PyRun_InteractiveOneObject( FILE *fp, PyObject *filename, PyCompilerFlags *flags); PyAPI_FUNC(int) PyRun_InteractiveLoopFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ PyCompilerFlags *flags); PyAPI_FUNC(struct _mod *) PyParser_ASTFromString( const char *s, const char *filename, /* decoded from the filesystem encoding */ int start, PyCompilerFlags *flags, PyArena *arena); PyAPI_FUNC(struct _mod *) PyParser_ASTFromStringObject( const char *s, PyObject *filename, int start, PyCompilerFlags *flags, PyArena *arena); PyAPI_FUNC(struct _mod *) PyParser_ASTFromFile( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ const char* enc, int start, char *ps1, char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena); PyAPI_FUNC(struct _mod *) PyParser_ASTFromFileObject( FILE *fp, PyObject *filename, const char* enc, int start, char *ps1, char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena); #endif #ifndef PyParser_SimpleParseString #define PyParser_SimpleParseString(S, B) \ PyParser_SimpleParseStringFlags(S, B, 0) #define PyParser_SimpleParseFile(FP, S, B) \ PyParser_SimpleParseFileFlags(FP, S, B, 0) #endif PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, int); PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *, const char *, int, int); PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, int, int); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, PyObject *, PyCompilerFlags *); PyAPI_FUNC(PyObject *) PyRun_FileExFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags); #endif #ifdef Py_LIMITED_API PyAPI_FUNC(PyObject *) Py_CompileString(const char *, const char *, int); #else #define Py_CompileString(str, p, s) Py_CompileStringExFlags(str, p, s, NULL, -1) #define Py_CompileStringFlags(str, p, s, f) Py_CompileStringExFlags(str, p, s, f, -1) PyAPI_FUNC(PyObject *) Py_CompileStringExFlags( const char *str, const char *filename, /* decoded from the filesystem encoding */ int start, PyCompilerFlags *flags, int optimize); PyAPI_FUNC(PyObject *) Py_CompileStringObject( const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize); #endif PyAPI_FUNC(struct symtable *) Py_SymtableString( const char *str, const char *filename, /* decoded from the filesystem encoding */ int start); #ifndef Py_LIMITED_API PyAPI_FUNC(struct symtable *) Py_SymtableStringObject( const char *str, PyObject *filename, int start); #endif PyAPI_FUNC(void) PyErr_Print(void); PyAPI_FUNC(void) PyErr_PrintEx(int); PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level * exit functions. */ #ifndef Py_LIMITED_API PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(void)); #endif PyAPI_FUNC(int) Py_AtExit(void (*func)(void)); PyAPI_FUNC(void) Py_Exit(int); /* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */ #ifndef Py_LIMITED_API PyAPI_FUNC(void) _Py_RestoreSignals(void); PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); #endif /* Bootstrap */ PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv); #ifndef Py_LIMITED_API /* Use macros for a bunch of old variants */ #define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL) #define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL) #define PyRun_AnyFileEx(fp, name, closeit) \ PyRun_AnyFileExFlags(fp, name, closeit, NULL) #define PyRun_AnyFileFlags(fp, name, flags) \ PyRun_AnyFileExFlags(fp, name, 0, flags) #define PyRun_SimpleString(s) PyRun_SimpleStringFlags(s, NULL) #define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags(f, p, 0, NULL) #define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags(f, p, c, NULL) #define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags(f, p, NULL) #define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags(f, p, NULL) #define PyRun_File(fp, p, s, g, l) \ PyRun_FileExFlags(fp, p, s, g, l, 0, NULL) #define PyRun_FileEx(fp, p, s, g, l, c) \ PyRun_FileExFlags(fp, p, s, g, l, c, NULL) #define PyRun_FileFlags(fp, p, s, g, l, flags) \ PyRun_FileExFlags(fp, p, s, g, l, 0, flags) #endif /* In getpath.c */ PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void); PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); PyAPI_FUNC(wchar_t *) Py_GetPath(void); PyAPI_FUNC(void) Py_SetPath(const wchar_t *); #ifdef MS_WINDOWS int _Py_CheckPython3(); #endif /* In their own files */ PyAPI_FUNC(const char *) Py_GetVersion(void); PyAPI_FUNC(const char *) Py_GetPlatform(void); PyAPI_FUNC(const char *) Py_GetCopyright(void); PyAPI_FUNC(const char *) Py_GetCompiler(void); PyAPI_FUNC(const char *) Py_GetBuildInfo(void); #ifndef Py_LIMITED_API PyAPI_FUNC(const char *) _Py_hgidentifier(void); PyAPI_FUNC(const char *) _Py_hgversion(void); #endif /* Internal -- various one-time initializations */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); PyAPI_FUNC(PyObject *) _PySys_Init(void); PyAPI_FUNC(void) _PyImport_Init(void); PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod); PyAPI_FUNC(void) _PyImportHooks_Init(void); PyAPI_FUNC(int) _PyFrame_Init(void); PyAPI_FUNC(int) _PyFloat_Init(void); PyAPI_FUNC(int) PyByteArray_Init(void); PyAPI_FUNC(void) _PyRandom_Init(void); #endif /* Various internal finalizers */ #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyExc_Fini(void); PyAPI_FUNC(void) _PyImport_Fini(void); PyAPI_FUNC(void) PyMethod_Fini(void); PyAPI_FUNC(void) PyFrame_Fini(void); PyAPI_FUNC(void) PyCFunction_Fini(void); PyAPI_FUNC(void) PyDict_Fini(void); PyAPI_FUNC(void) PyTuple_Fini(void); PyAPI_FUNC(void) PyList_Fini(void); PyAPI_FUNC(void) PySet_Fini(void); PyAPI_FUNC(void) PyBytes_Fini(void); PyAPI_FUNC(void) PyByteArray_Fini(void); PyAPI_FUNC(void) PyFloat_Fini(void); PyAPI_FUNC(void) PyOS_FiniInterrupts(void); PyAPI_FUNC(void) _PyGC_DumpShutdownStats(void); PyAPI_FUNC(void) _PyGC_Fini(void); PyAPI_FUNC(void) PySlice_Fini(void); PyAPI_FUNC(void) _PyType_Fini(void); PyAPI_FUNC(void) _PyRandom_Fini(void); PyAPI_DATA(PyThreadState *) _Py_Finalizing; #endif /* Stuff with no proper home (yet) */ #ifndef Py_LIMITED_API PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *); #endif PyAPI_DATA(int) (*PyOS_InputHook)(void); PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); #ifndef Py_LIMITED_API PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState; #endif /* Stack size, in "pointers" (so we get extra safety margins on 64-bit platforms). On a 32-bit platform, this translates to a 8k margin. */ #define PYOS_STACK_MARGIN 2048 #if defined(WIN32) && !defined(MS_WIN64) && defined(_MSC_VER) && _MSC_VER >= 1300 /* Enable stack checking under Microsoft C */ #define USE_STACKCHECK #endif #ifdef USE_STACKCHECK /* Check that we aren't overflowing our stack */ PyAPI_FUNC(int) PyOS_CheckStack(void); #endif /* Signals */ typedef void (*PyOS_sighandler_t)(int); PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int); PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t); /* Random */ PyAPI_FUNC(int) _PyOS_URandom (void *buffer, Py_ssize_t size); #ifdef __cplusplus } #endif #endif /* !Py_PYTHONRUN_H */ include/python3.4m/classobject.h000064400000003202152342604300012553 0ustar00/* Former class object interface -- now only bound methods are here */ /* Revealing some structures (not for general use) */ #ifndef Py_LIMITED_API #ifndef Py_CLASSOBJECT_H #define Py_CLASSOBJECT_H #ifdef __cplusplus extern "C" { #endif typedef struct { PyObject_HEAD PyObject *im_func; /* The callable object implementing the method */ PyObject *im_self; /* The instance it is bound to */ PyObject *im_weakreflist; /* List of weak references */ } PyMethodObject; PyAPI_DATA(PyTypeObject) PyMethod_Type; #define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type) PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *); PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); /* Macros for direct access to these values. Type checks are *not* done, so use with care. */ #define PyMethod_GET_FUNCTION(meth) \ (((PyMethodObject *)meth) -> im_func) #define PyMethod_GET_SELF(meth) \ (((PyMethodObject *)meth) -> im_self) PyAPI_FUNC(int) PyMethod_ClearFreeList(void); typedef struct { PyObject_HEAD PyObject *func; } PyInstanceMethodObject; PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type; #define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type) PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *); PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *); /* Macros for direct access to these values. Type checks are *not* done, so use with care. */ #define PyInstanceMethod_GET_FUNCTION(meth) \ (((PyInstanceMethodObject *)meth) -> func) #ifdef __cplusplus } #endif #endif /* !Py_CLASSOBJECT_H */ #endif /* Py_LIMITED_API */ include/python3.4m/Python.h000064400000005450152342604300011547 0ustar00#ifndef Py_PYTHON_H #define Py_PYTHON_H /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ /* Include nearly all Python header files */ #include "patchlevel.h" #include "pyconfig.h" #include "pymacconfig.h" #include #ifndef UCHAR_MAX #error "Something's broken. UCHAR_MAX should be defined in limits.h." #endif #if UCHAR_MAX != 255 #error "Python's source code assumes C's unsigned char is an 8-bit type." #endif #if defined(__sgi) && defined(WITH_THREAD) && !defined(_SGI_MP_SOURCE) #define _SGI_MP_SOURCE #endif #include #ifndef NULL # error "Python.h requires that stdio.h define NULL." #endif #include #ifdef HAVE_ERRNO_H #include #endif #include #ifdef HAVE_UNISTD_H #include #endif /* For size_t? */ #ifdef HAVE_STDDEF_H #include #endif /* CAUTION: Build setups should ensure that NDEBUG is defined on the * compiler command line when building Python in release mode; else * assert() calls won't be removed. */ #include #include "pyport.h" #include "pymacro.h" #include "pyatomic.h" /* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. * PYMALLOC_DEBUG is in error if pymalloc is not in use. */ #if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG) #define PYMALLOC_DEBUG #endif #if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC) #error "PYMALLOC_DEBUG requires WITH_PYMALLOC" #endif #include "pymath.h" #include "pytime.h" #include "pymem.h" #include "object.h" #include "objimpl.h" #include "typeslots.h" #include "pyhash.h" #include "pydebug.h" #include "bytearrayobject.h" #include "bytesobject.h" #include "unicodeobject.h" #include "longobject.h" #include "longintrepr.h" #include "boolobject.h" #include "floatobject.h" #include "complexobject.h" #include "rangeobject.h" #include "memoryobject.h" #include "tupleobject.h" #include "listobject.h" #include "dictobject.h" #include "enumobject.h" #include "setobject.h" #include "methodobject.h" #include "moduleobject.h" #include "funcobject.h" #include "classobject.h" #include "fileobject.h" #include "pycapsule.h" #include "traceback.h" #include "sliceobject.h" #include "cellobject.h" #include "iterobject.h" #include "genobject.h" #include "descrobject.h" #include "warnings.h" #include "weakrefobject.h" #include "structseq.h" #include "namespaceobject.h" #include "codecs.h" #include "pyerrors.h" #include "pystate.h" #include "pyarena.h" #include "modsupport.h" #include "pythonrun.h" #include "ceval.h" #include "sysmodule.h" #include "intrcheck.h" #include "import.h" #include "abstract.h" #include "bltinmodule.h" #include "compile.h" #include "eval.h" #include "pyctype.h" #include "pystrtod.h" #include "pystrcmp.h" #include "dtoa.h" #include "fileutils.h" #include "pyfpe.h" #endif /* !Py_PYTHON_H */ include/python3.4m/pyfpe.h000064400000020451152342604300011407 0ustar00#ifndef Py_PYFPE_H #define Py_PYFPE_H #ifdef __cplusplus extern "C" { #endif /* --------------------------------------------------------------------- / Copyright (c) 1996. \ | The Regents of the University of California. | | All rights reserved. | | | | Permission to use, copy, modify, and distribute this software for | | any purpose without fee is hereby granted, provided that this en- | | tire notice is included in all copies of any software which is or | | includes a copy or modification of this software and in all | | copies of the supporting documentation for such software. | | | | This work was produced at the University of California, Lawrence | | Livermore National Laboratory under contract no. W-7405-ENG-48 | | between the U.S. Department of Energy and The Regents of the | | University of California for the operation of UC LLNL. | | | | DISCLAIMER | | | | This software was prepared as an account of work sponsored by an | | agency of the United States Government. Neither the United States | | Government nor the University of California nor any of their em- | | ployees, makes any warranty, express or implied, or assumes any | | liability or responsibility for the accuracy, completeness, or | | usefulness of any information, apparatus, product, or process | | disclosed, or represents that its use would not infringe | | privately-owned rights. Reference herein to any specific commer- | | cial products, process, or service by trade name, trademark, | | manufacturer, or otherwise, does not necessarily constitute or | | imply its endorsement, recommendation, or favoring by the United | | States Government or the University of California. The views and | | opinions of authors expressed herein do not necessarily state or | | reflect those of the United States Government or the University | | of California, and shall not be used for advertising or product | \ endorsement purposes. / --------------------------------------------------------------------- */ /* * Define macros for handling SIGFPE. * Lee Busby, LLNL, November, 1996 * busby1@llnl.gov * ********************************************* * Overview of the system for handling SIGFPE: * * This file (Include/pyfpe.h) defines a couple of "wrapper" macros for * insertion into your Python C code of choice. Their proper use is * discussed below. The file Python/pyfpe.c defines a pair of global * variables PyFPE_jbuf and PyFPE_counter which are used by the signal * handler for SIGFPE to decide if a particular exception was protected * by the macros. The signal handler itself, and code for enabling the * generation of SIGFPE in the first place, is in a (new) Python module * named fpectl. This module is standard in every respect. It can be loaded * either statically or dynamically as you choose, and like any other * Python module, has no effect until you import it. * * In the general case, there are three steps toward handling SIGFPE in any * Python code: * * 1) Add the *_PROTECT macros to your C code as required to protect * dangerous floating point sections. * * 2) Turn on the inclusion of the code by adding the ``--with-fpectl'' * flag at the time you run configure. If the fpectl or other modules * which use the *_PROTECT macros are to be dynamically loaded, be * sure they are compiled with WANT_SIGFPE_HANDLER defined. * * 3) When python is built and running, import fpectl, and execute * fpectl.turnon_sigfpe(). This sets up the signal handler and enables * generation of SIGFPE whenever an exception occurs. From this point * on, any properly trapped SIGFPE should result in the Python * FloatingPointError exception. * * Step 1 has been done already for the Python kernel code, and should be * done soon for the NumPy array package. Step 2 is usually done once at * python install time. Python's behavior with respect to SIGFPE is not * changed unless you also do step 3. Thus you can control this new * facility at compile time, or run time, or both. * ******************************** * Using the macros in your code: * * static PyObject *foobar(PyObject *self,PyObject *args) * { * .... * PyFPE_START_PROTECT("Error in foobar", return 0) * result = dangerous_op(somearg1, somearg2, ...); * PyFPE_END_PROTECT(result) * .... * } * * If a floating point error occurs in dangerous_op, foobar returns 0 (NULL), * after setting the associated value of the FloatingPointError exception to * "Error in foobar". ``Dangerous_op'' can be a single operation, or a block * of code, function calls, or any combination, so long as no alternate * return is possible before the PyFPE_END_PROTECT macro is reached. * * The macros can only be used in a function context where an error return * can be recognized as signaling a Python exception. (Generally, most * functions that return a PyObject * will qualify.) * * Guido's original design suggestion for PyFPE_START_PROTECT and * PyFPE_END_PROTECT had them open and close a local block, with a locally * defined jmp_buf and jmp_buf pointer. This would allow recursive nesting * of the macros. The Ansi C standard makes it clear that such local * variables need to be declared with the "volatile" type qualifier to keep * setjmp from corrupting their values. Some current implementations seem * to be more restrictive. For example, the HPUX man page for setjmp says * * Upon the return from a setjmp() call caused by a longjmp(), the * values of any non-static local variables belonging to the routine * from which setjmp() was called are undefined. Code which depends on * such values is not guaranteed to be portable. * * I therefore decided on a more limited form of nesting, using a counter * variable (PyFPE_counter) to keep track of any recursion. If an exception * occurs in an ``inner'' pair of macros, the return will apparently * come from the outermost level. * */ #ifdef WANT_SIGFPE_HANDLER #include #include #include extern jmp_buf PyFPE_jbuf; extern int PyFPE_counter; extern double PyFPE_dummy(void *); #define PyFPE_START_PROTECT(err_string, leave_stmt) \ if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \ PyErr_SetString(PyExc_FloatingPointError, err_string); \ PyFPE_counter = 0; \ leave_stmt; \ } /* * This (following) is a heck of a way to decrement a counter. However, * unless the macro argument is provided, code optimizers will sometimes move * this statement so that it gets executed *before* the unsafe expression * which we're trying to protect. That pretty well messes things up, * of course. * * If the expression(s) you're trying to protect don't happen to return a * value, you will need to manufacture a dummy result just to preserve the * correct ordering of statements. Note that the macro passes the address * of its argument (so you need to give it something which is addressable). * If your expression returns multiple results, pass the last such result * to PyFPE_END_PROTECT. * * Note that PyFPE_dummy returns a double, which is cast to int. * This seeming insanity is to tickle the Floating Point Unit (FPU). * If an exception has occurred in a preceding floating point operation, * some architectures (notably Intel 80x86) will not deliver the interrupt * until the *next* floating point operation. This is painful if you've * already decremented PyFPE_counter. */ #define PyFPE_END_PROTECT(v) PyFPE_counter -= (int)PyFPE_dummy(&(v)); #else #define PyFPE_START_PROTECT(err_string, leave_stmt) #define PyFPE_END_PROTECT(v) #endif #ifdef __cplusplus } #endif #endif /* !Py_PYFPE_H */ include/python3.4m/bytearrayobject.h000064400000004102152342604300013450 0ustar00/* ByteArray object interface */ #ifndef Py_BYTEARRAYOBJECT_H #define Py_BYTEARRAYOBJECT_H #ifdef __cplusplus extern "C" { #endif #include /* Type PyByteArrayObject represents a mutable array of bytes. * The Python API is that of a sequence; * the bytes are mapped to ints in [0, 256). * Bytes are not characters; they may be used to encode characters. * The only way to go between bytes and str/unicode is via encoding * and decoding. * For the convenience of C programmers, the bytes type is considered * to contain a char pointer, not an unsigned char pointer. */ /* Object layout */ #ifndef Py_LIMITED_API typedef struct { PyObject_VAR_HEAD Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ char *ob_bytes; /* Physical backing buffer */ char *ob_start; /* Logical start inside ob_bytes */ /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */ int ob_exports; /* How many buffer exports */ } PyByteArrayObject; #endif /* Type object */ PyAPI_DATA(PyTypeObject) PyByteArray_Type; PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type; /* Type check macros */ #define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type) #define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type) /* Direct API functions */ PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *); PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t); PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *); PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *); PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t); /* Macros, trading safety for speed */ #ifndef Py_LIMITED_API #define PyByteArray_AS_STRING(self) \ (assert(PyByteArray_Check(self)), \ Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) #define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) PyAPI_DATA(char) _PyByteArray_empty_string[]; #endif #ifdef __cplusplus } #endif #endif /* !Py_BYTEARRAYOBJECT_H */ include/python3.4m/bytesobject.h000064400000011472152342604300012604 0ustar00 /* Bytes (String) object interface */ #ifndef Py_BYTESOBJECT_H #define Py_BYTESOBJECT_H #ifdef __cplusplus extern "C" { #endif #include /* Type PyBytesObject represents a character string. An extra zero byte is reserved at the end to ensure it is zero-terminated, but a size is present so strings with null bytes in them can be represented. This is an immutable object type. There are functions to create new string objects, to test an object for string-ness, and to get the string value. The latter function returns a null pointer if the object is not of the proper type. There is a variant that takes an explicit size as well as a variant that assumes a zero-terminated string. Note that none of the functions should be applied to nil objects. */ /* Caching the hash (ob_shash) saves recalculation of a string's hash value. This significantly speeds up dict lookups. */ #ifndef Py_LIMITED_API typedef struct { PyObject_VAR_HEAD Py_hash_t ob_shash; char ob_sval[1]; /* Invariants: * ob_sval contains space for 'ob_size+1' elements. * ob_sval[ob_size] == 0. * ob_shash is the hash of the string or -1 if not computed yet. */ } PyBytesObject; #endif PyAPI_DATA(PyTypeObject) PyBytes_Type; PyAPI_DATA(PyTypeObject) PyBytesIter_Type; #define PyBytes_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS) #define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type) PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *); PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list) Py_GCC_ATTRIBUTE((format(printf, 1, 0))); PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...) Py_GCC_ATTRIBUTE((format(printf, 1, 2))); PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *); PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *); PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); #endif PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, const char *, Py_ssize_t, const char *); /* Macro, trading safety for speed */ #ifndef Py_LIMITED_API #define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ (((PyBytesObject *)(op))->ob_sval)) #define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) #endif /* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, x must be an iterable object. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); #endif /* Provides access to the internal data buffer and size of a string object or the default encoded version of an Unicode object. Passing NULL as *len parameter will force the string buffer to be 0-terminated (passing a string with embedded NULL characters will cause an exception). */ PyAPI_FUNC(int) PyBytes_AsStringAndSize( PyObject *obj, /* string or Unicode object */ char **s, /* pointer to buffer variable */ Py_ssize_t *len /* pointer to length variable or NULL (only possible for 0-terminated strings) */ ); /* Using the current locale, insert the thousands grouping into the string pointed to by buffer. For the argument descriptions, see Objects/stringlib/localeutil.h */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer, Py_ssize_t n_buffer, char *digits, Py_ssize_t n_digits, Py_ssize_t min_width); /* Using explicit passed-in values, insert the thousands grouping into the string pointed to by buffer. For the argument descriptions, see Objects/stringlib/localeutil.h */ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, Py_ssize_t n_buffer, char *digits, Py_ssize_t n_digits, Py_ssize_t min_width, const char *grouping, const char *thousands_sep); #endif /* Flags used by string formatting */ #define F_LJUST (1<<0) #define F_SIGN (1<<1) #define F_BLANK (1<<2) #define F_ALT (1<<3) #define F_ZERO (1<<4) #ifdef __cplusplus } #endif #endif /* !Py_BYTESOBJECT_H */ include/python3.4m/symtable.h000064400000011753152342604300012111 0ustar00#ifndef Py_LIMITED_API #ifndef Py_SYMTABLE_H #define Py_SYMTABLE_H #ifdef __cplusplus extern "C" { #endif /* XXX(ncoghlan): This is a weird mix of public names and interpreter internal * names. */ typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock } _Py_block_ty; struct _symtable_entry; struct symtable { PyObject *st_filename; /* name of file being compiled, decoded from the filesystem encoding */ struct _symtable_entry *st_cur; /* current symbol table entry */ struct _symtable_entry *st_top; /* symbol table entry for module */ PyObject *st_blocks; /* dict: map AST node addresses * to symbol table entries */ PyObject *st_stack; /* list: stack of namespace info */ PyObject *st_global; /* borrowed ref to st_top->ste_symbols */ int st_nblocks; /* number of blocks used. kept for consistency with the corresponding compiler structure */ PyObject *st_private; /* name of current class or NULL */ PyFutureFeatures *st_future; /* module's future features that affect the symbol table */ int recursion_depth; /* current recursion depth */ int recursion_limit; /* recursion limit */ }; typedef struct _symtable_entry { PyObject_HEAD PyObject *ste_id; /* int: key in ste_table->st_blocks */ PyObject *ste_symbols; /* dict: variable names to flags */ PyObject *ste_name; /* string: name of current block */ PyObject *ste_varnames; /* list of function parameters */ PyObject *ste_children; /* list of child blocks */ PyObject *ste_directives;/* locations of global and nonlocal statements */ _Py_block_ty ste_type; /* module, class, or function */ int ste_unoptimized; /* false if namespace is optimized */ int ste_nested; /* true if block is nested */ unsigned ste_free : 1; /* true if block has free variables */ unsigned ste_child_free : 1; /* true if a child block has free vars, including free refs to globals */ unsigned ste_generator : 1; /* true if namespace is a generator */ unsigned ste_varargs : 1; /* true if block has varargs */ unsigned ste_varkeywords : 1; /* true if block has varkeywords */ unsigned ste_returns_value : 1; /* true if namespace uses return with an argument */ unsigned ste_needs_class_closure : 1; /* for class scopes, true if a closure over __class__ should be created */ int ste_lineno; /* first line of block */ int ste_col_offset; /* offset of first line of block */ int ste_opt_lineno; /* lineno of last exec or import * */ int ste_opt_col_offset; /* offset of last exec or import * */ int ste_tmpname; /* counter for listcomp temp vars */ struct symtable *ste_table; } PySTEntryObject; PyAPI_DATA(PyTypeObject) PySTEntry_Type; #define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type) PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *); PyAPI_FUNC(struct symtable *) PySymtable_Build( mod_ty mod, const char *filename, /* decoded from the filesystem encoding */ PyFutureFeatures *future); PyAPI_FUNC(struct symtable *) PySymtable_BuildObject( mod_ty mod, PyObject *filename, PyFutureFeatures *future); PyAPI_FUNC(PySTEntryObject *) PySymtable_Lookup(struct symtable *, void *); PyAPI_FUNC(void) PySymtable_Free(struct symtable *); /* Flags for def-use information */ #define DEF_GLOBAL 1 /* global stmt */ #define DEF_LOCAL 2 /* assignment in code block */ #define DEF_PARAM 2<<1 /* formal parameter */ #define DEF_NONLOCAL 2<<2 /* nonlocal stmt */ #define USE 2<<3 /* name is used */ #define DEF_FREE 2<<4 /* name used but not defined in nested block */ #define DEF_FREE_CLASS 2<<5 /* free variable from class's method */ #define DEF_IMPORT 2<<6 /* assignment occurred via import */ #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT) /* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol table. GLOBAL is returned from PyST_GetScope() for either of them. It is stored in ste_symbols at bits 12-15. */ #define SCOPE_OFFSET 11 #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL) #define LOCAL 1 #define GLOBAL_EXPLICIT 2 #define GLOBAL_IMPLICIT 3 #define FREE 4 #define CELL 5 /* The following two names are used for the ste_unoptimized bit field */ #define OPT_IMPORT_STAR 1 #define OPT_TOPLEVEL 2 /* top-level names, including eval and exec */ #define GENERATOR 1 #define GENERATOR_EXPRESSION 2 #ifdef __cplusplus } #endif #endif /* !Py_SYMTABLE_H */ #endif /* Py_LIMITED_API */ include/python3.4m/frameobject.h000064400000006746152342604300012560 0ustar00 /* Frame object interface */ #ifndef Py_LIMITED_API #ifndef Py_FRAMEOBJECT_H #define Py_FRAMEOBJECT_H #ifdef __cplusplus extern "C" { #endif typedef struct { int b_type; /* what kind of block this is */ int b_handler; /* where to jump to find handler */ int b_level; /* value stack level to pop to */ } PyTryBlock; typedef struct _frame { PyObject_VAR_HEAD struct _frame *f_back; /* previous frame, or NULL */ PyCodeObject *f_code; /* code segment */ PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ PyObject *f_globals; /* global symbol table (PyDictObject) */ PyObject *f_locals; /* local symbol table (any mapping) */ PyObject **f_valuestack; /* points after the last local */ /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. Frame evaluation usually NULLs it, but a frame that yields sets it to the current stack top. */ PyObject **f_stacktop; PyObject *f_trace; /* Trace function */ /* In a generator, we need to be able to swap between the exception state inside the generator and the exception state of the calling frame (which shouldn't be impacted when the generator "yields" from an except handler). These three fields exist exactly for that, and are unused for non-generator frames. See the save_exc_state and swap_exc_state functions in ceval.c for details of their use. */ PyObject *f_exc_type, *f_exc_value, *f_exc_traceback; /* Borrowed reference to a generator, or NULL */ PyObject *f_gen; int f_lasti; /* Last instruction if called */ /* Call PyFrame_GetLineNumber() instead of reading this field directly. As of 2.3 f_lineno is only valid when tracing is active (i.e. when f_trace is set). At other times we use PyCode_Addr2Line to calculate the line from the current bytecode index. */ int f_lineno; /* Current line number */ int f_iblock; /* index in f_blockstack */ char f_executing; /* whether the frame is still executing */ PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ } PyFrameObject; /* Standard object interface */ PyAPI_DATA(PyTypeObject) PyFrame_Type; #define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type) PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, PyObject *, PyObject *); /* The rest of the interface is specific for frame objects */ /* Block management functions */ PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); /* Extend the value stack */ PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int); /* Conversions between "fast locals" and locals in dictionary */ PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); PyAPI_FUNC(int) PyFrame_ClearFreeList(void); PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); /* Return the line of code the frame is currently executing. */ PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); #ifdef __cplusplus } #endif #endif /* !Py_FRAMEOBJECT_H */ #endif /* Py_LIMITED_API */ include/python3.4m/pyconfig.h000064400000000242152342604300012076 0ustar00#include #if __WORDSIZE == 32 #include "pyconfig-32.h" #elif __WORDSIZE == 64 #include "pyconfig-64.h" #else #error "Unknown word size" #endif include/python3.4m/pydebug.h000064400000001773152342604300011731 0ustar00#ifndef Py_LIMITED_API #ifndef Py_PYDEBUG_H #define Py_PYDEBUG_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(int) Py_DebugFlag; PyAPI_DATA(int) Py_VerboseFlag; PyAPI_DATA(int) Py_QuietFlag; PyAPI_DATA(int) Py_InteractiveFlag; PyAPI_DATA(int) Py_InspectFlag; PyAPI_DATA(int) Py_OptimizeFlag; PyAPI_DATA(int) Py_NoSiteFlag; PyAPI_DATA(int) Py_BytesWarningFlag; PyAPI_DATA(int) Py_UseClassExceptionsFlag; PyAPI_DATA(int) Py_FrozenFlag; PyAPI_DATA(int) Py_IgnoreEnvironmentFlag; PyAPI_DATA(int) Py_DontWriteBytecodeFlag; PyAPI_DATA(int) Py_NoUserSiteDirectory; PyAPI_DATA(int) Py_UnbufferedStdioFlag; PyAPI_DATA(int) Py_HashRandomizationFlag; PyAPI_DATA(int) Py_IsolatedFlag; /* this is a wrapper around getenv() that pays attention to Py_IgnoreEnvironmentFlag. It should be used for getting variables like PYTHONPATH and PYTHONHOME from the environment */ #define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s)) #ifdef __cplusplus } #endif #endif /* !Py_PYDEBUG_H */ #endif /* Py_LIMITED_API */ include/python3.4m/structseq.h000064400000002511152342604300012316 0ustar00 /* Named tuple object interface */ #ifndef Py_STRUCTSEQ_H #define Py_STRUCTSEQ_H #ifdef __cplusplus extern "C" { #endif typedef struct PyStructSequence_Field { char *name; char *doc; } PyStructSequence_Field; typedef struct PyStructSequence_Desc { char *name; char *doc; struct PyStructSequence_Field *fields; int n_in_sequence; } PyStructSequence_Desc; extern char* PyStructSequence_UnnamedField; #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc); PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc); #endif PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); #ifndef Py_LIMITED_API typedef PyTupleObject PyStructSequence; /* Macro, *only* to be used to fill in brand new objects */ #define PyStructSequence_SET_ITEM(op, i, v) PyTuple_SET_ITEM(op, i, v) #define PyStructSequence_GET_ITEM(op, i) PyTuple_GET_ITEM(op, i) #endif PyAPI_FUNC(void) PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*); PyAPI_FUNC(PyObject*) PyStructSequence_GetItem(PyObject*, Py_ssize_t); #ifdef __cplusplus } #endif #endif /* !Py_STRUCTSEQ_H */ include/python3.4m/pymem.h000064400000015176152342604300011423 0ustar00/* The PyMem_ family: low-level memory allocation interfaces. See objimpl.h for the PyObject_ memory family. */ #ifndef Py_PYMEM_H #define Py_PYMEM_H #include "pyport.h" #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size); PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size); PyAPI_FUNC(void) PyMem_RawFree(void *ptr); #endif /* BEWARE: Each interface exports both functions and macros. Extension modules should use the functions, to ensure binary compatibility across Python versions. Because the Python implementation is free to change internal details, and the macros may (or may not) expose details for speed, if you do use the macros you must recompile your extensions with each Python release. Never mix calls to PyMem_ with calls to the platform malloc/realloc/ calloc/free. For example, on Windows different DLLs may end up using different heaps, and if you use PyMem_Malloc you'll get the memory from the heap used by the Python DLL; it could be a disaster if you free()'ed that directly in your own extension. Using PyMem_Free instead ensures Python can return the memory to the proper heap. As another example, in PYMALLOC_DEBUG mode, Python wraps all calls to all PyMem_ and PyObject_ memory functions in special debugging wrappers that add additional debugging info to dynamic memory blocks. The system routines have no idea what to do with that stuff, and the Python wrappers have no idea what to do with raw blocks obtained directly by the system routines then. The GIL must be held when using these APIs. */ /* * Raw memory interface * ==================== */ /* Functions Functions supplying platform-independent semantics for malloc/realloc/ free. These functions make sure that allocating 0 bytes returns a distinct non-NULL pointer (whenever possible -- if we're flat out of memory, NULL may be returned), even if the platform malloc and realloc don't. Returned pointers must be checked for NULL explicitly. No action is performed on failure (no exception is set, no warning is printed, etc). */ PyAPI_FUNC(void *) PyMem_Malloc(size_t size); PyAPI_FUNC(void *) PyMem_Realloc(void *ptr, size_t new_size); PyAPI_FUNC(void) PyMem_Free(void *ptr); #ifndef Py_LIMITED_API PyAPI_FUNC(char *) _PyMem_RawStrdup(const char *str); PyAPI_FUNC(char *) _PyMem_Strdup(const char *str); #endif /* Macros. */ /* PyMem_MALLOC(0) means malloc(1). Some systems would return NULL for malloc(0), which would be treated as an error. Some platforms would return a pointer with no memory behind it, which would break pymalloc. To solve these problems, allocate an extra byte. */ /* Returns NULL to indicate error if a negative size or size larger than Py_ssize_t can represent is supplied. Helps prevents security holes. */ #define PyMem_MALLOC(n) PyMem_Malloc(n) #define PyMem_REALLOC(p, n) PyMem_Realloc(p, n) #define PyMem_FREE(p) PyMem_Free(p) /* * Type-oriented memory interface * ============================== * * Allocate memory for n objects of the given type. Returns a new pointer * or NULL if the request was too large or memory allocation failed. Use * these macros rather than doing the multiplication yourself so that proper * overflow checking is always done. */ #define PyMem_New(type, n) \ ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ ( (type *) PyMem_Malloc((n) * sizeof(type)) ) ) #define PyMem_NEW(type, n) \ ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ ( (type *) PyMem_MALLOC((n) * sizeof(type)) ) ) /* * The value of (p) is always clobbered by this macro regardless of success. * The caller MUST check if (p) is NULL afterwards and deal with the memory * error if so. This means the original value of (p) MUST be saved for the * caller's memory error handler to not lose track of it. */ #define PyMem_Resize(p, type, n) \ ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) #define PyMem_RESIZE(p, type, n) \ ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ (type *) PyMem_REALLOC((p), (n) * sizeof(type)) ) /* PyMem{Del,DEL} are left over from ancient days, and shouldn't be used * anymore. They're just confusing aliases for PyMem_{Free,FREE} now. */ #define PyMem_Del PyMem_Free #define PyMem_DEL PyMem_FREE #ifndef Py_LIMITED_API typedef enum { /* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */ PYMEM_DOMAIN_RAW, /* PyMem_Malloc(), PyMem_Realloc() and PyMem_Free() */ PYMEM_DOMAIN_MEM, /* PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() */ PYMEM_DOMAIN_OBJ } PyMemAllocatorDomain; typedef struct { /* user context passed as the first argument to the 3 functions */ void *ctx; /* allocate a memory block */ void* (*malloc) (void *ctx, size_t size); /* allocate or resize a memory block */ void* (*realloc) (void *ctx, void *ptr, size_t new_size); /* release a memory block */ void (*free) (void *ctx, void *ptr); } PyMemAllocator; /* Get the memory block allocator of the specified domain. */ PyAPI_FUNC(void) PyMem_GetAllocator(PyMemAllocatorDomain domain, PyMemAllocator *allocator); /* Set the memory block allocator of the specified domain. The new allocator must return a distinct non-NULL pointer when requesting zero bytes. For the PYMEM_DOMAIN_RAW domain, the allocator must be thread-safe: the GIL is not held when the allocator is called. If the new allocator is not a hook (don't call the previous allocator), the PyMem_SetupDebugHooks() function must be called to reinstall the debug hooks on top on the new allocator. */ PyAPI_FUNC(void) PyMem_SetAllocator(PyMemAllocatorDomain domain, PyMemAllocator *allocator); /* Setup hooks to detect bugs in the following Python memory allocator functions: - PyMem_RawMalloc(), PyMem_RawRealloc(), PyMem_RawFree() - PyMem_Malloc(), PyMem_Realloc(), PyMem_Free() - PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() Newly allocated memory is filled with the byte 0xCB, freed memory is filled with the byte 0xDB. Additionnal checks: - detect API violations, ex: PyObject_Free() called on a buffer allocated by PyMem_Malloc() - detect write before the start of the buffer (buffer underflow) - detect write after the end of the buffer (buffer overflow) The function does nothing if Python is not compiled is debug mode. */ PyAPI_FUNC(void) PyMem_SetupDebugHooks(void); #endif #ifdef __cplusplus } #endif #endif /* !Py_PYMEM_H */ include/python3.4m/namespaceobject.h000064400000000451152342604300013405 0ustar00 /* simple namespace object interface */ #ifndef NAMESPACEOBJECT_H #define NAMESPACEOBJECT_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) _PyNamespace_Type; PyAPI_FUNC(PyObject *) _PyNamespace_New(PyObject *kwds); #ifdef __cplusplus } #endif #endif /* !NAMESPACEOBJECT_H */ include/python3.4m/pyhash.h000064400000010262152342604300011557 0ustar00#ifndef Py_HASH_H #define Py_HASH_H #ifdef __cplusplus extern "C" { #endif /* Helpers for hash functions */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double); PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*); PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t); #endif /* Prime multiplier used in string and various other hashes. */ #define _PyHASH_MULTIPLIER 1000003UL /* 0xf4243 */ /* Parameters used for the numeric hash implementation. See notes for _Py_HashDouble in Objects/object.c. Numeric hashes are based on reduction modulo the prime 2**_PyHASH_BITS - 1. */ #if SIZEOF_VOID_P >= 8 # define _PyHASH_BITS 61 #else # define _PyHASH_BITS 31 #endif #define _PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1) #define _PyHASH_INF 314159 #define _PyHASH_NAN 0 #define _PyHASH_IMAG _PyHASH_MULTIPLIER /* hash secret * * memory layout on 64 bit systems * cccccccc cccccccc cccccccc uc -- unsigned char[24] * pppppppp ssssssss ........ fnv -- two Py_hash_t * k0k0k0k0 k1k1k1k1 ........ siphash -- two PY_UINT64_T * ........ ........ ssssssss djbx33a -- 16 bytes padding + one Py_hash_t * ........ ........ eeeeeeee pyexpat XML hash salt * * memory layout on 32 bit systems * cccccccc cccccccc cccccccc uc * ppppssss ........ ........ fnv -- two Py_hash_t * k0k0k0k0 k1k1k1k1 ........ siphash -- two PY_UINT64_T (*) * ........ ........ ssss.... djbx33a -- 16 bytes padding + one Py_hash_t * ........ ........ eeee.... pyexpat XML hash salt * * (*) The siphash member may not be available on 32 bit platforms without * an unsigned int64 data type. */ #ifndef Py_LIMITED_API typedef union { /* ensure 24 bytes */ unsigned char uc[24]; /* two Py_hash_t for FNV */ struct { Py_hash_t prefix; Py_hash_t suffix; } fnv; #ifdef PY_UINT64_T /* two uint64 for SipHash24 */ struct { PY_UINT64_T k0; PY_UINT64_T k1; } siphash; #endif /* a different (!) Py_hash_t for small string optimization */ struct { unsigned char padding[16]; Py_hash_t suffix; } djbx33a; struct { unsigned char padding[16]; Py_hash_t hashsalt; } expat; } _Py_HashSecret_t; PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret; #endif #ifdef Py_DEBUG PyAPI_DATA(int) _Py_HashSecret_Initialized; #endif /* hash function definition */ #ifndef Py_LIMITED_API typedef struct { Py_hash_t (*const hash)(const void *, Py_ssize_t); const char *name; const int hash_bits; const int seed_bits; } PyHash_FuncDef; PyAPI_FUNC(PyHash_FuncDef*) PyHash_GetFuncDef(void); #endif /* cutoff for small string DJBX33A optimization in range [1, cutoff). * * About 50% of the strings in a typical Python application are smaller than * 6 to 7 chars. However DJBX33A is vulnerable to hash collision attacks. * NEVER use DJBX33A for long strings! * * A Py_HASH_CUTOFF of 0 disables small string optimization. 32 bit platforms * should use a smaller cutoff because it is easier to create colliding * strings. A cutoff of 7 on 64bit platforms and 5 on 32bit platforms should * provide a decent safety margin. */ #ifndef Py_HASH_CUTOFF # define Py_HASH_CUTOFF 0 #elif (Py_HASH_CUTOFF > 7 || Py_HASH_CUTOFF < 0) # error Py_HASH_CUTOFF must in range 0...7. #endif /* Py_HASH_CUTOFF */ /* hash algorithm selection * * The values for Py_HASH_SIPHASH24 and Py_HASH_FNV are hard-coded in the * configure script. * * - FNV is available on all platforms and architectures. * - SIPHASH24 only works on plaforms that provide PY_UINT64_T and doesn't * require aligned memory for integers. * - With EXTERNAL embedders can provide an alternative implementation with:: * * PyHash_FuncDef PyHash_Func = {...}; * * XXX: Figure out __declspec() for extern PyHash_FuncDef. */ #define Py_HASH_EXTERNAL 0 #define Py_HASH_SIPHASH24 1 #define Py_HASH_FNV 2 #ifndef Py_HASH_ALGORITHM # if (defined(PY_UINT64_T) && defined(PY_UINT32_T) \ && !defined(HAVE_ALIGNED_REQUIRED)) # define Py_HASH_ALGORITHM Py_HASH_SIPHASH24 # else # define Py_HASH_ALGORITHM Py_HASH_FNV # endif /* uint64_t && uint32_t && aligned */ #endif /* Py_HASH_ALGORITHM */ #ifdef __cplusplus } #endif #endif /* !Py_HASH_H */ include/python3.4m/modsupport.h000064400000011441152342604300012477 0ustar00 #ifndef Py_MODSUPPORT_H #define Py_MODSUPPORT_H #ifdef __cplusplus extern "C" { #endif /* Module support interface */ #include /* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier to mean Py_ssize_t */ #ifdef PY_SSIZE_T_CLEAN #define PyArg_Parse _PyArg_Parse_SizeT #define PyArg_ParseTuple _PyArg_ParseTuple_SizeT #define PyArg_ParseTupleAndKeywords _PyArg_ParseTupleAndKeywords_SizeT #define PyArg_VaParse _PyArg_VaParse_SizeT #define PyArg_VaParseTupleAndKeywords _PyArg_VaParseTupleAndKeywords_SizeT #define Py_BuildValue _Py_BuildValue_SizeT #define Py_VaBuildValue _Py_VaBuildValue_SizeT #else PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list); #endif /* Due to a glitch in 3.2, the _SizeT versions weren't exported from the DLL. */ #if !defined(PY_SSIZE_T_CLEAN) || !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...); PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, const char *, char **, ...); PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *); PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...); PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); #endif #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kw); PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, const char *, char **, va_list); #endif PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long); PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c) #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c) #define Py_CLEANUP_SUPPORTED 0x20000 #define PYTHON_API_VERSION 1013 #define PYTHON_API_STRING "1013" /* The API version is maintained (independently from the Python version) so we can detect mismatches between the interpreter and dynamically loaded modules. These are diagnosed by an error message but the module is still loaded (because the mismatch can only be tested after loading the module). The error message is intended to explain the core dump a few seconds later. The symbol PYTHON_API_STRING defines the same value as a string literal. *** PLEASE MAKE SURE THE DEFINITIONS MATCH. *** Please add a line or two to the top of this log for each API version change: 22-Feb-2006 MvL 1013 PEP 353 - long indices for sequence lengths 19-Aug-2002 GvR 1012 Changes to string object struct for interning changes, saving 3 bytes. 17-Jul-2001 GvR 1011 Descr-branch, just to be on the safe side 25-Jan-2001 FLD 1010 Parameters added to PyCode_New() and PyFrame_New(); Python 2.1a2 14-Mar-2000 GvR 1009 Unicode API added 3-Jan-1999 GvR 1007 Decided to change back! (Don't reuse 1008!) 3-Dec-1998 GvR 1008 Python 1.5.2b1 18-Jan-1997 GvR 1007 string interning and other speedups 11-Oct-1996 GvR renamed Py_Ellipses to Py_Ellipsis :-( 30-Jul-1996 GvR Slice and ellipses syntax added 23-Jul-1996 GvR For 1.4 -- better safe than sorry this time :-) 7-Nov-1995 GvR Keyword arguments (should've been done at 1.3 :-( ) 10-Jan-1995 GvR Renamed globals to new naming scheme 9-Jan-1995 GvR Initial version (incompatible with older API) */ /* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of Python 3, it will stay at the value of 3; changes to the limited API must be performed in a strictly backwards-compatible manner. */ #define PYTHON_ABI_VERSION 3 #define PYTHON_ABI_STRING "3" #ifdef Py_TRACE_REFS /* When we are tracing reference counts, rename PyModule_Create2 so modules compiled with incompatible settings will generate a link-time error. */ #define PyModule_Create2 PyModule_Create2TraceRefs #endif PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*, int apiver); #ifdef Py_LIMITED_API #define PyModule_Create(module) \ PyModule_Create2(module, PYTHON_ABI_VERSION) #else #define PyModule_Create(module) \ PyModule_Create2(module, PYTHON_API_VERSION) #endif #ifndef Py_LIMITED_API PyAPI_DATA(char *) _Py_PackageContext; #endif #ifdef __cplusplus } #endif #endif /* !Py_MODSUPPORT_H */ include/python3.4m/boolobject.h000064400000001566152342604300012414 0ustar00/* Boolean object interface */ #ifndef Py_BOOLOBJECT_H #define Py_BOOLOBJECT_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PyBool_Type; #define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) /* Py_False and Py_True are the only two bools in existence. Don't forget to apply Py_INCREF() when returning either!!! */ /* Don't use these directly */ PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; /* Use these macros */ #define Py_False ((PyObject *) &_Py_FalseStruct) #define Py_True ((PyObject *) &_Py_TrueStruct) /* Macros for returning Py_True or Py_False, respectively */ #define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True #define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False /* Function to return a bool from a C long */ PyAPI_FUNC(PyObject *) PyBool_FromLong(long); #ifdef __cplusplus } #endif #endif /* !Py_BOOLOBJECT_H */ include/python3.4m/bltinmodule.h000064400000000410152342604300012573 0ustar00#ifndef Py_BLTINMODULE_H #define Py_BLTINMODULE_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PyFilter_Type; PyAPI_DATA(PyTypeObject) PyMap_Type; PyAPI_DATA(PyTypeObject) PyZip_Type; #ifdef __cplusplus } #endif #endif /* !Py_BLTINMODULE_H */ include/python3.4m/complexobject.h000064400000003642152342604300013125 0ustar00/* Complex number structure */ #ifndef Py_COMPLEXOBJECT_H #define Py_COMPLEXOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API typedef struct { double real; double imag; } Py_complex; /* Operations on complex numbers from complexmodule.c */ #define c_sum _Py_c_sum #define c_diff _Py_c_diff #define c_neg _Py_c_neg #define c_prod _Py_c_prod #define c_quot _Py_c_quot #define c_pow _Py_c_pow #define c_abs _Py_c_abs PyAPI_FUNC(Py_complex) c_sum(Py_complex, Py_complex); PyAPI_FUNC(Py_complex) c_diff(Py_complex, Py_complex); PyAPI_FUNC(Py_complex) c_neg(Py_complex); PyAPI_FUNC(Py_complex) c_prod(Py_complex, Py_complex); PyAPI_FUNC(Py_complex) c_quot(Py_complex, Py_complex); PyAPI_FUNC(Py_complex) c_pow(Py_complex, Py_complex); PyAPI_FUNC(double) c_abs(Py_complex); #endif /* Complex object interface */ /* PyComplexObject represents a complex number with double-precision real and imaginary parts. */ #ifndef Py_LIMITED_API typedef struct { PyObject_HEAD Py_complex cval; } PyComplexObject; #endif PyAPI_DATA(PyTypeObject) PyComplex_Type; #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type) #define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type) #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); #endif PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag); PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op); PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op); #ifndef Py_LIMITED_API PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op); #endif /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyComplex_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); #endif #ifdef __cplusplus } #endif #endif /* !Py_COMPLEXOBJECT_H */ include/python3.4m/osdefs.h000064400000001520152342604300011543 0ustar00#ifndef Py_OSDEFS_H #define Py_OSDEFS_H #ifdef __cplusplus extern "C" { #endif /* Operating system dependencies */ /* Mod by chrish: QNX has WATCOM, but isn't DOS */ #if !defined(__QNX__) #if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) #define SEP L'\\' #define ALTSEP L'/' #define MAXPATHLEN 256 #define DELIM L';' #endif #endif /* Filename separator */ #ifndef SEP #define SEP L'/' #endif /* Max pathname length */ #ifdef __hpux #include #include #ifndef PATH_MAX #define PATH_MAX MAXPATHLEN #endif #endif #ifndef MAXPATHLEN #if defined(PATH_MAX) && PATH_MAX > 1024 #define MAXPATHLEN PATH_MAX #else #define MAXPATHLEN 1024 #endif #endif /* Search path entry delimiter */ #ifndef DELIM #define DELIM L':' #endif #ifdef __cplusplus } #endif #endif /* !Py_OSDEFS_H */ include/python3.4m/pyarena.h000064400000005270152342604300011725 0ustar00/* An arena-like memory interface for the compiler. */ #ifndef Py_LIMITED_API #ifndef Py_PYARENA_H #define Py_PYARENA_H #ifdef __cplusplus extern "C" { #endif typedef struct _arena PyArena; /* PyArena_New() and PyArena_Free() create a new arena and free it, respectively. Once an arena has been created, it can be used to allocate memory via PyArena_Malloc(). Pointers to PyObject can also be registered with the arena via PyArena_AddPyObject(), and the arena will ensure that the PyObjects stay alive at least until PyArena_Free() is called. When an arena is freed, all the memory it allocated is freed, the arena releases internal references to registered PyObject*, and none of its pointers are valid. XXX (tim) What does "none of its pointers are valid" mean? Does it XXX mean that pointers previously obtained via PyArena_Malloc() are XXX no longer valid? (That's clearly true, but not sure that's what XXX the text is trying to say.) PyArena_New() returns an arena pointer. On error, it returns a negative number and sets an exception. XXX (tim): Not true. On error, PyArena_New() actually returns NULL, XXX and looks like it may or may not set an exception (e.g., if the XXX internal PyList_New(0) returns NULL, PyArena_New() passes that on XXX and an exception is set; OTOH, if the internal XXX block_new(DEFAULT_BLOCK_SIZE) returns NULL, that's passed on but XXX an exception is not set in that case). */ PyAPI_FUNC(PyArena *) PyArena_New(void); PyAPI_FUNC(void) PyArena_Free(PyArena *); /* Mostly like malloc(), return the address of a block of memory spanning * `size` bytes, or return NULL (without setting an exception) if enough * new memory can't be obtained. Unlike malloc(0), PyArena_Malloc() with * size=0 does not guarantee to return a unique pointer (the pointer * returned may equal one or more other pointers obtained from * PyArena_Malloc()). * Note that pointers obtained via PyArena_Malloc() must never be passed to * the system free() or realloc(), or to any of Python's similar memory- * management functions. PyArena_Malloc()-obtained pointers remain valid * until PyArena_Free(ar) is called, at which point all pointers obtained * from the arena `ar` become invalid simultaneously. */ PyAPI_FUNC(void *) PyArena_Malloc(PyArena *, size_t size); /* This routine isn't a proper arena allocation routine. It takes * a PyObject* and records it so that it can be DECREFed when the * arena is freed. */ PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *); #ifdef __cplusplus } #endif #endif /* !Py_PYARENA_H */ #endif /* Py_LIMITED_API */ include/python3.4m/code.h000064400000010203152342604300011170 0ustar00/* Definitions for bytecode */ #ifndef Py_LIMITED_API #ifndef Py_CODE_H #define Py_CODE_H #ifdef __cplusplus extern "C" { #endif /* Bytecode object */ typedef struct { PyObject_HEAD int co_argcount; /* #arguments, except *args */ int co_kwonlyargcount; /* #keyword only arguments */ int co_nlocals; /* #local variables */ int co_stacksize; /* #entries needed for evaluation stack */ int co_flags; /* CO_..., see below */ PyObject *co_code; /* instruction opcodes */ PyObject *co_consts; /* list (constants used) */ PyObject *co_names; /* list of strings (names used) */ PyObject *co_varnames; /* tuple of strings (local variable names) */ PyObject *co_freevars; /* tuple of strings (free variable names) */ PyObject *co_cellvars; /* tuple of strings (cell variable names) */ /* The rest doesn't count for hash or comparisons */ unsigned char *co_cell2arg; /* Maps cell vars which are arguments. */ PyObject *co_filename; /* unicode (where it was loaded from) */ PyObject *co_name; /* unicode (name, for reference) */ int co_firstlineno; /* first source line number */ PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See Objects/lnotab_notes.txt for details. */ void *co_zombieframe; /* for optimization only (see frameobject.c) */ PyObject *co_weakreflist; /* to support weakrefs to code objects */ } PyCodeObject; /* Masks for co_flags above */ #define CO_OPTIMIZED 0x0001 #define CO_NEWLOCALS 0x0002 #define CO_VARARGS 0x0004 #define CO_VARKEYWORDS 0x0008 #define CO_NESTED 0x0010 #define CO_GENERATOR 0x0020 /* The CO_NOFREE flag is set if there are no free or cell variables. This information is redundant, but it allows a single flag test to determine whether there is any extra work to be done when the call frame it setup. */ #define CO_NOFREE 0x0040 /* These are no longer used. */ #if 0 #define CO_GENERATOR_ALLOWED 0x1000 #endif #define CO_FUTURE_DIVISION 0x2000 #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */ #define CO_FUTURE_WITH_STATEMENT 0x8000 #define CO_FUTURE_PRINT_FUNCTION 0x10000 #define CO_FUTURE_UNICODE_LITERALS 0x20000 #define CO_FUTURE_BARRY_AS_BDFL 0x40000 /* This value is found in the co_cell2arg array when the associated cell variable does not correspond to an argument. The maximum number of arguments is 255 (indexed up to 254), so 255 work as a special flag.*/ #define CO_CELL_NOT_AN_ARG 255 /* This should be defined if a future statement modifies the syntax. For example, when a keyword is added. */ #define PY_PARSER_REQUIRES_FUTURE_KEYWORD #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ PyAPI_DATA(PyTypeObject) PyCode_Type; #define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type) #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) /* Public interface */ PyAPI_FUNC(PyCodeObject *) PyCode_New( int, int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); /* same as struct above */ /* Creates a new empty code object with the specified source location. */ PyAPI_FUNC(PyCodeObject *) PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); /* Return the line number associated with the specified bytecode index in this code object. If you just need the line number of a frame, use PyFrame_GetLineNumber() instead. */ PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); /* for internal use only */ typedef struct _addr_pair { int ap_lower; int ap_upper; } PyAddrPair; /* Update *bounds to describe the first and one-past-the-last instructions in the same line as lasti. Return the number of that line. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, int lasti, PyAddrPair *bounds); #endif PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, PyObject *lineno_obj); #ifdef __cplusplus } #endif #endif /* !Py_CODE_H */ #endif /* Py_LIMITED_API */ include/python3.4m/token.h000064400000003540152342604300011404 0ustar00 /* Token types */ #ifndef Py_LIMITED_API #ifndef Py_TOKEN_H #define Py_TOKEN_H #ifdef __cplusplus extern "C" { #endif #undef TILDE /* Prevent clash of our definition with system macro. Ex AIX, ioctl.h */ #define ENDMARKER 0 #define NAME 1 #define NUMBER 2 #define STRING 3 #define NEWLINE 4 #define INDENT 5 #define DEDENT 6 #define LPAR 7 #define RPAR 8 #define LSQB 9 #define RSQB 10 #define COLON 11 #define COMMA 12 #define SEMI 13 #define PLUS 14 #define MINUS 15 #define STAR 16 #define SLASH 17 #define VBAR 18 #define AMPER 19 #define LESS 20 #define GREATER 21 #define EQUAL 22 #define DOT 23 #define PERCENT 24 #define LBRACE 25 #define RBRACE 26 #define EQEQUAL 27 #define NOTEQUAL 28 #define LESSEQUAL 29 #define GREATEREQUAL 30 #define TILDE 31 #define CIRCUMFLEX 32 #define LEFTSHIFT 33 #define RIGHTSHIFT 34 #define DOUBLESTAR 35 #define PLUSEQUAL 36 #define MINEQUAL 37 #define STAREQUAL 38 #define SLASHEQUAL 39 #define PERCENTEQUAL 40 #define AMPEREQUAL 41 #define VBAREQUAL 42 #define CIRCUMFLEXEQUAL 43 #define LEFTSHIFTEQUAL 44 #define RIGHTSHIFTEQUAL 45 #define DOUBLESTAREQUAL 46 #define DOUBLESLASH 47 #define DOUBLESLASHEQUAL 48 #define AT 49 #define RARROW 50 #define ELLIPSIS 51 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ #define OP 52 #define ERRORTOKEN 53 #define N_TOKENS 54 /* Special definitions for cooperation with parser */ #define NT_OFFSET 256 #define ISTERMINAL(x) ((x) < NT_OFFSET) #define ISNONTERMINAL(x) ((x) >= NT_OFFSET) #define ISEOF(x) ((x) == ENDMARKER) PyAPI_DATA(const char *) _PyParser_TokenNames[]; /* Token names */ PyAPI_FUNC(int) PyToken_OneChar(int); PyAPI_FUNC(int) PyToken_TwoChars(int, int); PyAPI_FUNC(int) PyToken_ThreeChars(int, int, int); #ifdef __cplusplus } #endif #endif /* !Py_TOKEN_H */ #endif /* Py_LIMITED_API */ include/python3.4m/methodobject.h000064400000006353152342604300012740 0ustar00 /* Method object interface */ #ifndef Py_METHODOBJECT_H #define Py_METHODOBJECT_H #ifdef __cplusplus extern "C" { #endif /* This is about the type 'builtin_function_or_method', not Python methods in user-defined classes. See classobject.h for the latter. */ PyAPI_DATA(PyTypeObject) PyCFunction_Type; #define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, PyObject *); typedef PyObject *(*PyNoArgsFunction)(PyObject *); PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); /* Macros for direct access to these values. Type checks are *not* done, so use with care. */ #ifndef Py_LIMITED_API #define PyCFunction_GET_FUNCTION(func) \ (((PyCFunctionObject *)func) -> m_ml -> ml_meth) #define PyCFunction_GET_SELF(func) \ (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ NULL : ((PyCFunctionObject *)func) -> m_self) #define PyCFunction_GET_FLAGS(func) \ (((PyCFunctionObject *)func) -> m_ml -> ml_flags) #endif PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); struct PyMethodDef { const char *ml_name; /* The name of the built-in function/method */ PyCFunction ml_meth; /* The C function that implements it */ int ml_flags; /* Combination of METH_xxx flags, which mostly describe the args expected by the C func */ const char *ml_doc; /* The __doc__ attribute, or NULL */ }; typedef struct PyMethodDef PyMethodDef; #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *); /* Flag passed to newmethodobject */ /* #define METH_OLDARGS 0x0000 -- unsupported now */ #define METH_VARARGS 0x0001 #define METH_KEYWORDS 0x0002 /* METH_NOARGS and METH_O must not be combined with the flags above. */ #define METH_NOARGS 0x0004 #define METH_O 0x0008 /* METH_CLASS and METH_STATIC are a little different; these control the construction of methods for a class. These cannot be used for functions in modules. */ #define METH_CLASS 0x0010 #define METH_STATIC 0x0020 /* METH_COEXIST allows a method to be entered even though a slot has already filled the entry. When defined, the flag allows a separate method, "__contains__" for example, to coexist with a defined slot like sq_contains. */ #define METH_COEXIST 0x0040 #ifndef Py_LIMITED_API typedef struct { PyObject_HEAD PyMethodDef *m_ml; /* Description of the C function to call */ PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ PyObject *m_module; /* The __module__ attribute, can be anything */ } PyCFunctionObject; #endif PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out); PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out); #endif #ifdef __cplusplus } #endif #endif /* !Py_METHODOBJECT_H */ include/python3.4m/pyport.h000064400000074232152342604300011627 0ustar00#ifndef Py_PYPORT_H #define Py_PYPORT_H #include "pyconfig.h" /* include for defines */ /* Some versions of HP-UX & Solaris need inttypes.h for int32_t, INT32_MAX, etc. */ #ifdef HAVE_INTTYPES_H #include #endif #ifdef HAVE_STDINT_H #include #endif /************************************************************************** Symbols and macros to supply platform-independent interfaces to basic C language & library operations whose spellings vary across platforms. Please try to make documentation here as clear as possible: by definition, the stuff here is trying to illuminate C's darkest corners. Config #defines referenced here: SIGNED_RIGHT_SHIFT_ZERO_FILLS Meaning: To be defined iff i>>j does not extend the sign bit when i is a signed integral type and i < 0. Used in: Py_ARITHMETIC_RIGHT_SHIFT Py_DEBUG Meaning: Extra checks compiled in for debug mode. Used in: Py_SAFE_DOWNCAST HAVE_UINTPTR_T Meaning: The C9X type uintptr_t is supported by the compiler Used in: Py_uintptr_t HAVE_LONG_LONG Meaning: The compiler supports the C type "long long" Used in: PY_LONG_LONG **************************************************************************/ /* typedefs for some C9X-defined synonyms for integral types. * * The names in Python are exactly the same as the C9X names, except with a * Py_ prefix. Until C9X is universally implemented, this is the only way * to ensure that Python gets reliable names that don't conflict with names * in non-Python code that are playing their own tricks to define the C9X * names. * * NOTE: don't go nuts here! Python has no use for *most* of the C9X * integral synonyms. Only define the ones we actually need. */ #ifdef HAVE_LONG_LONG #ifndef PY_LONG_LONG #define PY_LONG_LONG long long #if defined(LLONG_MAX) /* If LLONG_MAX is defined in limits.h, use that. */ #define PY_LLONG_MIN LLONG_MIN #define PY_LLONG_MAX LLONG_MAX #define PY_ULLONG_MAX ULLONG_MAX #elif defined(__LONG_LONG_MAX__) /* Otherwise, if GCC has a builtin define, use that. (Definition of * PY_LLONG_MIN assumes two's complement with no trap representation.) */ #define PY_LLONG_MAX __LONG_LONG_MAX__ #define PY_LLONG_MIN (-PY_LLONG_MAX - 1) #define PY_ULLONG_MAX (PY_LLONG_MAX * Py_ULL(2) + 1) #elif defined(SIZEOF_LONG_LONG) /* Otherwise compute from SIZEOF_LONG_LONG, assuming two's complement, no padding bits, and no trap representation. Note: PY_ULLONG_MAX was previously #defined as (~0ULL) here; but that'll give the wrong value in a preprocessor expression on systems where long long != intmax_t. */ #define PY_LLONG_MAX \ (1 + 2 * ((Py_LL(1) << (CHAR_BIT * SIZEOF_LONG_LONG - 2)) - 1)) #define PY_LLONG_MIN (-PY_LLONG_MAX - 1) #define PY_ULLONG_MAX (PY_LLONG_MAX * Py_ULL(2) + 1) #endif /* LLONG_MAX */ #endif #endif /* HAVE_LONG_LONG */ /* a build with 30-bit digits for Python integers needs an exact-width * 32-bit unsigned integer type to store those digits. (We could just use * type 'unsigned long', but that would be wasteful on a system where longs * are 64-bits.) On Unix systems, the autoconf macro AC_TYPE_UINT32_T defines * uint32_t to be such a type unless stdint.h or inttypes.h defines uint32_t. * However, it doesn't set HAVE_UINT32_T, so we do that here. */ #ifdef uint32_t #define HAVE_UINT32_T 1 #endif #ifdef HAVE_UINT32_T #ifndef PY_UINT32_T #define PY_UINT32_T uint32_t #endif #endif /* Macros for a 64-bit unsigned integer type; used for type 'twodigits' in the * integer implementation, when 30-bit digits are enabled. */ #ifdef uint64_t #define HAVE_UINT64_T 1 #endif #ifdef HAVE_UINT64_T #ifndef PY_UINT64_T #define PY_UINT64_T uint64_t #endif #endif /* Signed variants of the above */ #ifdef int32_t #define HAVE_INT32_T 1 #endif #ifdef HAVE_INT32_T #ifndef PY_INT32_T #define PY_INT32_T int32_t #endif #endif #ifdef int64_t #define HAVE_INT64_T 1 #endif #ifdef HAVE_INT64_T #ifndef PY_INT64_T #define PY_INT64_T int64_t #endif #endif /* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all the necessary integer types are available, and we're on a 64-bit platform (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits. */ #ifndef PYLONG_BITS_IN_DIGIT #if (defined HAVE_UINT64_T && defined HAVE_INT64_T && \ defined HAVE_UINT32_T && defined HAVE_INT32_T && SIZEOF_VOID_P >= 8) #define PYLONG_BITS_IN_DIGIT 30 #else #define PYLONG_BITS_IN_DIGIT 15 #endif #endif /* uintptr_t is the C9X name for an unsigned integral type such that a * legitimate void* can be cast to uintptr_t and then back to void* again * without loss of information. Similarly for intptr_t, wrt a signed * integral type. */ #ifdef HAVE_UINTPTR_T typedef uintptr_t Py_uintptr_t; typedef intptr_t Py_intptr_t; #elif SIZEOF_VOID_P <= SIZEOF_INT typedef unsigned int Py_uintptr_t; typedef int Py_intptr_t; #elif SIZEOF_VOID_P <= SIZEOF_LONG typedef unsigned long Py_uintptr_t; typedef long Py_intptr_t; #elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG) typedef unsigned PY_LONG_LONG Py_uintptr_t; typedef PY_LONG_LONG Py_intptr_t; #else # error "Python needs a typedef for Py_uintptr_t in pyport.h." #endif /* HAVE_UINTPTR_T */ /* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) == * sizeof(size_t). C99 doesn't define such a thing directly (size_t is an * unsigned integral type). See PEP 353 for details. */ #ifdef HAVE_SSIZE_T typedef ssize_t Py_ssize_t; #elif SIZEOF_VOID_P == SIZEOF_SIZE_T typedef Py_intptr_t Py_ssize_t; #else # error "Python needs a typedef for Py_ssize_t in pyport.h." #endif /* Py_hash_t is the same size as a pointer. */ #define SIZEOF_PY_HASH_T SIZEOF_SIZE_T typedef Py_ssize_t Py_hash_t; /* Py_uhash_t is the unsigned equivalent needed to calculate numeric hash. */ #define SIZEOF_PY_UHASH_T SIZEOF_SIZE_T typedef size_t Py_uhash_t; /* Only used for compatibility with code that may not be PY_SSIZE_T_CLEAN. */ #ifdef PY_SSIZE_T_CLEAN typedef Py_ssize_t Py_ssize_clean_t; #else typedef int Py_ssize_clean_t; #endif /* Largest possible value of size_t. SIZE_MAX is part of C99, so it might be defined on some platforms. If it is not defined, (size_t)-1 is a portable definition for C89, due to the way signed->unsigned conversion is defined. */ #ifdef SIZE_MAX #define PY_SIZE_MAX SIZE_MAX #else #define PY_SIZE_MAX ((size_t)-1) #endif /* Largest positive value of type Py_ssize_t. */ #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) /* Smallest negative value of type Py_ssize_t. */ #define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf * format to convert an argument with the width of a size_t or Py_ssize_t. * C99 introduced "z" for this purpose, but not all platforms support that; * e.g., MS compilers use "I" instead. * * These "high level" Python format functions interpret "z" correctly on * all platforms (Python interprets the format string itself, and does whatever * the platform C requires to convert a size_t/Py_ssize_t argument): * * PyBytes_FromFormat * PyErr_Format * PyBytes_FromFormatV * PyUnicode_FromFormatV * * Lower-level uses require that you interpolate the correct format modifier * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for * example, * * Py_ssize_t index; * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); * * That will expand to %ld, or %Id, or to something else correct for a * Py_ssize_t on the platform. */ #ifndef PY_FORMAT_SIZE_T # if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) # define PY_FORMAT_SIZE_T "" # elif SIZEOF_SIZE_T == SIZEOF_LONG # define PY_FORMAT_SIZE_T "l" # elif defined(MS_WINDOWS) # define PY_FORMAT_SIZE_T "I" # else # error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" # endif #endif /* PY_FORMAT_LONG_LONG is analogous to PY_FORMAT_SIZE_T above, but for * the long long type instead of the size_t type. It's only available * when HAVE_LONG_LONG is defined. The "high level" Python format * functions listed above will interpret "lld" or "llu" correctly on * all platforms. */ #ifdef HAVE_LONG_LONG # ifndef PY_FORMAT_LONG_LONG # ifdef MS_WINDOWS # define PY_FORMAT_LONG_LONG "I64" # else # error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG" # endif # endif #endif /* Py_LOCAL can be used instead of static to get the fastest possible calling * convention for functions that are local to a given module. * * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining, * for platforms that support that. * * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more * "aggressive" inlining/optimization is enabled for the entire module. This * may lead to code bloat, and may slow things down for those reasons. It may * also lead to errors, if the code relies on pointer aliasing. Use with * care. * * NOTE: You can only use this for functions that are entirely local to a * module; functions that are exported via method tables, callbacks, etc, * should keep using static. */ #if defined(_MSC_VER) #if defined(PY_LOCAL_AGGRESSIVE) /* enable more aggressive optimization for visual studio */ #pragma optimize("agtw", on) #endif /* ignore warnings if the compiler decides not to inline a function */ #pragma warning(disable: 4710) /* fastest possible local call under MSVC */ #define Py_LOCAL(type) static type __fastcall #define Py_LOCAL_INLINE(type) static __inline type __fastcall #elif defined(USE_INLINE) #define Py_LOCAL(type) static type #define Py_LOCAL_INLINE(type) static inline type #else #define Py_LOCAL(type) static type #define Py_LOCAL_INLINE(type) static type #endif /* Py_MEMCPY can be used instead of memcpy in cases where the copied blocks * are often very short. While most platforms have highly optimized code for * large transfers, the setup costs for memcpy are often quite high. MEMCPY * solves this by doing short copies "in line". */ #if defined(_MSC_VER) #define Py_MEMCPY(target, source, length) do { \ size_t i_, n_ = (length); \ char *t_ = (void*) (target); \ const char *s_ = (void*) (source); \ if (n_ >= 16) \ memcpy(t_, s_, n_); \ else \ for (i_ = 0; i_ < n_; i_++) \ t_[i_] = s_[i_]; \ } while (0) #else #define Py_MEMCPY memcpy #endif #include #ifdef HAVE_IEEEFP_H #include /* needed for 'finite' declaration on some platforms */ #endif #include /* Moved here from the math section, before extern "C" */ /******************************************** * WRAPPER FOR and/or * ********************************************/ #ifdef TIME_WITH_SYS_TIME #include #include #else /* !TIME_WITH_SYS_TIME */ #ifdef HAVE_SYS_TIME_H #include #else /* !HAVE_SYS_TIME_H */ #include #endif /* !HAVE_SYS_TIME_H */ #endif /* !TIME_WITH_SYS_TIME */ /****************************** * WRAPPER FOR * ******************************/ /* NB caller must include */ #ifdef HAVE_SYS_SELECT_H #include #endif /* !HAVE_SYS_SELECT_H */ /******************************* * stat() and fstat() fiddling * *******************************/ /* We expect that stat and fstat exist on most systems. * It's confirmed on Unix, Mac and Windows. * If you don't have them, add * #define DONT_HAVE_STAT * and/or * #define DONT_HAVE_FSTAT * to your pyconfig.h. Python code beyond this should check HAVE_STAT and * HAVE_FSTAT instead. * Also * #define HAVE_SYS_STAT_H * if exists on your platform, and * #define HAVE_STAT_H * if does. */ #ifndef DONT_HAVE_STAT #define HAVE_STAT #endif #ifndef DONT_HAVE_FSTAT #define HAVE_FSTAT #endif #ifdef HAVE_SYS_STAT_H #include #elif defined(HAVE_STAT_H) #include #endif #ifndef S_IFMT /* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ #define S_IFMT 0170000 #endif #ifndef S_IFLNK /* Windows doesn't define S_IFLNK but posixmodule.c maps * IO_REPARSE_TAG_SYMLINK to S_IFLNK */ # define S_IFLNK 0120000 #endif #ifndef S_ISREG #define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) #endif #ifndef S_ISDIR #define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) #endif #ifndef S_ISCHR #define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) #endif #ifdef __cplusplus /* Move this down here since some C++ #include's don't like to be included inside an extern "C" */ extern "C" { #endif /* Py_ARITHMETIC_RIGHT_SHIFT * C doesn't define whether a right-shift of a signed integer sign-extends * or zero-fills. Here a macro to force sign extension: * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) * Return I >> J, forcing sign extension. Arithmetically, return the * floor of I/2**J. * Requirements: * I should have signed integer type. In the terminology of C99, this can * be either one of the five standard signed integer types (signed char, * short, int, long, long long) or an extended signed integer type. * J is an integer >= 0 and strictly less than the number of bits in the * type of I (because C doesn't define what happens for J outside that * range either). * TYPE used to specify the type of I, but is now ignored. It's been left * in for backwards compatibility with versions <= 2.6 or 3.0. * Caution: * I may be evaluated more than once. */ #ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS #define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ ((I) < 0 ? -1-((-1-(I)) >> (J)) : (I) >> (J)) #else #define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) #endif /* Py_FORCE_EXPANSION(X) * "Simply" returns its argument. However, macro expansions within the * argument are evaluated. This unfortunate trickery is needed to get * token-pasting to work as desired in some cases. */ #define Py_FORCE_EXPANSION(X) X /* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) * Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this * assert-fails if any information is lost. * Caution: * VALUE may be evaluated more than once. */ #ifdef Py_DEBUG #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \ (assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE)) #else #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE) #endif /* Py_SET_ERRNO_ON_MATH_ERROR(x) * If a libm function did not set errno, but it looks like the result * overflowed or not-a-number, set errno to ERANGE or EDOM. Set errno * to 0 before calling a libm function, and invoke this macro after, * passing the function result. * Caution: * This isn't reliable. See Py_OVERFLOWED comments. * X is evaluated more than once. */ #if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64)) #define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM; #else #define _Py_SET_EDOM_FOR_NAN(X) ; #endif #define Py_SET_ERRNO_ON_MATH_ERROR(X) \ do { \ if (errno == 0) { \ if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ errno = ERANGE; \ else _Py_SET_EDOM_FOR_NAN(X) \ } \ } while(0) /* Py_SET_ERANGE_ON_OVERFLOW(x) * An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility. */ #define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X) /* Py_ADJUST_ERANGE1(x) * Py_ADJUST_ERANGE2(x, y) * Set errno to 0 before calling a libm function, and invoke one of these * macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful * for functions returning complex results). This makes two kinds of * adjustments to errno: (A) If it looks like the platform libm set * errno=ERANGE due to underflow, clear errno. (B) If it looks like the * platform libm overflowed but didn't set errno, force errno to ERANGE. In * effect, we're trying to force a useful implementation of C89 errno * behavior. * Caution: * This isn't reliable. See Py_OVERFLOWED comments. * X and Y may be evaluated more than once. */ #define Py_ADJUST_ERANGE1(X) \ do { \ if (errno == 0) { \ if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ errno = ERANGE; \ } \ else if (errno == ERANGE && (X) == 0.0) \ errno = 0; \ } while(0) #define Py_ADJUST_ERANGE2(X, Y) \ do { \ if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL || \ (Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) { \ if (errno == 0) \ errno = ERANGE; \ } \ else if (errno == ERANGE) \ errno = 0; \ } while(0) /* The functions _Py_dg_strtod and _Py_dg_dtoa in Python/dtoa.c (which are * required to support the short float repr introduced in Python 3.1) require * that the floating-point unit that's being used for arithmetic operations * on C doubles is set to use 53-bit precision. It also requires that the * FPU rounding mode is round-half-to-even, but that's less often an issue. * * If your FPU isn't already set to 53-bit precision/round-half-to-even, and * you want to make use of _Py_dg_strtod and _Py_dg_dtoa, then you should * * #define HAVE_PY_SET_53BIT_PRECISION 1 * * and also give appropriate definitions for the following three macros: * * _PY_SET_53BIT_PRECISION_START : store original FPU settings, and * set FPU to 53-bit precision/round-half-to-even * _PY_SET_53BIT_PRECISION_END : restore original FPU settings * _PY_SET_53BIT_PRECISION_HEADER : any variable declarations needed to * use the two macros above. * * The macros are designed to be used within a single C function: see * Python/pystrtod.c for an example of their use. */ /* get and set x87 control word for gcc/x86 */ #ifdef HAVE_GCC_ASM_FOR_X87 #define HAVE_PY_SET_53BIT_PRECISION 1 /* _Py_get/set_387controlword functions are defined in Python/pymath.c */ #define _Py_SET_53BIT_PRECISION_HEADER \ unsigned short old_387controlword, new_387controlword #define _Py_SET_53BIT_PRECISION_START \ do { \ old_387controlword = _Py_get_387controlword(); \ new_387controlword = (old_387controlword & ~0x0f00) | 0x0200; \ if (new_387controlword != old_387controlword) \ _Py_set_387controlword(new_387controlword); \ } while (0) #define _Py_SET_53BIT_PRECISION_END \ if (new_387controlword != old_387controlword) \ _Py_set_387controlword(old_387controlword) #endif /* get and set x87 control word for VisualStudio/x86 */ #if defined(_MSC_VER) && !defined(_WIN64) /* x87 not supported in 64-bit */ #define HAVE_PY_SET_53BIT_PRECISION 1 #define _Py_SET_53BIT_PRECISION_HEADER \ unsigned int old_387controlword, new_387controlword, out_387controlword /* We use the __control87_2 function to set only the x87 control word. The SSE control word is unaffected. */ #define _Py_SET_53BIT_PRECISION_START \ do { \ __control87_2(0, 0, &old_387controlword, NULL); \ new_387controlword = \ (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \ if (new_387controlword != old_387controlword) \ __control87_2(new_387controlword, _MCW_PC | _MCW_RC, \ &out_387controlword, NULL); \ } while (0) #define _Py_SET_53BIT_PRECISION_END \ do { \ if (new_387controlword != old_387controlword) \ __control87_2(old_387controlword, _MCW_PC | _MCW_RC, \ &out_387controlword, NULL); \ } while (0) #endif /* default definitions are empty */ #ifndef HAVE_PY_SET_53BIT_PRECISION #define _Py_SET_53BIT_PRECISION_HEADER #define _Py_SET_53BIT_PRECISION_START #define _Py_SET_53BIT_PRECISION_END #endif /* If we can't guarantee 53-bit precision, don't use the code in Python/dtoa.c, but fall back to standard code. This means that repr of a float will be long (17 sig digits). Realistically, there are two things that could go wrong: (1) doubles aren't IEEE 754 doubles, or (2) we're on x86 with the rounding precision set to 64-bits (extended precision), and we don't know how to change the rounding precision. */ #if !defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) && \ !defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) && \ !defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754) #define PY_NO_SHORT_FLOAT_REPR #endif /* double rounding is symptomatic of use of extended precision on x86. If we're seeing double rounding, and we don't have any mechanism available for changing the FPU rounding precision, then don't use Python/dtoa.c. */ #if defined(X87_DOUBLE_ROUNDING) && !defined(HAVE_PY_SET_53BIT_PRECISION) #define PY_NO_SHORT_FLOAT_REPR #endif /* Py_DEPRECATED(version) * Declare a variable, type, or function deprecated. * Usage: * extern int old_var Py_DEPRECATED(2.3); * typedef int T1 Py_DEPRECATED(2.4); * extern int x() Py_DEPRECATED(2.5); */ #if defined(__GNUC__) && ((__GNUC__ >= 4) || \ (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) #define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) #else #define Py_DEPRECATED(VERSION_UNUSED) #endif /************************************************************************** Prototypes that are missing from the standard include files on some systems (and possibly only some versions of such systems.) Please be conservative with adding new ones, document them and enclose them in platform-specific #ifdefs. **************************************************************************/ #ifdef SOLARIS /* Unchecked */ extern int gethostname(char *, int); #endif #ifdef HAVE__GETPTY #include /* we need to import mode_t */ extern char * _getpty(int *, int, mode_t, int); #endif /* On QNX 6, struct termio must be declared by including sys/termio.h if TCGETA, TCSETA, TCSETAW, or TCSETAF are used. sys/termio.h must be included before termios.h or it will generate an error. */ #if defined(HAVE_SYS_TERMIO_H) && !defined(__hpux) #include #endif #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) #if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) /* BSDI does not supply a prototype for the 'openpty' and 'forkpty' functions, even though they are included in libutil. */ #include extern int openpty(int *, int *, char *, struct termios *, struct winsize *); extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */ #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */ /* On 4.4BSD-descendants, ctype functions serves the whole range of * wchar_t character set rather than single byte code points only. * This characteristic can break some operations of string object * including str.upper() and str.split() on UTF-8 locales. This * workaround was provided by Tim Robbins of FreeBSD project. */ #ifdef __FreeBSD__ #include #if __FreeBSD_version > 500039 # define _PY_PORT_CTYPE_UTF8_ISSUE #endif #endif #if defined(__APPLE__) # define _PY_PORT_CTYPE_UTF8_ISSUE #endif #ifdef _PY_PORT_CTYPE_UTF8_ISSUE #include #include #undef isalnum #define isalnum(c) iswalnum(btowc(c)) #undef isalpha #define isalpha(c) iswalpha(btowc(c)) #undef islower #define islower(c) iswlower(btowc(c)) #undef isspace #define isspace(c) iswspace(btowc(c)) #undef isupper #define isupper(c) iswupper(btowc(c)) #undef tolower #define tolower(c) towlower(btowc(c)) #undef toupper #define toupper(c) towupper(btowc(c)) #endif /* Declarations for symbol visibility. PyAPI_FUNC(type): Declares a public Python API function and return type PyAPI_DATA(type): Declares public Python data and its type PyMODINIT_FUNC: A Python module init function. If these functions are inside the Python core, they are private to the core. If in an extension module, it may be declared with external linkage depending on the platform. As a number of platforms support/require "__declspec(dllimport/dllexport)", we support a HAVE_DECLSPEC_DLL macro to save duplication. */ /* All windows ports, except cygwin, are handled in PC/pyconfig.h. Cygwin is the only other autoconf platform requiring special linkage handling and it uses __declspec(). */ #if defined(__CYGWIN__) # define HAVE_DECLSPEC_DLL #endif /* only get special linkage if built as shared or platform is Cygwin */ #if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) # if defined(HAVE_DECLSPEC_DLL) # ifdef Py_BUILD_CORE # define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE # define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE /* module init functions inside the core need no external linkage */ /* except for Cygwin to handle embedding */ # if defined(__CYGWIN__) # define PyMODINIT_FUNC __declspec(dllexport) PyObject* # else /* __CYGWIN__ */ # define PyMODINIT_FUNC PyObject* # endif /* __CYGWIN__ */ # else /* Py_BUILD_CORE */ /* Building an extension module, or an embedded situation */ /* public Python functions and data are imported */ /* Under Cygwin, auto-import functions to prevent compilation */ /* failures similar to those described at the bottom of 4.1: */ /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ # if !defined(__CYGWIN__) # define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE # endif /* !__CYGWIN__ */ # define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE /* module init functions outside the core must be exported */ # if defined(__cplusplus) # define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* # else /* __cplusplus */ # define PyMODINIT_FUNC __declspec(dllexport) PyObject* # endif /* __cplusplus */ # endif /* Py_BUILD_CORE */ # endif /* HAVE_DECLSPEC */ #endif /* Py_ENABLE_SHARED */ /* If no external linkage macros defined by now, create defaults */ #ifndef PyAPI_FUNC # define PyAPI_FUNC(RTYPE) RTYPE #endif #ifndef PyAPI_DATA # define PyAPI_DATA(RTYPE) extern RTYPE #endif #ifndef PyMODINIT_FUNC # if defined(__cplusplus) # define PyMODINIT_FUNC extern "C" PyObject* # else /* __cplusplus */ # define PyMODINIT_FUNC PyObject* # endif /* __cplusplus */ #endif /* limits.h constants that may be missing */ #ifndef INT_MAX #define INT_MAX 2147483647 #endif #ifndef LONG_MAX #if SIZEOF_LONG == 4 #define LONG_MAX 0X7FFFFFFFL #elif SIZEOF_LONG == 8 #define LONG_MAX 0X7FFFFFFFFFFFFFFFL #else #error "could not set LONG_MAX in pyport.h" #endif #endif #ifndef LONG_MIN #define LONG_MIN (-LONG_MAX-1) #endif #ifndef LONG_BIT #define LONG_BIT (8 * SIZEOF_LONG) #endif #if LONG_BIT != 8 * SIZEOF_LONG /* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent * 32-bit platforms using gcc. We try to catch that here at compile-time * rather than waiting for integer multiplication to trigger bogus * overflows. */ #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." #endif #ifdef __cplusplus } #endif /* * Hide GCC attributes from compilers that don't support them. */ #if (!defined(__GNUC__) || __GNUC__ < 2 || \ (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) #define Py_GCC_ATTRIBUTE(x) #else #define Py_GCC_ATTRIBUTE(x) __attribute__(x) #endif /* * Specify alignment on compilers that support it. */ #if defined(__GNUC__) && __GNUC__ >= 3 #define Py_ALIGNED(x) __attribute__((aligned(x))) #else #define Py_ALIGNED(x) #endif /* Eliminate end-of-loop code not reached warnings from SunPro C * when using do{...}while(0) macros */ #ifdef __SUNPRO_C #pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED) #endif /* * Older Microsoft compilers don't support the C99 long long literal suffixes, * so these will be defined in PC/pyconfig.h for those compilers. */ #ifndef Py_LL #define Py_LL(x) x##LL #endif #ifndef Py_ULL #define Py_ULL(x) Py_LL(x##U) #endif #ifdef VA_LIST_IS_ARRAY #define Py_VA_COPY(x, y) Py_MEMCPY((x), (y), sizeof(va_list)) #else #ifdef __va_copy #define Py_VA_COPY __va_copy #else #define Py_VA_COPY(x, y) (x) = (y) #endif #endif /* * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is * detected by configure and defined in pyconfig.h. The code in pyconfig.h * also takes care of Apple's universal builds. */ #ifdef WORDS_BIGENDIAN #define PY_BIG_ENDIAN 1 #define PY_LITTLE_ENDIAN 0 #else #define PY_BIG_ENDIAN 0 #define PY_LITTLE_ENDIAN 1 #endif #endif /* Py_PYPORT_H */ include/python3.4m/traceback.h000064400000004245152342604300012206 0ustar00 #ifndef Py_TRACEBACK_H #define Py_TRACEBACK_H #ifdef __cplusplus extern "C" { #endif #include "pystate.h" struct _frame; /* Traceback interface */ #ifndef Py_LIMITED_API typedef struct _traceback { PyObject_HEAD struct _traceback *tb_next; struct _frame *tb_frame; int tb_lasti; int tb_lineno; } PyTracebackObject; #endif PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int); PyAPI_FUNC(void) _PyTraceback_Add(const char *, const char *, int); #endif /* Reveal traceback type so we can typecheck traceback objects */ PyAPI_DATA(PyTypeObject) PyTraceBack_Type; #define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type) /* Write the Python traceback into the file 'fd'. For example: Traceback (most recent call first): File "xxx", line xxx in File "xxx", line xxx in ... File "xxx", line xxx in This function is written for debug purpose only, to dump the traceback in the worst case: after a segmentation fault, at fatal error, etc. That's why, it is very limited. Strings are truncated to 100 characters and encoded to ASCII with backslashreplace. It doesn't write the source code, only the function name, filename and line number of each frame. Write only the first 100 frames: if the traceback is truncated, write the line " ...". This function is signal safe. */ PyAPI_DATA(void) _Py_DumpTraceback( int fd, PyThreadState *tstate); /* Write the traceback of all threads into the file 'fd'. current_thread can be NULL. Return NULL on success, or an error message on error. This function is written for debug purpose only. It calls _Py_DumpTraceback() for each thread, and so has the same limitations. It only write the traceback of the first 100 threads: write "..." if there are more threads. This function is signal safe. */ PyAPI_DATA(const char*) _Py_DumpTracebackThreads( int fd, PyInterpreterState *interp, PyThreadState *current_thread); #ifdef __cplusplus } #endif #endif /* !Py_TRACEBACK_H */ include/python3.4m/import.h000064400000007475152342604300011611 0ustar00 /* Module definition and import interface */ #ifndef Py_IMPORT_H #define Py_IMPORT_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(void) _PyImportZip_Init(void); PyMODINIT_FUNC PyInit_imp(void); PyAPI_FUNC(long) PyImport_GetMagicNumber(void); PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( const char *name, /* UTF-8 encoded string */ PyObject *co ); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx( const char *name, /* UTF-8 encoded string */ PyObject *co, const char *pathname /* decoded from the filesystem encoding */ ); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames( const char *name, /* UTF-8 encoded string */ PyObject *co, const char *pathname, /* decoded from the filesystem encoding */ const char *cpathname /* decoded from the filesystem encoding */ ); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject( PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname ); PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); PyAPI_FUNC(PyObject *) PyImport_AddModuleObject( PyObject *name ); PyAPI_FUNC(PyObject *) PyImport_AddModule( const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) PyImport_ImportModule( const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock( const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel( const char *name, /* UTF-8 encoded string */ PyObject *globals, PyObject *locals, PyObject *fromlist, int level ); PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level ); #define PyImport_ImportModuleEx(n, g, l, f) \ PyImport_ImportModuleLevel(n, g, l, f, 0) PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); PyAPI_FUNC(void) PyImport_Cleanup(void); PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( PyObject *name ); PyAPI_FUNC(int) PyImport_ImportFrozenModule( const char *name /* UTF-8 encoded string */ ); #ifndef Py_LIMITED_API #ifdef WITH_THREAD PyAPI_FUNC(void) _PyImport_AcquireLock(void); PyAPI_FUNC(int) _PyImport_ReleaseLock(void); #else #define _PyImport_AcquireLock() #define _PyImport_ReleaseLock() 1 #endif PyAPI_FUNC(void) _PyImport_ReInitLock(void); PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); PyAPI_FUNC(int) _PyImport_FixupBuiltin( PyObject *mod, const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, PyObject *); struct _inittab { const char *name; /* ASCII encoded string */ PyObject* (*initfunc)(void); }; PyAPI_DATA(struct _inittab *) PyImport_Inittab; PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); #endif /* Py_LIMITED_API */ PyAPI_DATA(PyTypeObject) PyNullImporter_Type; PyAPI_FUNC(int) PyImport_AppendInittab( const char *name, /* ASCII encoded string */ PyObject* (*initfunc)(void) ); #ifndef Py_LIMITED_API struct _frozen { const char *name; /* ASCII encoded string */ const unsigned char *code; int size; }; /* Embedding apps may change this pointer to point to their favorite collection of frozen modules: */ PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; #endif #ifdef __cplusplus } #endif #endif /* !Py_IMPORT_H */ include/python3.4m/pystrtod.h000064400000002374152342604300012160 0ustar00#ifndef Py_STRTOD_H #define Py_STRTOD_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(double) PyOS_string_to_double(const char *str, char **endptr, PyObject *overflow_exception); /* The caller is responsible for calling PyMem_Free to free the buffer that's is returned. */ PyAPI_FUNC(char *) PyOS_double_to_string(double val, char format_code, int precision, int flags, int *type); #ifndef Py_LIMITED_API PyAPI_FUNC(double) _Py_parse_inf_or_nan(const char *p, char **endptr); #endif /* PyOS_double_to_string's "flags" parameter can be set to 0 or more of: */ #define Py_DTSF_SIGN 0x01 /* always add the sign */ #define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */ #define Py_DTSF_ALT 0x04 /* "alternate" formatting. it's format_code specific */ /* PyOS_double_to_string's "type", if non-NULL, will be set to one of: */ #define Py_DTST_FINITE 0 #define Py_DTST_INFINITE 1 #define Py_DTST_NAN 2 #ifdef __cplusplus } #endif #endif /* !Py_STRTOD_H */ include/python3.4m/patchlevel.h000064400000002152152342604300012411 0ustar00 /* Python version identification scheme. When the major or minor version changes, the VERSION variable in configure.ac must also be changed. There is also (independent) API version information in modsupport.h. */ /* Values for PY_RELEASE_LEVEL */ #define PY_RELEASE_LEVEL_ALPHA 0xA #define PY_RELEASE_LEVEL_BETA 0xB #define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */ #define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */ /* Higher for patch releases */ /* Version parsed out into numeric values */ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 4 #define PY_MICRO_VERSION 10 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ #define PY_VERSION "3.4.10" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */ #define PY_VERSION_HEX ((PY_MAJOR_VERSION << 24) | \ (PY_MINOR_VERSION << 16) | \ (PY_MICRO_VERSION << 8) | \ (PY_RELEASE_LEVEL << 4) | \ (PY_RELEASE_SERIAL << 0)) include/python3.4m/cellobject.h000064400000001275152342604300012375 0ustar00/* Cell object interface */ #ifndef Py_LIMITED_API #ifndef Py_CELLOBJECT_H #define Py_CELLOBJECT_H #ifdef __cplusplus extern "C" { #endif typedef struct { PyObject_HEAD PyObject *ob_ref; /* Content of the cell or NULL when empty */ } PyCellObject; PyAPI_DATA(PyTypeObject) PyCell_Type; #define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type) PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *); #define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref) #define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v) #ifdef __cplusplus } #endif #endif /* !Py_TUPLEOBJECT_H */ #endif /* Py_LIMITED_API */ include/python3.4m/pyconfig-64.h000064400000124513152342604300012335 0ustar00/* pyconfig.h. Generated from pyconfig.h.in by configure. */ /* pyconfig.h.in. Generated from configure.ac by autoheader. */ #ifndef Py_PYCONFIG_H #define Py_PYCONFIG_H /* Define if building universal (internal helper macro) */ /* #undef AC_APPLE_UNIVERSAL_BUILD */ /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want support for AIX C++ shared extension modules. */ /* #undef AIX_GENUINE_CPLUSPLUS */ /* Define to keep records on function call invocation */ /* #undef CALL_PROFILE */ /* Define to keep records of the number of instances of each type */ /* #undef COUNT_ALLOCS */ /* Define if C doubles are 64-bit IEEE 754 binary format, stored in ARM mixed-endian order (byte order 45670123) */ /* #undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 */ /* Define if C doubles are 64-bit IEEE 754 binary format, stored with the most significant byte first */ /* #undef DOUBLE_IS_BIG_ENDIAN_IEEE754 */ /* Define if C doubles are 64-bit IEEE 754 binary format, stored with the least significant byte first */ #define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1 /* Define if --enable-ipv6 is specified */ #define ENABLE_IPV6 1 /* Define if flock needs to be linked with bsd library. */ /* #undef FLOCK_NEEDS_LIBBSD */ /* Define if getpgrp() must be called as getpgrp(0). */ /* #undef GETPGRP_HAVE_ARG */ /* Define if gettimeofday() does not have second (timezone) argument This is the case on Motorola V4 (R40V4.2) */ /* #undef GETTIMEOFDAY_NO_TZ */ /* Define to 1 if you have the `accept4' function. */ #define HAVE_ACCEPT4 1 /* Define to 1 if you have the `acosh' function. */ #define HAVE_ACOSH 1 /* struct addrinfo (netdb.h) */ #define HAVE_ADDRINFO 1 /* Define to 1 if you have the `alarm' function. */ #define HAVE_ALARM 1 /* Define if aligned memory access is required */ /* #undef HAVE_ALIGNED_REQUIRED */ /* Define to 1 if you have the header file. */ #define HAVE_ALLOCA_H 1 /* Define this if your time.h defines altzone. */ /* #undef HAVE_ALTZONE */ /* Define to 1 if you have the `asinh' function. */ #define HAVE_ASINH 1 /* Define to 1 if you have the header file. */ #define HAVE_ASM_TYPES_H 1 /* Define to 1 if you have the `atanh' function. */ #define HAVE_ATANH 1 /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #define HAVE_BIND_TEXTDOMAIN_CODESET 1 /* Define to 1 if you have the header file. */ #define HAVE_BLUETOOTH_BLUETOOTH_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_BLUETOOTH_H */ /* Define if mbstowcs(NULL, "text", 0) does not return the number of wide chars that would be converted. */ /* #undef HAVE_BROKEN_MBSTOWCS */ /* Define if nice() returns success/failure instead of the new priority. */ /* #undef HAVE_BROKEN_NICE */ /* Define if the system reports an invalid PIPE_BUF value. */ /* #undef HAVE_BROKEN_PIPE_BUF */ /* Define if poll() sets errno on invalid file descriptors. */ /* #undef HAVE_BROKEN_POLL */ /* Define if the Posix semaphores do not work on your system */ /* #undef HAVE_BROKEN_POSIX_SEMAPHORES */ /* Define if pthread_sigmask() does not work on your system. */ /* #undef HAVE_BROKEN_PTHREAD_SIGMASK */ /* define to 1 if your sem_getvalue is broken. */ /* #undef HAVE_BROKEN_SEM_GETVALUE */ /* Define if `unsetenv` does not return an int. */ /* #undef HAVE_BROKEN_UNSETENV */ /* Define this if you have the type _Bool. */ #define HAVE_C99_BOOL 1 /* Define to 1 if you have the 'chflags' function. */ /* #undef HAVE_CHFLAGS */ /* Define to 1 if you have the `chown' function. */ #define HAVE_CHOWN 1 /* Define if you have the 'chroot' function. */ #define HAVE_CHROOT 1 /* Define to 1 if you have the `clock' function. */ #define HAVE_CLOCK 1 /* Define to 1 if you have the `clock_getres' function. */ #define HAVE_CLOCK_GETRES 1 /* Define to 1 if you have the `clock_gettime' function. */ #define HAVE_CLOCK_GETTIME 1 /* Define if the C compiler supports computed gotos. */ #define HAVE_COMPUTED_GOTOS 1 /* Define to 1 if you have the `confstr' function. */ #define HAVE_CONFSTR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CONIO_H */ /* Define to 1 if you have the `copysign' function. */ #define HAVE_COPYSIGN 1 /* Define to 1 if you have the `ctermid' function. */ #define HAVE_CTERMID 1 /* Define if you have the 'ctermid_r' function. */ /* #undef HAVE_CTERMID_R */ /* Define to 1 if you have the header file. */ #define HAVE_CURSES_H 1 /* Define if you have the 'is_term_resized' function. */ #define HAVE_CURSES_IS_TERM_RESIZED 1 /* Define if you have the 'resizeterm' function. */ #define HAVE_CURSES_RESIZETERM 1 /* Define if you have the 'resize_term' function. */ #define HAVE_CURSES_RESIZE_TERM 1 /* Define to 1 if you have the declaration of `isfinite', and to 0 if you don't. */ #define HAVE_DECL_ISFINITE 1 /* Define to 1 if you have the declaration of `isinf', and to 0 if you don't. */ #define HAVE_DECL_ISINF 1 /* Define to 1 if you have the declaration of `isnan', and to 0 if you don't. */ #define HAVE_DECL_ISNAN 1 /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ /* #undef HAVE_DECL_TZNAME */ /* Define to 1 if you have the device macros. */ #define HAVE_DEVICE_MACROS 1 /* Define to 1 if you have the /dev/ptc device file. */ /* #undef HAVE_DEV_PTC */ /* Define to 1 if you have the /dev/ptmx device file. */ #define HAVE_DEV_PTMX 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DIRECT_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H 1 /* Define if you have the 'dirfd' function or macro. */ #define HAVE_DIRFD 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `dlopen' function. */ #define HAVE_DLOPEN 1 /* Define to 1 if you have the `dup2' function. */ #define HAVE_DUP2 1 /* Define to 1 if you have the `dup3' function. */ #define HAVE_DUP3 1 /* Defined when any dynamic module loading is enabled. */ #define HAVE_DYNAMIC_LOADING 1 /* Define to 1 if you have the header file. */ #define HAVE_ENDIAN_H 1 /* Define if you have the 'epoll' functions. */ #define HAVE_EPOLL 1 /* Define if you have the 'epoll_create1' function. */ #define HAVE_EPOLL_CREATE1 1 /* Define to 1 if you have the `erf' function. */ #define HAVE_ERF 1 /* Define to 1 if you have the `erfc' function. */ #define HAVE_ERFC 1 /* Define to 1 if you have the header file. */ #define HAVE_ERRNO_H 1 /* Define to 1 if you have the `execv' function. */ #define HAVE_EXECV 1 /* Define to 1 if you have the `expm1' function. */ #define HAVE_EXPM1 1 /* Define to 1 if you have the `faccessat' function. */ #define HAVE_FACCESSAT 1 /* Define if you have the 'fchdir' function. */ #define HAVE_FCHDIR 1 /* Define to 1 if you have the `fchmod' function. */ #define HAVE_FCHMOD 1 /* Define to 1 if you have the `fchmodat' function. */ #define HAVE_FCHMODAT 1 /* Define to 1 if you have the `fchown' function. */ #define HAVE_FCHOWN 1 /* Define to 1 if you have the `fchownat' function. */ #define HAVE_FCHOWNAT 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the 'fdatasync' function. */ #define HAVE_FDATASYNC 1 /* Define to 1 if you have the `fdopendir' function. */ #define HAVE_FDOPENDIR 1 /* Define to 1 if you have the `fexecve' function. */ #define HAVE_FEXECVE 1 /* Define to 1 if you have the `finite' function. */ #define HAVE_FINITE 1 /* Define to 1 if you have the `flock' function. */ #define HAVE_FLOCK 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have the `forkpty' function. */ #define HAVE_FORKPTY 1 /* Define to 1 if you have the `fpathconf' function. */ #define HAVE_FPATHCONF 1 /* Define to 1 if you have the `fseek64' function. */ /* #undef HAVE_FSEEK64 */ /* Define to 1 if you have the `fseeko' function. */ #define HAVE_FSEEKO 1 /* Define to 1 if you have the `fstatat' function. */ #define HAVE_FSTATAT 1 /* Define to 1 if you have the `fstatvfs' function. */ #define HAVE_FSTATVFS 1 /* Define if you have the 'fsync' function. */ #define HAVE_FSYNC 1 /* Define to 1 if you have the `ftell64' function. */ /* #undef HAVE_FTELL64 */ /* Define to 1 if you have the `ftello' function. */ #define HAVE_FTELLO 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the `ftruncate' function. */ #define HAVE_FTRUNCATE 1 /* Define to 1 if you have the `futimens' function. */ #define HAVE_FUTIMENS 1 /* Define to 1 if you have the `futimes' function. */ #define HAVE_FUTIMES 1 /* Define to 1 if you have the `futimesat' function. */ #define HAVE_FUTIMESAT 1 /* Define to 1 if you have the `gai_strerror' function. */ #define HAVE_GAI_STRERROR 1 /* Define to 1 if you have the `gamma' function. */ #define HAVE_GAMMA 1 /* Define if we can use x64 gcc inline assembler */ #define HAVE_GCC_ASM_FOR_X64 1 /* Define if we can use gcc inline assembler to get and set x87 control word */ #define HAVE_GCC_ASM_FOR_X87 1 /* Define if your compiler provides __uint128_t */ #define HAVE_GCC_UINT128_T 1 /* Define if you have the getaddrinfo function. */ #define HAVE_GETADDRINFO 1 /* Define this if you have flockfile(), getc_unlocked(), and funlockfile() */ #define HAVE_GETC_UNLOCKED 1 /* Define to 1 if you have the `getentropy' function. */ #define HAVE_GETENTROPY 1 /* Define to 1 if you have the `getgrouplist' function. */ #define HAVE_GETGROUPLIST 1 /* Define to 1 if you have the `getgroups' function. */ #define HAVE_GETGROUPS 1 /* Define to 1 if you have the `gethostbyname' function. */ /* #undef HAVE_GETHOSTBYNAME */ /* Define this if you have some version of gethostbyname_r() */ #define HAVE_GETHOSTBYNAME_R 1 /* Define this if you have the 3-arg version of gethostbyname_r(). */ /* #undef HAVE_GETHOSTBYNAME_R_3_ARG */ /* Define this if you have the 5-arg version of gethostbyname_r(). */ /* #undef HAVE_GETHOSTBYNAME_R_5_ARG */ /* Define this if you have the 6-arg version of gethostbyname_r(). */ #define HAVE_GETHOSTBYNAME_R_6_ARG 1 /* Define to 1 if you have the `getitimer' function. */ #define HAVE_GETITIMER 1 /* Define to 1 if you have the `getloadavg' function. */ #define HAVE_GETLOADAVG 1 /* Define to 1 if you have the `getlogin' function. */ #define HAVE_GETLOGIN 1 /* Define to 1 if you have the `getnameinfo' function. */ #define HAVE_GETNAMEINFO 1 /* Define if you have the 'getpagesize' function. */ #define HAVE_GETPAGESIZE 1 /* Define to 1 if you have the `getpeername' function. */ #define HAVE_GETPEERNAME 1 /* Define to 1 if you have the `getpgid' function. */ #define HAVE_GETPGID 1 /* Define to 1 if you have the `getpgrp' function. */ #define HAVE_GETPGRP 1 /* Define to 1 if you have the `getpid' function. */ #define HAVE_GETPID 1 /* Define to 1 if you have the `getpriority' function. */ #define HAVE_GETPRIORITY 1 /* Define to 1 if you have the `getpwent' function. */ #define HAVE_GETPWENT 1 /* Define to 1 if you have the `getresgid' function. */ #define HAVE_GETRESGID 1 /* Define to 1 if you have the `getresuid' function. */ #define HAVE_GETRESUID 1 /* Define to 1 if you have the `getsid' function. */ #define HAVE_GETSID 1 /* Define to 1 if you have the `getspent' function. */ #define HAVE_GETSPENT 1 /* Define to 1 if you have the `getspnam' function. */ #define HAVE_GETSPNAM 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `getwd' function. */ #define HAVE_GETWD 1 /* Define if glibc has incorrect _FORTIFY_SOURCE wrappers for memmove and bcopy. */ /* #undef HAVE_GLIBC_MEMMOVE_BUG */ /* Define to 1 if you have the header file. */ #define HAVE_GRP_H 1 /* Define if you have the 'hstrerror' function. */ #define HAVE_HSTRERROR 1 /* Define this if you have le64toh() */ #define HAVE_HTOLE64 1 /* Define to 1 if you have the `hypot' function. */ #define HAVE_HYPOT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_IEEEFP_H */ /* Define to 1 if you have the `if_nameindex' function. */ #define HAVE_IF_NAMEINDEX 1 /* Define if you have the 'inet_aton' function. */ #define HAVE_INET_ATON 1 /* Define if you have the 'inet_pton' function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the `initgroups' function. */ #define HAVE_INITGROUPS 1 /* Define if your compiler provides int32_t. */ #define HAVE_INT32_T 1 /* Define if your compiler provides int64_t. */ #define HAVE_INT64_T 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_IO_H */ /* Define if gcc has the ipa-pure-const bug. */ /* #undef HAVE_IPA_PURE_CONST_BUG */ /* Define to 1 if you have the `kill' function. */ #define HAVE_KILL 1 /* Define to 1 if you have the `killpg' function. */ #define HAVE_KILLPG 1 /* Define if you have the 'kqueue' functions. */ /* #undef HAVE_KQUEUE */ /* Define to 1 if you have the header file. */ #define HAVE_LANGINFO_H 1 /* Defined to enable large file support when an off_t is bigger than a long and long long is available and at least as big as an off_t. You may need to add some flags for configuration and compilation to enable this mode. (For Solaris and Linux, the necessary defines are already defined.) */ /* #undef HAVE_LARGEFILE_SUPPORT */ /* Define to 1 if you have the 'lchflags' function. */ /* #undef HAVE_LCHFLAGS */ /* Define to 1 if you have the `lchmod' function. */ /* #undef HAVE_LCHMOD */ /* Define to 1 if you have the `lchown' function. */ #define HAVE_LCHOWN 1 /* Define to 1 if you have the `lgamma' function. */ #define HAVE_LGAMMA 1 /* Define to 1 if you have the `dl' library (-ldl). */ #define HAVE_LIBDL 1 /* Define to 1 if you have the `dld' library (-ldld). */ /* #undef HAVE_LIBDLD */ /* Define to 1 if you have the `ieee' library (-lieee). */ /* #undef HAVE_LIBIEEE */ /* Define to 1 if you have the header file. */ #define HAVE_LIBINTL_H 1 /* Define if you have the readline library (-lreadline). */ #define HAVE_LIBREADLINE 1 /* Define to 1 if you have the `resolv' library (-lresolv). */ /* #undef HAVE_LIBRESOLV */ /* Define to 1 if you have the `sendfile' library (-lsendfile). */ /* #undef HAVE_LIBSENDFILE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUTIL_H */ /* Define if you have the 'link' function. */ #define HAVE_LINK 1 /* Define to 1 if you have the `linkat' function. */ #define HAVE_LINKAT 1 /* Define to 1 if you have the header file. */ #define HAVE_LINUX_CAN_BCM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LINUX_CAN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LINUX_CAN_RAW_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LINUX_NETLINK_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LINUX_TIPC_H 1 /* Define to 1 if you have the `lockf' function. */ #define HAVE_LOCKF 1 /* Define to 1 if you have the `log1p' function. */ #define HAVE_LOG1P 1 /* Define to 1 if you have the `log2' function. */ #define HAVE_LOG2 1 /* Define this if you have the type long double. */ #define HAVE_LONG_DOUBLE 1 /* Define this if you have the type long long. */ #define HAVE_LONG_LONG 1 /* Define to 1 if you have the `lstat' function. */ #define HAVE_LSTAT 1 /* Define to 1 if you have the `lutimes' function. */ #define HAVE_LUTIMES 1 /* Define this if you have the makedev macro. */ #define HAVE_MAKEDEV 1 /* Define to 1 if you have the `mbrtowc' function. */ #define HAVE_MBRTOWC 1 /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `memrchr' function. */ #define HAVE_MEMRCHR 1 /* Define to 1 if you have the `mkdirat' function. */ #define HAVE_MKDIRAT 1 /* Define to 1 if you have the `mkfifo' function. */ #define HAVE_MKFIFO 1 /* Define to 1 if you have the `mkfifoat' function. */ #define HAVE_MKFIFOAT 1 /* Define to 1 if you have the `mknod' function. */ #define HAVE_MKNOD 1 /* Define to 1 if you have the `mknodat' function. */ #define HAVE_MKNODAT 1 /* Define to 1 if you have the `mktime' function. */ #define HAVE_MKTIME 1 /* Define to 1 if you have the `mmap' function. */ #define HAVE_MMAP 1 /* Define to 1 if you have the `mremap' function. */ #define HAVE_MREMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_NCURSES_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETPACKET_PACKET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Define to 1 if you have the `nice' function. */ #define HAVE_NICE 1 /* Define to 1 if you have the `openat' function. */ #define HAVE_OPENAT 1 /* Define to 1 if you have the `openpty' function. */ #define HAVE_OPENPTY 1 /* Define if compiling using MacOS X 10.5 SDK or later. */ /* #undef HAVE_OSX105_SDK */ /* Define to 1 if you have the `pathconf' function. */ #define HAVE_PATHCONF 1 /* Define to 1 if you have the `pause' function. */ #define HAVE_PAUSE 1 /* Define to 1 if you have the `pipe2' function. */ #define HAVE_PIPE2 1 /* Define to 1 if you have the `plock' function. */ /* #undef HAVE_PLOCK */ /* Define to 1 if you have the `poll' function. */ #define HAVE_POLL 1 /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* Define to 1 if you have the `posix_fadvise' function. */ #define HAVE_POSIX_FADVISE 1 /* Define to 1 if you have the `posix_fallocate' function. */ #define HAVE_POSIX_FALLOCATE 1 /* Define to 1 if you have the `pread' function. */ #define HAVE_PREAD 1 /* Define if you have the 'prlimit' functions. */ #define HAVE_PRLIMIT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_PROCESS_H */ /* Define if your compiler supports function prototype */ #define HAVE_PROTOTYPES 1 /* Define to 1 if you have the `pthread_atfork' function. */ #define HAVE_PTHREAD_ATFORK 1 /* Defined for Solaris 2.6 bug in pthread header. */ /* #undef HAVE_PTHREAD_DESTRUCTOR */ /* Define to 1 if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the `pthread_init' function. */ /* #undef HAVE_PTHREAD_INIT */ /* Define to 1 if you have the `pthread_kill' function. */ #define HAVE_PTHREAD_KILL 1 /* Define to 1 if you have the `pthread_sigmask' function. */ #define HAVE_PTHREAD_SIGMASK 1 /* Define to 1 if you have the header file. */ #define HAVE_PTY_H 1 /* Define to 1 if you have the `putenv' function. */ #define HAVE_PUTENV 1 /* Define to 1 if you have the `pwrite' function. */ #define HAVE_PWRITE 1 /* Define if the libcrypto has RAND_egd */ /* #undef HAVE_RAND_EGD */ /* Define to 1 if you have the `readlink' function. */ #define HAVE_READLINK 1 /* Define to 1 if you have the `readlinkat' function. */ #define HAVE_READLINKAT 1 /* Define to 1 if you have the `readv' function. */ #define HAVE_READV 1 /* Define to 1 if you have the `realpath' function. */ #define HAVE_REALPATH 1 /* Define to 1 if you have the `renameat' function. */ #define HAVE_RENAMEAT 1 /* Define if you have readline 2.1 */ #define HAVE_RL_CALLBACK 1 /* Define if you can turn off readline's signal handling. */ #define HAVE_RL_CATCH_SIGNAL 1 /* Define if you have readline 2.2 */ #define HAVE_RL_COMPLETION_APPEND_CHARACTER 1 /* Define if you have readline 4.0 */ #define HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK 1 /* Define if you have readline 4.2 */ #define HAVE_RL_COMPLETION_MATCHES 1 /* Define if you have rl_completion_suppress_append */ #define HAVE_RL_COMPLETION_SUPPRESS_APPEND 1 /* Define if you have readline 4.0 */ #define HAVE_RL_PRE_INPUT_HOOK 1 /* Define to 1 if you have the `round' function. */ #define HAVE_ROUND 1 /* Define to 1 if you have the `sched_get_priority_max' function. */ #define HAVE_SCHED_GET_PRIORITY_MAX 1 /* Define to 1 if you have the header file. */ #define HAVE_SCHED_H 1 /* Define to 1 if you have the `sched_rr_get_interval' function. */ #define HAVE_SCHED_RR_GET_INTERVAL 1 /* Define to 1 if you have the `sched_setaffinity' function. */ #define HAVE_SCHED_SETAFFINITY 1 /* Define to 1 if you have the `sched_setparam' function. */ #define HAVE_SCHED_SETPARAM 1 /* Define to 1 if you have the `sched_setscheduler' function. */ #define HAVE_SCHED_SETSCHEDULER 1 /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the `sem_getvalue' function. */ #define HAVE_SEM_GETVALUE 1 /* Define to 1 if you have the `sem_open' function. */ #define HAVE_SEM_OPEN 1 /* Define to 1 if you have the `sem_timedwait' function. */ #define HAVE_SEM_TIMEDWAIT 1 /* Define to 1 if you have the `sem_unlink' function. */ #define HAVE_SEM_UNLINK 1 /* Define to 1 if you have the `sendfile' function. */ #define HAVE_SENDFILE 1 /* Define to 1 if you have the `setegid' function. */ #define HAVE_SETEGID 1 /* Define to 1 if you have the `seteuid' function. */ #define HAVE_SETEUID 1 /* Define to 1 if you have the `setgid' function. */ #define HAVE_SETGID 1 /* Define if you have the 'setgroups' function. */ #define HAVE_SETGROUPS 1 /* Define to 1 if you have the `sethostname' function. */ #define HAVE_SETHOSTNAME 1 /* Define to 1 if you have the `setitimer' function. */ #define HAVE_SETITIMER 1 /* Define to 1 if you have the `setlocale' function. */ #define HAVE_SETLOCALE 1 /* Define to 1 if you have the `setpgid' function. */ #define HAVE_SETPGID 1 /* Define to 1 if you have the `setpgrp' function. */ #define HAVE_SETPGRP 1 /* Define to 1 if you have the `setpriority' function. */ #define HAVE_SETPRIORITY 1 /* Define to 1 if you have the `setregid' function. */ #define HAVE_SETREGID 1 /* Define to 1 if you have the `setresgid' function. */ #define HAVE_SETRESGID 1 /* Define to 1 if you have the `setresuid' function. */ #define HAVE_SETRESUID 1 /* Define to 1 if you have the `setreuid' function. */ #define HAVE_SETREUID 1 /* Define to 1 if you have the `setsid' function. */ #define HAVE_SETSID 1 /* Define to 1 if you have the `setuid' function. */ #define HAVE_SETUID 1 /* Define to 1 if you have the `setvbuf' function. */ #define HAVE_SETVBUF 1 /* Define to 1 if you have the header file. */ #define HAVE_SHADOW_H 1 /* Define to 1 if you have the `sigaction' function. */ #define HAVE_SIGACTION 1 /* Define to 1 if you have the `sigaltstack' function. */ #define HAVE_SIGALTSTACK 1 /* Define to 1 if you have the `siginterrupt' function. */ #define HAVE_SIGINTERRUPT 1 /* Define to 1 if you have the header file. */ #define HAVE_SIGNAL_H 1 /* Define to 1 if you have the `sigpending' function. */ #define HAVE_SIGPENDING 1 /* Define to 1 if you have the `sigrelse' function. */ #define HAVE_SIGRELSE 1 /* Define to 1 if you have the `sigtimedwait' function. */ #define HAVE_SIGTIMEDWAIT 1 /* Define to 1 if you have the `sigwait' function. */ #define HAVE_SIGWAIT 1 /* Define to 1 if you have the `sigwaitinfo' function. */ #define HAVE_SIGWAITINFO 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define if sockaddr has sa_len member */ /* #undef HAVE_SOCKADDR_SA_LEN */ /* struct sockaddr_storage (sys/socket.h) */ #define HAVE_SOCKADDR_STORAGE 1 /* Define if you have the 'socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if you have the header file. */ #define HAVE_SPAWN_H 1 /* Define if your compiler provides ssize_t */ #define HAVE_SSIZE_T 1 /* Define to 1 if you have the `statvfs' function. */ #define HAVE_STATVFS 1 /* Define if you have struct stat.st_mtim.tv_nsec */ #define HAVE_STAT_TV_NSEC 1 /* Define if you have struct stat.st_mtimensec */ /* #undef HAVE_STAT_TV_NSEC2 */ /* Define if your compiler supports variable length function prototypes (e.g. void fprintf(FILE *, char *, ...);) *and* */ #define HAVE_STDARG_PROTOTYPES 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strftime' function. */ #define HAVE_STRFTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strlcpy' function. */ /* #undef HAVE_STRLCPY */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STROPTS_H */ /* Define to 1 if `st_birthtime' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_BIRTHTIME */ /* Define to 1 if `st_blksize' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLKSIZE 1 /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLOCKS 1 /* Define to 1 if `st_flags' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_FLAGS */ /* Define to 1 if `st_gen' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_GEN */ /* Define to 1 if `st_rdev' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_RDEV 1 /* Define to 1 if `tm_zone' is a member of `struct tm'. */ #define HAVE_STRUCT_TM_TM_ZONE 1 /* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ #define HAVE_ST_BLOCKS 1 /* Define if you have the 'symlink' function. */ #define HAVE_SYMLINK 1 /* Define to 1 if you have the `symlinkat' function. */ #define HAVE_SYMLINKAT 1 /* Define to 1 if you have the `sync' function. */ #define HAVE_SYNC 1 /* Define to 1 if you have the `sysconf' function. */ #define HAVE_SYSCONF 1 /* Define to 1 if you have the header file. */ #define HAVE_SYSEXITS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_AUDIOIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_BSDTTY_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_DEVPOLL_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ENDIAN_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_EPOLL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EVENT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_FILE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_KERN_CONTROL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LOADAVG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LOCK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MKDEV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MODEM_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SENDFILE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATVFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SYSCALL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYS_DOMAIN_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TERMIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_XATTR_H 1 /* Define to 1 if you have the `tcgetpgrp' function. */ #define HAVE_TCGETPGRP 1 /* Define to 1 if you have the `tcsetpgrp' function. */ #define HAVE_TCSETPGRP 1 /* Define to 1 if you have the `tempnam' function. */ #define HAVE_TEMPNAM 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_TERM_H 1 /* Define to 1 if you have the `tgamma' function. */ #define HAVE_TGAMMA 1 /* Define to 1 if you have the `timegm' function. */ #define HAVE_TIMEGM 1 /* Define to 1 if you have the `times' function. */ #define HAVE_TIMES 1 /* Define to 1 if you have the `tmpfile' function. */ #define HAVE_TMPFILE 1 /* Define to 1 if you have the `tmpnam' function. */ #define HAVE_TMPNAM 1 /* Define to 1 if you have the `tmpnam_r' function. */ #define HAVE_TMPNAM_R 1 /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use `HAVE_STRUCT_TM_TM_ZONE' instead. */ #define HAVE_TM_ZONE 1 /* Define to 1 if you have the `truncate' function. */ #define HAVE_TRUNCATE 1 /* Define to 1 if you don't have `tm_zone' but do have the external array `tzname'. */ /* #undef HAVE_TZNAME */ /* Define this if you have tcl and TCL_UTF_MAX==6 */ /* #undef HAVE_UCS4_TCL */ /* Define if your compiler provides uint32_t. */ #define HAVE_UINT32_T 1 /* Define if your compiler provides uint64_t. */ #define HAVE_UINT64_T 1 /* Define to 1 if the system has the type `uintptr_t'. */ #define HAVE_UINTPTR_T 1 /* Define to 1 if you have the `uname' function. */ #define HAVE_UNAME 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `unlinkat' function. */ #define HAVE_UNLINKAT 1 /* Define to 1 if you have the `unsetenv' function. */ #define HAVE_UNSETENV 1 /* Define if you have a useable wchar_t type defined in wchar.h; useable means wchar_t must be an unsigned type with at least 16 bits. (see Include/unicodeobject.h). */ /* #undef HAVE_USABLE_WCHAR_T */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UTIL_H */ /* Define to 1 if you have the `utimensat' function. */ #define HAVE_UTIMENSAT 1 /* Define to 1 if you have the `utimes' function. */ #define HAVE_UTIMES 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if you have the `wait3' function. */ #define HAVE_WAIT3 1 /* Define to 1 if you have the `wait4' function. */ #define HAVE_WAIT4 1 /* Define to 1 if you have the `waitid' function. */ #define HAVE_WAITID 1 /* Define to 1 if you have the `waitpid' function. */ #define HAVE_WAITPID 1 /* Define if the compiler provides a wchar.h header file. */ #define HAVE_WCHAR_H 1 /* Define to 1 if you have the `wcscoll' function. */ #define HAVE_WCSCOLL 1 /* Define to 1 if you have the `wcsftime' function. */ #define HAVE_WCSFTIME 1 /* Define to 1 if you have the `wcsxfrm' function. */ #define HAVE_WCSXFRM 1 /* Define to 1 if you have the `wmemcmp' function. */ #define HAVE_WMEMCMP 1 /* Define if tzset() actually switches the local timezone in a meaningful way. */ #define HAVE_WORKING_TZSET 1 /* Define to 1 if you have the `writev' function. */ #define HAVE_WRITEV 1 /* Define if the zlib library has inflateCopy */ #define HAVE_ZLIB_COPY 1 /* Define to 1 if you have the `_getpty' function. */ /* #undef HAVE__GETPTY */ /* Define if log1p(-0.) is 0. rather than -0. */ /* #undef LOG1P_DROPS_ZERO_SIGN */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_MKDEV */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #define MAJOR_IN_SYSMACROS 1 /* Define if mvwdelch in curses.h is an expression. */ #define MVWDELCH_IS_EXPRESSION 1 /* Define to the address where bug reports for this package should be sent. */ /* #undef PACKAGE_BUGREPORT */ /* Define to the full name of this package. */ /* #undef PACKAGE_NAME */ /* Define to the full name and version of this package. */ /* #undef PACKAGE_STRING */ /* Define to the one symbol short name of this package. */ /* #undef PACKAGE_TARNAME */ /* Define to the home page for this package. */ /* #undef PACKAGE_URL */ /* Define to the version of this package. */ /* #undef PACKAGE_VERSION */ /* Define if POSIX semaphores aren't enabled on your system */ /* #undef POSIX_SEMAPHORES_NOT_ENABLED */ /* Defined if PTHREAD_SCOPE_SYSTEM supported. */ #define PTHREAD_SYSTEM_SCHED_SUPPORTED 1 /* Define as the preferred size in bits of long digits */ /* #undef PYLONG_BITS_IN_DIGIT */ /* Define to printf format modifier for long long type */ #define PY_FORMAT_LONG_LONG "ll" /* Define to printf format modifier for Py_ssize_t */ #define PY_FORMAT_SIZE_T "z" /* Define if you want to build an interpreter with many run-time checks. */ /* #undef Py_DEBUG */ /* Defined if Python is built as a shared library. */ #define Py_ENABLE_SHARED 1 /* Define hash algorithm for str, bytes and memoryview. SipHash24: 1, FNV: 2, externally defined: 0 */ /* #undef Py_HASH_ALGORITHM */ /* assume C89 semantics that RETSIGTYPE is always void */ #define RETSIGTYPE void /* Define if setpgrp() must be called as setpgrp(0, 0). */ /* #undef SETPGRP_HAVE_ARG */ /* Define if i>>j for signed int i does not extend the sign bit when i < 0 */ /* #undef SIGNED_RIGHT_SHIFT_ZERO_FILLS */ /* The size of `double', as computed by sizeof. */ #define SIZEOF_DOUBLE 8 /* The size of `float', as computed by sizeof. */ #define SIZEOF_FLOAT 4 /* The size of `fpos_t', as computed by sizeof. */ #define SIZEOF_FPOS_T 16 /* The size of `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 /* The size of `long double', as computed by sizeof. */ #define SIZEOF_LONG_DOUBLE 16 /* The size of `long long', as computed by sizeof. */ #define SIZEOF_LONG_LONG 8 /* The size of `off_t', as computed by sizeof. */ #define SIZEOF_OFF_T 8 /* The size of `pid_t', as computed by sizeof. */ #define SIZEOF_PID_T 4 /* The size of `pthread_t', as computed by sizeof. */ #define SIZEOF_PTHREAD_T 8 /* The size of `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 /* The size of `size_t', as computed by sizeof. */ #define SIZEOF_SIZE_T 8 /* The size of `time_t', as computed by sizeof. */ #define SIZEOF_TIME_T 8 /* The size of `uintptr_t', as computed by sizeof. */ #define SIZEOF_UINTPTR_T 8 /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* The size of `wchar_t', as computed by sizeof. */ #define SIZEOF_WCHAR_T 4 /* The size of `_Bool', as computed by sizeof. */ #define SIZEOF__BOOL 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and (which you can't on SCO ODT 3.0). */ #define SYS_SELECT_WITH_SYS_TIME 1 /* Define if tanh(-0.) is -0., or if platform doesn't have signed zeros */ #define TANH_PRESERVES_ZERO_SIGN 1 /* Library needed by timemodule.c: librt may be needed for clock_gettime() */ /* #undef TIMEMODULE_LIB */ /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Define if you want to use computed gotos in ceval.c. */ #define USE_COMPUTED_GOTOS 1 /* Define to use the C99 inline keyword. */ #define USE_INLINE 1 /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Define if a va_list is an array of some kind */ #define VA_LIST_IS_ARRAY 1 /* Define if you want SIGFPE handled (see Include/pyfpe.h). */ /* #undef WANT_SIGFPE_HANDLER */ /* Define if WINDOW in curses.h offers a field _flags. */ #define WINDOW_HAS_FLAGS 1 /* Define if you want documentation strings in extension modules */ #define WITH_DOC_STRINGS 1 /* Define if you want to use the new-style (Openstep, Rhapsody, MacOS) dynamic linker (dyld) instead of the old-style (NextStep) dynamic linker (rld). Dyld is necessary to support frameworks. */ /* #undef WITH_DYLD */ /* Define to 1 if libintl is needed for locale functions. */ /* #undef WITH_LIBINTL */ /* Define if you want to produce an OpenStep/Rhapsody framework (shared library plus accessory files). */ /* #undef WITH_NEXT_FRAMEWORK */ /* Define if you want to compile in Python-specific mallocs */ #define WITH_PYMALLOC 1 /* Define if you want to compile in SystemTap support */ #define WITH_SYSTEMTAP 1 /* Define if you want to compile in rudimentary thread support */ #define WITH_THREAD 1 /* Define to profile with the Pentium timestamp counter */ /* #undef WITH_TSC */ /* Define if you want pymalloc to be disabled when running under valgrind */ #define WITH_VALGRIND 1 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN /* # undef WORDS_BIGENDIAN */ # endif #endif /* Define if arithmetic is subject to x87-style double rounding issue */ /* #undef X87_DOUBLE_ROUNDING */ /* Define on OpenBSD to activate all library features */ /* #undef _BSD_SOURCE */ /* Define on Irix to enable u_int */ #define _BSD_TYPES 1 /* Define on Darwin to activate all library features */ #define _DARWIN_C_SOURCE 1 /* This must be set to 64 on some systems to enable large file support. */ #define _FILE_OFFSET_BITS 64 /* Define on Linux to activate all library features */ #define _GNU_SOURCE 1 /* Define to include mbstate_t for mbrtowc */ /* #undef _INCLUDE__STDC_A1_SOURCE */ /* This must be defined on some systems to enable large file support. */ #define _LARGEFILE_SOURCE 1 /* This must be defined on AIX systems to enable large file support. */ /* #undef _LARGE_FILES */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define on NetBSD to activate all library features */ #define _NETBSD_SOURCE 1 /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to activate features from IEEE Stds 1003.1-2008 */ #define _POSIX_C_SOURCE 200809L /* Define to 1 if you need to in order for `stat' and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define if you have POSIX threads, and your system does not define that. */ /* #undef _POSIX_THREADS */ /* Define to force use of thread-safe errno, h_errno, and other functions */ /* #undef _REENTRANT */ /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ /* #undef _UINT32_T */ /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ /* #undef _UINT64_T */ /* Define to the level of X/Open that your system supports */ #define _XOPEN_SOURCE 700 /* Define to activate Unix95-and-earlier features */ #define _XOPEN_SOURCE_EXTENDED 1 /* Define on FreeBSD to activate all library features */ #define __BSD_VISIBLE 1 /* Define to 1 if type `char' is unsigned and you are not using gcc. */ #ifndef __CHAR_UNSIGNED__ /* # undef __CHAR_UNSIGNED__ */ #endif /* Define to 'long' if doesn't define. */ /* #undef clock_t */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `int' if doesn't define. */ /* #undef gid_t */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ /* #undef int32_t */ /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ /* #undef int64_t */ /* Define to `int' if does not define. */ /* #undef mode_t */ /* Define to `long int' if does not define. */ /* #undef off_t */ /* Define to `int' if does not define. */ /* #undef pid_t */ /* Define to empty if the keyword does not work. */ /* #undef signed */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Define to `int' if does not define. */ /* #undef socklen_t */ /* Define to `int' if doesn't define. */ /* #undef uid_t */ /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ /* #undef uint32_t */ /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ /* #undef uint64_t */ /* Define to empty if the keyword does not work. */ /* #undef volatile */ /* Define the macros needed if on a UnixWare 7.x system. */ #if defined(__USLC__) && defined(__SCO_VERSION__) #define STRICT_SYSV_CURSES /* Don't use ncurses extensions */ #endif #endif /*Py_PYCONFIG_H*/ include/python3.4m/object.h000064400000113172152342604300011535 0ustar00#ifndef Py_OBJECT_H #define Py_OBJECT_H #ifdef __cplusplus extern "C" { #endif /* Object and type object interface */ /* Objects are structures allocated on the heap. Special rules apply to the use of objects to ensure they are properly garbage-collected. Objects are never allocated statically or on the stack; they must be accessed through special macros and functions only. (Type objects are exceptions to the first rule; the standard types are represented by statically initialized type objects, although work on type/class unification for Python 2.2 made it possible to have heap-allocated type objects too). An object has a 'reference count' that is increased or decreased when a pointer to the object is copied or deleted; when the reference count reaches zero there are no references to the object left and it can be removed from the heap. An object has a 'type' that determines what it represents and what kind of data it contains. An object's type is fixed when it is created. Types themselves are represented as objects; an object contains a pointer to the corresponding type object. The type itself has a type pointer pointing to the object representing the type 'type', which contains a pointer to itself!). Objects do not float around in memory; once allocated an object keeps the same size and address. Objects that must hold variable-size data can contain pointers to variable-size parts of the object. Not all objects of the same type have the same size; but the size cannot change after allocation. (These restrictions are made so a reference to an object can be simply a pointer -- moving an object would require updating all the pointers, and changing an object's size would require moving it if there was another object right next to it.) Objects are always accessed through pointers of the type 'PyObject *'. The type 'PyObject' is a structure that only contains the reference count and the type pointer. The actual memory allocated for an object contains other data that can only be accessed after casting the pointer to a pointer to a longer structure type. This longer type must start with the reference count and type fields; the macro PyObject_HEAD should be used for this (to accommodate for future changes). The implementation of a particular object type can cast the object pointer to the proper type and back. A standard interface exists for objects that contain an array of items whose size is determined when the object is allocated. */ /* Py_DEBUG implies Py_TRACE_REFS. */ #if defined(Py_DEBUG) && !defined(Py_TRACE_REFS) #define Py_TRACE_REFS #endif /* Py_TRACE_REFS implies Py_REF_DEBUG. */ #if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) #define Py_REF_DEBUG #endif #if defined(Py_LIMITED_API) && defined(Py_REF_DEBUG) #error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG #endif #ifdef Py_TRACE_REFS /* Define pointers to support a doubly-linked list of all live heap objects. */ #define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _object *_ob_prev; #define _PyObject_EXTRA_INIT 0, 0, #else #define _PyObject_HEAD_EXTRA #define _PyObject_EXTRA_INIT #endif /* PyObject_HEAD defines the initial segment of every PyObject. */ #define PyObject_HEAD PyObject ob_base; #define PyObject_HEAD_INIT(type) \ { _PyObject_EXTRA_INIT \ 1, type }, #define PyVarObject_HEAD_INIT(type, size) \ { PyObject_HEAD_INIT(type) size }, /* PyObject_VAR_HEAD defines the initial segment of all variable-size * container objects. These end with a declaration of an array with 1 * element, but enough space is malloc'ed so that the array actually * has room for ob_size elements. Note that ob_size is an element count, * not necessarily a byte count. */ #define PyObject_VAR_HEAD PyVarObject ob_base; #define Py_INVALID_SIZE (Py_ssize_t)-1 /* Nothing is actually declared to be a PyObject, but every pointer to * a Python object can be cast to a PyObject*. This is inheritance built * by hand. Similarly every pointer to a variable-size Python object can, * in addition, be cast to PyVarObject*. */ typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; struct _typeobject *ob_type; } PyObject; typedef struct { PyObject ob_base; Py_ssize_t ob_size; /* Number of items in variable part */ } PyVarObject; #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) /********************* String Literals ****************************************/ /* This structure helps managing static strings. The basic usage goes like this: Instead of doing r = PyObject_CallMethod(o, "foo", "args", ...); do _Py_IDENTIFIER(foo); ... r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...); PyId_foo is a static variable, either on block level or file level. On first usage, the string "foo" is interned, and the structures are linked. On interpreter shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). Alternatively, _Py_static_string allows to choose the variable name. _PyUnicode_FromId returns a borrowed reference to the interned string. _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*. */ typedef struct _Py_Identifier { struct _Py_Identifier *next; const char* string; PyObject *object; } _Py_Identifier; #define _Py_static_string_init(value) { 0, value, 0 } #define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value) #define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) /* Type objects contain a string containing the type name (to help somewhat in debugging), the allocation parameters (see PyObject_New() and PyObject_NewVar()), and methods for accessing objects of the type. Methods are optional, a nil pointer meaning that particular kind of access is not available for this type. The Py_DECREF() macro uses the tp_dealloc method without checking for a nil pointer; it should always be implemented except if the implementation can guarantee that the reference count will never reach zero (e.g., for statically allocated type objects). NB: the methods for certain type groups are now contained in separate method blocks. */ typedef PyObject * (*unaryfunc)(PyObject *); typedef PyObject * (*binaryfunc)(PyObject *, PyObject *); typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *); typedef int (*inquiry)(PyObject *); typedef Py_ssize_t (*lenfunc)(PyObject *); typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t); typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t); typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *); typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *); #ifndef Py_LIMITED_API /* buffer interface */ typedef struct bufferinfo { void *buf; PyObject *obj; /* owned reference */ Py_ssize_t len; Py_ssize_t itemsize; /* This is Py_ssize_t so it can be pointed to by strides in simple case.*/ int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); /* Maximum number of dimensions */ #define PyBUF_MAX_NDIM 64 /* Flags for getting buffers */ #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 /* we used to include an E, backwards compatible alias */ #define PyBUF_WRITEABLE PyBUF_WRITABLE #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) #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) #define PyBUF_CONTIG_RO (PyBUF_ND) #define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) #define PyBUF_STRIDED_RO (PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) #define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) #define PyBUF_READ 0x100 #define PyBUF_WRITE 0x200 /* End buffer interface */ #endif /* Py_LIMITED_API */ typedef int (*objobjproc)(PyObject *, PyObject *); typedef int (*visitproc)(PyObject *, void *); typedef int (*traverseproc)(PyObject *, visitproc, void *); #ifndef Py_LIMITED_API typedef struct { /* Number implementations must check *both* arguments for proper type and implement the necessary conversions in the slot functions themselves. */ binaryfunc nb_add; binaryfunc nb_subtract; binaryfunc nb_multiply; binaryfunc nb_remainder; binaryfunc nb_divmod; ternaryfunc nb_power; unaryfunc nb_negative; unaryfunc nb_positive; unaryfunc nb_absolute; inquiry nb_bool; unaryfunc nb_invert; binaryfunc nb_lshift; binaryfunc nb_rshift; binaryfunc nb_and; binaryfunc nb_xor; binaryfunc nb_or; unaryfunc nb_int; void *nb_reserved; /* the slot formerly known as nb_long */ unaryfunc nb_float; binaryfunc nb_inplace_add; binaryfunc nb_inplace_subtract; binaryfunc nb_inplace_multiply; binaryfunc nb_inplace_remainder; ternaryfunc nb_inplace_power; binaryfunc nb_inplace_lshift; binaryfunc nb_inplace_rshift; binaryfunc nb_inplace_and; binaryfunc nb_inplace_xor; binaryfunc nb_inplace_or; binaryfunc nb_floor_divide; binaryfunc nb_true_divide; binaryfunc nb_inplace_floor_divide; binaryfunc nb_inplace_true_divide; unaryfunc nb_index; } PyNumberMethods; typedef struct { lenfunc sq_length; binaryfunc sq_concat; ssizeargfunc sq_repeat; ssizeargfunc sq_item; void *was_sq_slice; ssizeobjargproc sq_ass_item; void *was_sq_ass_slice; objobjproc sq_contains; binaryfunc sq_inplace_concat; ssizeargfunc sq_inplace_repeat; } PySequenceMethods; typedef struct { lenfunc mp_length; binaryfunc mp_subscript; objobjargproc mp_ass_subscript; } PyMappingMethods; typedef struct { getbufferproc bf_getbuffer; releasebufferproc bf_releasebuffer; } PyBufferProcs; #endif /* Py_LIMITED_API */ typedef void (*freefunc)(void *); typedef void (*destructor)(PyObject *); #ifndef Py_LIMITED_API /* We can't provide a full compile-time check that limited-API users won't implement tp_print. However, not defining printfunc and making tp_print of a different function pointer type should at least cause a warning in most cases. */ typedef int (*printfunc)(PyObject *, FILE *, int); #endif typedef PyObject *(*getattrfunc)(PyObject *, char *); typedef PyObject *(*getattrofunc)(PyObject *, PyObject *); typedef int (*setattrfunc)(PyObject *, char *, PyObject *); typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *); typedef PyObject *(*reprfunc)(PyObject *); typedef Py_hash_t (*hashfunc)(PyObject *); typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int); typedef PyObject *(*getiterfunc) (PyObject *); typedef PyObject *(*iternextfunc) (PyObject *); typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*initproc)(PyObject *, PyObject *, PyObject *); typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *); typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t); #ifdef Py_LIMITED_API typedef struct _typeobject PyTypeObject; /* opaque */ #else typedef struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "." */ Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ /* Methods to implement standard operations */ destructor tp_dealloc; printfunc tp_print; getattrfunc tp_getattr; setattrfunc tp_setattr; void *tp_reserved; /* formerly known as tp_compare */ reprfunc tp_repr; /* Method suites for standard classes */ PyNumberMethods *tp_as_number; PySequenceMethods *tp_as_sequence; PyMappingMethods *tp_as_mapping; /* More standard operations (here for binary compatibility) */ hashfunc tp_hash; ternaryfunc tp_call; reprfunc tp_str; getattrofunc tp_getattro; setattrofunc tp_setattro; /* Functions to access object as input/output buffer */ PyBufferProcs *tp_as_buffer; /* Flags to define presence of optional/expanded features */ unsigned long tp_flags; const char *tp_doc; /* Documentation string */ /* Assigned meaning in release 2.0 */ /* call function for all accessible objects */ traverseproc tp_traverse; /* delete references to contained objects */ inquiry tp_clear; /* Assigned meaning in release 2.1 */ /* rich comparisons */ richcmpfunc tp_richcompare; /* weak reference enabler */ Py_ssize_t tp_weaklistoffset; /* Iterators */ getiterfunc tp_iter; iternextfunc tp_iternext; /* Attribute descriptor and subclassing stuff */ struct PyMethodDef *tp_methods; struct PyMemberDef *tp_members; struct PyGetSetDef *tp_getset; struct _typeobject *tp_base; PyObject *tp_dict; descrgetfunc tp_descr_get; descrsetfunc tp_descr_set; Py_ssize_t tp_dictoffset; initproc tp_init; allocfunc tp_alloc; newfunc tp_new; freefunc tp_free; /* Low-level free-memory routine */ inquiry tp_is_gc; /* For PyObject_IS_GC */ PyObject *tp_bases; PyObject *tp_mro; /* method resolution order */ PyObject *tp_cache; PyObject *tp_subclasses; PyObject *tp_weaklist; destructor tp_del; /* Type attribute cache version tag. Added in version 2.6 */ unsigned int tp_version_tag; destructor tp_finalize; #ifdef COUNT_ALLOCS /* these must be last and never explicitly initialized */ Py_ssize_t tp_allocs; Py_ssize_t tp_frees; Py_ssize_t tp_maxalloc; struct _typeobject *tp_prev; struct _typeobject *tp_next; #endif } PyTypeObject; #endif typedef struct{ int slot; /* slot id, see below */ void *pfunc; /* function pointer */ } PyType_Slot; typedef struct{ const char* name; int basicsize; int itemsize; unsigned int flags; PyType_Slot *slots; /* terminated by slot==0. */ } PyType_Spec; PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); #endif #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int); #endif #ifndef Py_LIMITED_API /* The *real* layout of a type object when allocated on the heap */ typedef struct _heaptypeobject { /* Note: there's a dependency on the order of these members in slotptr() in typeobject.c . */ PyTypeObject ht_type; PyNumberMethods as_number; PyMappingMethods as_mapping; PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, so that the mapping wins when both the mapping and the sequence define a given operator (e.g. __getitem__). see add_operators() in typeobject.c . */ PyBufferProcs as_buffer; PyObject *ht_name, *ht_slots, *ht_qualname; struct _dictkeysobject *ht_cached_keys; /* here are optional user slots, followed by the members. */ } PyHeapTypeObject; /* access macro to the members which are floating "behind" the object */ #define PyHeapType_GET_MEMBERS(etype) \ ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize)) #endif /* Generic type check */ PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); #define PyObject_TypeCheck(ob, tp) \ (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */ PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */ PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */ PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*); #define PyType_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) #define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type) PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, PyObject *, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *); PyAPI_FUNC(PyObject *) _PyType_LookupId(PyTypeObject *, _Py_Identifier *); PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, _Py_Identifier *); PyAPI_FUNC(PyTypeObject *) _PyType_CalculateMetaclass(PyTypeObject *, PyObject *); #endif PyAPI_FUNC(unsigned int) PyType_ClearCache(void); PyAPI_FUNC(void) PyType_Modified(PyTypeObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyType_GetDocFromInternalDoc(const char *, const char *); PyAPI_FUNC(PyObject *) _PyType_GetTextSignatureFromInternalDoc(const char *, const char *); #endif /* Generic operations on objects */ struct _Py_Identifier; #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int); PyAPI_FUNC(void) _Py_BreakPoint(void); PyAPI_FUNC(void) _PyObject_Dump(PyObject *); #endif PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *); PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *); PyAPI_FUNC(PyObject *) PyObject_Bytes(PyObject *); PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int); PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int); PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *); PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *); PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *); PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); PyAPI_FUNC(int) _PyObject_IsAbstract(PyObject *); PyAPI_FUNC(PyObject *) _PyObject_GetAttrId(PyObject *, struct _Py_Identifier *); PyAPI_FUNC(int) _PyObject_SetAttrId(PyObject *, struct _Py_Identifier *, PyObject *); PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); #endif PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); #endif PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *); PyAPI_FUNC(Py_hash_t) PyObject_Hash(PyObject *); PyAPI_FUNC(Py_hash_t) PyObject_HashNotImplemented(PyObject *); PyAPI_FUNC(int) PyObject_IsTrue(PyObject *); PyAPI_FUNC(int) PyObject_Not(PyObject *); PyAPI_FUNC(int) PyCallable_Check(PyObject *); PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *); #endif /* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes dict as the last parameter. */ PyAPI_FUNC(PyObject *) _PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, PyObject *, PyObject *); /* Helper to look up a builtin object */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyObject_GetBuiltin(const char *name); #endif /* PyObject_Dir(obj) acts like Python builtins.dir(obj), returning a list of strings. PyObject_Dir(NULL) is like builtins.dir(), returning the names of the current locals. In this case, if there are no current locals, NULL is returned, and PyErr_Occurred() is false. */ PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *); /* Helpers for printing recursive container types */ PyAPI_FUNC(int) Py_ReprEnter(PyObject *); PyAPI_FUNC(void) Py_ReprLeave(PyObject *); #ifndef Py_LIMITED_API /* Helper for passing objects to printf and the like. Leaks refcounts. Don't use it! */ #define PyObject_REPR(obj) PyUnicode_AsUTF8(PyObject_Repr(obj)) #endif /* Flag bits for printing: */ #define Py_PRINT_RAW 1 /* No string quotes etc. */ /* `Type flags (tp_flags) These flags are used to extend the type structure in a backwards-compatible fashion. Extensions can use the flags to indicate (and test) when a given type structure contains a new feature. The Python core will use these when introducing new functionality between major revisions (to avoid mid-version changes in the PYTHON_API_VERSION). Arbitration of the flag bit positions will need to be coordinated among all extension writers who publically release their extensions (this will be fewer than you might expect!).. Most flags were removed as of Python 3.0 to make room for new flags. (Some flags are not for backwards compatibility but to indicate the presence of an optional feature; these flags remain of course.) Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value. Code can use PyType_HasFeature(type_ob, flag_value) to test whether the given type object has a specified feature. */ /* Set if the type object is dynamically allocated */ #define Py_TPFLAGS_HEAPTYPE (1UL << 9) /* Set if the type allows subclassing */ #define Py_TPFLAGS_BASETYPE (1UL << 10) /* Set if the type is 'ready' -- fully initialized */ #define Py_TPFLAGS_READY (1UL << 12) /* Set while the type is being 'readied', to prevent recursive ready calls */ #define Py_TPFLAGS_READYING (1UL << 13) /* Objects support garbage collection (see objimp.h) */ #define Py_TPFLAGS_HAVE_GC (1UL << 14) /* These two bits are preserved for Stackless Python, next after this is 17 */ #ifdef STACKLESS #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3UL << 15) #else #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0 #endif /* Objects support type attribute cache */ #define Py_TPFLAGS_HAVE_VERSION_TAG (1UL << 18) #define Py_TPFLAGS_VALID_VERSION_TAG (1UL << 19) /* Type is abstract and cannot be instantiated */ #define Py_TPFLAGS_IS_ABSTRACT (1UL << 20) /* These flags are used to determine if a type is a subclass. */ #define Py_TPFLAGS_LONG_SUBCLASS (1UL << 24) #define Py_TPFLAGS_LIST_SUBCLASS (1UL << 25) #define Py_TPFLAGS_TUPLE_SUBCLASS (1UL << 26) #define Py_TPFLAGS_BYTES_SUBCLASS (1UL << 27) #define Py_TPFLAGS_UNICODE_SUBCLASS (1UL << 28) #define Py_TPFLAGS_DICT_SUBCLASS (1UL << 29) #define Py_TPFLAGS_BASE_EXC_SUBCLASS (1UL << 30) #define Py_TPFLAGS_TYPE_SUBCLASS (1UL << 31) #define Py_TPFLAGS_DEFAULT ( \ Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \ Py_TPFLAGS_HAVE_VERSION_TAG | \ 0) /* NOTE: The following flags reuse lower bits (removed as part of the * Python 3.0 transition). */ /* Type structure has tp_finalize member (3.4) */ #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) #ifdef Py_LIMITED_API #define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) #else #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) #endif #define PyType_FastSubclass(t,f) PyType_HasFeature(t,f) /* The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement reference counts. Py_DECREF calls the object's deallocator function when the refcount falls to 0; for objects that don't contain references to other objects or heap memory this can be the standard function free(). Both macros can be used wherever a void expression is allowed. The argument must not be a NULL pointer. If it may be NULL, use Py_XINCREF/Py_XDECREF instead. The macro _Py_NewReference(op) initialize reference counts to 1, and in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional bookkeeping appropriate to the special build. We assume that the reference count field can never overflow; this can be proven when the size of the field is the same as the pointer size, so we ignore the possibility. Provided a C int is at least 32 bits (which is implicitly assumed in many parts of this code), that's enough for about 2**31 references to an object. XXX The following became out of date in Python 2.2, but I'm not sure XXX what the full truth is now. Certainly, heap-allocated type objects XXX can and should be deallocated. Type objects should never be deallocated; the type pointer in an object is not considered to be a reference to the type object, to save complications in the deallocation function. (This is actually a decision that's up to the implementer of each new type so if you want, you can count such references to the type object.) */ /* First define a pile of simple helper macros, one set per special * build symbol. These either expand to the obvious things, or to * nothing at all when the special mode isn't in effect. The main * macros can later be defined just once then, yet expand to different * things depending on which special build options are and aren't in effect. * Trust me : while painful, this is 20x easier to understand than, * e.g, defining _Py_NewReference five different times in a maze of nested * #ifdefs (we used to do that -- it was impenetrable). */ #ifdef Py_REF_DEBUG PyAPI_DATA(Py_ssize_t) _Py_RefTotal; PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op); PyAPI_FUNC(PyObject *) _PyDict_Dummy(void); PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); #define _Py_INC_REFTOTAL _Py_RefTotal++ #define _Py_DEC_REFTOTAL _Py_RefTotal-- #define _Py_REF_DEBUG_COMMA , #define _Py_CHECK_REFCNT(OP) \ { if (((PyObject*)OP)->ob_refcnt < 0) \ _Py_NegativeRefcount(__FILE__, __LINE__, \ (PyObject *)(OP)); \ } #else #define _Py_INC_REFTOTAL #define _Py_DEC_REFTOTAL #define _Py_REF_DEBUG_COMMA #define _Py_CHECK_REFCNT(OP) /* a semicolon */; #endif /* Py_REF_DEBUG */ #ifdef COUNT_ALLOCS PyAPI_FUNC(void) inc_count(PyTypeObject *); PyAPI_FUNC(void) dec_count(PyTypeObject *); #define _Py_INC_TPALLOCS(OP) inc_count(Py_TYPE(OP)) #define _Py_INC_TPFREES(OP) dec_count(Py_TYPE(OP)) #define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- #define _Py_COUNT_ALLOCS_COMMA , #else #define _Py_INC_TPALLOCS(OP) #define _Py_INC_TPFREES(OP) #define _Py_DEC_TPFREES(OP) #define _Py_COUNT_ALLOCS_COMMA #endif /* COUNT_ALLOCS */ #ifdef Py_TRACE_REFS /* Py_TRACE_REFS is such major surgery that we call external routines. */ PyAPI_FUNC(void) _Py_NewReference(PyObject *); PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); PyAPI_FUNC(void) _Py_Dealloc(PyObject *); PyAPI_FUNC(void) _Py_PrintReferences(FILE *); PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); #else /* Without Py_TRACE_REFS, there's little enough to do that we expand code * inline. */ #define _Py_NewReference(op) ( \ _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \ _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ Py_REFCNT(op) = 1) #define _Py_ForgetReference(op) _Py_INC_TPFREES(op) #ifdef Py_LIMITED_API PyAPI_FUNC(void) _Py_Dealloc(PyObject *); #else #define _Py_Dealloc(op) ( \ _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \ (*Py_TYPE(op)->tp_dealloc)((PyObject *)(op))) #endif #endif /* !Py_TRACE_REFS */ #define Py_INCREF(op) ( \ _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ ((PyObject *)(op))->ob_refcnt++) #define Py_DECREF(op) \ do { \ PyObject *_py_decref_tmp = (PyObject *)(op); \ if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ --(_py_decref_tmp)->ob_refcnt != 0) \ _Py_CHECK_REFCNT(_py_decref_tmp) \ else \ _Py_Dealloc(_py_decref_tmp); \ } while (0) /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear * and tp_dealloc implementations. * * Note that "the obvious" code can be deadly: * * Py_XDECREF(op); * op = NULL; * * Typically, `op` is something like self->containee, and `self` is done * using its `containee` member. In the code sequence above, suppose * `containee` is non-NULL with a refcount of 1. Its refcount falls to * 0 on the first line, which can trigger an arbitrary amount of code, * possibly including finalizers (like __del__ methods or weakref callbacks) * coded in Python, which in turn can release the GIL and allow other threads * to run, etc. Such code may even invoke methods of `self` again, or cause * cyclic gc to trigger, but-- oops! --self->containee still points to the * object being torn down, and it may be in an insane state while being torn * down. This has in fact been a rich historic source of miserable (rare & * hard-to-diagnose) segfaulting (and other) bugs. * * The safe way is: * * Py_CLEAR(op); * * That arranges to set `op` to NULL _before_ decref'ing, so that any code * triggered as a side-effect of `op` getting torn down no longer believes * `op` points to a valid object. * * There are cases where it's safe to use the naive code, but they're brittle. * For example, if `op` points to a Python integer, you know that destroying * one of those can't cause problems -- but in part that relies on that * Python integers aren't currently weakly referencable. Best practice is * to use Py_CLEAR() even if you can't think of a reason for why you need to. */ #define Py_CLEAR(op) \ do { \ PyObject *_py_tmp = (PyObject *)(op); \ if (_py_tmp != NULL) { \ (op) = NULL; \ Py_DECREF(_py_tmp); \ } \ } while (0) /* Macros to use in case the object pointer may be NULL: */ #define Py_XINCREF(op) \ do { \ PyObject *_py_xincref_tmp = (PyObject *)(op); \ if (_py_xincref_tmp != NULL) \ Py_INCREF(_py_xincref_tmp); \ } while (0) #define Py_XDECREF(op) \ do { \ PyObject *_py_xdecref_tmp = (PyObject *)(op); \ if (_py_xdecref_tmp != NULL) \ Py_DECREF(_py_xdecref_tmp); \ } while (0) /* These are provided as conveniences to Python runtime embedders, so that they can have object code that is not dependent on Python compilation flags. */ PyAPI_FUNC(void) Py_IncRef(PyObject *); PyAPI_FUNC(void) Py_DecRef(PyObject *); PyAPI_DATA(PyTypeObject) _PyNone_Type; PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; /* _Py_NoneStruct is an object of undefined type which can be used in contexts where NULL (nil) is not suitable (since NULL often means 'error'). Don't forget to apply Py_INCREF() when returning this value!!! */ PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */ #define Py_None (&_Py_NoneStruct) /* Macro for returning Py_None from a function */ #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None /* Py_NotImplemented is a singleton used to signal that an operation is not implemented for a given type combination. */ PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */ #define Py_NotImplemented (&_Py_NotImplementedStruct) /* Macro for returning Py_NotImplemented from a function */ #define Py_RETURN_NOTIMPLEMENTED \ return Py_INCREF(Py_NotImplemented), Py_NotImplemented /* Rich comparison opcodes */ #define Py_LT 0 #define Py_LE 1 #define Py_EQ 2 #define Py_NE 3 #define Py_GT 4 #define Py_GE 5 /* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE. * Defined in object.c. */ PyAPI_DATA(int) _Py_SwappedOp[]; /* More conventions ================ Argument Checking ----------------- Functions that take objects as arguments normally don't check for nil arguments, but they do check the type of the argument, and return an error if the function doesn't apply to the type. Failure Modes ------------- Functions may fail for a variety of reasons, including running out of memory. This is communicated to the caller in two ways: an error string is set (see errors.h), and the function result differs: functions that normally return a pointer return NULL for failure, functions returning an integer return -1 (which could be a legal return value too!), and other functions return 0 for success and -1 for failure. Callers should always check for errors before using the result. If an error was set, the caller must either explicitly clear it, or pass the error on to its caller. Reference Counts ---------------- It takes a while to get used to the proper usage of reference counts. Functions that create an object set the reference count to 1; such new objects must be stored somewhere or destroyed again with Py_DECREF(). Some functions that 'store' objects, such as PyTuple_SetItem() and PyList_SetItem(), don't increment the reference count of the object, since the most frequent use is to store a fresh object. Functions that 'retrieve' objects, such as PyTuple_GetItem() and PyDict_GetItemString(), also don't increment the reference count, since most frequently the object is only looked at quickly. Thus, to retrieve an object and store it again, the caller must call Py_INCREF() explicitly. NOTE: functions that 'consume' a reference count, like PyList_SetItem(), consume the reference even if the object wasn't successfully stored, to simplify error handling. It seems attractive to make other functions that take an object as argument consume a reference count; however, this may quickly get confusing (even the current practice is already confusing). Consider it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at times. */ /* Trashcan mechanism, thanks to Christian Tismer. When deallocating a container object, it's possible to trigger an unbounded chain of deallocations, as each Py_DECREF in turn drops the refcount on "the next" object in the chain to 0. This can easily lead to stack faults, and especially in threads (which typically have less stack space to work with). A container object that participates in cyclic gc can avoid this by bracketing the body of its tp_dealloc function with a pair of macros: static void mytype_dealloc(mytype *p) { ... declarations go here ... PyObject_GC_UnTrack(p); // must untrack first Py_TRASHCAN_SAFE_BEGIN(p) ... The body of the deallocator goes here, including all calls ... ... to Py_DECREF on contained objects. ... Py_TRASHCAN_SAFE_END(p) } CAUTION: Never return from the middle of the body! If the body needs to "get out early", put a label immediately before the Py_TRASHCAN_SAFE_END call, and goto it. Else the call-depth counter (see below) will stay above 0 forever, and the trashcan will never get emptied. How it works: The BEGIN macro increments a call-depth counter. So long as this counter is small, the body of the deallocator is run directly without further ado. But if the counter gets large, it instead adds p to a list of objects to be deallocated later, skips the body of the deallocator, and resumes execution after the END macro. The tp_dealloc routine then returns without deallocating anything (and so unbounded call-stack depth is avoided). When the call stack finishes unwinding again, code generated by the END macro notices this, and calls another routine to deallocate all the objects that may have been added to the list of deferred deallocations. In effect, a chain of N deallocations is broken into N / PyTrash_UNWIND_LEVEL pieces, with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. */ /* This is the old private API, invoked by the macros before 3.2.4. Kept for binary compatibility of extensions using the stable ABI. */ PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); PyAPI_FUNC(void) _PyTrash_destroy_chain(void); PyAPI_DATA(int) _PyTrash_delete_nesting; PyAPI_DATA(PyObject *) _PyTrash_delete_later; /* The new thread-safe private API, invoked by the macros below. */ PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); #define PyTrash_UNWIND_LEVEL 50 #define Py_TRASHCAN_SAFE_BEGIN(op) \ do { \ PyThreadState *_tstate = PyThreadState_GET(); \ if (_tstate->trash_delete_nesting < PyTrash_UNWIND_LEVEL) { \ ++_tstate->trash_delete_nesting; /* The body of the deallocator is here. */ #define Py_TRASHCAN_SAFE_END(op) \ --_tstate->trash_delete_nesting; \ if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \ _PyTrash_thread_destroy_chain(); \ } \ else \ _PyTrash_thread_deposit_object((PyObject*)op); \ } while (0); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks, size_t sizeof_block); PyAPI_FUNC(void) _PyObject_DebugTypeStats(FILE *out); #endif /* ifndef Py_LIMITED_API */ #ifdef __cplusplus } #endif #endif /* !Py_OBJECT_H */ include/python3.4m/dtoa.h000064400000000712152342604300011211 0ustar00#ifndef Py_LIMITED_API #ifndef PY_NO_SHORT_FLOAT_REPR #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); PyAPI_FUNC(double) _Py_dg_stdnan(int sign); PyAPI_FUNC(double) _Py_dg_infinity(int sign); #ifdef __cplusplus } #endif #endif #endif include/python3.4m/opcode.h000064400000012133152342604300011533 0ustar00#ifndef Py_OPCODE_H #define Py_OPCODE_H #ifdef __cplusplus extern "C" { #endif /* Instruction opcodes for compiled code */ #define POP_TOP 1 #define ROT_TWO 2 #define ROT_THREE 3 #define DUP_TOP 4 #define DUP_TOP_TWO 5 #define NOP 9 #define UNARY_POSITIVE 10 #define UNARY_NEGATIVE 11 #define UNARY_NOT 12 #define UNARY_INVERT 15 #define BINARY_POWER 19 #define BINARY_MULTIPLY 20 #define BINARY_MODULO 22 #define BINARY_ADD 23 #define BINARY_SUBTRACT 24 #define BINARY_SUBSCR 25 #define BINARY_FLOOR_DIVIDE 26 #define BINARY_TRUE_DIVIDE 27 #define INPLACE_FLOOR_DIVIDE 28 #define INPLACE_TRUE_DIVIDE 29 #define STORE_MAP 54 #define INPLACE_ADD 55 #define INPLACE_SUBTRACT 56 #define INPLACE_MULTIPLY 57 #define INPLACE_MODULO 59 #define STORE_SUBSCR 60 #define DELETE_SUBSCR 61 #define BINARY_LSHIFT 62 #define BINARY_RSHIFT 63 #define BINARY_AND 64 #define BINARY_XOR 65 #define BINARY_OR 66 #define INPLACE_POWER 67 #define GET_ITER 68 #define PRINT_EXPR 70 #define LOAD_BUILD_CLASS 71 #define YIELD_FROM 72 #define INPLACE_LSHIFT 75 #define INPLACE_RSHIFT 76 #define INPLACE_AND 77 #define INPLACE_XOR 78 #define INPLACE_OR 79 #define BREAK_LOOP 80 #define WITH_CLEANUP 81 #define RETURN_VALUE 83 #define IMPORT_STAR 84 #define YIELD_VALUE 86 #define POP_BLOCK 87 #define END_FINALLY 88 #define POP_EXCEPT 89 #define HAVE_ARGUMENT 90 /* Opcodes from here have an argument: */ #define STORE_NAME 90 /* Index in name list */ #define DELETE_NAME 91 /* "" */ #define UNPACK_SEQUENCE 92 /* Number of sequence items */ #define FOR_ITER 93 #define UNPACK_EX 94 /* Num items before variable part + (Num items after variable part << 8) */ #define STORE_ATTR 95 /* Index in name list */ #define DELETE_ATTR 96 /* "" */ #define STORE_GLOBAL 97 /* "" */ #define DELETE_GLOBAL 98 /* "" */ #define LOAD_CONST 100 /* Index in const list */ #define LOAD_NAME 101 /* Index in name list */ #define BUILD_TUPLE 102 /* Number of tuple items */ #define BUILD_LIST 103 /* Number of list items */ #define BUILD_SET 104 /* Number of set items */ #define BUILD_MAP 105 /* Always zero for now */ #define LOAD_ATTR 106 /* Index in name list */ #define COMPARE_OP 107 /* Comparison operator */ #define IMPORT_NAME 108 /* Index in name list */ #define IMPORT_FROM 109 /* Index in name list */ #define JUMP_FORWARD 110 /* Number of bytes to skip */ #define JUMP_IF_FALSE_OR_POP 111 /* Target byte offset from beginning of code */ #define JUMP_IF_TRUE_OR_POP 112 /* "" */ #define JUMP_ABSOLUTE 113 /* "" */ #define POP_JUMP_IF_FALSE 114 /* "" */ #define POP_JUMP_IF_TRUE 115 /* "" */ #define LOAD_GLOBAL 116 /* Index in name list */ #define CONTINUE_LOOP 119 /* Start of loop (absolute) */ #define SETUP_LOOP 120 /* Target address (relative) */ #define SETUP_EXCEPT 121 /* "" */ #define SETUP_FINALLY 122 /* "" */ #define LOAD_FAST 124 /* Local variable number */ #define STORE_FAST 125 /* Local variable number */ #define DELETE_FAST 126 /* Local variable number */ #define RAISE_VARARGS 130 /* Number of raise arguments (1, 2 or 3) */ /* CALL_FUNCTION_XXX opcodes defined below depend on this definition */ #define CALL_FUNCTION 131 /* #args + (#kwargs<<8) */ #define MAKE_FUNCTION 132 /* #defaults + #kwdefaults<<8 + #annotations<<16 */ #define BUILD_SLICE 133 /* Number of items */ #define MAKE_CLOSURE 134 /* same as MAKE_FUNCTION */ #define LOAD_CLOSURE 135 /* Load free variable from closure */ #define LOAD_DEREF 136 /* Load and dereference from closure cell */ #define STORE_DEREF 137 /* Store into cell */ #define DELETE_DEREF 138 /* Delete closure cell */ /* The next 3 opcodes must be contiguous and satisfy (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */ #define CALL_FUNCTION_VAR 140 /* #args + (#kwargs<<8) */ #define CALL_FUNCTION_KW 141 /* #args + (#kwargs<<8) */ #define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */ #define SETUP_WITH 143 /* Support for opargs more than 16 bits long */ #define EXTENDED_ARG 144 #define LIST_APPEND 145 #define SET_ADD 146 #define MAP_ADD 147 #define LOAD_CLASSDEREF 148 /* EXCEPT_HANDLER is a special, implicit block type which is created when entering an except handler. It is not an opcode but we define it here as we want it to be available to both frameobject.c and ceval.c, while remaining private.*/ #define EXCEPT_HANDLER 257 enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) #ifdef __cplusplus } #endif #endif /* !Py_OPCODE_H */ include/python3.4m/asdl.h000064400000002240152342604300011203 0ustar00#ifndef Py_ASDL_H #define Py_ASDL_H typedef PyObject * identifier; typedef PyObject * string; typedef PyObject * bytes; typedef PyObject * object; typedef PyObject * singleton; /* It would be nice if the code generated by asdl_c.py was completely independent of Python, but it is a goal the requires too much work at this stage. So, for example, I'll represent identifiers as interned Python strings. */ /* XXX A sequence should be typed so that its use can be typechecked. */ typedef struct { Py_ssize_t size; void *elements[1]; } asdl_seq; typedef struct { Py_ssize_t size; int elements[1]; } asdl_int_seq; asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena); asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena); #define asdl_seq_GET(S, I) (S)->elements[(I)] #define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size) #ifdef Py_DEBUG #define asdl_seq_SET(S, I, V) \ do { \ Py_ssize_t _asdl_i = (I); \ assert((S) != NULL); \ assert(_asdl_i < (S)->size); \ (S)->elements[_asdl_i] = (V); \ } while (0) #else #define asdl_seq_SET(S, I, V) (S)->elements[I] = (V) #endif #endif /* !Py_ASDL_H */ include/python3.4m/eval.h000064400000001125152342604300011210 0ustar00 /* Interface to execute compiled code */ #ifndef Py_EVAL_H #define Py_EVAL_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argc, PyObject **kwds, int kwdc, PyObject **defs, int defc, PyObject *kwdefs, PyObject *closure); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args); #endif #ifdef __cplusplus } #endif #endif /* !Py_EVAL_H */ include/python3.4m/objimpl.h000064400000033030152342604300011715 0ustar00/* The PyObject_ memory family: high-level object memory interfaces. See pymem.h for the low-level PyMem_ family. */ #ifndef Py_OBJIMPL_H #define Py_OBJIMPL_H #include "pymem.h" #ifdef __cplusplus extern "C" { #endif /* BEWARE: Each interface exports both functions and macros. Extension modules should use the functions, to ensure binary compatibility across Python versions. Because the Python implementation is free to change internal details, and the macros may (or may not) expose details for speed, if you do use the macros you must recompile your extensions with each Python release. Never mix calls to PyObject_ memory functions with calls to the platform malloc/realloc/ calloc/free, or with calls to PyMem_. */ /* Functions and macros for modules that implement new object types. - PyObject_New(type, typeobj) allocates memory for a new object of the given type, and initializes part of it. 'type' must be the C structure type used to represent the object, and 'typeobj' the address of the corresponding type object. Reference count and type pointer are filled in; the rest of the bytes of the object are *undefined*! The resulting expression type is 'type *'. The size of the object is determined by the tp_basicsize field of the type object. - PyObject_NewVar(type, typeobj, n) is similar but allocates a variable-size object with room for n items. In addition to the refcount and type pointer fields, this also fills in the ob_size field. - PyObject_Del(op) releases the memory allocated for an object. It does not run a destructor -- it only frees the memory. PyObject_Free is identical. - PyObject_Init(op, typeobj) and PyObject_InitVar(op, typeobj, n) don't allocate memory. Instead of a 'type' parameter, they take a pointer to a new object (allocated by an arbitrary allocator), and initialize its object header fields. Note that objects created with PyObject_{New, NewVar} are allocated using the specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is enabled. In addition, a special debugging allocator is used if PYMALLOC_DEBUG is also #defined. In case a specific form of memory management is needed (for example, if you must use the platform malloc heap(s), or shared memory, or C++ local storage or operator new), you must first allocate the object with your custom allocator, then pass its pointer to PyObject_{Init, InitVar} for filling in its Python- specific fields: reference count, type pointer, possibly others. You should be aware that Python no control over these objects because they don't cooperate with the Python memory manager. Such objects may not be eligible for automatic garbage collection and you have to make sure that they are released accordingly whenever their destructor gets called (cf. the specific form of memory management you're using). Unless you have specific memory management requirements, use PyObject_{New, NewVar, Del}. */ /* * Raw object memory interface * =========================== */ /* Functions to call the same malloc/realloc/free as used by Python's object allocator. If WITH_PYMALLOC is enabled, these may differ from the platform malloc/realloc/free. The Python object allocator is designed for fast, cache-conscious allocation of many "small" objects, and with low hidden memory overhead. PyObject_Malloc(0) returns a unique non-NULL pointer if possible. PyObject_Realloc(NULL, n) acts like PyObject_Malloc(n). PyObject_Realloc(p != NULL, 0) does not return NULL, or free the memory at p. Returned pointers must be checked for NULL explicitly; no action is performed on failure other than to return NULL (no warning it printed, no exception is set, etc). For allocating objects, use PyObject_{New, NewVar} instead whenever possible. The PyObject_{Malloc, Realloc, Free} family is exposed so that you can exploit Python's small-block allocator for non-object uses. If you must use these routines to allocate object memory, make sure the object gets initialized via PyObject_{Init, InitVar} after obtaining the raw memory. */ PyAPI_FUNC(void *) PyObject_Malloc(size_t size); PyAPI_FUNC(void *) PyObject_Realloc(void *ptr, size_t new_size); PyAPI_FUNC(void) PyObject_Free(void *ptr); /* This function returns the number of allocated memory blocks, regardless of size */ PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void); /* Macros */ #ifdef WITH_PYMALLOC #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyObject_DebugMallocStats(FILE *out); #endif /* #ifndef Py_LIMITED_API */ #endif /* Macros */ #define PyObject_MALLOC PyObject_Malloc #define PyObject_REALLOC PyObject_Realloc #define PyObject_FREE PyObject_Free #define PyObject_Del PyObject_Free #define PyObject_DEL PyObject_Free /* * Generic object allocator interface * ================================== */ /* Functions */ PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *); PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, PyTypeObject *, Py_ssize_t); PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); #define PyObject_New(type, typeobj) \ ( (type *) _PyObject_New(typeobj) ) #define PyObject_NewVar(type, typeobj, n) \ ( (type *) _PyObject_NewVar((typeobj), (n)) ) /* Macros trading binary compatibility for speed. See also pymem.h. Note that these macros expect non-NULL object pointers.*/ #define PyObject_INIT(op, typeobj) \ ( Py_TYPE(op) = (typeobj), _Py_NewReference((PyObject *)(op)), (op) ) #define PyObject_INIT_VAR(op, typeobj, size) \ ( Py_SIZE(op) = (size), PyObject_INIT((op), (typeobj)) ) #define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) /* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a vrbl-size object with nitems items, exclusive of gc overhead (if any). The value is rounded up to the closest multiple of sizeof(void *), in order to ensure that pointer fields at the end of the object are correctly aligned for the platform (this is of special importance for subclasses of, e.g., str or int, so that pointers can be stored after the embedded data). Note that there's no memory wastage in doing this, as malloc has to return (at worst) pointer-aligned memory anyway. */ #if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 # error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" #endif #define _PyObject_VAR_SIZE(typeobj, nitems) \ _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ (nitems)*(typeobj)->tp_itemsize, \ SIZEOF_VOID_P) #define PyObject_NEW(type, typeobj) \ ( (type *) PyObject_Init( \ (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) ) #define PyObject_NEW_VAR(type, typeobj, n) \ ( (type *) PyObject_InitVar( \ (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\ (typeobj), (n)) ) /* This example code implements an object constructor with a custom allocator, where PyObject_New is inlined, and shows the important distinction between two steps (at least): 1) the actual allocation of the object storage; 2) the initialization of the Python specific fields in this storage with PyObject_{Init, InitVar}. PyObject * YourObject_New(...) { PyObject *op; op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); if (op == NULL) return PyErr_NoMemory(); PyObject_Init(op, &YourTypeStruct); op->ob_field = value; ... return op; } Note that in C++, the use of the new operator usually implies that the 1st step is performed automatically for you, so in a C++ class constructor you would start directly with PyObject_Init/InitVar */ #ifndef Py_LIMITED_API typedef struct { /* user context passed as the first argument to the 2 functions */ void *ctx; /* allocate an arena of size bytes */ void* (*alloc) (void *ctx, size_t size); /* free an arena */ void (*free) (void *ctx, void *ptr, size_t size); } PyObjectArenaAllocator; /* Get the arena allocator. */ PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator); /* Set the arena allocator. */ PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator); #endif /* * Garbage Collection Support * ========================== */ /* C equivalent of gc.collect(). */ PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void); #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void); #endif /* Test if a type has a GC head */ #define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) /* Test if an object has a GC head */ #define PyObject_IS_GC(o) (PyType_IS_GC(Py_TYPE(o)) && \ (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o))) PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t); #define PyObject_GC_Resize(type, op, n) \ ( (type *) _PyObject_GC_Resize((PyVarObject *)(op), (n)) ) /* GC information is stored BEFORE the object structure. */ #ifndef Py_LIMITED_API typedef union _gc_head { struct { union _gc_head *gc_next; union _gc_head *gc_prev; Py_ssize_t gc_refs; } gc; double dummy; /* force worst-case alignment */ } PyGC_Head; extern PyGC_Head *_PyGC_generation0; #define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) /* Bit 0 is set when tp_finalize is called */ #define _PyGC_REFS_MASK_FINALIZED (1 << 0) /* The (N-1) most significant bits contain the gc state / refcount */ #define _PyGC_REFS_SHIFT (1) #define _PyGC_REFS_MASK (((size_t) -1) << _PyGC_REFS_SHIFT) #define _PyGCHead_REFS(g) ((g)->gc.gc_refs >> _PyGC_REFS_SHIFT) #define _PyGCHead_SET_REFS(g, v) do { \ (g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK) \ | (((size_t)(v)) << _PyGC_REFS_SHIFT); \ } while (0) #define _PyGCHead_DECREF(g) ((g)->gc.gc_refs -= 1 << _PyGC_REFS_SHIFT) #define _PyGCHead_FINALIZED(g) (((g)->gc.gc_refs & _PyGC_REFS_MASK_FINALIZED) != 0) #define _PyGCHead_SET_FINALIZED(g, v) do { \ (g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK_FINALIZED) \ | (v != 0); \ } while (0) #define _PyGC_FINALIZED(o) _PyGCHead_FINALIZED(_Py_AS_GC(o)) #define _PyGC_SET_FINALIZED(o, v) _PyGCHead_SET_FINALIZED(_Py_AS_GC(o), v) #define _PyGC_REFS(o) _PyGCHead_REFS(_Py_AS_GC(o)) #define _PyGC_REFS_UNTRACKED (-2) #define _PyGC_REFS_REACHABLE (-3) #define _PyGC_REFS_TENTATIVELY_UNREACHABLE (-4) /* Tell the GC to track this object. NB: While the object is tracked the * collector it must be safe to call the ob_traverse method. */ #define _PyObject_GC_TRACK(o) do { \ PyGC_Head *g = _Py_AS_GC(o); \ if (_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED) \ Py_FatalError("GC object already tracked"); \ _PyGCHead_SET_REFS(g, _PyGC_REFS_REACHABLE); \ g->gc.gc_next = _PyGC_generation0; \ g->gc.gc_prev = _PyGC_generation0->gc.gc_prev; \ g->gc.gc_prev->gc.gc_next = g; \ _PyGC_generation0->gc.gc_prev = g; \ } while (0); /* Tell the GC to stop tracking this object. * gc_next doesn't need to be set to NULL, but doing so is a good * way to provoke memory errors if calling code is confused. */ #define _PyObject_GC_UNTRACK(o) do { \ PyGC_Head *g = _Py_AS_GC(o); \ assert(_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED); \ _PyGCHead_SET_REFS(g, _PyGC_REFS_UNTRACKED); \ g->gc.gc_prev->gc.gc_next = g->gc.gc_next; \ g->gc.gc_next->gc.gc_prev = g->gc.gc_prev; \ g->gc.gc_next = NULL; \ } while (0); /* True if the object is currently tracked by the GC. */ #define _PyObject_GC_IS_TRACKED(o) \ (_PyGC_REFS(o) != _PyGC_REFS_UNTRACKED) /* True if the object may be tracked by the GC in the future, or already is. This can be useful to implement some optimizations. */ #define _PyObject_GC_MAY_BE_TRACKED(obj) \ (PyObject_IS_GC(obj) && \ (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) #endif /* Py_LIMITED_API */ PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t); PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t); PyAPI_FUNC(void) PyObject_GC_Track(void *); PyAPI_FUNC(void) PyObject_GC_UnTrack(void *); PyAPI_FUNC(void) PyObject_GC_Del(void *); #define PyObject_GC_New(type, typeobj) \ ( (type *) _PyObject_GC_New(typeobj) ) #define PyObject_GC_NewVar(type, typeobj, n) \ ( (type *) _PyObject_GC_NewVar((typeobj), (n)) ) /* Utility macro to help write tp_traverse functions. * To use this macro, the tp_traverse function must name its arguments * "visit" and "arg". This is intended to keep tp_traverse functions * looking as much alike as possible. */ #define Py_VISIT(op) \ do { \ if (op) { \ int vret = visit((PyObject *)(op), arg); \ if (vret) \ return vret; \ } \ } while (0) /* Test if a type supports weak references */ #define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0) #define PyObject_GET_WEAKREFS_LISTPTR(o) \ ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset)) #ifdef __cplusplus } #endif #endif /* !Py_OBJIMPL_H */ include/python3.4m/codecs.h000064400000014630152342604300011526 0ustar00#ifndef Py_CODECREGISTRY_H #define Py_CODECREGISTRY_H #ifdef __cplusplus extern "C" { #endif /* ------------------------------------------------------------------------ Python Codec Registry and support functions Written by Marc-Andre Lemburg (mal@lemburg.com). Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ /* Register a new codec search function. As side effect, this tries to load the encodings package, if not yet done, to make sure that it is always first in the list of search functions. The search_function's refcount is incremented by this function. */ PyAPI_FUNC(int) PyCodec_Register( PyObject *search_function ); /* Codec registry lookup API. Looks up the given encoding and returns a CodecInfo object with function attributes which implement the different aspects of processing the encoding. The encoding string is looked up converted to all lower-case characters. This makes encodings looked up through this mechanism effectively case-insensitive. If no codec is found, a KeyError is set and NULL returned. As side effect, this tries to load the encodings package, if not yet done. This is part of the lazy load strategy for the encodings package. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyCodec_Lookup( const char *encoding ); PyAPI_FUNC(int) _PyCodec_Forget( const char *encoding ); #endif /* Codec registry encoding check API. Returns 1/0 depending on whether there is a registered codec for the given encoding. */ PyAPI_FUNC(int) PyCodec_KnownEncoding( const char *encoding ); /* Generic codec based encoding API. object is passed through the encoder function found for the given encoding using the error handling method defined by errors. errors may be NULL to use the default method defined for the codec. Raises a LookupError in case no encoder can be found. */ PyAPI_FUNC(PyObject *) PyCodec_Encode( PyObject *object, const char *encoding, const char *errors ); /* Generic codec based decoding API. object is passed through the decoder function found for the given encoding using the error handling method defined by errors. errors may be NULL to use the default method defined for the codec. Raises a LookupError in case no encoder can be found. */ PyAPI_FUNC(PyObject *) PyCodec_Decode( PyObject *object, const char *encoding, const char *errors ); #ifndef Py_LIMITED_API /* Text codec specific encoding and decoding API. Checks the encoding against a list of codecs which do not implement a str<->bytes encoding before attempting the operation. Please note that these APIs are internal and should not be used in Python C extensions. XXX (ncoghlan): should we make these, or something like them, public in Python 3.5+? */ PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding( const char *encoding, const char *alternate_command ); PyAPI_FUNC(PyObject *) _PyCodec_EncodeText( PyObject *object, const char *encoding, const char *errors ); PyAPI_FUNC(PyObject *) _PyCodec_DecodeText( PyObject *object, const char *encoding, const char *errors ); /* These two aren't actually text encoding specific, but _io.TextIOWrapper * is the only current API consumer. */ PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder( PyObject *codec_info, const char *errors ); PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder( PyObject *codec_info, const char *errors ); #endif /* --- Codec Lookup APIs -------------------------------------------------- All APIs return a codec object with incremented refcount and are based on _PyCodec_Lookup(). The same comments w/r to the encoding name also apply to these APIs. */ /* Get an encoder function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_Encoder( const char *encoding ); /* Get a decoder function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_Decoder( const char *encoding ); /* Get an IncrementalEncoder object for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder( const char *encoding, const char *errors ); /* Get an IncrementalDecoder object function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder( const char *encoding, const char *errors ); /* Get a StreamReader factory function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_StreamReader( const char *encoding, PyObject *stream, const char *errors ); /* Get a StreamWriter factory function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_StreamWriter( const char *encoding, PyObject *stream, const char *errors ); /* Unicode encoding error handling callback registry API */ /* Register the error handling callback function error under the given name. This function will be called by the codec when it encounters unencodable characters/undecodable bytes and doesn't know the callback name, when name is specified as the error parameter in the call to the encode/decode function. Return 0 on success, -1 on error */ PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error); /* Lookup the error handling callback function registered under the given name. As a special case NULL can be passed, in which case the error handling callback for "strict" will be returned. */ PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name); /* raise exc as an exception */ PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc); /* ignore the unicode error, skipping the faulty input */ PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc); /* replace the unicode encode error with ? or U+FFFD */ PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc); /* replace the unicode encode error with XML character references */ PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc); /* replace the unicode encode error with backslash escapes (\x, \u and \U) */ PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc); PyAPI_DATA(const char *) Py_hexdigits; #ifdef __cplusplus } #endif #endif /* !Py_CODECREGISTRY_H */ include/python3.4m/bitset.h000064400000001430152342604300011552 0ustar00 #ifndef Py_BITSET_H #define Py_BITSET_H #ifdef __cplusplus extern "C" { #endif /* Bitset interface */ #define BYTE char typedef BYTE *bitset; bitset newbitset(int nbits); void delbitset(bitset bs); #define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0) int addbit(bitset bs, int ibit); /* Returns 0 if already set */ int samebitset(bitset bs1, bitset bs2, int nbits); void mergebitset(bitset bs1, bitset bs2, int nbits); #define BITSPERBYTE (8*sizeof(BYTE)) #define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE) #define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE) #define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE) #define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit)) #define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE) #ifdef __cplusplus } #endif #endif /* !Py_BITSET_H */ include/python3.4m/pyexpat.h000064400000004622152342604300011760 0ustar00/* Stuff to export relevant 'expat' entry points from pyexpat to other * parser modules, such as cElementTree. */ /* note: you must import expat.h before importing this module! */ #define PyExpat_CAPI_MAGIC "pyexpat.expat_CAPI 1.1" #define PyExpat_CAPSULE_NAME "pyexpat.expat_CAPI" struct PyExpat_CAPI { char* magic; /* set to PyExpat_CAPI_MAGIC */ int size; /* set to sizeof(struct PyExpat_CAPI) */ int MAJOR_VERSION; int MINOR_VERSION; int MICRO_VERSION; /* pointers to selected expat functions. add new functions at the end, if needed */ const XML_LChar * (*ErrorString)(enum XML_Error code); enum XML_Error (*GetErrorCode)(XML_Parser parser); XML_Size (*GetErrorColumnNumber)(XML_Parser parser); XML_Size (*GetErrorLineNumber)(XML_Parser parser); enum XML_Status (*Parse)( XML_Parser parser, const char *s, int len, int isFinal); XML_Parser (*ParserCreate_MM)( const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *namespaceSeparator); void (*ParserFree)(XML_Parser parser); void (*SetCharacterDataHandler)( XML_Parser parser, XML_CharacterDataHandler handler); void (*SetCommentHandler)( XML_Parser parser, XML_CommentHandler handler); void (*SetDefaultHandlerExpand)( XML_Parser parser, XML_DefaultHandler handler); void (*SetElementHandler)( XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end); void (*SetNamespaceDeclHandler)( XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end); void (*SetProcessingInstructionHandler)( XML_Parser parser, XML_ProcessingInstructionHandler handler); void (*SetUnknownEncodingHandler)( XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData); void (*SetUserData)(XML_Parser parser, void *userData); void (*SetStartDoctypeDeclHandler)(XML_Parser parser, XML_StartDoctypeDeclHandler start); enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding); int (*DefaultUnknownEncodingHandler)( void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); /* might be none for expat < 2.1.0 */ int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt); /* always add new stuff to the end! */ }; include/python3.4m/rangeobject.h000064400000001165152342604300012550 0ustar00 /* Range object interface */ #ifndef Py_RANGEOBJECT_H #define Py_RANGEOBJECT_H #ifdef __cplusplus extern "C" { #endif /* A range object represents an integer range. This is an immutable object; a range cannot change its value after creation. Range objects behave like the corresponding tuple objects except that they are represented by a start, stop, and step datamembers. */ PyAPI_DATA(PyTypeObject) PyRange_Type; PyAPI_DATA(PyTypeObject) PyRangeIter_Type; PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type; #define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type) #ifdef __cplusplus } #endif #endif /* !Py_RANGEOBJECT_H */ include/python3.4m/graminit.h000064400000003521152342604300012075 0ustar00/* Generated by Parser/pgen */ #define single_input 256 #define file_input 257 #define eval_input 258 #define decorator 259 #define decorators 260 #define decorated 261 #define funcdef 262 #define parameters 263 #define typedargslist 264 #define tfpdef 265 #define varargslist 266 #define vfpdef 267 #define stmt 268 #define simple_stmt 269 #define small_stmt 270 #define expr_stmt 271 #define testlist_star_expr 272 #define augassign 273 #define del_stmt 274 #define pass_stmt 275 #define flow_stmt 276 #define break_stmt 277 #define continue_stmt 278 #define return_stmt 279 #define yield_stmt 280 #define raise_stmt 281 #define import_stmt 282 #define import_name 283 #define import_from 284 #define import_as_name 285 #define dotted_as_name 286 #define import_as_names 287 #define dotted_as_names 288 #define dotted_name 289 #define global_stmt 290 #define nonlocal_stmt 291 #define assert_stmt 292 #define compound_stmt 293 #define if_stmt 294 #define while_stmt 295 #define for_stmt 296 #define try_stmt 297 #define with_stmt 298 #define with_item 299 #define except_clause 300 #define suite 301 #define test 302 #define test_nocond 303 #define lambdef 304 #define lambdef_nocond 305 #define or_test 306 #define and_test 307 #define not_test 308 #define comparison 309 #define comp_op 310 #define star_expr 311 #define expr 312 #define xor_expr 313 #define and_expr 314 #define shift_expr 315 #define arith_expr 316 #define term 317 #define factor 318 #define power 319 #define atom 320 #define testlist_comp 321 #define trailer 322 #define subscriptlist 323 #define subscript 324 #define sliceop 325 #define exprlist 326 #define testlist 327 #define dictorsetmaker 328 #define classdef 329 #define arglist 330 #define argument 331 #define comp_iter 332 #define comp_for 333 #define comp_if 334 #define encoding_decl 335 #define yield_expr 336 #define yield_arg 337 include/python3.4m/dictobject.h000064400000012072152342604300012376 0ustar00#ifndef Py_DICTOBJECT_H #define Py_DICTOBJECT_H #ifdef __cplusplus extern "C" { #endif /* Dictionary object type -- mapping from hashable object to object */ /* The distribution includes a separate file, Objects/dictnotes.txt, describing explorations into dictionary design and optimization. It covers typical dictionary use patterns, the parameters for tuning dictionaries, and several ideas for possible optimizations. */ #ifndef Py_LIMITED_API typedef struct _dictkeysobject PyDictKeysObject; /* The ma_values pointer is NULL for a combined table * or points to an array of PyObject* for a split table */ typedef struct { PyObject_HEAD Py_ssize_t ma_used; PyDictKeysObject *ma_keys; PyObject **ma_values; } PyDictObject; #endif /* Py_LIMITED_API */ PyAPI_DATA(PyTypeObject) PyDict_Type; PyAPI_DATA(PyTypeObject) PyDictIterKey_Type; PyAPI_DATA(PyTypeObject) PyDictIterValue_Type; PyAPI_DATA(PyTypeObject) PyDictIterItem_Type; PyAPI_DATA(PyTypeObject) PyDictKeys_Type; PyAPI_DATA(PyTypeObject) PyDictItems_Type; PyAPI_DATA(PyTypeObject) PyDictValues_Type; #define PyDict_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) #define PyDictKeys_Check(op) (Py_TYPE(op) == &PyDictKeys_Type) #define PyDictItems_Check(op) (Py_TYPE(op) == &PyDictItems_Type) #define PyDictValues_Check(op) (Py_TYPE(op) == &PyDictValues_Type) /* This excludes Values, since they are not sets. */ # define PyDictViewSet_Check(op) \ (PyDictKeys_Check(op) || PyDictItems_Check(op)) PyAPI_FUNC(PyObject *) PyDict_New(void); PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); PyAPI_FUNC(PyObject *) PyDict_GetItemWithError(PyObject *mp, PyObject *key); PyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp, struct _Py_Identifier *key); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyDict_SetDefault( PyObject *mp, PyObject *key, PyObject *defaultobj); #endif PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item); PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); PyAPI_FUNC(int) PyDict_Next( PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value); #ifndef Py_LIMITED_API PyDictKeysObject *_PyDict_NewKeysForClass(void); PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *); PyAPI_FUNC(int) _PyDict_Next( PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash); #endif PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp); PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp); PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp); PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp); PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp); PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, Py_hash_t hash); PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused); PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp); PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp); Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys); #define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) PyAPI_FUNC(int) PyDict_ClearFreeList(void); #endif /* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */ PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other); /* PyDict_Merge updates/merges from a mapping object (an object that supports PyMapping_Keys() and PyObject_GetItem()). If override is true, the last occurrence of a key wins, else the first. The Python dict.update(other) is equivalent to PyDict_Merge(dict, other, 1). */ PyAPI_FUNC(int) PyDict_Merge(PyObject *mp, PyObject *other, int override); /* PyDict_MergeFromSeq2 updates/merges from an iterable object producing iterable objects of length 2. If override is true, the last occurrence of a key wins, else the first. The Python dict constructor dict(seq2) is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1). */ PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override); PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key); PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key); PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item); PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item); PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key); PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out); int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value); PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *); #endif #ifdef __cplusplus } #endif #endif /* !Py_DICTOBJECT_H */ include/python3.4m/pycapsule.h000064400000003276152342604300012277 0ustar00 /* Capsule objects let you wrap a C "void *" pointer in a Python object. They're a way of passing data through the Python interpreter without creating your own custom type. Capsules are used for communication between extension modules. They provide a way for an extension module to export a C interface to other extension modules, so that extension modules can use the Python import mechanism to link to one another. For more information, please see "c-api/capsule.html" in the documentation. */ #ifndef Py_CAPSULE_H #define Py_CAPSULE_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PyCapsule_Type; typedef void (*PyCapsule_Destructor)(PyObject *); #define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type) PyAPI_FUNC(PyObject *) PyCapsule_New( void *pointer, const char *name, PyCapsule_Destructor destructor); PyAPI_FUNC(void *) PyCapsule_GetPointer(PyObject *capsule, const char *name); PyAPI_FUNC(PyCapsule_Destructor) PyCapsule_GetDestructor(PyObject *capsule); PyAPI_FUNC(const char *) PyCapsule_GetName(PyObject *capsule); PyAPI_FUNC(void *) PyCapsule_GetContext(PyObject *capsule); PyAPI_FUNC(int) PyCapsule_IsValid(PyObject *capsule, const char *name); PyAPI_FUNC(int) PyCapsule_SetPointer(PyObject *capsule, void *pointer); PyAPI_FUNC(int) PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor); PyAPI_FUNC(int) PyCapsule_SetName(PyObject *capsule, const char *name); PyAPI_FUNC(int) PyCapsule_SetContext(PyObject *capsule, void *context); PyAPI_FUNC(void *) PyCapsule_Import( const char *name, /* UTF-8 encoded string */ int no_block); #ifdef __cplusplus } #endif #endif /* !Py_CAPSULE_H */ include/python3.4m/pystrcmp.h000064400000000664152342604300012151 0ustar00#ifndef Py_STRCMP_H #define Py_STRCMP_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(int) PyOS_mystrnicmp(const char *, const char *, Py_ssize_t); PyAPI_FUNC(int) PyOS_mystricmp(const char *, const char *); #ifdef MS_WINDOWS #define PyOS_strnicmp strnicmp #define PyOS_stricmp stricmp #else #define PyOS_strnicmp PyOS_mystrnicmp #define PyOS_stricmp PyOS_mystricmp #endif #ifdef __cplusplus } #endif #endif /* !Py_STRCMP_H */ include/python3.4m/node.h000064400000001760152342604300011213 0ustar00 /* Parse tree node interface */ #ifndef Py_NODE_H #define Py_NODE_H #ifdef __cplusplus extern "C" { #endif typedef struct _node { short n_type; char *n_str; int n_lineno; int n_col_offset; int n_nchildren; struct _node *n_child; } node; PyAPI_FUNC(node *) PyNode_New(int type); PyAPI_FUNC(int) PyNode_AddChild(node *n, int type, char *str, int lineno, int col_offset); PyAPI_FUNC(void) PyNode_Free(node *n); #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); #endif /* Node access functions */ #define NCH(n) ((n)->n_nchildren) #define CHILD(n, i) (&(n)->n_child[i]) #define RCHILD(n, i) (CHILD(n, NCH(n) + i)) #define TYPE(n) ((n)->n_type) #define STR(n) ((n)->n_str) #define LINENO(n) ((n)->n_lineno) /* Assert that the type of a node is what we expect */ #define REQ(n, type) assert(TYPE(n) == (type)) PyAPI_FUNC(void) PyNode_ListTree(node *); #ifdef __cplusplus } #endif #endif /* !Py_NODE_H */ include/python3.4m/pymacro.h000064400000005405152342604300011740 0ustar00#ifndef Py_PYMACRO_H #define Py_PYMACRO_H #define Py_MIN(x, y) (((x) > (y)) ? (y) : (x)) #define Py_MAX(x, y) (((x) > (y)) ? (x) : (y)) /* Argument must be a char or an int in [-128, 127] or [0, 255]. */ #define Py_CHARMASK(c) ((unsigned char)((c) & 0xff)) /* Assert a build-time dependency, as an expression. Your compile will fail if the condition isn't true, or can't be evaluated by the compiler. This can be used in an expression: its value is 0. Example: #define foo_to_char(foo) \ ((char *)(foo) \ + Py_BUILD_ASSERT_EXPR(offsetof(struct foo, string) == 0)) Written by Rusty Russell, public domain, http://ccodearchive.net/ */ #define Py_BUILD_ASSERT_EXPR(cond) \ (sizeof(char [1 - 2*!(cond)]) - 1) /* Get the number of elements in a visible array This does not work on pointers, or arrays declared as [], or function parameters. With correct compiler support, such usage will cause a build error (see Py_BUILD_ASSERT_EXPR). Written by Rusty Russell, public domain, http://ccodearchive.net/ Requires at GCC 3.1+ */ #if (defined(__GNUC__) && !defined(__STRICT_ANSI__) && \ (((__GNUC__ == 3) && (__GNU_MINOR__ >= 1)) || (__GNUC__ >= 4))) /* Two gcc extensions. &a[0] degrades to a pointer: a different type from an array */ #define Py_ARRAY_LENGTH(array) \ (sizeof(array) / sizeof((array)[0]) \ + Py_BUILD_ASSERT_EXPR(!__builtin_types_compatible_p(typeof(array), \ typeof(&(array)[0])))) #else #define Py_ARRAY_LENGTH(array) \ (sizeof(array) / sizeof((array)[0])) #endif /* Define macros for inline documentation. */ #define PyDoc_VAR(name) static char name[] #define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) #ifdef WITH_DOC_STRINGS #define PyDoc_STR(str) str #else #define PyDoc_STR(str) "" #endif /* Below "a" is a power of 2. */ /* Round down size "n" to be a multiple of "a". */ #define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1)) /* Round up size "n" to be a multiple of "a". */ #define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \ (size_t)((a) - 1)) & ~(size_t)((a) - 1)) /* Round pointer "p" down to the closest "a"-aligned address <= "p". */ #define _Py_ALIGN_DOWN(p, a) ((void *)((Py_uintptr_t)(p) & ~(Py_uintptr_t)((a) - 1))) /* Round pointer "p" up to the closest "a"-aligned address >= "p". */ #define _Py_ALIGN_UP(p, a) ((void *)(((Py_uintptr_t)(p) + \ (Py_uintptr_t)((a) - 1)) & ~(Py_uintptr_t)((a) - 1))) /* Check if pointer "p" is aligned to "a"-bytes boundary. */ #define _Py_IS_ALIGNED(p, a) (!((Py_uintptr_t)(p) & (Py_uintptr_t)((a) - 1))) #ifdef __GNUC__ #define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) #else #define Py_UNUSED(name) _unused_ ## name #endif #endif /* Py_PYMACRO_H */ include/python3.4m/ceval.h000064400000016040152342604300011355 0ustar00#ifndef Py_CEVAL_H #define Py_CEVAL_H #ifdef __cplusplus extern "C" { #endif /* Interface to random parts in ceval.c */ PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( PyObject *, PyObject *, PyObject *); /* Inline this */ #define PyEval_CallObject(func,arg) \ PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL) PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *obj, const char *format, ...); PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...); #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); #endif struct _frame; /* Avoid including frameobject.h */ PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void); /* Look at the current frame's (if any) code's co_flags, and turn on the corresponding compiler flags in cf->cf_flags. Return 1 if any flag was set, else return 0. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); #endif PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); PyAPI_FUNC(int) Py_MakePendingCalls(void); /* Protection against deeply nested recursive calls In Python 3.0, this protection has two levels: * normal anti-recursion protection is triggered when the recursion level exceeds the current recursion limit. It raises a RuntimeError, and sets the "overflowed" flag in the thread state structure. This flag temporarily *disables* the normal protection; this allows cleanup code to potentially outgrow the recursion limit while processing the RuntimeError. * "last chance" anti-recursion protection is triggered when the recursion level exceeds "current recursion limit + 50". By construction, this protection can only be triggered when the "overflowed" flag is set. It means the cleanup code has itself gone into an infinite loop, or the RuntimeError has been mistakingly ignored. When this protection is triggered, the interpreter aborts with a Fatal Error. In addition, the "overflowed" flag is automatically reset when the recursion level drops below "current recursion limit - 50". This heuristic is meant to ensure that the normal anti-recursion protection doesn't get disabled too long. Please note: this scheme has its own limitations. See: http://mail.python.org/pipermail/python-dev/2008-August/082106.html for some observations. */ PyAPI_FUNC(void) Py_SetRecursionLimit(int); PyAPI_FUNC(int) Py_GetRecursionLimit(void); #define Py_EnterRecursiveCall(where) \ (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ _Py_CheckRecursiveCall(where)) #define Py_LeaveRecursiveCall() \ do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \ PyThreadState_GET()->overflowed = 0; \ } while(0) PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where); PyAPI_DATA(int) _Py_CheckRecursionLimit; #ifdef USE_STACKCHECK /* With USE_STACKCHECK, we artificially decrement the recursion limit in order to trigger regular stack checks in _Py_CheckRecursiveCall(), except if the "overflowed" flag is set, in which case we need the true value of _Py_CheckRecursionLimit for _Py_MakeEndRecCheck() to function properly. */ # define _Py_MakeRecCheck(x) \ (++(x) > (_Py_CheckRecursionLimit += PyThreadState_GET()->overflowed - 1)) #else # define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) #endif #define _Py_MakeEndRecCheck(x) \ (--(x) < ((_Py_CheckRecursionLimit > 100) \ ? (_Py_CheckRecursionLimit - 50) \ : (3 * (_Py_CheckRecursionLimit >> 2)))) #define Py_ALLOW_RECURSION \ do { unsigned char _old = PyThreadState_GET()->recursion_critical;\ PyThreadState_GET()->recursion_critical = 1; #define Py_END_ALLOW_RECURSION \ PyThreadState_GET()->recursion_critical = _old; \ } while(0); PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); PyAPI_FUNC(PyObject *) PyEval_GetCallStats(PyObject *); PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *); PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc); /* Interface for threads. A module that plans to do a blocking system call (or something else that lasts a long time and doesn't touch Python data) can allow other threads to run as follows: ...preparations here... Py_BEGIN_ALLOW_THREADS ...blocking system call here... Py_END_ALLOW_THREADS ...interpret result here... The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a {}-surrounded block. To leave the block in the middle (e.g., with return), you must insert a line containing Py_BLOCK_THREADS before the return, e.g. if (...premature_exit...) { Py_BLOCK_THREADS PyErr_SetFromErrno(PyExc_IOError); return NULL; } An alternative is: Py_BLOCK_THREADS if (...premature_exit...) { PyErr_SetFromErrno(PyExc_IOError); return NULL; } Py_UNBLOCK_THREADS For convenience, that the value of 'errno' is restored across Py_END_ALLOW_THREADS and Py_BLOCK_THREADS. WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND Py_END_ALLOW_THREADS!!! The function PyEval_InitThreads() should be called only from init_thread() in "_threadmodule.c". Note that not yet all candidates have been converted to use this mechanism! */ PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); #ifdef WITH_THREAD PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); PyAPI_FUNC(void) PyEval_InitThreads(void); PyAPI_FUNC(void) _PyEval_FiniThreads(void); PyAPI_FUNC(void) PyEval_AcquireLock(void); PyAPI_FUNC(void) PyEval_ReleaseLock(void); PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); PyAPI_FUNC(void) PyEval_ReInitThreads(void); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); #endif #define Py_BEGIN_ALLOW_THREADS { \ PyThreadState *_save; \ _save = PyEval_SaveThread(); #define Py_BLOCK_THREADS PyEval_RestoreThread(_save); #define Py_UNBLOCK_THREADS _save = PyEval_SaveThread(); #define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ } #else /* !WITH_THREAD */ #define Py_BEGIN_ALLOW_THREADS { #define Py_BLOCK_THREADS #define Py_UNBLOCK_THREADS #define Py_END_ALLOW_THREADS } #endif /* !WITH_THREAD */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); PyAPI_FUNC(void) _PyEval_SignalAsyncExc(void); #endif #ifdef __cplusplus } #endif #endif /* !Py_CEVAL_H */ include/python3.4m/longintrepr.h000064400000007635152342604300012640 0ustar00#ifndef Py_LIMITED_API #ifndef Py_LONGINTREPR_H #define Py_LONGINTREPR_H #ifdef __cplusplus extern "C" { #endif /* This is published for the benefit of "friends" marshal.c and _decimal.c. */ /* Parameters of the integer representation. There are two different sets of parameters: one set for 30-bit digits, stored in an unsigned 32-bit integer type, and one set for 15-bit digits with each digit stored in an unsigned short. The value of PYLONG_BITS_IN_DIGIT, defined either at configure time or in pyport.h, is used to decide which digit size to use. Type 'digit' should be able to hold 2*PyLong_BASE-1, and type 'twodigits' should be an unsigned integer type able to hold all integers up to PyLong_BASE*PyLong_BASE-1. x_sub assumes that 'digit' is an unsigned type, and that overflow is handled by taking the result modulo 2**N for some N > PyLong_SHIFT. The majority of the code doesn't care about the precise value of PyLong_SHIFT, but there are some notable exceptions: - long_pow() requires that PyLong_SHIFT be divisible by 5 - PyLong_{As,From}ByteArray require that PyLong_SHIFT be at least 8 - long_hash() requires that PyLong_SHIFT is *strictly* less than the number of bits in an unsigned long, as do the PyLong <-> long (or unsigned long) conversion functions - the Python int <-> size_t/Py_ssize_t conversion functions expect that PyLong_SHIFT is strictly less than the number of bits in a size_t - the marshal code currently expects that PyLong_SHIFT is a multiple of 15 - NSMALLNEGINTS and NSMALLPOSINTS should be small enough to fit in a single digit; with the current values this forces PyLong_SHIFT >= 9 The values 15 and 30 should fit all of the above requirements, on any platform. */ #if PYLONG_BITS_IN_DIGIT == 30 #if !(defined HAVE_UINT64_T && defined HAVE_UINT32_T && \ defined HAVE_INT64_T && defined HAVE_INT32_T) #error "30-bit long digits requested, but the necessary types are not available on this platform" #endif typedef PY_UINT32_T digit; typedef PY_INT32_T sdigit; /* signed variant of digit */ typedef PY_UINT64_T twodigits; typedef PY_INT64_T stwodigits; /* signed variant of twodigits */ #define PyLong_SHIFT 30 #define _PyLong_DECIMAL_SHIFT 9 /* max(e such that 10**e fits in a digit) */ #define _PyLong_DECIMAL_BASE ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */ #elif PYLONG_BITS_IN_DIGIT == 15 typedef unsigned short digit; typedef short sdigit; /* signed variant of digit */ typedef unsigned long twodigits; typedef long stwodigits; /* signed variant of twodigits */ #define PyLong_SHIFT 15 #define _PyLong_DECIMAL_SHIFT 4 /* max(e such that 10**e fits in a digit) */ #define _PyLong_DECIMAL_BASE ((digit)10000) /* 10 ** DECIMAL_SHIFT */ #else #error "PYLONG_BITS_IN_DIGIT should be 15 or 30" #endif #define PyLong_BASE ((digit)1 << PyLong_SHIFT) #define PyLong_MASK ((digit)(PyLong_BASE - 1)) #if PyLong_SHIFT % 5 != 0 #error "longobject.c requires that PyLong_SHIFT be divisible by 5" #endif /* Long integer representation. The absolute value of a number is equal to SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) Negative numbers are represented with ob_size < 0; zero is represented by ob_size == 0. In a normalized number, ob_digit[abs(ob_size)-1] (the most significant digit) is never zero. Also, in all cases, for all valid i, 0 <= ob_digit[i] <= MASK. The allocation function takes care of allocating extra memory so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. CAUTION: Generic code manipulating subtypes of PyVarObject has to aware that ints abuse ob_size's sign bit. */ struct _longobject { PyObject_VAR_HEAD digit ob_digit[1]; }; PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t); /* Return a copy of src. */ PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src); #ifdef __cplusplus } #endif #endif /* !Py_LONGINTREPR_H */ #endif /* Py_LIMITED_API */ include/python3.4m/unicodeobject.h000064400000230465152342604300013111 0ustar00#ifndef Py_UNICODEOBJECT_H #define Py_UNICODEOBJECT_H #include /* Unicode implementation based on original code by Fredrik Lundh, modified by Marc-Andre Lemburg (mal@lemburg.com) according to the Unicode Integration Proposal. (See http://www.egenix.com/files/python/unicode-proposal.txt). Copyright (c) Corporation for National Research Initiatives. Original header: -------------------------------------------------------------------- * Yet another Unicode string type for Python. This type supports the * 16-bit Basic Multilingual Plane (BMP) only. * * Written by Fredrik Lundh, January 1999. * * Copyright (c) 1999 by Secret Labs AB. * Copyright (c) 1999 by Fredrik Lundh. * * fredrik@pythonware.com * http://www.pythonware.com * * -------------------------------------------------------------------- * This Unicode String Type is * * Copyright (c) 1999 by Secret Labs AB * Copyright (c) 1999 by Fredrik Lundh * * By obtaining, using, and/or copying this software and/or its * associated documentation, you agree that you have read, understood, * and will comply with the following terms and conditions: * * Permission to use, copy, modify, and distribute this software and its * associated documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice appears in all * copies, and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of Secret Labs * AB or the author not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior * permission. * * SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * -------------------------------------------------------------------- */ #include /* === Internal API ======================================================= */ /* --- Internal Unicode Format -------------------------------------------- */ /* Python 3.x requires unicode */ #define Py_USING_UNICODE #ifndef SIZEOF_WCHAR_T #error Must define SIZEOF_WCHAR_T #endif #define Py_UNICODE_SIZE SIZEOF_WCHAR_T /* If wchar_t can be used for UCS-4 storage, set Py_UNICODE_WIDE. Otherwise, Unicode strings are stored as UCS-2 (with limited support for UTF-16) */ #if Py_UNICODE_SIZE >= 4 #define Py_UNICODE_WIDE #endif /* Set these flags if the platform has "wchar.h" and the wchar_t type is a 16-bit unsigned type */ /* #define HAVE_WCHAR_H */ /* #define HAVE_USABLE_WCHAR_T */ /* Py_UNICODE was the native Unicode storage format (code unit) used by Python and represents a single Unicode element in the Unicode type. With PEP 393, Py_UNICODE is deprecated and replaced with a typedef to wchar_t. */ #ifndef Py_LIMITED_API #define PY_UNICODE_TYPE wchar_t typedef wchar_t Py_UNICODE; #endif /* If the compiler provides a wchar_t type we try to support it through the interface functions PyUnicode_FromWideChar(), PyUnicode_AsWideChar() and PyUnicode_AsWideCharString(). */ #ifdef HAVE_USABLE_WCHAR_T # ifndef HAVE_WCHAR_H # define HAVE_WCHAR_H # endif #endif #if defined(MS_WINDOWS) # define HAVE_MBCS #endif #ifdef HAVE_WCHAR_H /* Work around a cosmetic bug in BSDI 4.x wchar.h; thanks to Thomas Wouters */ # ifdef _HAVE_BSDI # include # endif # include #endif /* Py_UCS4 and Py_UCS2 are typedefs for the respective unicode representations. */ #if SIZEOF_INT == 4 typedef unsigned int Py_UCS4; #elif SIZEOF_LONG == 4 typedef unsigned long Py_UCS4; #else #error "Could not find a proper typedef for Py_UCS4" #endif #if SIZEOF_SHORT == 2 typedef unsigned short Py_UCS2; #else #error "Could not find a proper typedef for Py_UCS2" #endif typedef unsigned char Py_UCS1; /* --- Internal Unicode Operations ---------------------------------------- */ /* Since splitting on whitespace is an important use case, and whitespace in most situations is solely ASCII whitespace, we optimize for the common case by using a quick look-up table _Py_ascii_whitespace (see below) with an inlined check. */ #ifndef Py_LIMITED_API #define Py_UNICODE_ISSPACE(ch) \ ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) #define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) #define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) #define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch) #define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch) #define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch) #define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch) #define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch) #define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch) #define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch) #define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch) #define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch) #define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch) #define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch) #define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch) #define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch) #define Py_UNICODE_ISALNUM(ch) \ (Py_UNICODE_ISALPHA(ch) || \ Py_UNICODE_ISDECIMAL(ch) || \ Py_UNICODE_ISDIGIT(ch) || \ Py_UNICODE_ISNUMERIC(ch)) #define Py_UNICODE_COPY(target, source, length) \ Py_MEMCPY((target), (source), (length)*sizeof(Py_UNICODE)) #define Py_UNICODE_FILL(target, value, length) \ do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ } while (0) /* macros to work with surrogates */ #define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF) #define Py_UNICODE_IS_HIGH_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDBFF) #define Py_UNICODE_IS_LOW_SURROGATE(ch) (0xDC00 <= (ch) && (ch) <= 0xDFFF) /* Join two surrogate characters and return a single Py_UCS4 value. */ #define Py_UNICODE_JOIN_SURROGATES(high, low) \ (((((Py_UCS4)(high) & 0x03FF) << 10) | \ ((Py_UCS4)(low) & 0x03FF)) + 0x10000) /* high surrogate = top 10 bits added to D800 */ #define Py_UNICODE_HIGH_SURROGATE(ch) (0xD800 - (0x10000 >> 10) + ((ch) >> 10)) /* low surrogate = bottom 10 bits added to DC00 */ #define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF)) /* Check if substring matches at given offset. The offset must be valid, and the substring must not be empty. */ #define Py_UNICODE_MATCH(string, offset, substring) \ ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \ ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \ !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE))) #endif /* Py_LIMITED_API */ #ifdef __cplusplus extern "C" { #endif /* --- Unicode Type ------------------------------------------------------- */ #ifndef Py_LIMITED_API /* ASCII-only strings created through PyUnicode_New use the PyASCIIObject structure. state.ascii and state.compact are set, and the data immediately follow the structure. utf8_length and wstr_length can be found in the length field; the utf8 pointer is equal to the data pointer. */ typedef struct { /* There are 4 forms of Unicode strings: - compact ascii: * structure = PyASCIIObject * test: PyUnicode_IS_COMPACT_ASCII(op) * kind = PyUnicode_1BYTE_KIND * compact = 1 * ascii = 1 * ready = 1 * (length is the length of the utf8 and wstr strings) * (data starts just after the structure) * (since ASCII is decoded from UTF-8, the utf8 string are the data) - compact: * structure = PyCompactUnicodeObject * test: PyUnicode_IS_COMPACT(op) && !PyUnicode_IS_ASCII(op) * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or PyUnicode_4BYTE_KIND * compact = 1 * ready = 1 * ascii = 0 * utf8 is not shared with data * utf8_length = 0 if utf8 is NULL * wstr is shared with data and wstr_length=length if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2 or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_t)=4 * wstr_length = 0 if wstr is NULL * (data starts just after the structure) - legacy string, not ready: * structure = PyUnicodeObject * test: kind == PyUnicode_WCHAR_KIND * length = 0 (use wstr_length) * hash = -1 * kind = PyUnicode_WCHAR_KIND * compact = 0 * ascii = 0 * ready = 0 * interned = SSTATE_NOT_INTERNED * wstr is not NULL * data.any is NULL * utf8 is NULL * utf8_length = 0 - legacy string, ready: * structure = PyUnicodeObject structure * test: !PyUnicode_IS_COMPACT(op) && kind != PyUnicode_WCHAR_KIND * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or PyUnicode_4BYTE_KIND * compact = 0 * ready = 1 * data.any is not NULL * utf8 is shared and utf8_length = length with data.any if ascii = 1 * utf8_length = 0 if utf8 is NULL * wstr is shared with data.any and wstr_length = length if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2 or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_4)=4 * wstr_length = 0 if wstr is NULL Compact strings use only one memory block (structure + characters), whereas legacy strings use one block for the structure and one block for characters. Legacy strings are created by PyUnicode_FromUnicode() and PyUnicode_FromStringAndSize(NULL, size) functions. They become ready when PyUnicode_READY() is called. See also _PyUnicode_CheckConsistency(). */ PyObject_HEAD Py_ssize_t length; /* Number of code points in the string */ Py_hash_t hash; /* Hash value; -1 if not set */ struct { /* SSTATE_NOT_INTERNED (0) SSTATE_INTERNED_MORTAL (1) SSTATE_INTERNED_IMMORTAL (2) If interned != SSTATE_NOT_INTERNED, the two references from the dictionary to this object are *not* counted in ob_refcnt. */ unsigned int interned:2; /* Character size: - PyUnicode_WCHAR_KIND (0): * character type = wchar_t (16 or 32 bits, depending on the platform) - PyUnicode_1BYTE_KIND (1): * character type = Py_UCS1 (8 bits, unsigned) * all characters are in the range U+0000-U+00FF (latin1) * if ascii is set, all characters are in the range U+0000-U+007F (ASCII), otherwise at least one character is in the range U+0080-U+00FF - PyUnicode_2BYTE_KIND (2): * character type = Py_UCS2 (16 bits, unsigned) * all characters are in the range U+0000-U+FFFF (BMP) * at least one character is in the range U+0100-U+FFFF - PyUnicode_4BYTE_KIND (4): * character type = Py_UCS4 (32 bits, unsigned) * all characters are in the range U+0000-U+10FFFF * at least one character is in the range U+10000-U+10FFFF */ unsigned int kind:3; /* Compact is with respect to the allocation scheme. Compact unicode objects only require one memory block while non-compact objects use one block for the PyUnicodeObject struct and another for its data buffer. */ unsigned int compact:1; /* The string only contains characters in the range U+0000-U+007F (ASCII) and the kind is PyUnicode_1BYTE_KIND. If ascii is set and compact is set, use the PyASCIIObject structure. */ unsigned int ascii:1; /* The ready flag indicates whether the object layout is initialized completely. This means that this is either a compact object, or the data pointer is filled out. The bit is redundant, and helps to minimize the test in PyUnicode_IS_READY(). */ unsigned int ready:1; /* Padding to ensure that PyUnicode_DATA() is always aligned to 4 bytes (see issue #19537 on m68k). */ unsigned int :24; } state; wchar_t *wstr; /* wchar_t representation (null-terminated) */ } PyASCIIObject; /* Non-ASCII strings allocated through PyUnicode_New use the PyCompactUnicodeObject structure. state.compact is set, and the data immediately follow the structure. */ typedef struct { PyASCIIObject _base; Py_ssize_t utf8_length; /* Number of bytes in utf8, excluding the * terminating \0. */ char *utf8; /* UTF-8 representation (null-terminated) */ Py_ssize_t wstr_length; /* Number of code points in wstr, possible * surrogates count as two code points. */ } PyCompactUnicodeObject; /* Strings allocated through PyUnicode_FromUnicode(NULL, len) use the PyUnicodeObject structure. The actual string data is initially in the wstr block, and copied into the data block using _PyUnicode_Ready. */ typedef struct { PyCompactUnicodeObject _base; union { void *any; Py_UCS1 *latin1; Py_UCS2 *ucs2; Py_UCS4 *ucs4; } data; /* Canonical, smallest-form Unicode buffer */ } PyUnicodeObject; #endif PyAPI_DATA(PyTypeObject) PyUnicode_Type; PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type; #define PyUnicode_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS) #define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type) /* Fast access macros */ #ifndef Py_LIMITED_API #define PyUnicode_WSTR_LENGTH(op) \ (PyUnicode_IS_COMPACT_ASCII(op) ? \ ((PyASCIIObject*)op)->length : \ ((PyCompactUnicodeObject*)op)->wstr_length) /* Returns the deprecated Py_UNICODE representation's size in code units (this includes surrogate pairs as 2 units). If the Py_UNICODE representation is not available, it will be computed on request. Use PyUnicode_GET_LENGTH() for the length in code points. */ #define PyUnicode_GET_SIZE(op) \ (assert(PyUnicode_Check(op)), \ (((PyASCIIObject *)(op))->wstr) ? \ PyUnicode_WSTR_LENGTH(op) : \ ((void)PyUnicode_AsUnicode((PyObject *)(op)), \ assert(((PyASCIIObject *)(op))->wstr), \ PyUnicode_WSTR_LENGTH(op))) #define PyUnicode_GET_DATA_SIZE(op) \ (PyUnicode_GET_SIZE(op) * Py_UNICODE_SIZE) /* Alias for PyUnicode_AsUnicode(). This will create a wchar_t/Py_UNICODE representation on demand. Using this macro is very inefficient now, try to port your code to use the new PyUnicode_*BYTE_DATA() macros or use PyUnicode_WRITE() and PyUnicode_READ(). */ #define PyUnicode_AS_UNICODE(op) \ (assert(PyUnicode_Check(op)), \ (((PyASCIIObject *)(op))->wstr) ? (((PyASCIIObject *)(op))->wstr) : \ PyUnicode_AsUnicode((PyObject *)(op))) #define PyUnicode_AS_DATA(op) \ ((const char *)(PyUnicode_AS_UNICODE(op))) /* --- Flexible String Representation Helper Macros (PEP 393) -------------- */ /* Values for PyASCIIObject.state: */ /* Interning state. */ #define SSTATE_NOT_INTERNED 0 #define SSTATE_INTERNED_MORTAL 1 #define SSTATE_INTERNED_IMMORTAL 2 /* Return true if the string contains only ASCII characters, or 0 if not. The string may be compact (PyUnicode_IS_COMPACT_ASCII) or not, but must be ready. */ #define PyUnicode_IS_ASCII(op) \ (assert(PyUnicode_Check(op)), \ assert(PyUnicode_IS_READY(op)), \ ((PyASCIIObject*)op)->state.ascii) /* Return true if the string is compact or 0 if not. No type checks or Ready calls are performed. */ #define PyUnicode_IS_COMPACT(op) \ (((PyASCIIObject*)(op))->state.compact) /* Return true if the string is a compact ASCII string (use PyASCIIObject structure), or 0 if not. No type checks or Ready calls are performed. */ #define PyUnicode_IS_COMPACT_ASCII(op) \ (((PyASCIIObject*)op)->state.ascii && PyUnicode_IS_COMPACT(op)) enum PyUnicode_Kind { /* String contains only wstr byte characters. This is only possible when the string was created with a legacy API and _PyUnicode_Ready() has not been called yet. */ PyUnicode_WCHAR_KIND = 0, /* Return values of the PyUnicode_KIND() macro: */ PyUnicode_1BYTE_KIND = 1, PyUnicode_2BYTE_KIND = 2, PyUnicode_4BYTE_KIND = 4 }; /* Return pointers to the canonical representation cast to unsigned char, Py_UCS2, or Py_UCS4 for direct character access. No checks are performed, use PyUnicode_KIND() before to ensure these will work correctly. */ #define PyUnicode_1BYTE_DATA(op) ((Py_UCS1*)PyUnicode_DATA(op)) #define PyUnicode_2BYTE_DATA(op) ((Py_UCS2*)PyUnicode_DATA(op)) #define PyUnicode_4BYTE_DATA(op) ((Py_UCS4*)PyUnicode_DATA(op)) /* Return one of the PyUnicode_*_KIND values defined above. */ #define PyUnicode_KIND(op) \ (assert(PyUnicode_Check(op)), \ assert(PyUnicode_IS_READY(op)), \ ((PyASCIIObject *)(op))->state.kind) /* Return a void pointer to the raw unicode buffer. */ #define _PyUnicode_COMPACT_DATA(op) \ (PyUnicode_IS_ASCII(op) ? \ ((void*)((PyASCIIObject*)(op) + 1)) : \ ((void*)((PyCompactUnicodeObject*)(op) + 1))) #define _PyUnicode_NONCOMPACT_DATA(op) \ (assert(((PyUnicodeObject*)(op))->data.any), \ ((((PyUnicodeObject *)(op))->data.any))) #define PyUnicode_DATA(op) \ (assert(PyUnicode_Check(op)), \ PyUnicode_IS_COMPACT(op) ? _PyUnicode_COMPACT_DATA(op) : \ _PyUnicode_NONCOMPACT_DATA(op)) /* In the access macros below, "kind" may be evaluated more than once. All other macro parameters are evaluated exactly once, so it is safe to put side effects into them (such as increasing the index). */ /* Write into the canonical representation, this macro does not do any sanity checks and is intended for usage in loops. The caller should cache the kind and data pointers obtained from other macro calls. index is the index in the string (starts at 0) and value is the new code point value which should be written to that location. */ #define PyUnicode_WRITE(kind, data, index, value) \ do { \ switch ((kind)) { \ case PyUnicode_1BYTE_KIND: { \ ((Py_UCS1 *)(data))[(index)] = (Py_UCS1)(value); \ break; \ } \ case PyUnicode_2BYTE_KIND: { \ ((Py_UCS2 *)(data))[(index)] = (Py_UCS2)(value); \ break; \ } \ default: { \ assert((kind) == PyUnicode_4BYTE_KIND); \ ((Py_UCS4 *)(data))[(index)] = (Py_UCS4)(value); \ } \ } \ } while (0) /* Read a code point from the string's canonical representation. No checks or ready calls are performed. */ #define PyUnicode_READ(kind, data, index) \ ((Py_UCS4) \ ((kind) == PyUnicode_1BYTE_KIND ? \ ((const Py_UCS1 *)(data))[(index)] : \ ((kind) == PyUnicode_2BYTE_KIND ? \ ((const Py_UCS2 *)(data))[(index)] : \ ((const Py_UCS4 *)(data))[(index)] \ ) \ )) /* PyUnicode_READ_CHAR() is less efficient than PyUnicode_READ() because it calls PyUnicode_KIND() and might call it twice. For single reads, use PyUnicode_READ_CHAR, for multiple consecutive reads callers should cache kind and use PyUnicode_READ instead. */ #define PyUnicode_READ_CHAR(unicode, index) \ (assert(PyUnicode_Check(unicode)), \ assert(PyUnicode_IS_READY(unicode)), \ (Py_UCS4) \ (PyUnicode_KIND((unicode)) == PyUnicode_1BYTE_KIND ? \ ((const Py_UCS1 *)(PyUnicode_DATA((unicode))))[(index)] : \ (PyUnicode_KIND((unicode)) == PyUnicode_2BYTE_KIND ? \ ((const Py_UCS2 *)(PyUnicode_DATA((unicode))))[(index)] : \ ((const Py_UCS4 *)(PyUnicode_DATA((unicode))))[(index)] \ ) \ )) /* Returns the length of the unicode string. The caller has to make sure that the string has it's canonical representation set before calling this macro. Call PyUnicode_(FAST_)Ready to ensure that. */ #define PyUnicode_GET_LENGTH(op) \ (assert(PyUnicode_Check(op)), \ assert(PyUnicode_IS_READY(op)), \ ((PyASCIIObject *)(op))->length) /* Fast check to determine whether an object is ready. Equivalent to PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any) */ #define PyUnicode_IS_READY(op) (((PyASCIIObject*)op)->state.ready) /* PyUnicode_READY() does less work than _PyUnicode_Ready() in the best case. If the canonical representation is not yet set, it will still call _PyUnicode_Ready(). Returns 0 on success and -1 on errors. */ #define PyUnicode_READY(op) \ (assert(PyUnicode_Check(op)), \ (PyUnicode_IS_READY(op) ? \ 0 : _PyUnicode_Ready((PyObject *)(op)))) /* Return a maximum character value which is suitable for creating another string based on op. This is always an approximation but more efficient than iterating over the string. */ #define PyUnicode_MAX_CHAR_VALUE(op) \ (assert(PyUnicode_IS_READY(op)), \ (PyUnicode_IS_ASCII(op) ? \ (0x7f) : \ (PyUnicode_KIND(op) == PyUnicode_1BYTE_KIND ? \ (0xffU) : \ (PyUnicode_KIND(op) == PyUnicode_2BYTE_KIND ? \ (0xffffU) : \ (0x10ffffU))))) #endif /* --- Constants ---------------------------------------------------------- */ /* This Unicode character will be used as replacement character during decoding if the errors argument is set to "replace". Note: the Unicode character U+FFFD is the official REPLACEMENT CHARACTER in Unicode 3.0. */ #define Py_UNICODE_REPLACEMENT_CHARACTER ((Py_UCS4) 0xFFFD) /* === Public API ========================================================= */ /* --- Plain Py_UNICODE --------------------------------------------------- */ /* With PEP 393, this is the recommended way to allocate a new unicode object. This function will allocate the object and its buffer in a single memory block. Objects created using this function are not resizable. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_New( Py_ssize_t size, /* Number of code points in the new string */ Py_UCS4 maxchar /* maximum code point value in the string */ ); #endif /* Initializes the canonical string representation from the deprecated wstr/Py_UNICODE representation. This function is used to convert Unicode objects which were created using the old API to the new flexible format introduced with PEP 393. Don't call this function directly, use the public PyUnicode_READY() macro instead. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyUnicode_Ready( PyObject *unicode /* Unicode object */ ); #endif /* Get a copy of a Unicode string. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyUnicode_Copy( PyObject *unicode ); #endif /* Copy character from one unicode object into another, this function performs character conversion when necessary and falls back to memcpy() if possible. Fail if to is too small (smaller than *how_many* or smaller than len(from)-from_start), or if kind(from[from_start:from_start+how_many]) > kind(to), or if *to* has more than 1 reference. Return the number of written character, or return -1 and raise an exception on error. Pseudo-code: how_many = min(how_many, len(from) - from_start) to[to_start:to_start+how_many] = from[from_start:from_start+how_many] return how_many Note: The function doesn't write a terminating null character. */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) PyUnicode_CopyCharacters( PyObject *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many ); /* Unsafe version of PyUnicode_CopyCharacters(): don't check arguments and so may crash if parameters are invalid (e.g. if the output string is too short). */ PyAPI_FUNC(void) _PyUnicode_FastCopyCharacters( PyObject *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many ); #endif #ifndef Py_LIMITED_API /* Fill a string with a character: write fill_char into unicode[start:start+length]. Fail if fill_char is bigger than the string maximum character, or if the string has more than 1 reference. Return the number of written character, or return -1 and raise an exception on error. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_Fill( PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char ); /* Unsafe version of PyUnicode_Fill(): don't check arguments and so may crash if parameters are invalid (e.g. if length is longer than the string). */ PyAPI_FUNC(void) _PyUnicode_FastFill( PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char ); #endif /* Create a Unicode Object from the Py_UNICODE buffer u of the given size. u may be NULL which causes the contents to be undefined. It is the user's responsibility to fill in the needed data afterwards. Note that modifying the Unicode object contents after construction is only allowed if u was set to NULL. The buffer is copied into the new object. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( const Py_UNICODE *u, /* Unicode buffer */ Py_ssize_t size /* size of buffer */ ); #endif /* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */ PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize( const char *u, /* UTF-8 encoded string */ Py_ssize_t size /* size of buffer */ ); /* Similar to PyUnicode_FromUnicode(), but u points to null-terminated UTF-8 encoded bytes. The size is determined with strlen(). */ PyAPI_FUNC(PyObject*) PyUnicode_FromString( const char *u /* UTF-8 encoded string */ ); #ifndef Py_LIMITED_API /* Create a new string from a buffer of Py_UCS1, Py_UCS2 or Py_UCS4 characters. Scan the string to find the maximum character. */ PyAPI_FUNC(PyObject*) PyUnicode_FromKindAndData( int kind, const void *buffer, Py_ssize_t size); /* Create a new string from a buffer of ASCII characters. WARNING: Don't check if the string contains any non-ASCII character. */ PyAPI_FUNC(PyObject*) _PyUnicode_FromASCII( const char *buffer, Py_ssize_t size); #endif PyAPI_FUNC(PyObject*) PyUnicode_Substring( PyObject *str, Py_ssize_t start, Py_ssize_t end); #ifndef Py_LIMITED_API /* Compute the maximum character of the substring unicode[start:end]. Return 127 for an empty string. */ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar ( PyObject *unicode, Py_ssize_t start, Py_ssize_t end); #endif /* Copy the string into a UCS4 buffer including the null character if copy_null is set. Return NULL and raise an exception on error. Raise a ValueError if the buffer is smaller than the string. Return buffer on success. buflen is the length of the buffer in (Py_UCS4) characters. */ PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4( PyObject *unicode, Py_UCS4* buffer, Py_ssize_t buflen, int copy_null); /* Copy the string into a UCS4 buffer. A new buffer is allocated using * PyMem_Malloc; if this fails, NULL is returned with a memory error exception set. */ PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4Copy(PyObject *unicode); /* Return a read-only pointer to the Unicode object's internal Py_UNICODE buffer. If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( PyObject *unicode /* Unicode object */ ); #endif /* Return a read-only pointer to the Unicode object's internal Py_UNICODE buffer and save the length at size. If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( PyObject *unicode, /* Unicode object */ Py_ssize_t *size /* location where to save the length */ ); #endif /* Get the length of the Unicode object. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength( PyObject *unicode ); /* Get the number of Py_UNICODE units in the string representation. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize( PyObject *unicode /* Unicode object */ ); /* Read a character from the string. */ PyAPI_FUNC(Py_UCS4) PyUnicode_ReadChar( PyObject *unicode, Py_ssize_t index ); /* Write a character to the string. The string must have been created through PyUnicode_New, must not be shared, and must not have been hashed yet. Return 0 on success, -1 on error. */ PyAPI_FUNC(int) PyUnicode_WriteChar( PyObject *unicode, Py_ssize_t index, Py_UCS4 character ); #ifndef Py_LIMITED_API /* Get the maximum ordinal for a Unicode character. */ PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void); #endif /* Resize an Unicode object. The length is the number of characters, except if the kind of the string is PyUnicode_WCHAR_KIND: in this case, the length is the number of Py_UNICODE characters. *unicode is modified to point to the new (resized) object and 0 returned on success. Try to resize the string in place (which is usually faster than allocating a new string and copy characters), or create a new string. Error handling is implemented as follows: an exception is set, -1 is returned and *unicode left untouched. WARNING: The function doesn't check string content, the result may not be a string in canonical representation. */ PyAPI_FUNC(int) PyUnicode_Resize( PyObject **unicode, /* Pointer to the Unicode object */ Py_ssize_t length /* New length */ ); /* Coerce obj to an Unicode object and return a reference with *incremented* refcount. Coercion is done in the following way: 1. bytes, bytearray and other bytes-like objects are decoded under the assumptions that they contain data using the UTF-8 encoding. Decoding is done in "strict" mode. 2. All other objects (including Unicode objects) raise an exception. The API returns NULL in case of an error. The caller is responsible for decref'ing the returned objects. */ PyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject( PyObject *obj, /* Object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Coerce obj to an Unicode object and return a reference with *incremented* refcount. Unicode objects are passed back as-is (subclasses are converted to true Unicode objects), all other objects are delegated to PyUnicode_FromEncodedObject(obj, NULL, "strict") which results in using UTF-8 encoding as basis for decoding the object. The API returns NULL in case of an error. The caller is responsible for decref'ing the returned objects. */ PyAPI_FUNC(PyObject*) PyUnicode_FromObject( PyObject *obj /* Object */ ); PyAPI_FUNC(PyObject *) PyUnicode_FromFormatV( const char *format, /* ASCII-encoded string */ va_list vargs ); PyAPI_FUNC(PyObject *) PyUnicode_FromFormat( const char *format, /* ASCII-encoded string */ ... ); #ifndef Py_LIMITED_API typedef struct { PyObject *buffer; void *data; enum PyUnicode_Kind kind; Py_UCS4 maxchar; Py_ssize_t size; Py_ssize_t pos; /* minimum number of allocated characters (default: 0) */ Py_ssize_t min_length; /* minimum character (default: 127, ASCII) */ Py_UCS4 min_char; /* If non-zero, overallocate the buffer by 25% (default: 0). */ unsigned char overallocate; /* If readonly is 1, buffer is a shared string (cannot be modified) and size is set to 0. */ unsigned char readonly; } _PyUnicodeWriter ; /* Initialize a Unicode writer. * * By default, the minimum buffer size is 0 character and overallocation is * disabled. Set min_length, min_char and overallocate attributes to control * the allocation of the buffer. */ PyAPI_FUNC(void) _PyUnicodeWriter_Init(_PyUnicodeWriter *writer); /* Prepare the buffer to write 'length' characters with the specified maximum character. Return 0 on success, raise an exception and return -1 on error. */ #define _PyUnicodeWriter_Prepare(WRITER, LENGTH, MAXCHAR) \ (((MAXCHAR) <= (WRITER)->maxchar \ && (LENGTH) <= (WRITER)->size - (WRITER)->pos) \ ? 0 \ : (((LENGTH) == 0) \ ? 0 \ : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR)))) /* Don't call this function directly, use the _PyUnicodeWriter_Prepare() macro instead. */ PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer, Py_ssize_t length, Py_UCS4 maxchar); /* Append a Unicode character. Return 0 on success, raise an exception and return -1 on error. */ PyAPI_FUNC(int) _PyUnicodeWriter_WriteChar(_PyUnicodeWriter *writer, Py_UCS4 ch ); /* Append a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ PyAPI_FUNC(int) _PyUnicodeWriter_WriteStr(_PyUnicodeWriter *writer, PyObject *str /* Unicode string */ ); /* Append a substring of a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring(_PyUnicodeWriter *writer, PyObject *str, /* Unicode string */ Py_ssize_t start, Py_ssize_t end ); /* Append an ASCII-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ PyAPI_FUNC(int) _PyUnicodeWriter_WriteASCIIString(_PyUnicodeWriter *writer, const char *str, /* ASCII-encoded byte string */ Py_ssize_t len /* number of bytes, or -1 if unknown */ ); /* Append a latin1-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String(_PyUnicodeWriter *writer, const char *str, /* latin1-encoded byte string */ Py_ssize_t len /* length in bytes */ ); /* Get the value of the writer as an Unicode string. Clear the buffer of the writer. Raise an exception and return NULL on error. */ PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish(_PyUnicodeWriter *writer); /* Deallocate memory of a writer (clear its internal buffer). */ PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc(_PyUnicodeWriter *writer); #endif #ifndef Py_LIMITED_API /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ PyAPI_FUNC(int) _PyUnicode_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); #endif PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **); PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **); PyAPI_FUNC(PyObject *) PyUnicode_InternFromString( const char *u /* UTF-8 encoded string */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _Py_ReleaseInternedUnicodeStrings(void); #endif /* Use only if you know it's a string */ #define PyUnicode_CHECK_INTERNED(op) \ (((PyASCIIObject *)(op))->state.interned) /* --- wchar_t support for platforms which support it --------------------- */ #ifdef HAVE_WCHAR_H /* Create a Unicode Object from the wchar_t buffer w of the given size. The buffer is copied into the new object. */ PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar( const wchar_t *w, /* wchar_t buffer */ Py_ssize_t size /* size of buffer */ ); /* Copies the Unicode Object contents into the wchar_t buffer w. At most size wchar_t characters are copied. Note that the resulting wchar_t string may or may not be 0-terminated. It is the responsibility of the caller to make sure that the wchar_t string is 0-terminated in case this is required by the application. Returns the number of wchar_t characters copied (excluding a possibly trailing 0-termination character) or -1 in case of an error. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar( PyObject *unicode, /* Unicode object */ wchar_t *w, /* wchar_t buffer */ Py_ssize_t size /* size of buffer */ ); /* Convert the Unicode object to a wide character string. The output string always ends with a nul character. If size is not NULL, write the number of wide characters (excluding the null character) into *size. Returns a buffer allocated by PyMem_Malloc() (use PyMem_Free() to free it) on success. On error, returns NULL, *size is undefined and raises a MemoryError. */ PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( PyObject *unicode, /* Unicode object */ Py_ssize_t *size /* number of characters of the result */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); #endif #endif /* --- Unicode ordinals --------------------------------------------------- */ /* Create a Unicode Object from the given Unicode code point ordinal. The ordinal must be in range(0x110000). A ValueError is raised in case it is not. */ PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); /* --- Free-list management ----------------------------------------------- */ /* Clear the free list used by the Unicode implementation. This can be used to release memory used for objects on the free list back to the Python memory allocator. */ PyAPI_FUNC(int) PyUnicode_ClearFreeList(void); /* === Builtin Codecs ===================================================== Many of these APIs take two arguments encoding and errors. These parameters encoding and errors have the same semantics as the ones of the builtin str() API. Setting encoding to NULL causes the default encoding (UTF-8) to be used. Error handling is set by errors which may also be set to NULL meaning to use the default handling defined for the codec. Default error handling for all builtin codecs is "strict" (ValueErrors are raised). The codecs all use a similar interface. Only deviation from the generic ones are documented. */ /* --- Manage the default encoding ---------------------------------------- */ /* Returns a pointer to the default encoding (UTF-8) of the Unicode object unicode and the size of the encoded representation in bytes stored in *size. In case of an error, no *size is set. This function caches the UTF-8 encoded string in the unicodeobject and subsequent calls will return the same string. The memory is released when the unicodeobject is deallocated. _PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to support the previous internal function with the same behaviour. *** This API is for interpreter INTERNAL USE ONLY and will likely *** be removed or changed in the future. *** If you need to access the Unicode object as UTF-8 bytes string, *** please use PyUnicode_AsUTF8String() instead. */ #ifndef Py_LIMITED_API PyAPI_FUNC(char *) PyUnicode_AsUTF8AndSize( PyObject *unicode, Py_ssize_t *size); #define _PyUnicode_AsStringAndSize PyUnicode_AsUTF8AndSize #endif /* Returns a pointer to the default encoding (UTF-8) of the Unicode object unicode. Like PyUnicode_AsUTF8AndSize(), this also caches the UTF-8 representation in the unicodeobject. _PyUnicode_AsString is a #define for PyUnicode_AsUTF8 to support the previous internal function with the same behaviour. Use of this API is DEPRECATED since no size information can be extracted from the returned data. *** This API is for interpreter INTERNAL USE ONLY and will likely *** be removed or changed for Python 3.1. *** If you need to access the Unicode object as UTF-8 bytes string, *** please use PyUnicode_AsUTF8String() instead. */ #ifndef Py_LIMITED_API PyAPI_FUNC(char *) PyUnicode_AsUTF8(PyObject *unicode); #define _PyUnicode_AsString PyUnicode_AsUTF8 #endif /* Returns "utf-8". */ PyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void); /* --- Generic Codecs ----------------------------------------------------- */ /* Create a Unicode object by decoding the encoded string s of the given size. */ PyAPI_FUNC(PyObject*) PyUnicode_Decode( const char *s, /* encoded string */ Py_ssize_t size, /* size of buffer */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Decode a Unicode object unicode and return the result as Python object. */ PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject( PyObject *unicode, /* Unicode object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Decode a Unicode object unicode and return the result as Unicode object. */ PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode( PyObject *unicode, /* Unicode object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Encodes a Py_UNICODE buffer of the given size and returns a Python string object. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_Encode( const Py_UNICODE *s, /* Unicode char buffer */ Py_ssize_t size, /* number of Py_UNICODE chars to encode */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); #endif /* Encodes a Unicode object and returns the result as Python object. */ PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject( PyObject *unicode, /* Unicode object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Encodes a Unicode object and returns the result as Python string object. */ PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString( PyObject *unicode, /* Unicode object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Encodes a Unicode object and returns the result as Unicode object. */ PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedUnicode( PyObject *unicode, /* Unicode object */ const char *encoding, /* encoding */ const char *errors /* error handling */ ); /* Build an encoding map. */ PyAPI_FUNC(PyObject*) PyUnicode_BuildEncodingMap( PyObject* string /* 256 character map */ ); /* --- UTF-7 Codecs ------------------------------------------------------- */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7( const char *string, /* UTF-7 encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful( const char *string, /* UTF-7 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ Py_ssize_t *consumed /* bytes consumed */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* number of Py_UNICODE chars to encode */ int base64SetO, /* Encode RFC2152 Set O characters in base64 */ int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF7( PyObject *unicode, /* Unicode object */ int base64SetO, /* Encode RFC2152 Set O characters in base64 */ int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ const char *errors /* error handling */ ); #endif /* --- UTF-8 Codecs ------------------------------------------------------- */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8( const char *string, /* UTF-8 encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful( const char *string, /* UTF-8 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ Py_ssize_t *consumed /* bytes consumed */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String( PyObject *unicode, const char *errors); PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* number of Py_UNICODE chars to encode */ const char *errors /* error handling */ ); #endif /* --- UTF-32 Codecs ------------------------------------------------------ */ /* Decodes length bytes from a UTF-32 encoded buffer string and returns the corresponding Unicode object. errors (if non-NULL) defines the error handling. It defaults to "strict". If byteorder is non-NULL, the decoder starts decoding using the given byte order: *byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian In native mode, the first four bytes of the stream are checked for a BOM mark. If found, the BOM mark is analysed, the byte order adjusted and the BOM skipped. In the other modes, no BOM mark interpretation is done. After completion, *byteorder is set to the current byte order at the end of input data. If byteorder is NULL, the codec starts in native order mode. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32( const char *string, /* UTF-32 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ int *byteorder /* pointer to byteorder to use 0=native;-1=LE,1=BE; updated on exit */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32Stateful( const char *string, /* UTF-32 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ int *byteorder, /* pointer to byteorder to use 0=native;-1=LE,1=BE; updated on exit */ Py_ssize_t *consumed /* bytes consumed */ ); /* Returns a Python string using the UTF-32 encoding in native byte order. The string always starts with a BOM mark. */ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF32String( PyObject *unicode /* Unicode object */ ); /* Returns a Python string object holding the UTF-32 encoded value of the Unicode data. If byteorder is not 0, output is written according to the following byte order: byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian If byteorder is 0, the output string will always start with the Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is prepended. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF32( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* number of Py_UNICODE chars to encode */ const char *errors, /* error handling */ int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ ); PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( PyObject *object, /* Unicode object */ const char *errors, /* error handling */ int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ ); #endif /* --- UTF-16 Codecs ------------------------------------------------------ */ /* Decodes length bytes from a UTF-16 encoded buffer string and returns the corresponding Unicode object. errors (if non-NULL) defines the error handling. It defaults to "strict". If byteorder is non-NULL, the decoder starts decoding using the given byte order: *byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian In native mode, the first two bytes of the stream are checked for a BOM mark. If found, the BOM mark is analysed, the byte order adjusted and the BOM skipped. In the other modes, no BOM mark interpretation is done. After completion, *byteorder is set to the current byte order at the end of input data. If byteorder is NULL, the codec starts in native order mode. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16( const char *string, /* UTF-16 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ int *byteorder /* pointer to byteorder to use 0=native;-1=LE,1=BE; updated on exit */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful( const char *string, /* UTF-16 encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ int *byteorder, /* pointer to byteorder to use 0=native;-1=LE,1=BE; updated on exit */ Py_ssize_t *consumed /* bytes consumed */ ); /* Returns a Python string using the UTF-16 encoding in native byte order. The string always starts with a BOM mark. */ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String( PyObject *unicode /* Unicode object */ ); /* Returns a Python string object holding the UTF-16 encoded value of the Unicode data. If byteorder is not 0, output is written according to the following byte order: byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian If byteorder is 0, the output string will always start with the Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is prepended. Note that Py_UNICODE data is being interpreted as UTF-16 reduced to UCS-2. This trick makes it possible to add full UTF-16 capabilities at a later point without compromising the APIs. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* number of Py_UNICODE chars to encode */ const char *errors, /* error handling */ int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ ); PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16( PyObject* unicode, /* Unicode object */ const char *errors, /* error handling */ int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ ); #endif /* --- Unicode-Escape Codecs ---------------------------------------------- */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape( const char *string, /* Unicode-Escape encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length /* Number of Py_UNICODE chars to encode */ ); #endif /* --- Raw-Unicode-Escape Codecs ------------------------------------------ */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape( const char *string, /* Raw-Unicode-Escape encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length /* Number of Py_UNICODE chars to encode */ ); #endif /* --- Unicode Internal Codec --------------------------------------------- Only for internal use in _codecsmodule.c */ #ifndef Py_LIMITED_API PyObject *_PyUnicode_DecodeUnicodeInternal( const char *string, Py_ssize_t length, const char *errors ); #endif /* --- Latin-1 Codecs ----------------------------------------------------- Note: Latin-1 corresponds to the first 256 Unicode ordinals. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1( const char *string, /* Latin-1 encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyUnicode_AsLatin1String( PyObject* unicode, const char* errors); PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ const char *errors /* error handling */ ); #endif /* --- ASCII Codecs ------------------------------------------------------- Only 7-bit ASCII data is excepted. All other codes generate errors. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII( const char *string, /* ASCII encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyUnicode_AsASCIIString( PyObject* unicode, const char* errors); PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ const char *errors /* error handling */ ); #endif /* --- Character Map Codecs ----------------------------------------------- This codec uses mappings to encode and decode characters. Decoding mappings must map single string characters to single Unicode characters, integers (which are then interpreted as Unicode ordinals) or None (meaning "undefined mapping" and causing an error). Encoding mappings must map single Unicode characters to single string characters, integers (which are then interpreted as Latin-1 ordinals) or None (meaning "undefined mapping" and causing an error). If a character lookup fails with a LookupError, the character is copied as-is meaning that its ordinal value will be interpreted as Unicode or Latin-1 ordinal resp. Because of this mappings only need to contain those mappings which map characters to different code points. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap( const char *string, /* Encoded string */ Py_ssize_t length, /* size of string */ PyObject *mapping, /* character mapping (char ordinal -> unicode ordinal) */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString( PyObject *unicode, /* Unicode object */ PyObject *mapping /* character mapping (unicode ordinal -> char ordinal) */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ PyObject *mapping, /* character mapping (unicode ordinal -> char ordinal) */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) _PyUnicode_EncodeCharmap( PyObject *unicode, /* Unicode object */ PyObject *mapping, /* character mapping (unicode ordinal -> char ordinal) */ const char *errors /* error handling */ ); #endif /* Translate a Py_UNICODE buffer of the given length by applying a character mapping table to it and return the resulting Unicode object. The mapping table must map Unicode ordinal integers to Unicode ordinal integers or None (causing deletion of the character). Mapping tables may be dictionaries or sequences. Unmapped character ordinals (ones which cause a LookupError) are left untouched and are copied as-is. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ PyObject *table, /* Translate table */ const char *errors /* error handling */ ); #endif #ifdef HAVE_MBCS /* --- MBCS codecs for Windows -------------------------------------------- */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS( const char *string, /* MBCS encoded string */ Py_ssize_t length, /* size of string */ const char *errors /* error handling */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCSStateful( const char *string, /* MBCS encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ Py_ssize_t *consumed /* bytes consumed */ ); PyAPI_FUNC(PyObject*) PyUnicode_DecodeCodePageStateful( int code_page, /* code page number */ const char *string, /* encoded string */ Py_ssize_t length, /* size of string */ const char *errors, /* error handling */ Py_ssize_t *consumed /* bytes consumed */ ); PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString( PyObject *unicode /* Unicode object */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( const Py_UNICODE *data, /* Unicode char buffer */ Py_ssize_t length, /* number of Py_UNICODE chars to encode */ const char *errors /* error handling */ ); #endif PyAPI_FUNC(PyObject*) PyUnicode_EncodeCodePage( int code_page, /* code page number */ PyObject *unicode, /* Unicode object */ const char *errors /* error handling */ ); #endif /* HAVE_MBCS */ /* --- Decimal Encoder ---------------------------------------------------- */ /* Takes a Unicode string holding a decimal value and writes it into an output buffer using standard ASCII digit codes. The output buffer has to provide at least length+1 bytes of storage area. The output string is 0-terminated. The encoder converts whitespace to ' ', decimal characters to their corresponding ASCII digit and all other Latin-1 characters except \0 as-is. Characters outside this range (Unicode ordinals 1-256) are treated as errors. This includes embedded NULL bytes. Error handling is defined by the errors argument: NULL or "strict": raise a ValueError "ignore": ignore the wrong characters (these are not copied to the output buffer) "replace": replaces illegal characters with '?' Returns 0 on success, -1 on failure. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyUnicode_EncodeDecimal( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ char *output, /* Output buffer; must have size >= length */ const char *errors /* error handling */ ); #endif /* Transforms code points that have decimal digit property to the corresponding ASCII digit code points. Returns a new Unicode string on success, NULL on failure. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length /* Number of Py_UNICODE chars to transform */ ); #endif /* Similar to PyUnicode_TransformDecimalToASCII(), but takes a PyObject as argument instead of a raw buffer and length. This function additionally transforms spaces to ASCII because this is what the callers in longobject, floatobject, and complexobject did anyways. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyUnicode_TransformDecimalAndSpaceToASCII( PyObject *unicode /* Unicode object */ ); #endif /* --- Locale encoding --------------------------------------------------- */ /* Decode a string from the current locale encoding. The decoder is strict if *surrogateescape* is equal to zero, otherwise it uses the 'surrogateescape' error handler (PEP 383) to escape undecodable bytes. If a byte sequence can be decoded as a surrogate character and *surrogateescape* is not equal to zero, the byte sequence is escaped using the 'surrogateescape' error handler instead of being decoded. *str* must end with a null character but cannot contain embedded null characters. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocaleAndSize( const char *str, Py_ssize_t len, const char *errors); /* Similar to PyUnicode_DecodeLocaleAndSize(), but compute the string length using strlen(). */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocale( const char *str, const char *errors); /* Encode a Unicode object to the current locale encoding. The encoder is strict is *surrogateescape* is equal to zero, otherwise the "surrogateescape" error handler is used. Return a bytes object. The string cannot contain embedded null characters. */ PyAPI_FUNC(PyObject*) PyUnicode_EncodeLocale( PyObject *unicode, const char *errors ); /* --- File system encoding ---------------------------------------------- */ /* ParseTuple converter: encode str objects to bytes using PyUnicode_EncodeFSDefault(); bytes objects are output as-is. */ PyAPI_FUNC(int) PyUnicode_FSConverter(PyObject*, void*); /* ParseTuple converter: decode bytes objects to unicode using PyUnicode_DecodeFSDefaultAndSize(); str objects are output as-is. */ PyAPI_FUNC(int) PyUnicode_FSDecoder(PyObject*, void*); /* Decode a null-terminated string using Py_FileSystemDefaultEncoding and the "surrogateescape" error handler. If Py_FileSystemDefaultEncoding is not set, fall back to the locale encoding. Use PyUnicode_DecodeFSDefaultAndSize() if the string length is known. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefault( const char *s /* encoded string */ ); /* Decode a string using Py_FileSystemDefaultEncoding and the "surrogateescape" error handler. If Py_FileSystemDefaultEncoding is not set, fall back to the locale encoding. */ PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefaultAndSize( const char *s, /* encoded string */ Py_ssize_t size /* size */ ); /* Encode a Unicode object to Py_FileSystemDefaultEncoding with the "surrogateescape" error handler, and return bytes. If Py_FileSystemDefaultEncoding is not set, fall back to the locale encoding. */ PyAPI_FUNC(PyObject*) PyUnicode_EncodeFSDefault( PyObject *unicode ); /* --- Methods & Slots ---------------------------------------------------- These are capable of handling Unicode objects and strings on input (we refer to them as strings in the descriptions) and return Unicode objects or integers as appropriate. */ /* Concat two strings giving a new Unicode string. */ PyAPI_FUNC(PyObject*) PyUnicode_Concat( PyObject *left, /* Left string */ PyObject *right /* Right string */ ); /* Concat two strings and put the result in *pleft (sets *pleft to NULL on error) */ PyAPI_FUNC(void) PyUnicode_Append( PyObject **pleft, /* Pointer to left string */ PyObject *right /* Right string */ ); /* Concat two strings, put the result in *pleft and drop the right object (sets *pleft to NULL on error) */ PyAPI_FUNC(void) PyUnicode_AppendAndDel( PyObject **pleft, /* Pointer to left string */ PyObject *right /* Right string */ ); /* Split a string giving a list of Unicode strings. If sep is NULL, splitting will be done at all whitespace substrings. Otherwise, splits occur at the given separator. At most maxsplit splits will be done. If negative, no limit is set. Separators are not included in the resulting list. */ PyAPI_FUNC(PyObject*) PyUnicode_Split( PyObject *s, /* String to split */ PyObject *sep, /* String separator */ Py_ssize_t maxsplit /* Maxsplit count */ ); /* Dito, but split at line breaks. CRLF is considered to be one line break. Line breaks are not included in the resulting list. */ PyAPI_FUNC(PyObject*) PyUnicode_Splitlines( PyObject *s, /* String to split */ int keepends /* If true, line end markers are included */ ); /* Partition a string using a given separator. */ PyAPI_FUNC(PyObject*) PyUnicode_Partition( PyObject *s, /* String to partition */ PyObject *sep /* String separator */ ); /* Partition a string using a given separator, searching from the end of the string. */ PyAPI_FUNC(PyObject*) PyUnicode_RPartition( PyObject *s, /* String to partition */ PyObject *sep /* String separator */ ); /* Split a string giving a list of Unicode strings. If sep is NULL, splitting will be done at all whitespace substrings. Otherwise, splits occur at the given separator. At most maxsplit splits will be done. But unlike PyUnicode_Split PyUnicode_RSplit splits from the end of the string. If negative, no limit is set. Separators are not included in the resulting list. */ PyAPI_FUNC(PyObject*) PyUnicode_RSplit( PyObject *s, /* String to split */ PyObject *sep, /* String separator */ Py_ssize_t maxsplit /* Maxsplit count */ ); /* Translate a string by applying a character mapping table to it and return the resulting Unicode object. The mapping table must map Unicode ordinal integers to Unicode ordinal integers or None (causing deletion of the character). Mapping tables may be dictionaries or sequences. Unmapped character ordinals (ones which cause a LookupError) are left untouched and are copied as-is. */ PyAPI_FUNC(PyObject *) PyUnicode_Translate( PyObject *str, /* String */ PyObject *table, /* Translate table */ const char *errors /* error handling */ ); /* Join a sequence of strings using the given separator and return the resulting Unicode string. */ PyAPI_FUNC(PyObject*) PyUnicode_Join( PyObject *separator, /* Separator string */ PyObject *seq /* Sequence object */ ); /* Return 1 if substr matches str[start:end] at the given tail end, 0 otherwise. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch( PyObject *str, /* String */ PyObject *substr, /* Prefix or Suffix string */ Py_ssize_t start, /* Start index */ Py_ssize_t end, /* Stop index */ int direction /* Tail end: -1 prefix, +1 suffix */ ); /* Return the first position of substr in str[start:end] using the given search direction or -1 if not found. -2 is returned in case an error occurred and an exception is set. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_Find( PyObject *str, /* String */ PyObject *substr, /* Substring to find */ Py_ssize_t start, /* Start index */ Py_ssize_t end, /* Stop index */ int direction /* Find direction: +1 forward, -1 backward */ ); /* Like PyUnicode_Find, but search for single character only. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_FindChar( PyObject *str, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction ); /* Count the number of occurrences of substr in str[start:end]. */ PyAPI_FUNC(Py_ssize_t) PyUnicode_Count( PyObject *str, /* String */ PyObject *substr, /* Substring to count */ Py_ssize_t start, /* Start index */ Py_ssize_t end /* Stop index */ ); /* Replace at most maxcount occurrences of substr in str with replstr and return the resulting Unicode object. */ PyAPI_FUNC(PyObject *) PyUnicode_Replace( PyObject *str, /* String */ PyObject *substr, /* Substring to find */ PyObject *replstr, /* Substring to replace */ Py_ssize_t maxcount /* Max. number of replacements to apply; -1 = all */ ); /* Compare two strings and return -1, 0, 1 for less than, equal, greater than resp. Raise an exception and return -1 on error. */ PyAPI_FUNC(int) PyUnicode_Compare( PyObject *left, /* Left string */ PyObject *right /* Right string */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyUnicode_CompareWithId( PyObject *left, /* Left string */ _Py_Identifier *right /* Right identifier */ ); #endif PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString( PyObject *left, const char *right /* ASCII-encoded string */ ); /* Rich compare two strings and return one of the following: - NULL in case an exception was raised - Py_True or Py_False for successfully comparisons - Py_NotImplemented in case the type combination is unknown Note that Py_EQ and Py_NE comparisons can cause a UnicodeWarning in case the conversion of the arguments to Unicode fails with a UnicodeDecodeError. Possible values for op: Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE */ PyAPI_FUNC(PyObject *) PyUnicode_RichCompare( PyObject *left, /* Left string */ PyObject *right, /* Right string */ int op /* Operation: Py_EQ, Py_NE, Py_GT, etc. */ ); /* Apply an argument tuple or dictionary to a format string and return the resulting Unicode string. */ PyAPI_FUNC(PyObject *) PyUnicode_Format( PyObject *format, /* Format string */ PyObject *args /* Argument tuple or dictionary */ ); /* Checks whether element is contained in container and return 1/0 accordingly. element has to coerce to an one element Unicode string. -1 is returned in case of an error. */ PyAPI_FUNC(int) PyUnicode_Contains( PyObject *container, /* Container string */ PyObject *element /* Element string */ ); /* Checks whether the string contains any NUL characters. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyUnicode_HasNULChars(PyObject *); #endif /* Checks whether argument is a valid identifier. */ PyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s); #ifndef Py_LIMITED_API /* Externally visible for str.strip(unicode) */ PyAPI_FUNC(PyObject *) _PyUnicode_XStrip( PyObject *self, int striptype, PyObject *sepobj ); #endif /* Using explicit passed-in values, insert the thousands grouping into the string pointed to by buffer. For the argument descriptions, see Objects/stringlib/localeutil.h */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGrouping( PyObject *unicode, Py_ssize_t index, Py_ssize_t n_buffer, void *digits, Py_ssize_t n_digits, Py_ssize_t min_width, const char *grouping, PyObject *thousands_sep, Py_UCS4 *maxchar); #endif /* === Characters Type APIs =============================================== */ /* Helper array used by Py_UNICODE_ISSPACE(). */ #ifndef Py_LIMITED_API PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[]; /* These should not be used directly. Use the Py_UNICODE_IS* and Py_UNICODE_TO* macros instead. These APIs are implemented in Objects/unicodectype.c. */ PyAPI_FUNC(int) _PyUnicode_IsLowercase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsUppercase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsTitlecase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsXidStart( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsXidContinue( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsWhitespace( const Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsLinebreak( const Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(Py_UCS4) _PyUnicode_ToLowercase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(Py_UCS4) _PyUnicode_ToUppercase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(Py_UCS4) _PyUnicode_ToTitlecase( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_ToLowerFull( Py_UCS4 ch, /* Unicode character */ Py_UCS4 *res ); PyAPI_FUNC(int) _PyUnicode_ToTitleFull( Py_UCS4 ch, /* Unicode character */ Py_UCS4 *res ); PyAPI_FUNC(int) _PyUnicode_ToUpperFull( Py_UCS4 ch, /* Unicode character */ Py_UCS4 *res ); PyAPI_FUNC(int) _PyUnicode_ToFoldedFull( Py_UCS4 ch, /* Unicode character */ Py_UCS4 *res ); PyAPI_FUNC(int) _PyUnicode_IsCaseIgnorable( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsCased( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_ToDecimalDigit( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_ToDigit( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(double) _PyUnicode_ToNumeric( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsDecimalDigit( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsDigit( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsNumeric( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsPrintable( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(int) _PyUnicode_IsAlpha( Py_UCS4 ch /* Unicode character */ ); PyAPI_FUNC(size_t) Py_UNICODE_strlen( const Py_UNICODE *u ); PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strcpy( Py_UNICODE *s1, const Py_UNICODE *s2); PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strcat( Py_UNICODE *s1, const Py_UNICODE *s2); PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strncpy( Py_UNICODE *s1, const Py_UNICODE *s2, size_t n); PyAPI_FUNC(int) Py_UNICODE_strcmp( const Py_UNICODE *s1, const Py_UNICODE *s2 ); PyAPI_FUNC(int) Py_UNICODE_strncmp( const Py_UNICODE *s1, const Py_UNICODE *s2, size_t n ); PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strchr( const Py_UNICODE *s, Py_UNICODE c ); PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strrchr( const Py_UNICODE *s, Py_UNICODE c ); /* Create a copy of a unicode string ending with a nul character. Return NULL and raise a MemoryError exception on memory allocation failure, otherwise return a new allocated buffer (use PyMem_Free() to free the buffer). */ PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy( PyObject *unicode ); #endif /* Py_LIMITED_API */ #if defined(Py_DEBUG) && !defined(Py_LIMITED_API) PyAPI_FUNC(int) _PyUnicode_CheckConsistency( PyObject *op, int check_content); #endif /* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); /* Clear all static strings. */ PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void); #ifdef __cplusplus } #endif #endif /* !Py_UNICODEOBJECT_H */ include/python3.4m/ast.h000064400000000735152342604300011056 0ustar00#ifndef Py_AST_H #define Py_AST_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(int) PyAST_Validate(mod_ty); PyAPI_FUNC(mod_ty) PyAST_FromNode( const node *n, PyCompilerFlags *flags, const char *filename, /* decoded from the filesystem encoding */ PyArena *arena); PyAPI_FUNC(mod_ty) PyAST_FromNodeObject( const node *n, PyCompilerFlags *flags, PyObject *filename, PyArena *arena); #ifdef __cplusplus } #endif #endif /* !Py_AST_H */ include/python3.4m/pymacconfig.h000064400000005654152342604300012573 0ustar00#ifndef PYMACCONFIG_H #define PYMACCONFIG_H /* * This file moves some of the autoconf magic to compile-time * when building on MacOSX. This is needed for building 4-way * universal binaries and for 64-bit universal binaries because * the values redefined below aren't configure-time constant but * only compile-time constant in these scenarios. */ #if defined(__APPLE__) # undef SIZEOF_LONG # undef SIZEOF_PTHREAD_T # undef SIZEOF_SIZE_T # undef SIZEOF_TIME_T # undef SIZEOF_VOID_P # undef SIZEOF__BOOL # undef SIZEOF_UINTPTR_T # undef SIZEOF_PTHREAD_T # undef WORDS_BIGENDIAN # undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 # undef DOUBLE_IS_BIG_ENDIAN_IEEE754 # undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754 # undef HAVE_GCC_ASM_FOR_X87 # undef VA_LIST_IS_ARRAY # if defined(__LP64__) && defined(__x86_64__) # define VA_LIST_IS_ARRAY 1 # endif # undef HAVE_LARGEFILE_SUPPORT # ifndef __LP64__ # define HAVE_LARGEFILE_SUPPORT 1 # endif # undef SIZEOF_LONG # ifdef __LP64__ # define SIZEOF__BOOL 1 # define SIZEOF__BOOL 1 # define SIZEOF_LONG 8 # define SIZEOF_PTHREAD_T 8 # define SIZEOF_SIZE_T 8 # define SIZEOF_TIME_T 8 # define SIZEOF_VOID_P 8 # define SIZEOF_UINTPTR_T 8 # define SIZEOF_PTHREAD_T 8 # else # ifdef __ppc__ # define SIZEOF__BOOL 4 # else # define SIZEOF__BOOL 1 # endif # define SIZEOF_LONG 4 # define SIZEOF_PTHREAD_T 4 # define SIZEOF_SIZE_T 4 # define SIZEOF_TIME_T 4 # define SIZEOF_VOID_P 4 # define SIZEOF_UINTPTR_T 4 # define SIZEOF_PTHREAD_T 4 # endif # if defined(__LP64__) /* MacOSX 10.4 (the first release to support 64-bit code * at all) only supports 64-bit in the UNIX layer. * Therefore surpress the toolbox-glue in 64-bit mode. */ /* In 64-bit mode setpgrp always has no argments, in 32-bit * mode that depends on the compilation environment */ # undef SETPGRP_HAVE_ARG # endif #ifdef __BIG_ENDIAN__ #define WORDS_BIGENDIAN 1 #define DOUBLE_IS_BIG_ENDIAN_IEEE754 #else #define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 #endif /* __BIG_ENDIAN */ #ifdef __i386__ # define HAVE_GCC_ASM_FOR_X87 #endif /* * The definition in pyconfig.h is only valid on the OS release * where configure ran on and not necessarily for all systems where * the executable can be used on. * * Specifically: OSX 10.4 has limited supported for '%zd', while * 10.5 has full support for '%zd'. A binary built on 10.5 won't * work properly on 10.4 unless we surpress the definition * of PY_FORMAT_SIZE_T */ #undef PY_FORMAT_SIZE_T #endif /* defined(_APPLE__) */ #endif /* PYMACCONFIG_H */ include/python3.4m/moduleobject.h000064400000003117152342604300012740 0ustar00 /* Module object interface */ #ifndef Py_MODULEOBJECT_H #define Py_MODULEOBJECT_H #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PyModule_Type; #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type) #define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type) PyAPI_FUNC(PyObject *) PyModule_NewObject( PyObject *name ); PyAPI_FUNC(PyObject *) PyModule_New( const char *name /* UTF-8 encoded string */ ); PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *); PyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *); PyAPI_FUNC(const char *) PyModule_GetName(PyObject *); PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *); PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyModule_Clear(PyObject *); PyAPI_FUNC(void) _PyModule_ClearDict(PyObject *); #endif PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*); PyAPI_FUNC(void*) PyModule_GetState(PyObject*); typedef struct PyModuleDef_Base { PyObject_HEAD PyObject* (*m_init)(void); Py_ssize_t m_index; PyObject* m_copy; } PyModuleDef_Base; #define PyModuleDef_HEAD_INIT { \ PyObject_HEAD_INIT(NULL) \ NULL, /* m_init */ \ 0, /* m_index */ \ NULL, /* m_copy */ \ } typedef struct PyModuleDef{ PyModuleDef_Base m_base; const char* m_name; const char* m_doc; Py_ssize_t m_size; PyMethodDef *m_methods; inquiry m_reload; traverseproc m_traverse; inquiry m_clear; freefunc m_free; }PyModuleDef; #ifdef __cplusplus } #endif #endif /* !Py_MODULEOBJECT_H */ include/python3.4m/longobject.h000064400000017756152342604300012430 0ustar00#ifndef Py_LONGOBJECT_H #define Py_LONGOBJECT_H #ifdef __cplusplus extern "C" { #endif /* Long (arbitrary precision) integer object interface */ typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */ PyAPI_DATA(PyTypeObject) PyLong_Type; #define PyLong_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) #define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type) PyAPI_FUNC(PyObject *) PyLong_FromLong(long); PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); PyAPI_FUNC(PyObject *) PyLong_FromSize_t(size_t); PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t); PyAPI_FUNC(PyObject *) PyLong_FromDouble(double); PyAPI_FUNC(long) PyLong_AsLong(PyObject *); PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *); PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *); PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *); PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *); PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyLong_AsInt(PyObject *); #endif PyAPI_FUNC(PyObject *) PyLong_GetInfo(void); /* It may be useful in the future. I've added it in the PyInt -> PyLong cleanup to keep the extra information. [CH] */ #define PyLong_AS_LONG(op) PyLong_AsLong(op) /* Issue #1983: pid_t can be longer than a C long on some systems */ #if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT #define _Py_PARSE_PID "i" #define PyLong_FromPid PyLong_FromLong #define PyLong_AsPid PyLong_AsLong #elif SIZEOF_PID_T == SIZEOF_LONG #define _Py_PARSE_PID "l" #define PyLong_FromPid PyLong_FromLong #define PyLong_AsPid PyLong_AsLong #elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG #define _Py_PARSE_PID "L" #define PyLong_FromPid PyLong_FromLongLong #define PyLong_AsPid PyLong_AsLongLong #else #error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" #endif /* SIZEOF_PID_T */ #if SIZEOF_VOID_P == SIZEOF_INT # define _Py_PARSE_INTPTR "i" # define _Py_PARSE_UINTPTR "I" #elif SIZEOF_VOID_P == SIZEOF_LONG # define _Py_PARSE_INTPTR "l" # define _Py_PARSE_UINTPTR "k" #elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG # define _Py_PARSE_INTPTR "L" # define _Py_PARSE_UINTPTR "K" #else # error "void* different in size from int, long and long long" #endif /* SIZEOF_VOID_P */ /* Used by Python/mystrtoul.c. */ #ifndef Py_LIMITED_API PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; #endif /* _PyLong_Frexp returns a double x and an exponent e such that the true value is approximately equal to x * 2**e. e is >= 0. x is 0.0 if and only if the input is 0 (in which case, e and x are both zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is possible if the number of bits doesn't fit into a Py_ssize_t, sets OverflowError and returns -1.0 for x, 0 for e. */ #ifndef Py_LIMITED_API PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e); #endif PyAPI_FUNC(double) PyLong_AsDouble(PyObject *); PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *); PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *); #ifdef HAVE_LONG_LONG PyAPI_FUNC(PyObject *) PyLong_FromLongLong(PY_LONG_LONG); PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG); PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLong(PyObject *); PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLong(PyObject *); PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLongMask(PyObject *); PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLongAndOverflow(PyObject *, int *); #endif /* HAVE_LONG_LONG */ PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int); PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base); PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int); #endif #ifndef Py_LIMITED_API /* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0. v must not be NULL, and must be a normalized long. There are no error cases. */ PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); /* _PyLong_NumBits. Return the number of bits needed to represent the absolute value of a long. For example, this returns 1 for 1 and -1, 2 for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. v must not be NULL, and must be a normalized long. (size_t)-1 is returned and OverflowError set if the true result doesn't fit in a size_t. */ PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); /* _PyLong_DivmodNear. Given integers a and b, compute the nearest integer q to the exact quotient a / b, rounding to the nearest even integer in the case of a tie. Return (q, r), where r = a - q*b. The remainder r will satisfy abs(r) <= abs(b)/2, with equality possible only if q is even. */ PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *); /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in base 256, and return a Python int with the same numeric value. If n is 0, the integer is 0. Else: If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB; else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the LSB. If is_signed is 0/false, view the bytes as a non-negative integer. If is_signed is 1/true, view the bytes as a 2's-complement integer, non-negative if bit 0x80 of the MSB is clear, negative if set. Error returns: + Return NULL with the appropriate exception set if there's not enough memory to create the Python int. */ PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( const unsigned char* bytes, size_t n, int little_endian, int is_signed); /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long v to a base-256 integer, stored in array bytes. Normally return 0, return -1 on error. If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and the LSB at bytes[n-1]. If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes are filled and there's nothing special about bit 0x80 of the MSB. If is_signed is 1/true, bytes is filled with the 2's-complement representation of v's value. Bit 0x80 of the MSB is the sign bit. Error returns (-1): + is_signed is 0 and v < 0. TypeError is set in this case, and bytes isn't altered. + n isn't big enough to hold the full mathematical value of v. For example, if is_signed is 0 and there are more digits in the v than fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of being large enough to hold a sign bit. OverflowError is set in this case, but bytes holds the least-signficant n bytes of the true value. */ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, int little_endian, int is_signed); /* _PyLong_FromNbInt: Convert the given object to a PyLongObject using the nb_int slot, if available. Raise TypeError if either the nb_int slot is not available or the result of the call to nb_int returns something not of type int. */ PyAPI_FUNC(PyLongObject *)_PyLong_FromNbInt(PyObject *); /* _PyLong_Format: Convert the long to a string object with given base, appending a base prefix of 0[box] if base is 2, 8 or 16. */ PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base); PyAPI_FUNC(int) _PyLong_FormatWriter( _PyUnicodeWriter *writer, PyObject *obj, int base, int alternate); /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); #endif /* Py_LIMITED_API */ /* These aren't really part of the int object, but they're handy. The functions are in Python/mystrtoul.c. */ PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int); PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int); #ifdef __cplusplus } #endif #endif /* !Py_LONGOBJECT_H */ include/python3.4m/bytes_methods.h000064400000003751152342604300013141 0ustar00#ifndef Py_LIMITED_API #ifndef Py_BYTES_CTYPE_H #define Py_BYTES_CTYPE_H /* * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray) * methods of the given names, they operate on ASCII byte strings. */ extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len); extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len); /* These store their len sized answer in the given preallocated *result arg. */ extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len); extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len); extern void _Py_bytes_title(char *result, char *s, Py_ssize_t len); extern void _Py_bytes_capitalize(char *result, char *s, Py_ssize_t len); extern void _Py_bytes_swapcase(char *result, char *s, Py_ssize_t len); /* This one gets the raw argument list. */ extern PyObject* _Py_bytes_maketrans(PyObject *args); /* Shared __doc__ strings. */ extern const char _Py_isspace__doc__[]; extern const char _Py_isalpha__doc__[]; extern const char _Py_isalnum__doc__[]; extern const char _Py_isdigit__doc__[]; extern const char _Py_islower__doc__[]; extern const char _Py_isupper__doc__[]; extern const char _Py_istitle__doc__[]; extern const char _Py_lower__doc__[]; extern const char _Py_upper__doc__[]; extern const char _Py_title__doc__[]; extern const char _Py_capitalize__doc__[]; extern const char _Py_swapcase__doc__[]; extern const char _Py_maketrans__doc__[]; /* this is needed because some docs are shared from the .o, not static */ #define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str) #endif /* !Py_BYTES_CTYPE_H */ #endif /* !Py_LIMITED_API */ include/python3.4m/py_curses.h000064400000010117152342604300012276 0ustar00 #ifndef Py_CURSES_H #define Py_CURSES_H #ifdef __APPLE__ /* ** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards ** against multiple definition of wchar_t. */ #ifdef _BSD_WCHAR_T_DEFINED_ #define _WCHAR_T #endif /* the following define is necessary for OS X 10.6; without it, the Apple-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python can't get at the WINDOW flags field. */ #define NCURSES_OPAQUE 0 #endif /* __APPLE__ */ #ifdef __FreeBSD__ /* ** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards ** against multiple definition of wchar_t and wint_t. */ #ifdef _XOPEN_SOURCE_EXTENDED #ifndef __FreeBSD_version #include #endif #if __FreeBSD_version >= 500000 #ifndef __wchar_t #define __wchar_t #endif #ifndef __wint_t #define __wint_t #endif #else #ifndef _WCHAR_T #define _WCHAR_T #endif #ifndef _WINT_T #define _WINT_T #endif #endif #endif #endif #ifdef HAVE_NCURSES_H #include #else #include #ifdef HAVE_TERM_H /* for tigetstr, which is not declared in SysV curses */ #include #endif #endif #ifdef HAVE_NCURSES_H /* configure was checking , but we will use , which has all these features. */ #ifndef WINDOW_HAS_FLAGS #define WINDOW_HAS_FLAGS 1 #endif #ifndef MVWDELCH_IS_EXPRESSION #define MVWDELCH_IS_EXPRESSION 1 #endif #endif #ifdef __cplusplus extern "C" { #endif #define PyCurses_API_pointers 4 /* Type declarations */ typedef struct { PyObject_HEAD WINDOW *win; char *encoding; } PyCursesWindowObject; #define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type) #define PyCurses_CAPSULE_NAME "_curses._C_API" #ifdef CURSES_MODULE /* This section is used when compiling _cursesmodule.c */ #else /* This section is used in modules that use the _cursesmodule API */ static void **PyCurses_API; #define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0]) #define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;} #define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;} #define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;} #define import_curses() \ PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1); #endif /* general error messages */ static char *catchall_ERR = "curses function returned ERR"; static char *catchall_NULL = "curses function returned NULL"; /* Function Prototype Macros - They are ugly but very, very useful. ;-) X - function name TYPE - parameter Type ERGSTR - format string for construction of the return value PARSESTR - format string for argument parsing */ #define NoArgNoReturnFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self) \ { \ PyCursesInitialised \ return PyCursesCheckERR(X(), # X); } #define NoArgOrFlagNoReturnFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \ { \ int flag = 0; \ PyCursesInitialised \ switch(PyTuple_Size(args)) { \ case 0: \ return PyCursesCheckERR(X(), # X); \ case 1: \ if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \ if (flag) return PyCursesCheckERR(X(), # X); \ else return PyCursesCheckERR(no ## X (), # X); \ default: \ PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \ return NULL; } } #define NoArgReturnIntFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self) \ { \ PyCursesInitialised \ return PyLong_FromLong((long) X()); } #define NoArgReturnStringFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self) \ { \ PyCursesInitialised \ return PyBytes_FromString(X()); } #define NoArgTrueFalseFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self) \ { \ PyCursesInitialised \ if (X () == FALSE) { \ Py_INCREF(Py_False); \ return Py_False; \ } \ Py_INCREF(Py_True); \ return Py_True; } #define NoArgNoReturnVoidFunction(X) \ static PyObject *PyCurses_ ## X (PyObject *self) \ { \ PyCursesInitialised \ X(); \ Py_INCREF(Py_None); \ return Py_None; } #ifdef __cplusplus } #endif #endif /* !defined(Py_CURSES_H) */ include/python3.4m/parsetok.h000064400000005505152342604300012117 0ustar00 /* Parser-tokenizer link interface */ #ifndef Py_LIMITED_API #ifndef Py_PARSETOK_H #define Py_PARSETOK_H #ifdef __cplusplus extern "C" { #endif typedef struct { int error; #ifndef PGEN /* The filename is useless for pgen, see comment in tok_state structure */ PyObject *filename; #endif int lineno; int offset; char *text; /* UTF-8-encoded string */ int token; int expected; } perrdetail; #if 0 #define PyPARSE_YIELD_IS_KEYWORD 0x0001 #endif #define PyPARSE_DONT_IMPLY_DEDENT 0x0002 #if 0 #define PyPARSE_WITH_IS_KEYWORD 0x0003 #define PyPARSE_PRINT_IS_FUNCTION 0x0004 #define PyPARSE_UNICODE_LITERALS 0x0008 #endif #define PyPARSE_IGNORE_COOKIE 0x0010 #define PyPARSE_BARRY_AS_BDFL 0x0020 PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int, perrdetail *); PyAPI_FUNC(node *) PyParser_ParseFile (FILE *, const char *, grammar *, int, const char *, const char *, perrdetail *); PyAPI_FUNC(node *) PyParser_ParseStringFlags(const char *, grammar *, int, perrdetail *, int); PyAPI_FUNC(node *) PyParser_ParseFileFlags( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ const char *enc, grammar *g, int start, const char *ps1, const char *ps2, perrdetail *err_ret, int flags); PyAPI_FUNC(node *) PyParser_ParseFileFlagsEx( FILE *fp, const char *filename, /* decoded from the filesystem encoding */ const char *enc, grammar *g, int start, const char *ps1, const char *ps2, perrdetail *err_ret, int *flags); PyAPI_FUNC(node *) PyParser_ParseFileObject( FILE *fp, PyObject *filename, const char *enc, grammar *g, int start, const char *ps1, const char *ps2, perrdetail *err_ret, int *flags); PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilename( const char *s, const char *filename, /* decoded from the filesystem encoding */ grammar *g, int start, perrdetail *err_ret, int flags); PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilenameEx( const char *s, const char *filename, /* decoded from the filesystem encoding */ grammar *g, int start, perrdetail *err_ret, int *flags); PyAPI_FUNC(node *) PyParser_ParseStringObject( const char *s, PyObject *filename, grammar *g, int start, perrdetail *err_ret, int *flags); /* Note that the following functions are defined in pythonrun.c, not in parsetok.c */ PyAPI_FUNC(void) PyParser_SetError(perrdetail *); PyAPI_FUNC(void) PyParser_ClearError(perrdetail *); #ifdef __cplusplus } #endif #endif /* !Py_PARSETOK_H */ #endif /* !Py_LIMITED_API */ include/python3.4m/pymath.h000064400000016062152342604300011571 0ustar00#ifndef Py_PYMATH_H #define Py_PYMATH_H #include "pyconfig.h" /* include for defines */ /************************************************************************** Symbols and macros to supply platform-independent interfaces to mathematical functions and constants **************************************************************************/ /* Python provides implementations for copysign, round and hypot in * Python/pymath.c just in case your math library doesn't provide the * functions. * *Note: PC/pyconfig.h defines copysign as _copysign */ #ifndef HAVE_COPYSIGN extern double copysign(double, double); #endif #ifndef HAVE_ROUND extern double round(double); #endif #ifndef HAVE_HYPOT extern double hypot(double, double); #endif /* extra declarations */ #ifndef _MSC_VER #ifndef __STDC__ extern double fmod (double, double); extern double frexp (double, int *); extern double ldexp (double, int); extern double modf (double, double *); extern double pow(double, double); #endif /* __STDC__ */ #endif /* _MSC_VER */ /* High precision defintion of pi and e (Euler) * The values are taken from libc6's math.h. */ #ifndef Py_MATH_PIl #define Py_MATH_PIl 3.1415926535897932384626433832795029L #endif #ifndef Py_MATH_PI #define Py_MATH_PI 3.14159265358979323846 #endif #ifndef Py_MATH_El #define Py_MATH_El 2.7182818284590452353602874713526625L #endif #ifndef Py_MATH_E #define Py_MATH_E 2.7182818284590452354 #endif /* On x86, Py_FORCE_DOUBLE forces a floating-point number out of an x87 FPU register and into a 64-bit memory location, rounding from extended precision to double precision in the process. On other platforms it does nothing. */ /* we take double rounding as evidence of x87 usage */ #ifndef Py_LIMITED_API #ifndef Py_FORCE_DOUBLE # ifdef X87_DOUBLE_ROUNDING PyAPI_FUNC(double) _Py_force_double(double); # define Py_FORCE_DOUBLE(X) (_Py_force_double(X)) # else # define Py_FORCE_DOUBLE(X) (X) # endif #endif #endif #ifndef Py_LIMITED_API #ifdef HAVE_GCC_ASM_FOR_X87 PyAPI_FUNC(unsigned short) _Py_get_387controlword(void); PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); #endif #endif /* Py_IS_NAN(X) * Return 1 if float or double arg is a NaN, else 0. * Caution: * X is evaluated more than once. * This may not work on all platforms. Each platform has *some* * way to spell this, though -- override in pyconfig.h if you have * a platform where it doesn't work. * Note: PC/pyconfig.h defines Py_IS_NAN as _isnan */ #ifndef Py_IS_NAN #if defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 1 #define Py_IS_NAN(X) isnan(X) #else #define Py_IS_NAN(X) ((X) != (X)) #endif #endif /* Py_IS_INFINITY(X) * Return 1 if float or double arg is an infinity, else 0. * Caution: * X is evaluated more than once. * This implementation may set the underflow flag if |X| is very small; * it really can't be implemented correctly (& easily) before C99. * Override in pyconfig.h if you have a better spelling on your platform. * Py_FORCE_DOUBLE is used to avoid getting false negatives from a * non-infinite value v sitting in an 80-bit x87 register such that * v becomes infinite when spilled from the register to 64-bit memory. * Note: PC/pyconfig.h defines Py_IS_INFINITY as _isinf */ #ifndef Py_IS_INFINITY # if defined HAVE_DECL_ISINF && HAVE_DECL_ISINF == 1 # define Py_IS_INFINITY(X) isinf(X) # else # define Py_IS_INFINITY(X) ((X) && \ (Py_FORCE_DOUBLE(X)*0.5 == Py_FORCE_DOUBLE(X))) # endif #endif /* Py_IS_FINITE(X) * Return 1 if float or double arg is neither infinite nor NAN, else 0. * Some compilers (e.g. VisualStudio) have intrisics for this, so a special * macro for this particular test is useful * Note: PC/pyconfig.h defines Py_IS_FINITE as _finite */ #ifndef Py_IS_FINITE #if defined HAVE_DECL_ISFINITE && HAVE_DECL_ISFINITE == 1 #define Py_IS_FINITE(X) isfinite(X) #elif defined HAVE_FINITE #define Py_IS_FINITE(X) finite(X) #else #define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X)) #endif #endif /* HUGE_VAL is supposed to expand to a positive double infinity. Python * uses Py_HUGE_VAL instead because some platforms are broken in this * respect. We used to embed code in pyport.h to try to worm around that, * but different platforms are broken in conflicting ways. If you're on * a platform where HUGE_VAL is defined incorrectly, fiddle your Python * config to #define Py_HUGE_VAL to something that works on your platform. */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif /* Py_NAN * A value that evaluates to a NaN. On IEEE 754 platforms INF*0 or * INF/INF works. Define Py_NO_NAN in pyconfig.h if your platform * doesn't support NaNs. */ #if !defined(Py_NAN) && !defined(Py_NO_NAN) #if !defined(__INTEL_COMPILER) #define Py_NAN (Py_HUGE_VAL * 0.) #else /* __INTEL_COMPILER */ #if defined(ICC_NAN_STRICT) #pragma float_control(push) #pragma float_control(precise, on) #pragma float_control(except, on) #if defined(_MSC_VER) __declspec(noinline) #else /* Linux */ __attribute__((noinline)) #endif /* _MSC_VER */ static double __icc_nan() { return sqrt(-1.0); } #pragma float_control (pop) #define Py_NAN __icc_nan() #else /* ICC_NAN_RELAXED as default for Intel Compiler */ static union { unsigned char buf[8]; double __icc_nan; } __nan_store = {0,0,0,0,0,0,0xf8,0x7f}; #define Py_NAN (__nan_store.__icc_nan) #endif /* ICC_NAN_STRICT */ #endif /* __INTEL_COMPILER */ #endif /* Py_OVERFLOWED(X) * Return 1 iff a libm function overflowed. Set errno to 0 before calling * a libm function, and invoke this macro after, passing the function * result. * Caution: * This isn't reliable. C99 no longer requires libm to set errno under * any exceptional condition, but does require +- HUGE_VAL return * values on overflow. A 754 box *probably* maps HUGE_VAL to a * double infinity, and we're cool if that's so, unless the input * was an infinity and an infinity is the expected result. A C89 * system sets errno to ERANGE, so we check for that too. We're * out of luck if a C99 754 box doesn't map HUGE_VAL to +Inf, or * if the returned result is a NaN, or if a C89 box returns HUGE_VAL * in non-overflow cases. * X is evaluated more than once. * Some platforms have better way to spell this, so expect some #ifdef'ery. * * OpenBSD uses 'isinf()' because a compiler bug on that platform causes * the longer macro version to be mis-compiled. This isn't optimal, and * should be removed once a newer compiler is available on that platform. * The system that had the failure was running OpenBSD 3.2 on Intel, with * gcc 2.95.3. * * According to Tim's checkin, the FreeBSD systems use isinf() to work * around a FPE bug on that platform. */ #if defined(__FreeBSD__) || defined(__OpenBSD__) #define Py_OVERFLOWED(X) isinf(X) #else #define Py_OVERFLOWED(X) ((X) != 0.0 && (errno == ERANGE || \ (X) == Py_HUGE_VAL || \ (X) == -Py_HUGE_VAL)) #endif #endif /* Py_PYMATH_H */ include/python3.4m/intrcheck.h000064400000000714152342604300012236 0ustar00 #ifndef Py_INTRCHECK_H #define Py_INTRCHECK_H #ifdef __cplusplus extern "C" { #endif PyAPI_FUNC(int) PyOS_InterruptOccurred(void); PyAPI_FUNC(void) PyOS_InitInterrupts(void); PyAPI_FUNC(void) PyOS_AfterFork(void); PyAPI_FUNC(int) _PyOS_IsMainThread(void); #ifdef MS_WINDOWS /* windows.h is not included by Python.h so use void* instead of HANDLE */ PyAPI_FUNC(void*) _PyOS_SigintEvent(void); #endif #ifdef __cplusplus } #endif #endif /* !Py_INTRCHECK_H */ include/python3.4m/pystate.h000064400000021644152342604300011762 0ustar00 /* Thread and interpreter state structures and their interfaces */ #ifndef Py_PYSTATE_H #define Py_PYSTATE_H #ifdef __cplusplus extern "C" { #endif /* State shared between threads */ struct _ts; /* Forward */ struct _is; /* Forward */ #ifdef Py_LIMITED_API typedef struct _is PyInterpreterState; #else typedef struct _is { struct _is *next; struct _ts *tstate_head; PyObject *modules; PyObject *modules_by_index; PyObject *sysdict; PyObject *builtins; PyObject *importlib; PyObject *codec_search_path; PyObject *codec_search_cache; PyObject *codec_error_registry; int codecs_initialized; int fscodec_initialized; #ifdef HAVE_DLOPEN int dlopenflags; #endif #ifdef WITH_TSC int tscdump; #endif PyObject *builtins_copy; } PyInterpreterState; #endif /* State unique per thread */ struct _frame; /* Avoid including frameobject.h */ #ifndef Py_LIMITED_API /* Py_tracefunc return -1 when raising an exception, or 0 for success. */ typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); /* The following values are used for 'what' for tracefunc functions: */ #define PyTrace_CALL 0 #define PyTrace_EXCEPTION 1 #define PyTrace_LINE 2 #define PyTrace_RETURN 3 #define PyTrace_C_CALL 4 #define PyTrace_C_EXCEPTION 5 #define PyTrace_C_RETURN 6 #endif #ifdef Py_LIMITED_API typedef struct _ts PyThreadState; #else typedef struct _ts { /* See Python/ceval.c for comments explaining most fields */ struct _ts *prev; struct _ts *next; PyInterpreterState *interp; struct _frame *frame; int recursion_depth; char overflowed; /* The stack has overflowed. Allow 50 more calls to handle the runtime error. */ char recursion_critical; /* The current calls must not cause a stack overflow. */ /* 'tracing' keeps track of the execution depth when tracing/profiling. This is to prevent the actual trace/profile code from being recorded in the trace/profile. */ int tracing; int use_tracing; Py_tracefunc c_profilefunc; Py_tracefunc c_tracefunc; PyObject *c_profileobj; PyObject *c_traceobj; PyObject *curexc_type; PyObject *curexc_value; PyObject *curexc_traceback; PyObject *exc_type; PyObject *exc_value; PyObject *exc_traceback; PyObject *dict; /* Stores per-thread state */ int gilstate_counter; PyObject *async_exc; /* Asynchronous exception to raise */ long thread_id; /* Thread id where this tstate was created */ int trash_delete_nesting; PyObject *trash_delete_later; /* Called when a thread state is deleted normally, but not when it * is destroyed after fork(). * Pain: to prevent rare but fatal shutdown errors (issue 18808), * Thread.join() must wait for the join'ed thread's tstate to be unlinked * from the tstate chain. That happens at the end of a thread's life, * in pystate.c. * The obvious way doesn't quite work: create a lock which the tstate * unlinking code releases, and have Thread.join() wait to acquire that * lock. The problem is that we _are_ at the end of the thread's life: * if the thread holds the last reference to the lock, decref'ing the * lock will delete the lock, and that may trigger arbitrary Python code * if there's a weakref, with a callback, to the lock. But by this time * _PyThreadState_Current is already NULL, so only the simplest of C code * can be allowed to run (in particular it must not be possible to * release the GIL). * So instead of holding the lock directly, the tstate holds a weakref to * the lock: that's the value of on_delete_data below. Decref'ing a * weakref is harmless. * on_delete points to _threadmodule.c's static release_sentinel() function. * After the tstate is unlinked, release_sentinel is called with the * weakref-to-lock (on_delete_data) argument, and release_sentinel releases * the indirectly held lock. */ void (*on_delete)(void *); void *on_delete_data; /* XXX signal handlers should also be here */ } PyThreadState; #endif PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void); PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *); PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 /* New in 3.3 */ PyAPI_FUNC(int) PyState_AddModule(PyObject*, struct PyModuleDef*); PyAPI_FUNC(int) PyState_RemoveModule(struct PyModuleDef*); #endif PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyState_ClearModules(void); #endif PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); PyAPI_FUNC(void) _PyThreadState_DeleteExcept(PyThreadState *tstate); #ifdef WITH_THREAD PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); PyAPI_FUNC(void) _PyGILState_Reinit(void); #endif PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *); PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void); PyAPI_FUNC(int) PyThreadState_SetAsyncExc(long, PyObject *); /* Variable and macro for in-line access to current thread state */ /* Assuming the current thread holds the GIL, this is the PyThreadState for the current thread. */ #ifndef Py_LIMITED_API PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current; #endif #if defined(Py_DEBUG) || defined(Py_LIMITED_API) #define PyThreadState_GET() PyThreadState_Get() #else #define PyThreadState_GET() \ ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) #endif typedef enum {PyGILState_LOCKED, PyGILState_UNLOCKED} PyGILState_STATE; #ifdef WITH_THREAD /* Ensure that the current thread is ready to call the Python C API, regardless of the current state of Python, or of its thread lock. This may be called as many times as desired by a thread so long as each call is matched with a call to PyGILState_Release(). In general, other thread-state APIs may be used between _Ensure() and _Release() calls, so long as the thread-state is restored to its previous state before the Release(). For example, normal use of the Py_BEGIN_ALLOW_THREADS/ Py_END_ALLOW_THREADS macros are acceptable. The return value is an opaque "handle" to the thread state when PyGILState_Ensure() was called, and must be passed to PyGILState_Release() to ensure Python is left in the same state. Even though recursive calls are allowed, these handles can *not* be shared - each unique call to PyGILState_Ensure must save the handle for its call to PyGILState_Release. When the function returns, the current thread will hold the GIL. Failure is a fatal error. */ PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void); /* Release any resources previously acquired. After this call, Python's state will be the same as it was prior to the corresponding PyGILState_Ensure() call (but generally this state will be unknown to the caller, hence the use of the GILState API.) Every call to PyGILState_Ensure must be matched by a call to PyGILState_Release on the same thread. */ PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE); /* Helper/diagnostic function - get the current thread state for this thread. May return NULL if no GILState API has been used on the current thread. Note that the main thread always has such a thread-state, even if no auto-thread-state call has been made on the main thread. */ PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void); /* Helper/diagnostic function - return 1 if the current thread * currently holds the GIL, 0 otherwise */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyGILState_Check(void); #endif #endif /* #ifdef WITH_THREAD */ /* The implementation of sys._current_frames() Returns a dict mapping thread id to that thread's current frame. */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyThread_CurrentFrames(void); #endif /* Routines for advanced debuggers, requested by David Beazley. Don't use unless you know what you are doing! */ #ifndef Py_LIMITED_API PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void); PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); #endif /* hook for PyEval_GetFrame(), requested for Psyco */ #ifndef Py_LIMITED_API PyAPI_DATA(PyThreadFrameGetter) _PyThreadState_GetFrame; #endif #ifdef __cplusplus } #endif #endif /* !Py_PYSTATE_H */ include/python3.4m/tupleobject.h000064400000004614152342604300012607 0ustar00 /* Tuple object interface */ #ifndef Py_TUPLEOBJECT_H #define Py_TUPLEOBJECT_H #ifdef __cplusplus extern "C" { #endif /* Another generally useful object type is a tuple of object pointers. For Python, this is an immutable type. C code can change the tuple items (but not their number), and even use tuples are general-purpose arrays of object references, but in general only brand new tuples should be mutated, not ones that might already have been exposed to Python code. *** WARNING *** PyTuple_SetItem does not increment the new item's reference count, but does decrement the reference count of the item it replaces, if not nil. It does *decrement* the reference count if it is *not* inserted in the tuple. Similarly, PyTuple_GetItem does not increment the returned item's reference count. */ #ifndef Py_LIMITED_API typedef struct { PyObject_VAR_HEAD PyObject *ob_item[1]; /* ob_item contains space for 'ob_size' elements. * Items must normally not be NULL, except during construction when * the tuple is not yet visible outside the function that builds it. */ } PyTupleObject; #endif PyAPI_DATA(PyTypeObject) PyTuple_Type; PyAPI_DATA(PyTypeObject) PyTupleIter_Type; #define PyTuple_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) #define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type) PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t); #endif PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *); #endif /* Macro, trading safety for speed */ #ifndef Py_LIMITED_API #define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i]) #define PyTuple_GET_SIZE(op) Py_SIZE(op) /* Macro, *only* to be used to fill in brand new tuples */ #define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v) #endif PyAPI_FUNC(int) PyTuple_ClearFreeList(void); #ifndef Py_LIMITED_API PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out); #endif /* Py_LIMITED_API */ #ifdef __cplusplus } #endif #endif /* !Py_TUPLEOBJECT_H */ include/python3.4m/errcode.h000064400000002731152342604300011710 0ustar00#ifndef Py_ERRCODE_H #define Py_ERRCODE_H #ifdef __cplusplus extern "C" { #endif /* Error codes passed around between file input, tokenizer, parser and interpreter. This is necessary so we can turn them into Python exceptions at a higher level. Note that some errors have a slightly different meaning when passed from the tokenizer to the parser than when passed from the parser to the interpreter; e.g. the parser only returns E_EOF when it hits EOF immediately, and it never returns E_OK. */ #define E_OK 10 /* No error */ #define E_EOF 11 /* End Of File */ #define E_INTR 12 /* Interrupted */ #define E_TOKEN 13 /* Bad token */ #define E_SYNTAX 14 /* Syntax error */ #define E_NOMEM 15 /* Ran out of memory */ #define E_DONE 16 /* Parsing complete */ #define E_ERROR 17 /* Execution error */ #define E_TABSPACE 18 /* Inconsistent mixing of tabs and spaces */ #define E_OVERFLOW 19 /* Node had too many children */ #define E_TOODEEP 20 /* Too many indentation levels */ #define E_DEDENT 21 /* No matching outer block for dedent */ #define E_DECODE 22 /* Error in decoding into Unicode */ #define E_EOFS 23 /* EOF in triple-quoted string */ #define E_EOLS 24 /* EOL in single-quoted string */ #define E_LINECONT 25 /* Unexpected characters after a line continuation */ #define E_IDENTIFIER 26 /* Invalid characters in identifier */ #define E_BADSINGLE 27 /* Ill-formed single statement input */ #ifdef __cplusplus } #endif #endif /* !Py_ERRCODE_H */ include/python3.4m/iterobject.h000064400000001067152342604300012420 0ustar00#ifndef Py_ITEROBJECT_H #define Py_ITEROBJECT_H /* Iterators (the basic kind, over a sequence) */ #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PySeqIter_Type; PyAPI_DATA(PyTypeObject) PyCallIter_Type; PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type; #define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type) PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); #define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type) PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); #ifdef __cplusplus } #endif #endif /* !Py_ITEROBJECT_H */ include/python3.4m/Python-ast.h000064400000046041152342604300012335 0ustar00/* File automatically generated by Parser/asdl_c.py. */ #include "asdl.h" typedef struct _mod *mod_ty; typedef struct _stmt *stmt_ty; typedef struct _expr *expr_ty; typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5, Param=6 } expr_context_ty; typedef struct _slice *slice_ty; typedef enum _boolop { And=1, Or=2 } boolop_ty; typedef enum _operator { Add=1, Sub=2, Mult=3, Div=4, Mod=5, Pow=6, LShift=7, RShift=8, BitOr=9, BitXor=10, BitAnd=11, FloorDiv=12 } operator_ty; typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty; typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8, In=9, NotIn=10 } cmpop_ty; typedef struct _comprehension *comprehension_ty; typedef struct _excepthandler *excepthandler_ty; typedef struct _arguments *arguments_ty; typedef struct _arg *arg_ty; typedef struct _keyword *keyword_ty; typedef struct _alias *alias_ty; typedef struct _withitem *withitem_ty; enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, Suite_kind=4}; struct _mod { enum _mod_kind kind; union { struct { asdl_seq *body; } Module; struct { asdl_seq *body; } Interactive; struct { expr_ty body; } Expression; struct { asdl_seq *body; } Suite; } v; }; enum _stmt_kind {FunctionDef_kind=1, ClassDef_kind=2, Return_kind=3, Delete_kind=4, Assign_kind=5, AugAssign_kind=6, For_kind=7, While_kind=8, If_kind=9, With_kind=10, Raise_kind=11, Try_kind=12, Assert_kind=13, Import_kind=14, ImportFrom_kind=15, Global_kind=16, Nonlocal_kind=17, Expr_kind=18, Pass_kind=19, Break_kind=20, Continue_kind=21}; struct _stmt { enum _stmt_kind kind; union { struct { identifier name; arguments_ty args; asdl_seq *body; asdl_seq *decorator_list; expr_ty returns; } FunctionDef; struct { identifier name; asdl_seq *bases; asdl_seq *keywords; expr_ty starargs; expr_ty kwargs; asdl_seq *body; asdl_seq *decorator_list; } ClassDef; struct { expr_ty value; } Return; struct { asdl_seq *targets; } Delete; struct { asdl_seq *targets; expr_ty value; } Assign; struct { expr_ty target; operator_ty op; expr_ty value; } AugAssign; struct { expr_ty target; expr_ty iter; asdl_seq *body; asdl_seq *orelse; } For; struct { expr_ty test; asdl_seq *body; asdl_seq *orelse; } While; struct { expr_ty test; asdl_seq *body; asdl_seq *orelse; } If; struct { asdl_seq *items; asdl_seq *body; } With; struct { expr_ty exc; expr_ty cause; } Raise; struct { asdl_seq *body; asdl_seq *handlers; asdl_seq *orelse; asdl_seq *finalbody; } Try; struct { expr_ty test; expr_ty msg; } Assert; struct { asdl_seq *names; } Import; struct { identifier module; asdl_seq *names; int level; } ImportFrom; struct { asdl_seq *names; } Global; struct { asdl_seq *names; } Nonlocal; struct { expr_ty value; } Expr; } v; int lineno; int col_offset; }; enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4, IfExp_kind=5, Dict_kind=6, Set_kind=7, ListComp_kind=8, SetComp_kind=9, DictComp_kind=10, GeneratorExp_kind=11, Yield_kind=12, YieldFrom_kind=13, Compare_kind=14, Call_kind=15, Num_kind=16, Str_kind=17, Bytes_kind=18, NameConstant_kind=19, Ellipsis_kind=20, Attribute_kind=21, Subscript_kind=22, Starred_kind=23, Name_kind=24, List_kind=25, Tuple_kind=26}; struct _expr { enum _expr_kind kind; union { struct { boolop_ty op; asdl_seq *values; } BoolOp; struct { expr_ty left; operator_ty op; expr_ty right; } BinOp; struct { unaryop_ty op; expr_ty operand; } UnaryOp; struct { arguments_ty args; expr_ty body; } Lambda; struct { expr_ty test; expr_ty body; expr_ty orelse; } IfExp; struct { asdl_seq *keys; asdl_seq *values; } Dict; struct { asdl_seq *elts; } Set; struct { expr_ty elt; asdl_seq *generators; } ListComp; struct { expr_ty elt; asdl_seq *generators; } SetComp; struct { expr_ty key; expr_ty value; asdl_seq *generators; } DictComp; struct { expr_ty elt; asdl_seq *generators; } GeneratorExp; struct { expr_ty value; } Yield; struct { expr_ty value; } YieldFrom; struct { expr_ty left; asdl_int_seq *ops; asdl_seq *comparators; } Compare; struct { expr_ty func; asdl_seq *args; asdl_seq *keywords; expr_ty starargs; expr_ty kwargs; } Call; struct { object n; } Num; struct { string s; } Str; struct { bytes s; } Bytes; struct { singleton value; } NameConstant; struct { expr_ty value; identifier attr; expr_context_ty ctx; } Attribute; struct { expr_ty value; slice_ty slice; expr_context_ty ctx; } Subscript; struct { expr_ty value; expr_context_ty ctx; } Starred; struct { identifier id; expr_context_ty ctx; } Name; struct { asdl_seq *elts; expr_context_ty ctx; } List; struct { asdl_seq *elts; expr_context_ty ctx; } Tuple; } v; int lineno; int col_offset; }; enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}; struct _slice { enum _slice_kind kind; union { struct { expr_ty lower; expr_ty upper; expr_ty step; } Slice; struct { asdl_seq *dims; } ExtSlice; struct { expr_ty value; } Index; } v; }; struct _comprehension { expr_ty target; expr_ty iter; asdl_seq *ifs; }; enum _excepthandler_kind {ExceptHandler_kind=1}; struct _excepthandler { enum _excepthandler_kind kind; union { struct { expr_ty type; identifier name; asdl_seq *body; } ExceptHandler; } v; int lineno; int col_offset; }; struct _arguments { asdl_seq *args; arg_ty vararg; asdl_seq *kwonlyargs; asdl_seq *kw_defaults; arg_ty kwarg; asdl_seq *defaults; }; struct _arg { identifier arg; expr_ty annotation; int lineno; int col_offset; }; struct _keyword { identifier arg; expr_ty value; }; struct _alias { identifier name; identifier asname; }; struct _withitem { expr_ty context_expr; expr_ty optional_vars; }; #define Module(a0, a1) _Py_Module(a0, a1) mod_ty _Py_Module(asdl_seq * body, PyArena *arena); #define Interactive(a0, a1) _Py_Interactive(a0, a1) mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena); #define Expression(a0, a1) _Py_Expression(a0, a1) mod_ty _Py_Expression(expr_ty body, PyArena *arena); #define Suite(a0, a1) _Py_Suite(a0, a1) mod_ty _Py_Suite(asdl_seq * body, PyArena *arena); #define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq * decorator_list, expr_ty returns, int lineno, int col_offset, PyArena *arena); #define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, expr_ty starargs, expr_ty kwargs, asdl_seq * body, asdl_seq * decorator_list, int lineno, int col_offset, PyArena *arena); #define Return(a0, a1, a2, a3) _Py_Return(a0, a1, a2, a3) stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, PyArena *arena); #define Delete(a0, a1, a2, a3) _Py_Delete(a0, a1, a2, a3) stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena); #define Assign(a0, a1, a2, a3, a4) _Py_Assign(a0, a1, a2, a3, a4) stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena *arena); #define AugAssign(a0, a1, a2, a3, a4, a5) _Py_AugAssign(a0, a1, a2, a3, a4, a5) stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int col_offset, PyArena *arena); #define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6) stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int lineno, int col_offset, PyArena *arena); #define While(a0, a1, a2, a3, a4, a5) _Py_While(a0, a1, a2, a3, a4, a5) stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int col_offset, PyArena *arena); #define If(a0, a1, a2, a3, a4, a5) _Py_If(a0, a1, a2, a3, a4, a5) stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int col_offset, PyArena *arena); #define With(a0, a1, a2, a3, a4) _Py_With(a0, a1, a2, a3, a4) stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset, PyArena *arena); #define Raise(a0, a1, a2, a3, a4) _Py_Raise(a0, a1, a2, a3, a4) stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, PyArena *arena); #define Try(a0, a1, a2, a3, a4, a5, a6) _Py_Try(a0, a1, a2, a3, a4, a5, a6) stmt_ty _Py_Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, asdl_seq * finalbody, int lineno, int col_offset, PyArena *arena); #define Assert(a0, a1, a2, a3, a4) _Py_Assert(a0, a1, a2, a3, a4) stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena); #define Import(a0, a1, a2, a3) _Py_Import(a0, a1, a2, a3) stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, PyArena *arena); #define ImportFrom(a0, a1, a2, a3, a4, a5) _Py_ImportFrom(a0, a1, a2, a3, a4, a5) stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int col_offset, PyArena *arena); #define Global(a0, a1, a2, a3) _Py_Global(a0, a1, a2, a3) stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, PyArena *arena); #define Nonlocal(a0, a1, a2, a3) _Py_Nonlocal(a0, a1, a2, a3) stmt_ty _Py_Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena *arena); #define Expr(a0, a1, a2, a3) _Py_Expr(a0, a1, a2, a3) stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, PyArena *arena); #define Pass(a0, a1, a2) _Py_Pass(a0, a1, a2) stmt_ty _Py_Pass(int lineno, int col_offset, PyArena *arena); #define Break(a0, a1, a2) _Py_Break(a0, a1, a2) stmt_ty _Py_Break(int lineno, int col_offset, PyArena *arena); #define Continue(a0, a1, a2) _Py_Continue(a0, a1, a2) stmt_ty _Py_Continue(int lineno, int col_offset, PyArena *arena); #define BoolOp(a0, a1, a2, a3, a4) _Py_BoolOp(a0, a1, a2, a3, a4) expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena *arena); #define BinOp(a0, a1, a2, a3, a4, a5) _Py_BinOp(a0, a1, a2, a3, a4, a5) expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset, PyArena *arena); #define UnaryOp(a0, a1, a2, a3, a4) _Py_UnaryOp(a0, a1, a2, a3, a4) expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena *arena); #define Lambda(a0, a1, a2, a3, a4) _Py_Lambda(a0, a1, a2, a3, a4) expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena *arena); #define IfExp(a0, a1, a2, a3, a4, a5) _Py_IfExp(a0, a1, a2, a3, a4, a5) expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset, PyArena *arena); #define Dict(a0, a1, a2, a3, a4) _Py_Dict(a0, a1, a2, a3, a4) expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena *arena); #define Set(a0, a1, a2, a3) _Py_Set(a0, a1, a2, a3) expr_ty _Py_Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena); #define ListComp(a0, a1, a2, a3, a4) _Py_ListComp(a0, a1, a2, a3, a4) expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena *arena); #define SetComp(a0, a1, a2, a3, a4) _Py_SetComp(a0, a1, a2, a3, a4) expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena *arena); #define DictComp(a0, a1, a2, a3, a4, a5) _Py_DictComp(a0, a1, a2, a3, a4, a5) expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int col_offset, PyArena *arena); #define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4) expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena *arena); #define Yield(a0, a1, a2, a3) _Py_Yield(a0, a1, a2, a3) expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, PyArena *arena); #define YieldFrom(a0, a1, a2, a3) _Py_YieldFrom(a0, a1, a2, a3) expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, PyArena *arena); #define Compare(a0, a1, a2, a3, a4, a5) _Py_Compare(a0, a1, a2, a3, a4, a5) expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno, int col_offset, PyArena *arena); #define Call(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Call(a0, a1, a2, a3, a4, a5, a6, a7) expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs, expr_ty kwargs, int lineno, int col_offset, PyArena *arena); #define Num(a0, a1, a2, a3) _Py_Num(a0, a1, a2, a3) expr_ty _Py_Num(object n, int lineno, int col_offset, PyArena *arena); #define Str(a0, a1, a2, a3) _Py_Str(a0, a1, a2, a3) expr_ty _Py_Str(string s, int lineno, int col_offset, PyArena *arena); #define Bytes(a0, a1, a2, a3) _Py_Bytes(a0, a1, a2, a3) expr_ty _Py_Bytes(bytes s, int lineno, int col_offset, PyArena *arena); #define NameConstant(a0, a1, a2, a3) _Py_NameConstant(a0, a1, a2, a3) expr_ty _Py_NameConstant(singleton value, int lineno, int col_offset, PyArena *arena); #define Ellipsis(a0, a1, a2) _Py_Ellipsis(a0, a1, a2) expr_ty _Py_Ellipsis(int lineno, int col_offset, PyArena *arena); #define Attribute(a0, a1, a2, a3, a4, a5) _Py_Attribute(a0, a1, a2, a3, a4, a5) expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define Subscript(a0, a1, a2, a3, a4, a5) _Py_Subscript(a0, a1, a2, a3, a4, a5) expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define Starred(a0, a1, a2, a3, a4) _Py_Starred(a0, a1, a2, a3, a4) expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define Name(a0, a1, a2, a3, a4) _Py_Name(a0, a1, a2, a3, a4) expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define List(a0, a1, a2, a3, a4) _Py_List(a0, a1, a2, a3, a4) expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define Tuple(a0, a1, a2, a3, a4) _Py_Tuple(a0, a1, a2, a3, a4) expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena); #define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3) slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena); #define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1) slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena); #define Index(a0, a1) _Py_Index(a0, a1) slice_ty _Py_Index(expr_ty value, PyArena *arena); #define comprehension(a0, a1, a2, a3) _Py_comprehension(a0, a1, a2, a3) comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena); #define ExceptHandler(a0, a1, a2, a3, a4, a5) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5) excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int col_offset, PyArena *arena); #define arguments(a0, a1, a2, a3, a4, a5, a6) _Py_arguments(a0, a1, a2, a3, a4, a5, a6) arguments_ty _Py_arguments(asdl_seq * args, arg_ty vararg, asdl_seq * kwonlyargs, asdl_seq * kw_defaults, arg_ty kwarg, asdl_seq * defaults, PyArena *arena); #define arg(a0, a1, a2) _Py_arg(a0, a1, a2) arg_ty _Py_arg(identifier arg, expr_ty annotation, PyArena *arena); #define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2) keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena); #define alias(a0, a1, a2) _Py_alias(a0, a1, a2) alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); #define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2) withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena); PyObject* PyAST_mod2obj(mod_ty t); mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode); int PyAST_Check(PyObject* obj); include/python3.4m/pytime.h000064400000005542152342604300011577 0ustar00#ifndef Py_LIMITED_API #ifndef Py_PYTIME_H #define Py_PYTIME_H #include "pyconfig.h" /* include for defines */ #include "object.h" /************************************************************************** Symbols and macros to supply platform-independent interfaces to time related functions and constants **************************************************************************/ #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_GETTIMEOFDAY typedef struct timeval _PyTime_timeval; #else typedef struct { time_t tv_sec; /* seconds since Jan. 1, 1970 */ long tv_usec; /* and microseconds */ } _PyTime_timeval; #endif /* Structure used by time.get_clock_info() */ typedef struct { const char *implementation; int monotonic; int adjustable; double resolution; } _Py_clock_info_t; /* Similar to POSIX gettimeofday but cannot fail. If system gettimeofday * fails or is not available, fall back to lower resolution clocks. */ PyAPI_FUNC(void) _PyTime_gettimeofday(_PyTime_timeval *tp); /* Similar to _PyTime_gettimeofday() but retrieve also information on the * clock used to get the current time. */ PyAPI_FUNC(void) _PyTime_gettimeofday_info( _PyTime_timeval *tp, _Py_clock_info_t *info); #define _PyTime_ADD_SECONDS(tv, interval) \ do { \ tv.tv_usec += (long) (((long) interval - interval) * 1000000); \ tv.tv_sec += (time_t) interval + (time_t) (tv.tv_usec / 1000000); \ tv.tv_usec %= 1000000; \ } while (0) #define _PyTime_INTERVAL(tv_start, tv_end) \ ((tv_end.tv_sec - tv_start.tv_sec) + \ (tv_end.tv_usec - tv_start.tv_usec) * 0.000001) #ifndef Py_LIMITED_API typedef enum { /* Round towards zero. */ _PyTime_ROUND_DOWN=0, /* Round away from zero. */ _PyTime_ROUND_UP } _PyTime_round_t; /* Convert a number of seconds, int or float, to time_t. */ PyAPI_FUNC(int) _PyTime_ObjectToTime_t( PyObject *obj, time_t *sec, _PyTime_round_t); /* Convert a time_t to a PyLong. */ PyAPI_FUNC(PyObject *) _PyLong_FromTime_t( time_t sec); /* Convert a PyLong to a time_t. */ PyAPI_FUNC(time_t) _PyLong_AsTime_t( PyObject *obj); /* Convert a number of seconds, int or float, to a timeval structure. usec is in the range [0; 999999] and rounded towards zero. For example, -1.2 is converted to (-2, 800000). */ PyAPI_FUNC(int) _PyTime_ObjectToTimeval( PyObject *obj, time_t *sec, long *usec, _PyTime_round_t); /* Convert a number of seconds, int or float, to a timespec structure. nsec is in the range [0; 999999999] and rounded towards zero. For example, -1.2 is converted to (-2, 800000000). */ PyAPI_FUNC(int) _PyTime_ObjectToTimespec( PyObject *obj, time_t *sec, long *nsec, _PyTime_round_t); #endif /* Dummy to force linking. */ PyAPI_FUNC(void) _PyTime_Init(void); #ifdef __cplusplus } #endif #endif /* Py_PYTIME_H */ #endif /* Py_LIMITED_API */ include/python3.4m/typeslots.h000064400000003715152342604300012336 0ustar00/* Do not renumber the file; these numbers are part of the stable ABI. */ /* Disabled, see #10181 */ #undef Py_bf_getbuffer #undef Py_bf_releasebuffer #define Py_mp_ass_subscript 3 #define Py_mp_length 4 #define Py_mp_subscript 5 #define Py_nb_absolute 6 #define Py_nb_add 7 #define Py_nb_and 8 #define Py_nb_bool 9 #define Py_nb_divmod 10 #define Py_nb_float 11 #define Py_nb_floor_divide 12 #define Py_nb_index 13 #define Py_nb_inplace_add 14 #define Py_nb_inplace_and 15 #define Py_nb_inplace_floor_divide 16 #define Py_nb_inplace_lshift 17 #define Py_nb_inplace_multiply 18 #define Py_nb_inplace_or 19 #define Py_nb_inplace_power 20 #define Py_nb_inplace_remainder 21 #define Py_nb_inplace_rshift 22 #define Py_nb_inplace_subtract 23 #define Py_nb_inplace_true_divide 24 #define Py_nb_inplace_xor 25 #define Py_nb_int 26 #define Py_nb_invert 27 #define Py_nb_lshift 28 #define Py_nb_multiply 29 #define Py_nb_negative 30 #define Py_nb_or 31 #define Py_nb_positive 32 #define Py_nb_power 33 #define Py_nb_remainder 34 #define Py_nb_rshift 35 #define Py_nb_subtract 36 #define Py_nb_true_divide 37 #define Py_nb_xor 38 #define Py_sq_ass_item 39 #define Py_sq_concat 40 #define Py_sq_contains 41 #define Py_sq_inplace_concat 42 #define Py_sq_inplace_repeat 43 #define Py_sq_item 44 #define Py_sq_length 45 #define Py_sq_repeat 46 #define Py_tp_alloc 47 #define Py_tp_base 48 #define Py_tp_bases 49 #define Py_tp_call 50 #define Py_tp_clear 51 #define Py_tp_dealloc 52 #define Py_tp_del 53 #define Py_tp_descr_get 54 #define Py_tp_descr_set 55 #define Py_tp_doc 56 #define Py_tp_getattr 57 #define Py_tp_getattro 58 #define Py_tp_hash 59 #define Py_tp_init 60 #define Py_tp_is_gc 61 #define Py_tp_iter 62 #define Py_tp_iternext 63 #define Py_tp_methods 64 #define Py_tp_new 65 #define Py_tp_repr 66 #define Py_tp_richcompare 67 #define Py_tp_setattr 68 #define Py_tp_setattro 69 #define Py_tp_str 70 #define Py_tp_traverse 71 #define Py_tp_members 72 #define Py_tp_getset 73 #define Py_tp_free 74 include/python3.4m/metagrammar.h000064400000000375152342604300012564 0ustar00#ifndef Py_METAGRAMMAR_H #define Py_METAGRAMMAR_H #ifdef __cplusplus extern "C" { #endif #define MSTART 256 #define RULE 257 #define RHS 258 #define ALT 259 #define ITEM 260 #define ATOM 261 #ifdef __cplusplus } #endif #endif /* !Py_METAGRAMMAR_H */ include/python3.4m/pgen.h000064400000000375152342604300011220 0ustar00#ifndef Py_PGEN_H #define Py_PGEN_H #ifdef __cplusplus extern "C" { #endif /* Parser generator interface */ extern grammar *meta_grammar(void); struct _node; extern grammar *pgen(struct _node *); #ifdef __cplusplus } #endif #endif /* !Py_PGEN_H */ include/python3.4m/memoryobject.h000064400000005455152342604300012772 0ustar00/* Memory view object. In Python this is available as "memoryview". */ #ifndef Py_MEMORYOBJECT_H #define Py_MEMORYOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type; #endif PyAPI_DATA(PyTypeObject) PyMemoryView_Type; #define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type) #ifndef Py_LIMITED_API /* Get a pointer to the memoryview's private copy of the exporter's buffer. */ #define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view) /* Get a pointer to the exporting object (this may be NULL!). */ #define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj) #endif PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base); PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size, int flags); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info); #endif PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, int buffertype, char order); /* The structs are declared here so that macros can work, but they shouldn't be considered public. Don't access their fields directly, use the macros and functions instead! */ #ifndef Py_LIMITED_API #define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */ #define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */ typedef struct { PyObject_HEAD int flags; /* state flags */ Py_ssize_t exports; /* number of direct memoryview exports */ Py_buffer master; /* snapshot buffer obtained from the original exporter */ } _PyManagedBufferObject; /* deprecated, removed in 3.5 */ #define _Py_MEMORYVIEW_MAX_FORMAT 3 /* must be >= 3 */ /* memoryview state flags */ #define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */ #define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */ #define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */ #define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */ #define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */ typedef struct { PyObject_VAR_HEAD _PyManagedBufferObject *mbuf; /* managed buffer */ Py_hash_t hash; /* hash value for read-only views */ int flags; /* state flags */ Py_ssize_t exports; /* number of buffer re-exports */ Py_buffer view; /* private copy of the exporter's view */ char format[_Py_MEMORYVIEW_MAX_FORMAT]; /* deprecated, removed in 3.5 */ PyObject *weakreflist; Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */ } PyMemoryViewObject; #endif #ifdef __cplusplus } #endif #endif /* !Py_MEMORYOBJECT_H */ include/python3.4m/structmember.h000064400000004024152342604300012776 0ustar00#ifndef Py_STRUCTMEMBER_H #define Py_STRUCTMEMBER_H #ifdef __cplusplus extern "C" { #endif /* Interface to map C struct members to Python object attributes */ #include /* For offsetof */ /* An array of PyMemberDef structures defines the name, type and offset of selected members of a C structure. These can be read by PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY flag is set). The array must be terminated with an entry whose name pointer is NULL. */ typedef struct PyMemberDef { char *name; int type; Py_ssize_t offset; int flags; char *doc; } PyMemberDef; /* Types */ #define T_SHORT 0 #define T_INT 1 #define T_LONG 2 #define T_FLOAT 3 #define T_DOUBLE 4 #define T_STRING 5 #define T_OBJECT 6 /* XXX the ordering here is weird for binary compatibility */ #define T_CHAR 7 /* 1-character string */ #define T_BYTE 8 /* 8-bit signed int */ /* unsigned variants: */ #define T_UBYTE 9 #define T_USHORT 10 #define T_UINT 11 #define T_ULONG 12 /* Added by Jack: strings contained in the structure */ #define T_STRING_INPLACE 13 /* Added by Lillo: bools contained in the structure (assumed char) */ #define T_BOOL 14 #define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError when the value is NULL, instead of converting to None. */ #ifdef HAVE_LONG_LONG #define T_LONGLONG 17 #define T_ULONGLONG 18 #endif /* HAVE_LONG_LONG */ #define T_PYSSIZET 19 /* Py_ssize_t */ #define T_NONE 20 /* Value is always None */ /* Flags */ #define READONLY 1 #define READ_RESTRICTED 2 #define PY_WRITE_RESTRICTED 4 #define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) /* Current API, use this */ PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); #ifdef __cplusplus } #endif #endif /* !Py_STRUCTMEMBER_H */ include/python3.4m/datetime.h000064400000020536152342604300012064 0ustar00/* datetime.h */ #ifndef Py_LIMITED_API #ifndef DATETIME_H #define DATETIME_H #ifdef __cplusplus extern "C" { #endif /* Fields are packed into successive bytes, each viewed as unsigned and * big-endian, unless otherwise noted: * * byte offset * 0 year 2 bytes, 1-9999 * 2 month 1 byte, 1-12 * 3 day 1 byte, 1-31 * 4 hour 1 byte, 0-23 * 5 minute 1 byte, 0-59 * 6 second 1 byte, 0-59 * 7 usecond 3 bytes, 0-999999 * 10 */ /* # of bytes for year, month, and day. */ #define _PyDateTime_DATE_DATASIZE 4 /* # of bytes for hour, minute, second, and usecond. */ #define _PyDateTime_TIME_DATASIZE 6 /* # of bytes for year, month, day, hour, minute, second, and usecond. */ #define _PyDateTime_DATETIME_DATASIZE 10 typedef struct { PyObject_HEAD Py_hash_t hashcode; /* -1 when unknown */ int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */ int seconds; /* 0 <= seconds < 24*3600 is invariant */ int microseconds; /* 0 <= microseconds < 1000000 is invariant */ } PyDateTime_Delta; typedef struct { PyObject_HEAD /* a pure abstract base class */ } PyDateTime_TZInfo; /* The datetime and time types have hashcodes, and an optional tzinfo member, * present if and only if hastzinfo is true. */ #define _PyTZINFO_HEAD \ PyObject_HEAD \ Py_hash_t hashcode; \ char hastzinfo; /* boolean flag */ /* No _PyDateTime_BaseTZInfo is allocated; it's just to have something * convenient to cast to, when getting at the hastzinfo member of objects * starting with _PyTZINFO_HEAD. */ typedef struct { _PyTZINFO_HEAD } _PyDateTime_BaseTZInfo; /* All time objects are of PyDateTime_TimeType, but that can be allocated * in two ways, with or without a tzinfo member. Without is the same as * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an * internal struct used to allocate the right amount of space for the * "without" case. */ #define _PyDateTime_TIMEHEAD \ _PyTZINFO_HEAD \ unsigned char data[_PyDateTime_TIME_DATASIZE]; typedef struct { _PyDateTime_TIMEHEAD } _PyDateTime_BaseTime; /* hastzinfo false */ typedef struct { _PyDateTime_TIMEHEAD PyObject *tzinfo; } PyDateTime_Time; /* hastzinfo true */ /* All datetime objects are of PyDateTime_DateTimeType, but that can be * allocated in two ways too, just like for time objects above. In addition, * the plain date type is a base class for datetime, so it must also have * a hastzinfo member (although it's unused there). */ typedef struct { _PyTZINFO_HEAD unsigned char data[_PyDateTime_DATE_DATASIZE]; } PyDateTime_Date; #define _PyDateTime_DATETIMEHEAD \ _PyTZINFO_HEAD \ unsigned char data[_PyDateTime_DATETIME_DATASIZE]; typedef struct { _PyDateTime_DATETIMEHEAD } _PyDateTime_BaseDateTime; /* hastzinfo false */ typedef struct { _PyDateTime_DATETIMEHEAD PyObject *tzinfo; } PyDateTime_DateTime; /* hastzinfo true */ /* Apply for date and datetime instances. */ #define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \ ((PyDateTime_Date*)o)->data[1]) #define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2]) #define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3]) #define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4]) #define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5]) #define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6]) #define PyDateTime_DATE_GET_MICROSECOND(o) \ ((((PyDateTime_DateTime*)o)->data[7] << 16) | \ (((PyDateTime_DateTime*)o)->data[8] << 8) | \ ((PyDateTime_DateTime*)o)->data[9]) /* Apply for time instances. */ #define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0]) #define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1]) #define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2]) #define PyDateTime_TIME_GET_MICROSECOND(o) \ ((((PyDateTime_Time*)o)->data[3] << 16) | \ (((PyDateTime_Time*)o)->data[4] << 8) | \ ((PyDateTime_Time*)o)->data[5]) /* Apply for time delta instances */ #define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days) #define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)o)->seconds) #define PyDateTime_DELTA_GET_MICROSECONDS(o) \ (((PyDateTime_Delta*)o)->microseconds) /* Define structure for C API. */ typedef struct { /* type objects */ PyTypeObject *DateType; PyTypeObject *DateTimeType; PyTypeObject *TimeType; PyTypeObject *DeltaType; PyTypeObject *TZInfoType; /* constructors */ PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, PyObject*, PyTypeObject*); PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); /* constructors for the DB API */ PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); } PyDateTime_CAPI; #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" #ifdef Py_BUILD_CORE /* Macros for type checking when building the Python core. */ #define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType) #define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType) #define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType) #define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType) #define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType) #define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType) #define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType) #define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType) #define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType) #else /* Define global variable for the C API and a macro for setting it. */ static PyDateTime_CAPI *PyDateTimeAPI = NULL; #define PyDateTime_IMPORT \ PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) /* Macros for type checking when not building the Python core. */ #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) #define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType) #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) #define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType) #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType) #define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType) #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) /* Macros for accessing constructors in a simplified fashion. */ #define PyDate_FromDate(year, month, day) \ PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType) #define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \ PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \ min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType) #define PyTime_FromTime(hour, minute, second, usecond) \ PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \ Py_None, PyDateTimeAPI->TimeType) #define PyDelta_FromDSU(days, seconds, useconds) \ PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \ PyDateTimeAPI->DeltaType) /* Macros supporting the DB API. */ #define PyDateTime_FromTimestamp(args) \ PyDateTimeAPI->DateTime_FromTimestamp( \ (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL) #define PyDate_FromTimestamp(args) \ PyDateTimeAPI->Date_FromTimestamp( \ (PyObject*) (PyDateTimeAPI->DateType), args) #endif /* Py_BUILD_CORE */ #ifdef __cplusplus } #endif #endif #endif /* !Py_LIMITED_API */ include/python3.4m/enumobject.h000064400000000375152342604300012422 0ustar00#ifndef Py_ENUMOBJECT_H #define Py_ENUMOBJECT_H /* Enumerate Object */ #ifdef __cplusplus extern "C" { #endif PyAPI_DATA(PyTypeObject) PyEnum_Type; PyAPI_DATA(PyTypeObject) PyReversed_Type; #ifdef __cplusplus } #endif #endif /* !Py_ENUMOBJECT_H */ include/python3.4m/compile.h000064400000004105152342604300011712 0ustar00#ifndef Py_COMPILE_H #define Py_COMPILE_H #ifndef Py_LIMITED_API #include "code.h" #ifdef __cplusplus extern "C" { #endif /* Public interface */ struct _node; /* Declare the existence of this type */ PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *); /* Future feature support */ typedef struct { int ff_features; /* flags set by future statements */ int ff_lineno; /* line number of last future statement */ } PyFutureFeatures; #define FUTURE_NESTED_SCOPES "nested_scopes" #define FUTURE_GENERATORS "generators" #define FUTURE_DIVISION "division" #define FUTURE_ABSOLUTE_IMPORT "absolute_import" #define FUTURE_WITH_STATEMENT "with_statement" #define FUTURE_PRINT_FUNCTION "print_function" #define FUTURE_UNICODE_LITERALS "unicode_literals" #define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL" struct _mod; /* Declare the existence of this type */ #define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar) PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx( struct _mod *mod, const char *filename, /* decoded from the filesystem encoding */ PyCompilerFlags *flags, int optimize, PyArena *arena); PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject( struct _mod *mod, PyObject *filename, PyCompilerFlags *flags, int optimize, PyArena *arena); PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST( struct _mod * mod, const char *filename /* decoded from the filesystem encoding */ ); PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject( struct _mod * mod, PyObject *filename ); /* _Py_Mangle is defined in compile.c */ PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name); #define PY_INVALID_STACK_EFFECT INT_MAX PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg); #ifdef __cplusplus } #endif #endif /* !Py_LIMITED_API */ /* These definitions must match corresponding definitions in graminit.h. There's code in compile.c that checks that they are the same. */ #define Py_single_input 256 #define Py_file_input 257 #define Py_eval_input 258 #endif /* !Py_COMPILE_H */ include/python3.4m/pgenheaders.h000064400000002170152342604300012547 0ustar00#ifndef Py_PGENHEADERS_H #define Py_PGENHEADERS_H #ifdef __cplusplus extern "C" { #endif /* Include files and extern declarations used by most of the parser. */ #include "Python.h" PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 1, 2))); PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 1, 2))); #define addarc _Py_addarc #define addbit _Py_addbit #define adddfa _Py_adddfa #define addfirstsets _Py_addfirstsets #define addlabel _Py_addlabel #define addstate _Py_addstate #define delbitset _Py_delbitset #define dumptree _Py_dumptree #define findlabel _Py_findlabel #define mergebitset _Py_mergebitset #define meta_grammar _Py_meta_grammar #define newbitset _Py_newbitset #define newgrammar _Py_newgrammar #define pgen _Py_pgen #define printgrammar _Py_printgrammar #define printnonterminals _Py_printnonterminals #define printtree _Py_printtree #define samebitset _Py_samebitset #define showtree _Py_showtree #define tok_dump _Py_tok_dump #define translatelabels _Py_translatelabels #ifdef __cplusplus } #endif #endif /* !Py_PGENHEADERS_H */ include/python3.4m/dynamic_annotations.h000064400000053705152342604300014335 0ustar00/* Copyright (c) 2008-2009, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * --- * Author: Kostya Serebryany * Copied to CPython by Jeffrey Yasskin, with all macros renamed to * start with _Py_ to avoid colliding with users embedding Python, and * with deprecated macros removed. */ /* This file defines dynamic annotations for use with dynamic analysis tool such as valgrind, PIN, etc. Dynamic annotation is a source code annotation that affects the generated code (that is, the annotation is not a comment). Each such annotation is attached to a particular instruction and/or to a particular object (address) in the program. The annotations that should be used by users are macros in all upper-case (e.g., _Py_ANNOTATE_NEW_MEMORY). Actual implementation of these macros may differ depending on the dynamic analysis tool being used. See http://code.google.com/p/data-race-test/ for more information. This file supports the following dynamic analysis tools: - None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero). Macros are defined empty. - ThreadSanitizer, Helgrind, DRD (DYNAMIC_ANNOTATIONS_ENABLED is 1). Macros are defined as calls to non-inlinable empty functions that are intercepted by Valgrind. */ #ifndef __DYNAMIC_ANNOTATIONS_H__ #define __DYNAMIC_ANNOTATIONS_H__ #ifndef DYNAMIC_ANNOTATIONS_ENABLED # define DYNAMIC_ANNOTATIONS_ENABLED 0 #endif #if DYNAMIC_ANNOTATIONS_ENABLED != 0 /* ------------------------------------------------------------- Annotations useful when implementing condition variables such as CondVar, using conditional critical sections (Await/LockWhen) and when constructing user-defined synchronization mechanisms. The annotations _Py_ANNOTATE_HAPPENS_BEFORE() and _Py_ANNOTATE_HAPPENS_AFTER() can be used to define happens-before arcs in user-defined synchronization mechanisms: the race detector will infer an arc from the former to the latter when they share the same argument pointer. Example 1 (reference counting): void Unref() { _Py_ANNOTATE_HAPPENS_BEFORE(&refcount_); if (AtomicDecrementByOne(&refcount_) == 0) { _Py_ANNOTATE_HAPPENS_AFTER(&refcount_); delete this; } } Example 2 (message queue): void MyQueue::Put(Type *e) { MutexLock lock(&mu_); _Py_ANNOTATE_HAPPENS_BEFORE(e); PutElementIntoMyQueue(e); } Type *MyQueue::Get() { MutexLock lock(&mu_); Type *e = GetElementFromMyQueue(); _Py_ANNOTATE_HAPPENS_AFTER(e); return e; } Note: when possible, please use the existing reference counting and message queue implementations instead of inventing new ones. */ /* Report that wait on the condition variable at address "cv" has succeeded and the lock at address "lock" is held. */ #define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \ AnnotateCondVarWait(__FILE__, __LINE__, cv, lock) /* Report that wait on the condition variable at "cv" has succeeded. Variant w/o lock. */ #define _Py_ANNOTATE_CONDVAR_WAIT(cv) \ AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL) /* Report that we are about to signal on the condition variable at address "cv". */ #define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \ AnnotateCondVarSignal(__FILE__, __LINE__, cv) /* Report that we are about to signal_all on the condition variable at "cv". */ #define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \ AnnotateCondVarSignalAll(__FILE__, __LINE__, cv) /* Annotations for user-defined synchronization mechanisms. */ #define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj) #define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj) /* Report that the bytes in the range [pointer, pointer+size) are about to be published safely. The race checker will create a happens-before arc from the call _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to subsequent accesses to this memory. Note: this annotation may not work properly if the race detector uses sampling, i.e. does not observe all memory accesses. */ #define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \ AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size) /* Instruct the tool to create a happens-before arc between mu->Unlock() and mu->Lock(). This annotation may slow down the race detector and hide real races. Normally it is used only when it would be difficult to annotate each of the mutex's critical sections individually using the annotations above. This annotation makes sense only for hybrid race detectors. For pure happens-before detectors this is a no-op. For more details see http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */ #define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \ AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) /* ------------------------------------------------------------- Annotations useful when defining memory allocators, or when memory that was protected in one way starts to be protected in another. */ /* Report that a new memory at "address" of size "size" has been allocated. This might be used when the memory has been retrieved from a free list and is about to be reused, or when the locking discipline for a variable changes. */ #define _Py_ANNOTATE_NEW_MEMORY(address, size) \ AnnotateNewMemory(__FILE__, __LINE__, address, size) /* ------------------------------------------------------------- Annotations useful when defining FIFO queues that transfer data between threads. */ /* Report that the producer-consumer queue (such as ProducerConsumerQueue) at address "pcq" has been created. The _Py_ANNOTATE_PCQ_* annotations should be used only for FIFO queues. For non-FIFO queues use _Py_ANNOTATE_HAPPENS_BEFORE (for put) and _Py_ANNOTATE_HAPPENS_AFTER (for get). */ #define _Py_ANNOTATE_PCQ_CREATE(pcq) \ AnnotatePCQCreate(__FILE__, __LINE__, pcq) /* Report that the queue at address "pcq" is about to be destroyed. */ #define _Py_ANNOTATE_PCQ_DESTROY(pcq) \ AnnotatePCQDestroy(__FILE__, __LINE__, pcq) /* Report that we are about to put an element into a FIFO queue at address "pcq". */ #define _Py_ANNOTATE_PCQ_PUT(pcq) \ AnnotatePCQPut(__FILE__, __LINE__, pcq) /* Report that we've just got an element from a FIFO queue at address "pcq". */ #define _Py_ANNOTATE_PCQ_GET(pcq) \ AnnotatePCQGet(__FILE__, __LINE__, pcq) /* ------------------------------------------------------------- Annotations that suppress errors. It is usually better to express the program's synchronization using the other annotations, but these can be used when all else fails. */ /* Report that we may have a benign race at "pointer", with size "sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the point where "pointer" has been allocated, preferably close to the point where the race happens. See also _Py_ANNOTATE_BENIGN_RACE_STATIC. */ #define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \ AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \ sizeof(*(pointer)), description) /* Same as _Py_ANNOTATE_BENIGN_RACE(address, description), but applies to the memory range [address, address+size). */ #define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description) /* Request the analysis tool to ignore all reads in the current thread until _Py_ANNOTATE_IGNORE_READS_END is called. Useful to ignore intentional racey reads, while still checking other reads and all writes. See also _Py_ANNOTATE_UNPROTECTED_READ. */ #define _Py_ANNOTATE_IGNORE_READS_BEGIN() \ AnnotateIgnoreReadsBegin(__FILE__, __LINE__) /* Stop ignoring reads. */ #define _Py_ANNOTATE_IGNORE_READS_END() \ AnnotateIgnoreReadsEnd(__FILE__, __LINE__) /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */ #define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \ AnnotateIgnoreWritesBegin(__FILE__, __LINE__) /* Stop ignoring writes. */ #define _Py_ANNOTATE_IGNORE_WRITES_END() \ AnnotateIgnoreWritesEnd(__FILE__, __LINE__) /* Start ignoring all memory accesses (reads and writes). */ #define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ do {\ _Py_ANNOTATE_IGNORE_READS_BEGIN();\ _Py_ANNOTATE_IGNORE_WRITES_BEGIN();\ }while(0)\ /* Stop ignoring all memory accesses. */ #define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \ do {\ _Py_ANNOTATE_IGNORE_WRITES_END();\ _Py_ANNOTATE_IGNORE_READS_END();\ }while(0)\ /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events: RWLOCK* and CONDVAR*. */ #define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \ AnnotateIgnoreSyncBegin(__FILE__, __LINE__) /* Stop ignoring sync events. */ #define _Py_ANNOTATE_IGNORE_SYNC_END() \ AnnotateIgnoreSyncEnd(__FILE__, __LINE__) /* Enable (enable!=0) or disable (enable==0) race detection for all threads. This annotation could be useful if you want to skip expensive race analysis during some period of program execution, e.g. during initialization. */ #define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \ AnnotateEnableRaceDetection(__FILE__, __LINE__, enable) /* ------------------------------------------------------------- Annotations useful for debugging. */ /* Request to trace every access to "address". */ #define _Py_ANNOTATE_TRACE_MEMORY(address) \ AnnotateTraceMemory(__FILE__, __LINE__, address) /* Report the current thread name to a race detector. */ #define _Py_ANNOTATE_THREAD_NAME(name) \ AnnotateThreadName(__FILE__, __LINE__, name) /* ------------------------------------------------------------- Annotations useful when implementing locks. They are not normally needed by modules that merely use locks. The "lock" argument is a pointer to the lock object. */ /* Report that a lock has been created at address "lock". */ #define _Py_ANNOTATE_RWLOCK_CREATE(lock) \ AnnotateRWLockCreate(__FILE__, __LINE__, lock) /* Report that the lock at address "lock" is about to be destroyed. */ #define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \ AnnotateRWLockDestroy(__FILE__, __LINE__, lock) /* Report that the lock at address "lock" has been acquired. is_w=1 for writer lock, is_w=0 for reader lock. */ #define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) /* Report that the lock at address "lock" is about to be released. */ #define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) /* ------------------------------------------------------------- Annotations useful when implementing barriers. They are not normally needed by modules that merely use barriers. The "barrier" argument is a pointer to the barrier object. */ /* Report that the "barrier" has been initialized with initial "count". If 'reinitialization_allowed' is true, initialization is allowed to happen multiple times w/o calling barrier_destroy() */ #define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \ AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \ reinitialization_allowed) /* Report that we are about to enter barrier_wait("barrier"). */ #define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \ AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier) /* Report that we just exited barrier_wait("barrier"). */ #define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \ AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier) /* Report that the "barrier" has been destroyed. */ #define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \ AnnotateBarrierDestroy(__FILE__, __LINE__, barrier) /* ------------------------------------------------------------- Annotations useful for testing race detectors. */ /* Report that we expect a race on the variable at "address". Use only in unit tests for a race detector. */ #define _Py_ANNOTATE_EXPECT_RACE(address, description) \ AnnotateExpectRace(__FILE__, __LINE__, address, description) /* A no-op. Insert where you like to test the interceptors. */ #define _Py_ANNOTATE_NO_OP(arg) \ AnnotateNoOp(__FILE__, __LINE__, arg) /* Force the race detector to flush its state. The actual effect depends on * the implementation of the detector. */ #define _Py_ANNOTATE_FLUSH_STATE() \ AnnotateFlushState(__FILE__, __LINE__) #else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ #define _Py_ANNOTATE_RWLOCK_CREATE(lock) /* empty */ #define _Py_ANNOTATE_RWLOCK_DESTROY(lock) /* empty */ #define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) /* empty */ #define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) /* empty */ #define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) /* */ #define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) /* empty */ #define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) /* empty */ #define _Py_ANNOTATE_BARRIER_DESTROY(barrier) /* empty */ #define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) /* empty */ #define _Py_ANNOTATE_CONDVAR_WAIT(cv) /* empty */ #define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) /* empty */ #define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) /* empty */ #define _Py_ANNOTATE_HAPPENS_BEFORE(obj) /* empty */ #define _Py_ANNOTATE_HAPPENS_AFTER(obj) /* empty */ #define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) /* empty */ #define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size) /* empty */ #define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size) /* empty */ #define _Py_ANNOTATE_PCQ_CREATE(pcq) /* empty */ #define _Py_ANNOTATE_PCQ_DESTROY(pcq) /* empty */ #define _Py_ANNOTATE_PCQ_PUT(pcq) /* empty */ #define _Py_ANNOTATE_PCQ_GET(pcq) /* empty */ #define _Py_ANNOTATE_NEW_MEMORY(address, size) /* empty */ #define _Py_ANNOTATE_EXPECT_RACE(address, description) /* empty */ #define _Py_ANNOTATE_BENIGN_RACE(address, description) /* empty */ #define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */ #define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */ #define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) /* empty */ #define _Py_ANNOTATE_TRACE_MEMORY(arg) /* empty */ #define _Py_ANNOTATE_THREAD_NAME(name) /* empty */ #define _Py_ANNOTATE_IGNORE_READS_BEGIN() /* empty */ #define _Py_ANNOTATE_IGNORE_READS_END() /* empty */ #define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() /* empty */ #define _Py_ANNOTATE_IGNORE_WRITES_END() /* empty */ #define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() /* empty */ #define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() /* empty */ #define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() /* empty */ #define _Py_ANNOTATE_IGNORE_SYNC_END() /* empty */ #define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) /* empty */ #define _Py_ANNOTATE_NO_OP(arg) /* empty */ #define _Py_ANNOTATE_FLUSH_STATE() /* empty */ #endif /* DYNAMIC_ANNOTATIONS_ENABLED */ /* Use the macros above rather than using these functions directly. */ #ifdef __cplusplus extern "C" { #endif void AnnotateRWLockCreate(const char *file, int line, const volatile void *lock); void AnnotateRWLockDestroy(const char *file, int line, const volatile void *lock); void AnnotateRWLockAcquired(const char *file, int line, const volatile void *lock, long is_w); void AnnotateRWLockReleased(const char *file, int line, const volatile void *lock, long is_w); void AnnotateBarrierInit(const char *file, int line, const volatile void *barrier, long count, long reinitialization_allowed); void AnnotateBarrierWaitBefore(const char *file, int line, const volatile void *barrier); void AnnotateBarrierWaitAfter(const char *file, int line, const volatile void *barrier); void AnnotateBarrierDestroy(const char *file, int line, const volatile void *barrier); void AnnotateCondVarWait(const char *file, int line, const volatile void *cv, const volatile void *lock); void AnnotateCondVarSignal(const char *file, int line, const volatile void *cv); void AnnotateCondVarSignalAll(const char *file, int line, const volatile void *cv); void AnnotatePublishMemoryRange(const char *file, int line, const volatile void *address, long size); void AnnotateUnpublishMemoryRange(const char *file, int line, const volatile void *address, long size); void AnnotatePCQCreate(const char *file, int line, const volatile void *pcq); void AnnotatePCQDestroy(const char *file, int line, const volatile void *pcq); void AnnotatePCQPut(const char *file, int line, const volatile void *pcq); void AnnotatePCQGet(const char *file, int line, const volatile void *pcq); void AnnotateNewMemory(const char *file, int line, const volatile void *address, long size); void AnnotateExpectRace(const char *file, int line, const volatile void *address, const char *description); void AnnotateBenignRace(const char *file, int line, const volatile void *address, const char *description); void AnnotateBenignRaceSized(const char *file, int line, const volatile void *address, long size, const char *description); void AnnotateMutexIsUsedAsCondVar(const char *file, int line, const volatile void *mu); void AnnotateTraceMemory(const char *file, int line, const volatile void *arg); void AnnotateThreadName(const char *file, int line, const char *name); void AnnotateIgnoreReadsBegin(const char *file, int line); void AnnotateIgnoreReadsEnd(const char *file, int line); void AnnotateIgnoreWritesBegin(const char *file, int line); void AnnotateIgnoreWritesEnd(const char *file, int line); void AnnotateEnableRaceDetection(const char *file, int line, int enable); void AnnotateNoOp(const char *file, int line, const volatile void *arg); void AnnotateFlushState(const char *file, int line); /* Return non-zero value if running under valgrind. If "valgrind.h" is included into dynamic_annotations.c, the regular valgrind mechanism will be used. See http://valgrind.org/docs/manual/manual-core-adv.html about RUNNING_ON_VALGRIND and other valgrind "client requests". The file "valgrind.h" may be obtained by doing svn co svn://svn.valgrind.org/valgrind/trunk/include If for some reason you can't use "valgrind.h" or want to fake valgrind, there are two ways to make this function return non-zero: - Use environment variable: export RUNNING_ON_VALGRIND=1 - Make your tool intercept the function RunningOnValgrind() and change its return value. */ int RunningOnValgrind(void); #ifdef __cplusplus } #endif #if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus) /* _Py_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads. Instead of doing _Py_ANNOTATE_IGNORE_READS_BEGIN(); ... = x; _Py_ANNOTATE_IGNORE_READS_END(); one can use ... = _Py_ANNOTATE_UNPROTECTED_READ(x); */ template inline T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) { _Py_ANNOTATE_IGNORE_READS_BEGIN(); T res = x; _Py_ANNOTATE_IGNORE_READS_END(); return res; } /* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */ #define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ namespace { \ class static_var ## _annotator { \ public: \ static_var ## _annotator() { \ _Py_ANNOTATE_BENIGN_RACE_SIZED(&static_var, \ sizeof(static_var), \ # static_var ": " description); \ } \ }; \ static static_var ## _annotator the ## static_var ## _annotator;\ } #else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ #define _Py_ANNOTATE_UNPROTECTED_READ(x) (x) #define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) /* empty */ #endif /* DYNAMIC_ANNOTATIONS_ENABLED */ #endif /* __DYNAMIC_ANNOTATIONS_H__ */ include/python3.4m/listobject.h000064400000005424152342604300012431 0ustar00 /* List object interface */ /* Another generally useful object type is an list of object pointers. This is a mutable type: the list items can be changed, and items can be added or removed. Out-of-range indices or non-list objects are ignored. *** WARNING *** PyList_SetItem does not increment the new item's reference count, but does decrement the reference count of the item it replaces, if not nil. It does *decrement* the reference count if it is *not* inserted in the list. Similarly, PyList_GetItem does not increment the returned item's reference count. */ #ifndef Py_LISTOBJECT_H #define Py_LISTOBJECT_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API typedef struct { PyObject_VAR_HEAD /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ PyObject **ob_item; /* ob_item contains space for 'allocated' elements. The number * currently in use is ob_size. * Invariants: * 0 <= ob_size <= allocated * len(list) == ob_size * ob_item == NULL implies ob_size == allocated == 0 * list.sort() temporarily sets allocated to -1 to detect mutations. * * Items must normally not be NULL, except during construction when * the list is not yet visible outside the function that builds it. */ Py_ssize_t allocated; } PyListObject; #endif PyAPI_DATA(PyTypeObject) PyList_Type; PyAPI_DATA(PyTypeObject) PyListIter_Type; PyAPI_DATA(PyTypeObject) PyListRevIter_Type; PyAPI_DATA(PyTypeObject) PySortWrapper_Type; #define PyList_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS) #define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type) PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *); PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Sort(PyObject *); PyAPI_FUNC(int) PyList_Reverse(PyObject *); PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); PyAPI_FUNC(int) PyList_ClearFreeList(void); PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); #endif /* Macro, trading safety for speed */ #ifndef Py_LIMITED_API #define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) #define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v)) #define PyList_GET_SIZE(op) Py_SIZE(op) #endif #ifdef __cplusplus } #endif #endif /* !Py_LISTOBJECT_H */ include/python3.4m/pythread.h000064400000005734152342604300012113 0ustar00 #ifndef Py_PYTHREAD_H #define Py_PYTHREAD_H typedef void *PyThread_type_lock; typedef void *PyThread_type_sema; #ifdef __cplusplus extern "C" { #endif /* Return status codes for Python lock acquisition. Chosen for maximum * backwards compatibility, ie failure -> 0, success -> 1. */ typedef enum PyLockStatus { PY_LOCK_FAILURE = 0, PY_LOCK_ACQUIRED = 1, PY_LOCK_INTR } PyLockStatus; PyAPI_FUNC(void) PyThread_init_thread(void); PyAPI_FUNC(long) PyThread_start_new_thread(void (*)(void *), void *); PyAPI_FUNC(void) PyThread_exit_thread(void); PyAPI_FUNC(long) PyThread_get_thread_ident(void); PyAPI_FUNC(PyThread_type_lock) PyThread_allocate_lock(void); PyAPI_FUNC(void) PyThread_free_lock(PyThread_type_lock); PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #define WAIT_LOCK 1 #define NOWAIT_LOCK 0 /* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting on a lock (see PyThread_acquire_lock_timed() below). PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that type, and depends on the system threading API. NOTE: this isn't the same value as `_thread.TIMEOUT_MAX`. The _thread module exposes a higher-level API, with timeouts expressed in seconds and floating-point numbers allowed. */ #if defined(HAVE_LONG_LONG) #define PY_TIMEOUT_T PY_LONG_LONG #define PY_TIMEOUT_MAX PY_LLONG_MAX #else #define PY_TIMEOUT_T long #define PY_TIMEOUT_MAX LONG_MAX #endif /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ #if defined (NT_THREADS) #if (Py_LL(0xFFFFFFFF) * 1000 < PY_TIMEOUT_MAX) #undef PY_TIMEOUT_MAX #define PY_TIMEOUT_MAX (Py_LL(0xFFFFFFFF) * 1000) #endif #endif /* If microseconds == 0, the call is non-blocking: it returns immediately even when the lock can't be acquired. If microseconds > 0, the call waits up to the specified duration. If microseconds < 0, the call waits until success (or abnormal failure) microseconds must be less than PY_TIMEOUT_MAX. Behaviour otherwise is undefined. If intr_flag is true and the acquire is interrupted by a signal, then the call will return PY_LOCK_INTR. The caller may reattempt to acquire the lock. */ PyAPI_FUNC(PyLockStatus) PyThread_acquire_lock_timed(PyThread_type_lock, PY_TIMEOUT_T microseconds, int intr_flag); PyAPI_FUNC(void) PyThread_release_lock(PyThread_type_lock); PyAPI_FUNC(size_t) PyThread_get_stacksize(void); PyAPI_FUNC(int) PyThread_set_stacksize(size_t); PyAPI_FUNC(PyObject*) PyThread_GetInfo(void); /* Thread Local Storage (TLS) API */ PyAPI_FUNC(int) PyThread_create_key(void); PyAPI_FUNC(void) PyThread_delete_key(int); PyAPI_FUNC(int) PyThread_set_key_value(int, void *); PyAPI_FUNC(void *) PyThread_get_key_value(int); PyAPI_FUNC(void) PyThread_delete_key_value(int key); /* Cleanup after a fork */ PyAPI_FUNC(void) PyThread_ReInitTLS(void); #ifdef __cplusplus } #endif #endif /* !Py_PYTHREAD_H */ include/python3.4m/warnings.h000064400000002622152342604300012114 0ustar00#ifndef Py_WARNINGS_H #define Py_WARNINGS_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject*) _PyWarnings_Init(void); #endif PyAPI_FUNC(int) PyErr_WarnEx( PyObject *category, const char *message, /* UTF-8 encoded string */ Py_ssize_t stack_level); PyAPI_FUNC(int) PyErr_WarnFormat( PyObject *category, Py_ssize_t stack_level, const char *format, /* ASCII-encoded string */ ...); #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyErr_WarnExplicitObject( PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry); #endif PyAPI_FUNC(int) PyErr_WarnExplicit( PyObject *category, const char *message, /* UTF-8 encoded string */ const char *filename, /* decoded from the filesystem encoding */ int lineno, const char *module, /* UTF-8 encoded string */ PyObject *registry); #ifndef Py_LIMITED_API PyAPI_FUNC(int) PyErr_WarnExplicitFormat(PyObject *category, const char *filename, int lineno, const char *module, PyObject *registry, const char *format, ...); #endif /* DEPRECATED: Use PyErr_WarnEx() instead. */ #ifndef Py_LIMITED_API #define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1) #endif #ifdef __cplusplus } #endif #endif /* !Py_WARNINGS_H */ include/python3.4m/setobject.h000064400000006345152342604300012254 0ustar00/* Set object interface */ #ifndef Py_SETOBJECT_H #define Py_SETOBJECT_H #ifdef __cplusplus extern "C" { #endif /* There are three kinds of slots in the table: 1. Unused: key == NULL 2. Active: key != NULL and key != dummy 3. Dummy: key == dummy Note: .pop() abuses the hash field of an Unused or Dummy slot to hold a search finger. The hash field of Unused or Dummy slots has no meaning otherwise. */ #ifndef Py_LIMITED_API #define PySet_MINSIZE 8 typedef struct { /* Cached hash code of the key. */ PyObject *key; Py_hash_t hash; } setentry; /* This data structure is shared by set and frozenset objects. */ typedef struct _setobject PySetObject; struct _setobject { PyObject_HEAD Py_ssize_t fill; /* # Active + # Dummy */ Py_ssize_t used; /* # Active */ /* The table contains mask + 1 slots, and that's a power of 2. * We store the mask instead of the size because the mask is more * frequently needed. */ Py_ssize_t mask; /* table points to smalltable for small tables, else to * additional malloc'ed memory. table is never NULL! This rule * saves repeated runtime null-tests. */ setentry *table; setentry *(*lookup)(PySetObject *so, PyObject *key, Py_hash_t hash); Py_hash_t hash; /* only used by frozenset objects */ setentry smalltable[PySet_MINSIZE]; PyObject *weakreflist; /* List of weak references */ }; #endif /* Py_LIMITED_API */ PyAPI_DATA(PyTypeObject) PySet_Type; PyAPI_DATA(PyTypeObject) PyFrozenSet_Type; PyAPI_DATA(PyTypeObject) PySetIter_Type; #ifndef Py_LIMITED_API PyAPI_DATA(PyObject *) _PySet_Dummy; #endif /* Invariants for frozensets: * data is immutable. * hash is the hash of the frozenset or -1 if not computed yet. * Invariants for sets: * hash is -1 */ #define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type) #define PyAnySet_CheckExact(ob) \ (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type) #define PyAnySet_Check(ob) \ (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) #define PySet_Check(ob) \ (Py_TYPE(ob) == &PySet_Type || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type)) #define PyFrozenSet_Check(ob) \ (Py_TYPE(ob) == &PyFrozenSet_Type || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) PyAPI_FUNC(PyObject *) PySet_New(PyObject *); PyAPI_FUNC(PyObject *) PyFrozenSet_New(PyObject *); PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset); #ifndef Py_LIMITED_API #define PySet_GET_SIZE(so) (((PySetObject *)(so))->used) #endif PyAPI_FUNC(int) PySet_Clear(PyObject *set); PyAPI_FUNC(int) PySet_Contains(PyObject *anyset, PyObject *key); PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key); PyAPI_FUNC(int) PySet_Add(PyObject *set, PyObject *key); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash); #endif PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); PyAPI_FUNC(int) PySet_ClearFreeList(void); #endif #ifdef __cplusplus } #endif #endif /* !Py_SETOBJECT_H */ share/systemptap/tapset/libpython3.4-64.stp000064400000001050152342604300014566 0ustar00/* Systemtap tapset to make it easier to trace Python */ /* Define python.function.entry/return: */ probe python.function.entry = process("python3").library("/opt/alt/python34/lib64/libpython3.4m.so.1.0").mark("function__entry") { filename = user_string($arg1); funcname = user_string($arg2); lineno = $arg3; } probe python.function.return = process("python3").library("/opt/alt/python34/lib64/libpython3.4m.so.1.0").mark("function__return") { filename = user_string($arg1); funcname = user_string($arg2); lineno = $arg3; } share/man/man1/python3.4.1000064400000032340152342604300011106 0ustar00.TH PYTHON "1" .\" To view this file while editing, run it through groff: .\" groff -Tascii -man python.man | less .SH NAME python \- an interpreted, interactive, object-oriented programming language .SH SYNOPSIS .B python [ .B \-B ] [ .B \-b ] [ .B \-d ] [ .B \-E ] [ .B \-h ] [ .B \-i ] [ .B \-I ] .br [ .B \-m .I module-name ] [ .B \-q ] [ .B \-O ] [ .B \-OO ] [ .B \-s ] [ .B \-S ] [ .B \-u ] .br [ .B \-v ] [ .B \-V ] [ .B \-W .I argument ] [ .B \-x ] [ [ .B \-X .I option ] .B \-? ] .br [ .B \-c .I command | .I script | \- ] [ .I arguments ] .SH DESCRIPTION Python is an interpreted, interactive, object-oriented programming language that combines remarkable power with very clear syntax. For an introduction to programming in Python, see the Python Tutorial. The Python Library Reference documents built-in and standard types, constants, functions and modules. Finally, the Python Reference Manual describes the syntax and semantics of the core language in (perhaps too) much detail. (These documents may be located via the .B "INTERNET RESOURCES" below; they may be installed on your system as well.) .PP Python's basic power can be extended with your own modules written in C or C++. On most systems such modules may be dynamically loaded. Python is also adaptable as an extension language for existing applications. See the internal documentation for hints. .PP Documentation for installed Python modules and packages can be viewed by running the .B pydoc program. .SH COMMAND LINE OPTIONS .TP .B \-B Don't write .I .py[co] files on import. See also PYTHONDONTWRITEBYTECODE. .TP .B \-b Issue warnings about str(bytes_instance), str(bytearray_instance) and comparing bytes/bytearray with str. (-bb: issue errors) .TP .BI "\-c " command Specify the command to execute (see next section). This terminates the option list (following options are passed as arguments to the command). .TP .B \-d Turn on parser debugging output (for wizards only, depending on compilation options). .TP .B \-E Ignore environment variables like PYTHONPATH and PYTHONHOME that modify the behavior of the interpreter. .TP .B \-h ", " \-? ", "\-\-help Prints the usage for the interpreter executable and exits. .TP .B \-i When a script is passed as first argument or the \fB\-c\fP option is used, enter interactive mode after executing the script or the command. It does not read the $PYTHONSTARTUP file. This can be useful to inspect global variables or a stack trace when a script raises an exception. .TP .B \-I Run Python in isolated mode. This also implies \fB\-E\fP and \fB\-s\fP. In isolated mode sys.path contains neither the script’s directory nor the user’s site-packages directory. All PYTHON* environment variables are ignored, too. Further restrictions may be imposed to prevent the user from injecting malicious code. .TP .BI "\-m " module-name Searches .I sys.path for the named module and runs the corresponding .I .py file as a script. .TP .B \-O Turn on basic optimizations. This changes the filename extension for compiled (bytecode) files from .I .pyc to \fI.pyo\fP. Given twice, causes docstrings to be discarded. .TP .B \-OO Discard docstrings in addition to the \fB-O\fP optimizations. .TP .B \-q Do not print the version and copyright messages. These messages are also suppressed in non-interactive mode. .TP .B \-s Don't add user site directory to sys.path. .TP .B \-S Disable the import of the module .I site and the site-dependent manipulations of .I sys.path that it entails. Also disable these manipulations if .I site is explicitly imported later. .TP .B \-u Force the binary I/O layers of stdout and stderr to be unbuffered. stdin is always buffered. The text I/O layer will still be line-buffered. .\" Note that there is internal buffering in readlines() and .\" file-object iterators ("for line in sys.stdin") which is not .\" influenced by this option. To work around this, you will want to use .\" "sys.stdin.readline()" inside a "while 1:" loop. .TP .B \-v Print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded. When given twice, print a message for each file that is checked for when searching for a module. Also provides information on module cleanup at exit. .TP .B \-V ", " \-\-version Prints the Python version number of the executable and exits. .TP .BI "\-W " argument Warning control. Python sometimes prints warning message to .IR sys.stderr . A typical warning message has the following form: .IB file ":" line ": " category ": " message. By default, each warning is printed once for each source line where it occurs. This option controls how often warnings are printed. Multiple .B \-W options may be given; when a warning matches more than one option, the action for the last matching option is performed. Invalid .B \-W options are ignored (a warning message is printed about invalid options when the first warning is issued). Warnings can also be controlled from within a Python program using the .I warnings module. The simplest form of .I argument is one of the following .I action strings (or a unique abbreviation): .B ignore to ignore all warnings; .B default to explicitly request the default behavior (printing each warning once per source line); .B all to print a warning each time it occurs (this may generate many messages if a warning is triggered repeatedly for the same source line, such as inside a loop); .B module to print each warning only the first time it occurs in each module; .B once to print each warning only the first time it occurs in the program; or .B error to raise an exception instead of printing a warning message. The full form of .I argument is .IB action : message : category : module : line. Here, .I action is as explained above but only applies to messages that match the remaining fields. Empty fields match all values; trailing empty fields may be omitted. The .I message field matches the start of the warning message printed; this match is case-insensitive. The .I category field matches the warning category. This must be a class name; the match test whether the actual warning category of the message is a subclass of the specified warning category. The full class name must be given. The .I module field matches the (fully-qualified) module name; this match is case-sensitive. The .I line field matches the line number, where zero matches all line numbers and is thus equivalent to an omitted line number. .TP .BI "\-X " option Set implementation specific option. .TP .B \-x Skip the first line of the source. This is intended for a DOS specific hack only. Warning: the line numbers in error messages will be off by one! .SH INTERPRETER INTERFACE The interpreter interface resembles that of the UNIX shell: when called with standard input connected to a tty device, it prompts for commands and executes them until an EOF is read; when called with a file name argument or with a file as standard input, it reads and executes a .I script from that file; when called with .B \-c .IR command , it executes the Python statement(s) given as .IR command . Here .I command may contain multiple statements separated by newlines. Leading whitespace is significant in Python statements! In non-interactive mode, the entire input is parsed before it is executed. .PP If available, the script name and additional arguments thereafter are passed to the script in the Python variable .IR sys.argv , which is a list of strings (you must first .I import sys to be able to access it). If no script name is given, .I sys.argv[0] is an empty string; if .B \-c is used, .I sys.argv[0] contains the string .I '-c'. Note that options interpreted by the Python interpreter itself are not placed in .IR sys.argv . .PP In interactive mode, the primary prompt is `>>>'; the second prompt (which appears when a command is not complete) is `...'. The prompts can be changed by assignment to .I sys.ps1 or .IR sys.ps2 . The interpreter quits when it reads an EOF at a prompt. When an unhandled exception occurs, a stack trace is printed and control returns to the primary prompt; in non-interactive mode, the interpreter exits after printing the stack trace. The interrupt signal raises the .I Keyboard\%Interrupt exception; other UNIX signals are not caught (except that SIGPIPE is sometimes ignored, in favor of the .I IOError exception). Error messages are written to stderr. .SH FILES AND DIRECTORIES These are subject to difference depending on local installation conventions; ${prefix} and ${exec_prefix} are installation-dependent and should be interpreted as for GNU software; they may be the same. The default for both is \fI/usr/local\fP. .IP \fI${exec_prefix}/bin/python\fP Recommended location of the interpreter. .PP .I ${prefix}/lib/python .br .I ${exec_prefix}/lib/python .RS Recommended locations of the directories containing the standard modules. .RE .PP .I ${prefix}/include/python .br .I ${exec_prefix}/include/python .RS Recommended locations of the directories containing the include files needed for developing Python extensions and embedding the interpreter. .RE .SH ENVIRONMENT VARIABLES .IP PYTHONHOME Change the location of the standard Python libraries. By default, the libraries are searched in ${prefix}/lib/python and ${exec_prefix}/lib/python, where ${prefix} and ${exec_prefix} are installation-dependent directories, both defaulting to \fI/usr/local\fP. When $PYTHONHOME is set to a single directory, its value replaces both ${prefix} and ${exec_prefix}. To specify different values for these, set $PYTHONHOME to ${prefix}:${exec_prefix}. .IP PYTHONPATH Augments the default search path for module files. The format is the same as the shell's $PATH: one or more directory pathnames separated by colons. Non-existent directories are silently ignored. The default search path is installation dependent, but generally begins with ${prefix}/lib/python (see PYTHONHOME above). The default search path is always appended to $PYTHONPATH. If a script argument is given, the directory containing the script is inserted in the path in front of $PYTHONPATH. The search path can be manipulated from within a Python program as the variable .IR sys.path . .IP PYTHONSTARTUP If this is the name of a readable file, the Python commands in that file are executed before the first prompt is displayed in interactive mode. The file is executed in the same name space where interactive commands are executed so that objects defined or imported in it can be used without qualification in the interactive session. You can also change the prompts .I sys.ps1 and .I sys.ps2 in this file. .IP PYTHONOPTIMIZE If this is set to a non-empty string it is equivalent to specifying the \fB\-O\fP option. If set to an integer, it is equivalent to specifying \fB\-O\fP multiple times. .IP PYTHONDEBUG If this is set to a non-empty string it is equivalent to specifying the \fB\-d\fP option. If set to an integer, it is equivalent to specifying \fB\-d\fP multiple times. .IP PYTHONDONTWRITEBYTECODE If this is set to a non-empty string it is equivalent to specifying the \fB\-B\fP option (don't try to write .I .py[co] files). .IP PYTHONINSPECT If this is set to a non-empty string it is equivalent to specifying the \fB\-i\fP option. .IP PYTHONIOENCODING If this is set before running the interpreter, it overrides the encoding used for stdin/stdout/stderr, in the syntax .IB encodingname ":" errorhandler The .IB errorhandler part is optional and has the same meaning as in str.encode. For stderr, the .IB errorhandler part is ignored; the handler will always be \'backslashreplace\'. .IP PYTHONNOUSERSITE If this is set to a non-empty string it is equivalent to specifying the \fB\-s\fP option (Don't add the user site directory to sys.path). .IP PYTHONUNBUFFERED If this is set to a non-empty string it is equivalent to specifying the \fB\-u\fP option. .IP PYTHONVERBOSE If this is set to a non-empty string it is equivalent to specifying the \fB\-v\fP option. If set to an integer, it is equivalent to specifying \fB\-v\fP multiple times. .IP PYTHONWARNINGS If this is set to a comma-separated string it is equivalent to specifying the \fB\-W\fP option for each separate value. .IP PYTHONHASHSEED If this variable is set to "random", a random value is used to seed the hashes of str, bytes and datetime objects. If PYTHONHASHSEED is set to an integer value, it is used as a fixed seed for generating the hash() of the types covered by the hash randomization. Its purpose is to allow repeatable hashing, such as for selftests for the interpreter itself, or to allow a cluster of python processes to share hash values. The integer must be a decimal number in the range [0,4294967295]. Specifying the value 0 will disable hash randomization. .SH AUTHOR The Python Software Foundation: https://www.python.org/psf/ .SH INTERNET RESOURCES Main website: https://www.python.org/ .br Documentation: https://docs.python.org/ .br Developer resources: https://docs.python.org/devguide/ .br Downloads: https://www.python.org/downloads/ .br Module repository: https://pypi.python.org/ .br Newsgroups: comp.lang.python, comp.lang.python.announce .SH LICENSING Python is distributed under an Open Source license. See the file "LICENSE" in the Python source distribution for information on terms & conditions for accessing and otherwise using Python and for a DISCLAIMER OF ALL WARRANTIES. share/doc/alt-python34-libs/pyfuntop.stp000064400000001031152342604300014216 0ustar00#!/usr/bin/stap global fn_calls; probe python.function.entry { fn_calls[pid(), filename, funcname, lineno] += 1; } probe timer.ms(1000) { printf("\033[2J\033[1;1H") /* clear screen */ printf("%6s %80s %6s %30s %6s\n", "PID", "FILENAME", "LINE", "FUNCTION", "CALLS") foreach ([pid, filename, funcname, lineno] in fn_calls- limit 20) { printf("%6d %80s %6d %30s %6d\n", pid, filename, lineno, funcname, fn_calls[pid, filename, funcname, lineno]); } delete fn_calls; } share/doc/alt-python34-libs/systemtap-example.stp000064400000001145152342604300016022 0ustar00/* Example usage of the Python systemtap tapset to show a nested view of all Python function calls (and returns) across the whole system. Run this using stap systemtap-example.stp to instrument all Python processes on the system, or (for example) using stap systemtap-example.stp -c COMMAND to instrument a specific program (implemented in Python) */ probe python.function.entry { printf("%s => %s in %s:%d\n", thread_indent(1), funcname, filename, lineno); } probe python.function.return { printf("%s <= %s in %s:%d\n", thread_indent(-1), funcname, filename, lineno); } share/doc/alt-python34-libs/README000064400000016634152342604300012501 0ustar00This is Python version 3.4.10 ============================= Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation. All rights reserved. Python 3.4 Is No Longer Supported --------------------------------- Python 3.4.10 is the final release in the Python 3.4 series. As of this release, the 3.4 branch has been retired, no further changes to 3.4 will be accepted, and no new releases will be made. This is standard Python policy; Python releases get five years of support and are then retired. If you're still using Python 3.4, you should consider upgrading to the current version--3.7.2 as of this writing. Newer versions of Python have many new features, performance improvements, and bug fixes, which should all serve to enhance your Python programming experience. We in the Python core development community thank you for your interest in 3.4, and we wish you all the best! Python 3.x ---------- Python 3.x is a new version of the language, which is incompatible with the 2.x line of releases. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Build Instructions ------------------ On Unix, Linux, BSD, OSX, and Cygwin: New text ./configure make make test sudo make install This will install Python as python3. You can pass many options to the configure script; run "./configure --help" to find out more. On OSX and Cygwin, the executable is called python.exe; elsewhere it's just python. On Mac OS X, if you have configured Python with --enable-framework, you should use "make frameworkinstall" to do the installation. Note that this installs the Python executable in a place that is not normally on your PATH, you may want to set up a symlink in /usr/local/bin. On Windows, see PCbuild/readme.txt. If you wish, you can create a subdirectory and invoke configure from there. For example: mkdir debug cd debug ../configure --with-pydebug make make test (This will fail if you *also* built at the top-level directory. You should do a "make clean" at the toplevel first.) What's New ---------- We try to have a comprehensive overview of the changes in the "What's New in Python 3.4" document, found at http://docs.python.org/3.4/whatsnew/3.4.html For a more detailed change log, read Misc/NEWS (though this file, too, is incomplete, and also doesn't list anything merged in from the 2.7 release under development). If you want to install multiple versions of Python see the section below entitled "Installing multiple versions". Documentation ------------- Documentation for Python 3.4 is online, updated daily: http://docs.python.org/3.4/ It can also be downloaded in many formats for faster access. The documentation is downloadable in HTML, PDF, and reStructuredText formats; the latter version is primarily for documentation authors, translators, and people with special formatting requirements. If you would like to contribute to the development of Python, relevant documentation is available at: http://docs.python.org/devguide/ For information about building Python's documentation, refer to Doc/README.txt. Converting From Python 2.x to 3.x --------------------------------- Python starting with 2.6 contains features to help locating code that needs to be changed, such as optional warnings when deprecated features are used, and backported versions of certain key Python 3.x features. A source-to-source translation tool, "2to3", can take care of the mundane task of converting large amounts of source code. It is not a complete solution but is complemented by the deprecation warnings in 2.6. See http://docs.python.org/3.4/library/2to3.html for more information. Testing ------- To test the interpreter, type "make test" in the top-level directory. The test set produces some output. You can generally ignore the messages about skipped tests due to optional features which can't be imported. If a message is printed about a failed test or a traceback or core dump is produced, something is wrong. By default, tests are prevented from overusing resources like disk space and memory. To enable these tests, run "make testall". IMPORTANT: If the tests fail and you decide to mail a bug report, *don't* include the output of "make test". It is useless. Run the failing test manually, as follows: ./python -m test -v test_whatever (substituting the top of the source tree for '.' if you built in a different directory). This runs the test in verbose mode. Installing multiple versions ---------------------------- On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix (--prefix argument to the configure script) you must take care that your primary python executable is not overwritten by the installation of a different version. All files and directories installed using "make altinstall" contain the major and minor version and can thus live side-by-side. "make install" also creates ${prefix}/bin/python3 which refers to ${prefix}/bin/pythonX.Y. If you intend to install multiple versions using the same prefix you must decide which version (if any) is your "primary" version. Install that version using "make install". Install all other versions using "make altinstall". For example, if you want to install Python 2.6, 2.7 and 3.4 with 2.7 being the primary version, you would execute "make install" in your 2.7 build directory and "make altinstall" in the others. Issue Tracker and Mailing List ------------------------------ We're soliciting bug reports about all aspects of the language. Fixes are also welcome, preferable in unified diff format. Please use the issue tracker: http://bugs.python.org/ If you're not sure whether you're dealing with a bug or a feature, use the mailing list: python-dev@python.org To subscribe to the list, use the mailman form: http://mail.python.org/mailman/listinfo/python-dev/ Proposals for enhancement ------------------------- If you have a proposal to change Python, you may want to send an email to the comp.lang.python or python-ideas mailing lists for inital feedback. A Python Enhancement Proposal (PEP) may be submitted if your idea gains ground. All current PEPs, as well as guidelines for submitting a new PEP, are listed at http://www.python.org/dev/peps/. Release Schedule ---------------- See PEP 429 for release details: http://www.python.org/dev/peps/pep-0429/ Copyright and License Information --------------------------------- Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation. All rights reserved. Copyright (c) 2000 BeOpen.com. All rights reserved. Copyright (c) 1995-2001 Corporation for National Research Initiatives. All rights reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum. All rights reserved. See the file "LICENSE" for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES. This Python distribution contains *no* GNU General Public License (GPL) code, so it may be used in proprietary projects. There are interfaces to some GNU code but these are entirely optional. All trademarks referenced herein are property of their respective holders. share/doc/alt-python34-libs/LICENSE000064400000030761152342604300012623 0ustar00A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation, see http://www.zope.com). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF. All Python releases are Open Source (see http://www.opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. Release Derived Year Owner GPL- from compatible? (1) 0.9.0 thru 1.2 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no 1.6.1 1.6 2001 CNRI yes (2) 2.1 2.0+1.6.1 2001 PSF no 2.0.1 2.0+1.6.1 2001 PSF yes 2.1.1 2.1+2.0.1 2001 PSF yes 2.1.2 2.1.1 2002 PSF yes 2.1.3 2.1.2 2002 PSF yes 2.2 and above 2.1.1 2001-now PSF yes Footnotes: (1) GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't. (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law clause. According to CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 is "not incompatible" with the GPL. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 --------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. share/doc/alt-python34-pip/LICENSE.txt000064400000002102152342604300013264 0ustar00Copyright (c) 2008-2014 The pip developers (see AUTHORS.txt file) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. share/doc/alt-python34-pip/docs/development.rst000064400000010551152342604300015454 0ustar00=========== Development =========== Pull Requests ============= Submit Pull Requests against the `develop` branch. Provide a good description of what you're doing and why. Provide tests that cover your changes and try to run the tests locally first. Automated Testing ================= All pull requests and merges to 'develop' branch are tested in `Travis `_ based on our `.travis.yml file `_. Usually, a link to your specific travis build appears in pull requests, but if not, you can find it on our `travis pull requests page `_ The only way to trigger Travis to run again for a pull request, is to submit another change to the pull branch. We also have Jenkins CI that runs regularly for certain python versions on windows and centos. Running tests ============= OS Requirements: subversion, bazaar, git, and mercurial. Python Requirements: tox or pytest, virtualenv, scripttest, and mock Ways to run the tests locally: :: $ tox -e py33 # The preferred way to run the tests, can use pyNN to # run for a particular version or leave off the -e to # run for all versions. $ python setup.py test # Using the setuptools test plugin $ py.test # Using py.test directly $ tox # Using tox against pip's tox.ini Getting Involved ================ The pip project welcomes help in the following ways: - Making Pull Requests for code, tests, or docs. - Commenting on open issues and pull requests. - Helping to answer questions on the mailing list. If you want to become an official maintainer, start by helping out. Later, when you think you're ready, get in touch with one of the maintainers, and they will initiate a vote. Release Process =============== This process includes virtualenv, since pip releases necessitate a virtualenv release. As an example, the instructions assume we're releasing pip-1.4, and virtualenv-1.10. 1. Upgrade setuptools, if needed: #. Upgrade setuptools in ``virtualenv/develop`` using the :ref:`Refresh virtualenv` process. #. Create a pull request against ``pip/develop`` with a modified ``.travis.yml`` file that installs virtualenv from ``virtualenv/develop``, to confirm the travis builds are still passing. 2. Create Release branches: #. Create ``pip/release-1.4`` branch. #. In ``pip/develop``, change ``pip.version`` to '1.5.dev1'. #. Create ``virtualenv/release-1.10`` branch. #. In ``virtualenv/develop``, change ``virtualenv.version`` to '1.11.dev1'. 3. Prepare "rcX": #. In ``pip/release-1.4``, change ``pip.version`` to '1.4rcX', and tag with '1.4rcX'. #. Build a pip sdist from ``pip/release-1.4``, and build it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process. #. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10rcX', and tag with '1.10rcX'. 4. Announce ``pip-1.4rcX`` and ``virtualenv-1.10rcX`` with the :ref:`RC Install Instructions` and elicit feedback. 5. Apply fixes to 'rcX': #. Apply fixes to ``pip/release-1.4`` and ``virtualenv/release-1.10`` #. Periodically merge fixes to ``pip/develop`` and ``virtualenv/develop`` 6. Repeat #4 thru #6 if needed. 7. Final Release: #. In ``pip/release-1.4``, change ``pip.version`` to '1.4', and tag with '1.4'. #. Merge ``pip/release-1.4`` to ``pip/master``. #. Build a pip sdist from ``pip/release-1.4``, and load it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process. #. Merge ``vitualenv/release-1.10`` to ``virtualenv/develop``. #. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10', and tag with '1.10'. #. Merge ``virtualenv/release-1.10`` to ``virtualenv/master`` #. Build and upload pip and virtualenv sdists to PyPI. .. _`Refresh virtualenv`: Refresh virtualenv ++++++++++++++++++ #. Update the embedded versions of pip and setuptools in ``virtualenv_support``. #. Run ``bin/rebuild-script.py`` to rebuild virtualenv based on the latest versions. .. _`RC Install Instructions`: RC Install Instructions +++++++++++++++++++++++ :: $ curl -L -O https://github.com/pypa/virtualenv/archive/1.10rc1.tar.gz $ echo " 1.10rc1.tar.gz" | md5sum -c 1.10rc1.tar.gz: OK $ tar zxf 1.10rc1.tar.gz $ python virtualenv-1.10rc1/virtualenv.py myVE $ myVE/bin/pip install SomePackage share/doc/alt-python34-pip/docs/logic.rst000064400000000213152342604300014221 0ustar00:orphan: ================ Internal Details ================ This content is now covered in the :doc:`Reference Guide ` share/doc/alt-python34-pip/docs/news.rst000064400000000107152342604300014102 0ustar00============= Release Notes ============= .. include:: ../CHANGES.txt share/doc/alt-python34-pip/docs/usage.rst000064400000000173152342604300014235 0ustar00:orphan: ========== Usage ========== The "Usage" section is now covered in the :doc:`Reference Guide ` share/doc/alt-python34-pip/docs/quickstart.rst000064400000001775152342604300015334 0ustar00Quickstart ========== First, :doc:`Install pip `. Install a package from `PyPI`_: :: $ pip install SomePackage [...] Successfully installed SomePackage Show what files were installed: :: $ pip show --files SomePackage Name: SomePackage Version: 1.0 Location: /my/env/lib/pythonx.x/site-packages Files: ../somepackage/__init__.py [...] List what packages are outdated: :: $ pip list --outdated SomePackage (Current: 1.0 Latest: 2.0) Upgrade a package: :: $ pip install --upgrade SomePackage [...] Found existing installation: SomePackage 1.0 Uninstalling SomePackage: Successfully uninstalled SomePackage Running setup.py install for SomePackage Successfully installed SomePackage Uninstall a package: :: $ pip uninstall SomePackage Uninstalling SomePackage: /my/env/lib/pythonx.x/site-packages/somepackage Proceed (y/n)? y Successfully uninstalled SomePackage .. _PyPI: http://pypi.python.org/pypi/ share/doc/alt-python34-pip/docs/user_guide.rst000064400000036077152342604300015300 0ustar00========== User Guide ========== .. contents:: Installing Packages ******************* pip supports installing from `PyPI`_, version control, local projects, and directly from distribution files. The most common scenario is to install from `PyPI`_ using :ref:`Requirement Specifiers` :: $ pip install SomePackage # latest version $ pip install SomePackage==1.0.4 # specific version $ pip install 'SomePackage>=1.0.4' # minimum version For more information and examples, see the :ref:`pip install` reference. .. _`Requirements Files`: Requirements Files ****************** "Requirements files" are files containing a list of items to be installed using :ref:`pip install` like so: :: pip install -r requirements.txt Details on the format of the files are here: :ref:`Requirements File Format`. Logically, a Requirements file is just a list of :ref:`pip install` arguments placed in a file. In practice, there are 4 common uses of Requirements files: 1. Requirements files are used to hold the result from :ref:`pip freeze` for the purpose of achieving :ref:`repeatable installations `. In this case, your requirement file contains a pinned version of everything that was installed when `pip freeze` was run. :: pip freeze > requirements.txt pip install -r requirements.txt 2. Requirements files are used to force pip to properly resolve dependencies. As it is now, pip `doesn't have true dependency resolution `_, but instead simply uses the first specification it finds for a project. E.g if `pkg1` requires `pkg3>=1.0` and `pkg2` requires `pkg3>=1.0,<=2.0`, and if `pkg1` is resolved first, pip will only use `pkg3>=1.0`, and could easily end up installing a version of `pkg3` that conflicts with the needs of `pkg2`. To solve this problem, you can place `pkg3>=1.0,<=2.0` (i.e. the correct specification) into your requirements file directly along with the other top level requirements. Like so: :: pkg1 pkg2 pkg3>=1.0,<=2.0 3. Requirements files are used to force pip to install an alternate version of a sub-dependency. For example, suppose `ProjectA` in your requirements file requires `ProjectB`, but the latest version (v1.3) has a bug, you can force pip to accept earlier versions like so: :: ProjectA ProjectB<1.3 4. Requirements files are used to override a dependency with a local patch that lives in version control. For example, suppose a dependency, `SomeDependency` from PyPI has a bug, and you can't wait for an upstream fix. You could clone/copy the src, make the fix, and place it in vcs with the tag `sometag`. You'd reference it in your requirements file with a line like so: :: git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency If `SomeDependency` was previously a top-level requirement in your requirements file, then **replace** that line with the new line. If `SomeDependency` is a sub-dependency, then **add** the new line. It's important to be clear that pip determines package dependencies using `install_requires metadata `_, not by discovering `requirements.txt` files embedded in projects. See also: * :ref:`Requirements File Format` * :ref:`pip freeze` * `"setup.py vs requirements.txt" (an article by Donald Stufft) `_ .. _`Installing from Wheels`: Installing from Wheels ********************** "Wheel" is a built, archive format that can greatly speed installation compared to building and installing from source archives. For more information, see the `Wheel docs `_ , `PEP427 `_, and `PEP425 `_ Pip prefers Wheels where they are available. To disable this, use the :ref:`--no-use-wheel ` flag for :ref:`pip install`. If no satisfactory wheels are found, pip will default to finding source archives. To install directly from a wheel archive: :: pip install SomePackage-1.0-py2.py3-none-any.whl For the cases where wheels are not available, pip offers :ref:`pip wheel` as a convenience, to build wheels for all your requirements and dependencies. :ref:`pip wheel` requires the `wheel package `_ to be installed, which provides the "bdist_wheel" setuptools extension that it uses. To build wheels for your requirements and all their dependencies to a local directory: :: pip install wheel pip wheel --wheel-dir=/local/wheels -r requirements.txt And *then* to install those requirements just using your local directory of wheels (and not from PyPI): :: pip install --no-index --find-links=/local/wheels -r requirements.txt Uninstalling Packages ********************* pip is able to uninstall most packages like so: :: $ pip uninstall SomePackage pip also performs an automatic uninstall of an old version of a package before upgrading to a newer version. For more information and examples, see the :ref:`pip uninstall` reference. Listing Packages **************** To list installed packages: :: $ pip list Pygments (1.5) docutils (0.9.1) Sphinx (1.1.2) Jinja2 (2.6) To list outdated packages, and show the latest version available: :: $ pip list --outdated docutils (Current: 0.9.1 Latest: 0.10) Sphinx (Current: 1.1.2 Latest: 1.1.3) To show details about an installed package: :: $ pip show sphinx --- Name: Sphinx Version: 1.1.3 Location: /my/env/lib/pythonx.x/site-packages Requires: Pygments, Jinja2, docutils For more information and examples, see the :ref:`pip list` and :ref:`pip show` reference pages. Searching for Packages ********************** pip can search `PyPI`_ for packages using the ``pip search`` command:: $ pip search "query" The query will be used to search the names and summaries of all packages. For more information and examples, see the :ref:`pip search` reference. .. _`Configuration`: Configuration ************* .. _config-file: Config file ------------ pip allows you to set all command line option defaults in a standard ini style config file. The names and locations of the configuration files vary slightly across platforms. * On Unix and Mac OS X the configuration file is: :file:`$HOME/.pip/pip.conf` * On Windows, the configuration file is: :file:`%HOME%\\pip\\pip.ini` You can set a custom path location for the config file using the environment variable ``PIP_CONFIG_FILE``. The names of the settings are derived from the long command line option, e.g. if you want to use a different package index (``--index-url``) and set the HTTP timeout (``--default-timeout``) to 60 seconds your config file would look like this: .. code-block:: ini [global] timeout = 60 index-url = http://download.zope.org/ppix Each subcommand can be configured optionally in its own section so that every global setting with the same name will be overridden; e.g. decreasing the ``timeout`` to ``10`` seconds when running the `freeze` (`Freezing Requirements <./#freezing-requirements>`_) command and using ``60`` seconds for all other commands is possible with: .. code-block:: ini [global] timeout = 60 [freeze] timeout = 10 Boolean options like ``--ignore-installed`` or ``--no-dependencies`` can be set like this: .. code-block:: ini [install] ignore-installed = true no-dependencies = yes Appending options like ``--find-links`` can be written on multiple lines: .. code-block:: ini [global] find-links = http://download.example.com [install] find-links = http://mirror1.example.com http://mirror2.example.com Environment Variables --------------------- pip's command line options can be set with environment variables using the format ``PIP_`` . Dashes (``-``) have to be replaced with underscores (``_``). For example, to set the default timeout:: export PIP_DEFAULT_TIMEOUT=60 This is the same as passing the option to pip directly:: pip --default-timeout=60 [...] To set options that can be set multiple times on the command line, just add spaces in between values. For example:: export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com" is the same as calling:: pip install --find-links=http://mirror1.example.com --find-links=http://mirror2.example.com Config Precedence ----------------- Command line options have precedence over environment variables, which have precedence over the config file. Within the config file, command specific sections have precedence over the global section. Examples: - ``--host=foo`` overrides ``PIP_HOST=foo`` - ``PIP_HOST=foo`` overrides a config file with ``[global] host = foo`` - A command specific section in the config file ``[] host = bar`` overrides the option with same name in the ``[global]`` config file section Command Completion ------------------ pip comes with support for command line completion in bash and zsh. To setup for bash:: $ pip completion --bash >> ~/.profile To setup for zsh:: $ pip completion --zsh >> ~/.zprofile Alternatively, you can use the result of the ``completion`` command directly with the eval function of you shell, e.g. by adding the following to your startup file:: eval "`pip completion --bash`" .. _`Fast & Local Installs`: Fast & Local Installs ********************* Often, you will want a fast install from local archives, without probing PyPI. First, download the archives that fulfill your requirements:: $ pip install --download -r requirements.txt Then, install using :ref:`--find-links <--find-links>` and :ref:`--no-index <--no-index>`:: $ pip install --no-index --find-links=[file://] -r requirements.txt Non-recursive upgrades ************************ ``pip install --upgrade`` is currently written to perform a recursive upgrade. E.g. supposing: * `SomePackage-1.0` requires `AnotherPackage>=1.0` * `SomePackage-2.0` requires `AnotherPackage>=1.0` and `OneMorePoject==1.0` * `SomePackage-1.0` and `AnotherPackage-1.0` are currently installed * `SomePackage-2.0` and `AnotherPackage-2.0` are the latest versions available on PyPI. Running ``pip install --upgrade SomePackage`` would upgrade `SomePackage` *and* `AnotherPackage` despite `AnotherPackage` already being satisifed. If you would like to perform a non-recursive upgrade perform these 2 steps:: pip install --upgrade --no-deps SomePackage pip install SomePackage The first line will upgrade `SomePackage`, but not dependencies like `AnotherPackage`. The 2nd line will fill in new dependencies like `OneMorePackage`. User Installs ************* With Python 2.6 came the `"user scheme" for installation `_, which means that all Python distributions support an alternative install location that is specific to a user. The default location for each OS is explained in the python documentation for the `site.USER_BASE `_ variable. This mode of installation can be turned on by specifying the :ref:`--user ` option to ``pip install``. Moreover, the "user scheme" can be customized by setting the ``PYTHONUSERBASE`` environment variable, which updates the value of ``site.USER_BASE``. To install "SomePackage" into an environment with site.USER_BASE customized to '/myappenv', do the following:: export PYTHONUSERBASE=/myappenv pip install --user SomePackage ``pip install --user`` follows four rules: #. When globally installed packages are on the python path, and they *conflict* with the installation requirements, they are ignored, and *not* uninstalled. #. When globally installed packages are on the python path, and they *satisfy* the installation requirements, pip does nothing, and reports that requirement is satisfied (similar to how global packages can satisfy requirements when installing packages in a ``--system-site-packages`` virtualenv). #. pip will not perform a ``--user`` install in a ``--no-site-packages`` virtualenv (i.e. the default kind of virtualenv), due to the user site not being on the python path. The installation would be pointless. #. In a ``--system-site-packages`` virtualenv, pip will not install a package that conflicts with a package in the virtualenv site-packages. The --user installation would lack sys.path precedence and be pointless. To make the rules clearer, here are some examples: From within a ``--no-site-packages`` virtualenv (i.e. the default kind):: $ pip install --user SomePackage Can not perform a '--user' install. User site-packages are not visible in this virtualenv. From within a ``--system-site-packages`` virtualenv where ``SomePackage==0.3`` is already installed in the virtualenv:: $ pip install --user SomePackage==0.4 Will not install to the user site because it will lack sys.path precedence From within a real python, where ``SomePackage`` is *not* installed globally:: $ pip install --user SomePackage [...] Successfully installed SomePackage From within a real python, where ``SomePackage`` *is* installed globally, but is *not* the latest version:: $ pip install --user SomePackage [...] Requirement already satisfied (use --upgrade to upgrade) $ pip install --user --upgrade SomePackage [...] Successfully installed SomePackage From within a real python, where ``SomePackage`` *is* installed globally, and is the latest version:: $ pip install --user SomePackage [...] Requirement already satisfied (use --upgrade to upgrade) $ pip install --user --upgrade SomePackage [...] Requirement already up-to-date: SomePackage # force the install $ pip install --user --ignore-installed SomePackage [...] Successfully installed SomePackage .. _`Repeatability`: Ensuring Repeatability ********************** Three things are required to fully guarantee a repeatable installation using requirements files. 1. The requirements file was generated by ``pip freeze`` or you're sure it only contains requirements that specify a specific version. 2. The installation is performed using :ref:`--no-deps `. This guarantees that only what is explicitly listed in the requirements file is installed. 3. The installation is performed against an index or find-links location that is guaranteed to *not* allow archives to be changed and updated without a version increase. Unfortunately, this is *not* true on PyPI. It is possible for the same pypi distribution to have a different hash over time. Project authors are allowed to delete a distribution, and then upload a new one with the same name and version, but a different hash. See `Issue #1175 `_ for plans to add hash confirmation to pip, or a new "lock file" notion, but for now, know that the `peep project `_ offers this feature on top of pip using requirements file comments. .. _PyPI: http://pypi.python.org/pypi/ share/doc/alt-python34-pip/docs/cookbook.rst000064400000000161152342604300014734 0ustar00:orphan: ============ Cookbook ============ This content is now covered in the :doc:`User Guide ` share/doc/alt-python34-pip/docs/distribute_setuptools.rst000064400000004753152342604300017620 0ustar00:orphan: "ImportError: No module named setuptools" +++++++++++++++++++++++++++++++++++++++++ Although using ``pip install --upgrade setuptools`` to upgrade from distribute to setuptools works in isolation, it's possible to get "ImportError: No module named setuptools" when using pip<1.4 to upgrade a package that depends on setuptools or distribute. e.g. when running a command like this: `pip install --upgrade pyramid` Solution ~~~~~~~~ To prevent the problem in *new* environments (that aren't broken yet): * Option 1: * *First* run `pip install -U setuptools`, * *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`) * Option 2: * Upgrade pip using :ref:`get-pip ` * *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`) To fix the problem once it's occurred, you'll need to manually install the new setuptools, then rerun the upgrade that failed. 1. Download `ez_setup.py` (https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py) 2. Run `python ez_setup.py` 3. Then rerun your upgrade (e.g. `pip install --upgrade pyramid`) Cause ~~~~~ distribute-0.7.3 is just an empty wrapper that only serves to require the new setuptools (setuptools>=0.7) so that it will be installed. (If you don't know yet, the "new setuptools" is a merge of distribute and setuptools back into one project). distribute-0.7.3 does its job well, when the upgrade is done in isolation. E.g. if you're currently on distribute-0.6.X, then running `pip install -U setuptools` works fine to upgrade you to setuptools>=0.7. The problem occurs when: 1. you are currently using an older distribute (i.e. 0.6.X) 2. and you try to use pip to upgrade a package that *depends* on setuptools or distribute. As part of the upgrade process, pip builds an install list that ends up including distribute-0.7.3 and setuptools>=0.7 , but they can end up being separated by other dependencies in the list, so what can happen is this: 1. pip uninstalls the existing distribute 2. pip installs distribute-0.7.3 (which has no importable setuptools, that pip *needs* internally to function) 3. pip moves on to install another dependency (before setuptools>=0.7) and is unable to proceed without the setuptools package Note that pip v1.4 has fixes to prevent this. distribute-0.7.3 (or setuptools>=0.7) by themselves cannot prevent this kind of problem. .. _setuptools: https://pypi.python.org/pypi/setuptools .. _distribute: https://pypi.python.org/pypi/distribute share/doc/alt-python34-pip/docs/installing.rst000064400000003704152342604300015300 0ustar00.. _`Installation`: Installation ============ Python & OS Support ------------------- pip works with CPython versions 2.6, 2.7, 3.1, 3.2, 3.3, 3.4 and also pypy. pip works on Unix/Linux, OS X, and Windows. .. note:: Python 2.5 was supported through v1.3.1, and Python 2.4 was supported through v1.1. .. _`get-pip`: Install pip ----------- To install or upgrade pip, securely download `get-pip.py `_. [1]_ Then run the following (which may require administrator access):: python get-pip.py If `setuptools`_ (or `distribute`_) is not already installed, ``get-pip.py`` will install `setuptools`_ for you. [2]_ To upgrade an existing `setuptools`_ (or `distribute`_), run ``pip install -U setuptools`` [3]_ Upgrade pip ----------- On Linux or OS X: :: pip install -U pip On Windows [4]_: :: python -m pip install -U pip Using Package Managers ---------------------- On Linux, pip will generally be available for the system install of python using the system package manager, although often the latest version will be unavailable. On Debian and Ubuntu:: sudo apt-get install python-pip On Fedora:: sudo yum install python-pip ---- .. [1] "Secure" in this context means using a modern browser or a tool like `curl` that verifies SSL certificates when downloading from https URLs. .. [2] Beginning with pip v1.5.1, ``get-pip.py`` stopped requiring setuptools to be installed first. .. [3] Although using ``pip install --upgrade setuptools`` to upgrade from distribute to setuptools works in isolation, it's possible to get "ImportError: No module named setuptools" when using pip<1.4 to upgrade a package that depends on setuptools or distribute. See :doc:`here for details `. .. [4] https://github.com/pypa/pip/issues/1299 .. _setuptools: https://pypi.python.org/pypi/setuptools .. _distribute: https://pypi.python.org/pypi/distribute share/doc/alt-python34-pip/docs/configuration.rst000064400000000153152342604300015776 0ustar00:orphan: Configuration ============= This content is now covered in the :doc:`User Guide ` share/doc/alt-python34-pip/docs/index.rst000064400000001015152342604300014234 0ustar00pip === `User list `_ | `Dev list `_ | `Github `_ | `PyPI `_ | User IRC: #pypa | Dev IRC: #pypa-dev The `PyPA recommended `_ tool for installing and managing Python packages. .. toctree:: :maxdepth: 2 quickstart installing user_guide reference/index development news share/doc/alt-python34-pip/docs/reference/pip_show.rst000064400000000647152342604300016725 0ustar00.. _`pip show`: pip show -------- .. contents:: Usage ***** .. pip-command-usage:: show Description *********** .. pip-command-description:: show Options ******* .. pip-command-options:: show Examples ******** 1. Show information about a package: :: $ pip show sphinx --- Name: Sphinx Version: 1.1.3 Location: /my/env/lib/pythonx.x/site-packages Requires: Pygments, Jinja2, docutils share/doc/alt-python34-pip/docs/reference/pip_install.rst000064400000032731152342604300017412 0ustar00 .. _`pip install`: pip install ----------- .. contents:: Usage ***** .. pip-command-usage:: install Description *********** .. pip-command-description:: install .. _`Requirements File Format`: Requirements File Format ++++++++++++++++++++++++ Each line of the requirements file indicates something to be installed, and like arguments to :ref:`pip install`, the following forms are supported:: [-e] [-e] See the :ref:`pip install Examples` for examples of all these forms. A line beginning with ``#`` is treated as a comment and ignored. Additionally, the following Package Index Options are supported: * :ref:`-i, --index-url <--index-url>` * :ref:`--extra-index-url <--extra-index-url>` * :ref:`--no-index <--no-index>` * :ref:`-f, --find-links <--find-links>` * :ref:`--allow-external <--allow-external>` * :ref:`--allow-all-external <--allow-external>` * :ref:`--allow-unverified <--allow-unverified>` For example, to specify :ref:`--no-index <--no-index>` and 2 :ref:`--find-links <--find-links>` locations: :: --no-index --find-links /my/local/archives --find-links http://some.archives.com/archives Lastly, if you wish, you can refer to other requirements files, like this:: -r more_requirements.txt .. _`Requirement Specifiers`: Requirement Specifiers ++++++++++++++++++++++ pip supports installing from "requirement specifiers" as implemented in `pkg_resources Requirements `_ Some Examples: :: 'FooProject >= 1.2' Fizzy [foo, bar] 'PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1' SomethingWhoseVersionIDontCareAbout .. note:: Use single or double quotes around specifiers to avoid ``>`` and ``<`` being interpreted as shell redirects. e.g. ``pip install 'FooProject>=1.2'``. .. _`Pre Release Versions`: Pre-release Versions ++++++++++++++++++++ Starting with v1.4, pip will only install stable versions as specified by `PEP426`_ by default. If a version cannot be parsed as a compliant `PEP426`_ version then it is assumed to be a pre-release. If a Requirement specifier includes a pre-release or development version (e.g. ``>=0.0.dev0``) then pip will allow pre-release and development versions for that requirement. This does not include the != flag. The ``pip install`` command also supports a :ref:`--pre ` flag that will enable installing pre-releases and development releases. .. _PEP426: http://www.python.org/dev/peps/pep-0426 .. _`Externally Hosted Files`: Externally Hosted Files +++++++++++++++++++++++ Starting with v1.4, pip will warn about installing any file that does not come from the primary index. As of version 1.5, pip defaults to ignoring these files unless asked to consider them. The ``pip install`` command supports a :ref:`--allow-external PROJECT <--allow-external>` option that will enable installing links that are linked directly from the simple index but to an external host that also have a supported hash fragment. Externally hosted files for all projects may be enabled using the :ref:`--allow-all-external <--allow-all-external>` flag to the ``pip install`` command. The ``pip install`` command also supports a :ref:`--allow-unverified PROJECT <--allow-unverified>` option that will enable installing insecurely linked files. These are either directly linked (as above) files without a hash, or files that are linked from either the home page or the download url of a package. These options can be used in a requirements file. Assuming some fictional `ExternalPackage` that is hosted external and unverified, then your requirements file would be like so:: --allow-external ExternalPackage --allow-unverified ExternalPackage ExternalPackage .. _`VCS Support`: VCS Support +++++++++++ pip supports installing from Git, Mercurial, Subversion and Bazaar, and detects the type of VCS using url prefixes: "git+", "hg+", "bzr+", "svn+". pip requires a working VCS command on your path: git, hg, svn, or bzr. VCS projects can be installed in :ref:`editable mode ` (using the :ref:`--editable ` option) or not. * For editable installs, the clone location by default is "/src/SomeProject" in virtual environments, and "/src/SomeProject" for global installs. The :ref:`--src ` option can be used to modify this location. * For non-editable installs, the project is built locally in a temp dir and then installed normally. The url suffix "egg=" is used by pip in it's dependency logic to identify the project prior to pip downloading and analyzing the metadata. Git ~~~ pip currently supports cloning over ``git``, ``git+https`` and ``git+ssh``: Here are the supported forms:: [-e] git+git://git.myproject.org/MyProject#egg=MyProject [-e] git+https://git.myproject.org/MyProject#egg=MyProject [-e] git+ssh://git.myproject.org/MyProject#egg=MyProject -e git+git@git.myproject.org:MyProject#egg=MyProject Passing branch names, a commit hash or a tag name is possible like so:: [-e] git://git.myproject.org/MyProject.git@master#egg=MyProject [-e] git://git.myproject.org/MyProject.git@v1.0#egg=MyProject [-e] git://git.myproject.org/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709#egg=MyProject Mercurial ~~~~~~~~~ The supported schemes are: ``hg+http``, ``hg+https``, ``hg+static-http`` and ``hg+ssh``. Here are the supported forms:: [-e] hg+http://hg.myproject.org/MyProject#egg=MyProject [-e] hg+https://hg.myproject.org/MyProject#egg=MyProject [-e] hg+ssh://hg.myproject.org/MyProject#egg=MyProject You can also specify a revision number, a revision hash, a tag name or a local branch name like so:: [-e] hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject [-e] hg+http://hg.myproject.org/MyProject@2019#egg=MyProject [-e] hg+http://hg.myproject.org/MyProject@v1.0#egg=MyProject [-e] hg+http://hg.myproject.org/MyProject@special_feature#egg=MyProject Subversion ~~~~~~~~~~ pip supports the URL schemes ``svn``, ``svn+svn``, ``svn+http``, ``svn+https``, ``svn+ssh``. You can also give specific revisions to an SVN URL, like so:: [-e] svn+svn://svn.myproject.org/svn/MyProject#egg=MyProject [-e] svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject which will check out revision 2019. ``@{20080101}`` would also check out the revision from 2008-01-01. You can only check out specific revisions using ``-e svn+...``. Bazaar ~~~~~~ pip supports Bazaar using the ``bzr+http``, ``bzr+https``, ``bzr+ssh``, ``bzr+sftp``, ``bzr+ftp`` and ``bzr+lp`` schemes. Here are the supported forms:: [-e] bzr+http://bzr.myproject.org/MyProject/trunk#egg=MyProject [-e] bzr+sftp://user@myproject.org/MyProject/trunk#egg=MyProject [-e] bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject [-e] bzr+ftp://user@myproject.org/MyProject/trunk#egg=MyProject [-e] bzr+lp:MyProject#egg=MyProject Tags or revisions can be installed like so:: [-e] bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject [-e] bzr+http://bzr.myproject.org/MyProject/trunk@v1.0#egg=MyProject Finding Packages ++++++++++++++++ pip searches for packages on `PyPI`_ using the `http simple interface `_, which is documented `here `_ and `there `_ pip offers a number of Package Index Options for modifying how packages are found. See the :ref:`pip install Examples`. .. _`SSL Certificate Verification`: SSL Certificate Verification ++++++++++++++++++++++++++++ Starting with v1.3, pip provides SSL certificate verification over https, for the purpose of providing secure, certified downloads from PyPI. Hash Verification +++++++++++++++++ PyPI provides md5 hashes in the hash fragment of package download urls. pip supports checking this, as well as any of the guaranteed hashlib algorithms (sha1, sha224, sha384, sha256, sha512, md5). The hash fragment is case sensitive (i.e. sha1 not SHA1). This check is only intended to provide basic download corruption protection. It is not intended to provide security against tampering. For that, see :ref:`SSL Certificate Verification` Download Cache ++++++++++++++ pip offers a :ref:`--download-cache ` option for installs to prevent redundant downloads of archives from PyPI. The point of this cache is *not* to circumvent the index crawling process, but to *just* prevent redundant downloads. Items are stored in this cache based on the url the archive was found at, not simply the archive name. If you want a fast/local install solution that circumvents crawling PyPI, see the :ref:`Fast & Local Installs`. Like all options, :ref:`--download-cache `, can also be set as an environment variable, or placed into the pip config file. See the :ref:`Configuration` section. .. _`editable-installs`: "Editable" Installs +++++++++++++++++++ "Editable" installs are fundamentally `"setuptools develop mode" `_ installs. You can install local projects or VCS projects in "editable" mode:: $ pip install -e path/to/SomeProject $ pip install -e git+http://repo/my_project.git#egg=SomeProject For local projects, the "SomeProject.egg-info" directory is created relative to the project path. This is one advantage over just using ``setup.py develop``, which creates the "egg-info" directly relative the current working directory. Controlling setup_requires ++++++++++++++++++++++++++ Setuptools offers the ``setup_requires`` `setup() keyword `_ for specifying dependencies that need to be present in order for the `setup.py` script to run. Internally, Setuptools uses ``easy_install`` to fulfill these dependencies. pip has no way to control how these dependencies are located. None of the Package Index Options have an effect. The solution is to configure a "system" or "personal" `Distutils configuration file `_ to manage the fulfillment. For example, to have the dependency located at an alternate index, add this: :: [easy_install] index_url = https://my.index-mirror.com To have the dependency located from a local directory and not crawl PyPI, add this: :: [easy_install] allow_hosts = '' find_links = file:///path/to/local/archives Options ******* .. pip-command-options:: install .. pip-index-options:: .. _`pip install Examples`: Examples ******** 1) Install `SomePackage` and it's dependencies from `PyPI`_ using :ref:`Requirement Specifiers` :: $ pip install SomePackage # latest version $ pip install SomePackage==1.0.4 # specific version $ pip install 'SomePackage>=1.0.4' # minimum version 2) Install a list of requirements specified in a file. See the :ref:`Requirements files `. :: $ pip install -r requirements.txt 3) Upgrade an already installed `SomePackage` to the latest from PyPI. :: $ pip install --upgrade SomePackage 4) Install a local project in "editable" mode. See the section on :ref:`Editable Installs `. :: $ pip install -e . # project in current directory $ pip install -e path/to/project # project in another directory 5) Install a project from VCS in "editable" mode. See the sections on :ref:`VCS Support ` and :ref:`Editable Installs `. :: $ pip install -e git+https://git.repo/some_pkg.git#egg=SomePackage # from git $ pip install -e hg+https://hg.repo/some_pkg.git#egg=SomePackage # from mercurial $ pip install -e svn+svn://svn.repo/some_pkg/trunk/#egg=SomePackage # from svn $ pip install -e git+https://git.repo/some_pkg.git@feature#egg=SomePackage # from 'feature' branch $ pip install -e git+https://git.repo/some_repo.git@egg=subdir&subdirectory=subdir_path # install a python package from a repo subdirectory 6) Install a package with `setuptools extras`_. :: $ pip install SomePackage[PDF] $ pip install SomePackage[PDF]==3.0 $ pip install -e .[PDF]==3.0 # editable project in current directory 7) Install a particular source archive file. :: $ pip install ./downloads/SomePackage-1.0.4.tar.gz $ pip install http://my.package.repo/SomePackage-1.0.4.zip 8) Install from alternative package repositories. Install from a different index, and not `PyPI`_ :: $ pip install --index-url http://my.package.repo/simple/ SomePackage Search an additional index during install, in addition to `PyPI`_ :: $ pip install --extra-index-url http://my.package.repo/simple SomePackage Install from a local flat directory containing archives (and don't scan indexes):: $ pip install --no-index --find-links=file:///local/dir/ SomePackage $ pip install --no-index --find-links=/local/dir/ SomePackage $ pip install --no-index --find-links=relative/dir/ SomePackage 9) Find pre-release and development versions, in addition to stable versions. By default, pip only finds stable versions. :: $ pip install --pre SomePackage .. _PyPI: http://pypi.python.org/pypi/ .. _setuptools extras: http://packages.python.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies share/doc/alt-python34-pip/docs/reference/pip_uninstall.rst000064400000001037152342604300017750 0ustar00.. _`pip uninstall`: pip uninstall ------------- .. contents:: Usage ***** .. pip-command-usage:: uninstall Description *********** .. pip-command-description:: uninstall Options ******* .. pip-command-options:: uninstall Examples ******** 1) Uninstall a package. :: $ pip uninstall simplejson Uninstalling simplejson: /home/me/env/lib/python2.7/site-packages/simplejson /home/me/env/lib/python2.7/site-packages/simplejson-2.2.1-py2.7.egg-info Proceed (y/n)? y Successfully uninstalled simplejson share/doc/alt-python34-pip/docs/reference/pip_wheel.rst000064400000000722152342604300017043 0ustar00 .. _`pip wheel`: pip wheel --------- .. contents:: Usage ***** .. pip-command-usage:: wheel Description *********** .. pip-command-description:: wheel Options ******* .. pip-command-options:: wheel .. pip-index-options:: Examples ******** 1. Build wheels for a requirement (and all its dependencies), and then install :: $ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage $ pip install --no-index --find-links=/tmp/wheelhouse SomePackage share/doc/alt-python34-pip/docs/reference/pip_search.rst000064400000000701152342604300017201 0ustar00.. _`pip search`: pip search ---------- .. contents:: Usage ***** .. pip-command-usage:: search Description *********** .. pip-command-description:: search Options ******* .. pip-command-options:: search Examples ******** 1. Search for "peppercorn" :: $ pip search peppercorn pepperedform - Helpers for using peppercorn with formprocess. peppercorn - A library for converting a token stream into [...] .. _`pip wheel`: share/doc/alt-python34-pip/docs/reference/pip.rst000064400000003525152342604300015663 0ustar00 pip --- .. contents:: Usage ***** :: pip [options] Description *********** .. _`Logging`: Logging ======= Console logging ~~~~~~~~~~~~~~~ pip offers :ref:`-v, --verbose <--verbose>` and :ref:`-q, --quiet <--quiet>` to control the console log level. Each option can be used multiple times and used together. One ``-v`` increases the verbosity by one, whereas one ``-q`` decreases it by one. The series of log levels, in order, are as follows:: VERBOSE_DEBUG, DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL ``NOTIFY`` is the default level. A few examples on how the parameters work to affect the level: * specifying nothing results in ``NOTIFY`` * ``-v`` results in ``INFO`` * ``-vv`` results in ``DEBUG`` * ``-q`` results in ``WARN`` * ``-vq`` results in ``NOTIFY`` The most practical use case for users is either ``-v`` or ``-vv`` to see additional logging to help troubleshoot an issue. .. _`FileLogging`: File logging ~~~~~~~~~~~~ pip offers the :ref:`--log <--log>` option for specifying a file where a maximum verbosity log will be kept. This option is empty by default. This log appends to previous logging. Additionally, when commands fail (i.e. return a non-zero exit code), pip writes a "failure log" for the failed command. This log overwrites previous logging. The default location is as follows: * On Unix and Mac OS X: :file:`$HOME/.pip/pip.log` * On Windows, the configuration file is: :file:`%HOME%\\pip\\pip.log` The option for the failure log, is :ref:`--log-file <--log-file>`. Both logs add a line per execution to specify the date and what pip executable wrote the log. Like all pip options, ``--log`` and ``log-file``, can also be set as an environment variable, or placed into the pip config file. See the :ref:`Configuration` section. .. _`General Options`: General Options *************** .. pip-general-options:: share/doc/alt-python34-pip/docs/reference/pip_freeze.rst000064400000001050152342604300017212 0ustar00 .. _`pip freeze`: pip freeze ----------- .. contents:: Usage ***** .. pip-command-usage:: freeze Description *********** .. pip-command-description:: freeze Options ******* .. pip-command-options:: freeze Examples ******** 1) Generate output suitable for a requirements file. :: $ pip freeze Jinja2==2.6 Pygments==1.5 Sphinx==1.1.3 docutils==0.9.1 2) Generate a requirements file and then install from it in another environment. :: $ env1/bin/pip freeze > requirements.txt $ env2/bin/pip install -r requirements.txt share/doc/alt-python34-pip/docs/reference/pip_list.rst000064400000001053152342604300016710 0ustar00.. _`pip list`: pip list --------- .. contents:: Usage ***** .. pip-command-usage:: list Description *********** .. pip-command-description:: list Options ******* .. pip-command-options:: list .. pip-index-options:: Examples ******** 1) List installed packages. :: $ pip list Pygments (1.5) docutils (0.9.1) Sphinx (1.1.2) Jinja2 (2.6) 2) List outdated packages (excluding editables), and the latest version available :: $ pip list --outdated docutils (Current: 0.9.1 Latest: 0.10) Sphinx (Current: 1.1.2 Latest: 1.1.3) share/doc/alt-python34-pip/docs/reference/index.rst000064400000000271152342604300016175 0ustar00=============== Reference Guide =============== .. toctree:: :maxdepth: 2 pip pip_install pip_uninstall pip_freeze pip_list pip_show pip_search pip_wheel share/doc/alt-python34-pip/README.rst000064400000000403152342604300013132 0ustar00pip === .. image:: https://pypip.in/v/pip/badge.png :target: https://pypi.python.org/pypi/pip .. image:: https://secure.travis-ci.org/pypa/pip.png?branch=develop :target: http://travis-ci.org/pypa/pip For documentation, see https://pip.pypa.io/ share/doc/alt-python34-setuptools/zpl.txt000064400000004476152342604300014460 0ustar00Zope Public License (ZPL) Version 2.0 ----------------------------------------------- This software is Copyright (c) Zope Corporation (tm) and Contributors. All rights reserved. This license has been certified as open source. It has also been designated as GPL compatible by the Free Software Foundation (FSF). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name Zope Corporation (tm) must not be used to endorse or promote products derived from this software without prior written permission from Zope Corporation. 4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of Zope Corporation. Use of them is covered in a separate agreement (see http://www.zope.com/Marks). 5. If any files are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. Disclaimer THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of contributions made by Zope Corporation and many individuals on behalf of Zope Corporation. Specific attributions are listed in the accompanying credits file. share/doc/alt-python34-setuptools/CONTRIBUTORS.txt000064400000001203152342604300015571 0ustar00============ Contributors ============ * Alex Grönholm * Alice Bevan-McGregor * Arfrever Frehtes Taifersar Arahesis * Christophe Combelles * Daniel Stutzbach * Daniel Holth * Dirley Rodrigues * Donald Stufft * Grigory Petrov * Hanno Schlichting * Jannis Leidel * Jason R. Coombs * Jim Fulton * Jonathan Lange * Justin Azoff * Lennart Regebro * Marc Abramowitz * Martin von Löwis * Noufal Ibrahim * Pedro Algarvio * Pete Hollobon * Phillip J. Eby * Philip Jenvey * Philip Thiem * Reinout van Rees * Robert Myers * Stefan H. Holek * Tarek Ziadé * Toshio Kuratomi If you think you name is missing, please add it (alpha order by first name) share/doc/alt-python34-setuptools/DEVGUIDE.txt000064400000001160152342604300015032 0ustar00============================ Quick notes for contributors ============================ Setuptools is developed using the DVCS Mercurial. Grab the code at bitbucket:: $ hg clone https://bitbucket.org/pypa/setuptools If you want to contribute changes, we recommend you fork the repository on bitbucket, commit the changes to your repository, and then make a pull request on bitbucket. If you make some changes, don't forget to: - add a note in CHANGES.txt Please commit bug-fixes against the current maintenance branch and new features to the default branch. You can run the tests via:: $ python setup.py test share/doc/alt-python34-setuptools/docs/conf.py000064400000014755152342604300015342 0ustar00# -*- coding: utf-8 -*- # # Setuptools documentation build configuration file, created by # sphinx-quickstart on Fri Jul 17 14:22:37 2009. # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import setup as setup_script # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.append(os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.txt' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. project = 'Setuptools' copyright = '2009-2013, The fellowship of the packaging' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = setup_script.setup_params['version'] # The full version, including alpha/beta/rc tags. release = setup_script.setup_params['version'] # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. html_theme = 'nature' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['_theme'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = "Setuptools documentation" # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "Setuptools" # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". #html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = {'index': 'indexsidebar.html'} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_use_modindex = False # If false, no index is generated. html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Setuptoolsdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'Setuptools.tex', 'Setuptools Documentation', 'The fellowship of the packaging', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True share/doc/alt-python34-setuptools/docs/python3.txt000064400000012035152342604300016175 0ustar00===================================================== Supporting both Python 2 and Python 3 with Setuptools ===================================================== Starting with Distribute version 0.6.2 and Setuptools 0.7, the Setuptools project supported Python 3. Installing and using setuptools for Python 3 code works exactly the same as for Python 2 code, but Setuptools also helps you to support Python 2 and Python 3 from the same source code by letting you run 2to3 on the code as a part of the build process, by setting the keyword parameter ``use_2to3`` to True. Setuptools as help during porting ================================= Setuptools can make the porting process much easier by automatically running 2to3 as a part of the test running. To do this you need to configure the setup.py so that you can run the unit tests with ``python setup.py test``. See :ref:`test` for more information on this. Once you have the tests running under Python 2, you can add the use_2to3 keyword parameters to setup(), and start running the tests under Python 3. The test command will now first run the build command during which the code will be converted with 2to3, and the tests will then be run from the build directory, as opposed from the source directory as is normally done. Setuptools will convert all Python files, and also all doctests in Python files. However, if you have doctests located in separate text files, these will not automatically be converted. By adding them to the ``convert_2to3_doctests`` keyword parameter Setuptools will convert them as well. By default, the conversion uses all fixers in the ``lib2to3.fixers`` package. To use additional fixers, the parameter ``use_2to3_fixers`` can be set to a list of names of packages containing fixers. To exclude fixers, the parameter ``use_2to3_exclude_fixers`` can be set to fixer names to be skipped. A typical setup.py can look something like this:: from setuptools import setup setup( name='your.module', version = '1.0', description='This is your awesome module', author='You', author_email='your@email', package_dir = {'': 'src'}, packages = ['your', 'you.module'], test_suite = 'your.module.tests', use_2to3 = True, convert_2to3_doctests = ['src/your/module/README.txt'], use_2to3_fixers = ['your.fixers'], use_2to3_exclude_fixers = ['lib2to3.fixes.fix_import'], ) Differential conversion ----------------------- Note that a file will only be copied and converted during the build process if the source file has been changed. If you add a file to the doctests that should be converted, it will not be converted the next time you run the tests, since it hasn't been modified. You need to remove it from the build directory. Also if you run the build, install or test commands before adding the use_2to3 parameter, you will have to remove the build directory before you run the test command, as the files otherwise will seem updated, and no conversion will happen. In general, if code doesn't seem to be converted, deleting the build directory and trying again is a good saferguard against the build directory getting "out of sync" with the source directory. Distributing Python 3 modules ============================= You can distribute your modules with Python 3 support in different ways. A normal source distribution will work, but can be slow in installing, as the 2to3 process will be run during the install. But you can also distribute the module in binary format, such as a binary egg. That egg will contain the already converted code, and hence no 2to3 conversion is needed during install. Advanced features ================= If you don't want to run the 2to3 conversion on the doctests in Python files, you can turn that off by setting ``setuptools.use_2to3_on_doctests = False``. Note on compatibility with older versions of setuptools ======================================================= Setuptools earlier than 0.7 does not know about the new keyword parameters to support Python 3. As a result it will warn about the unknown keyword parameters if you use those versions of setuptools instead of Distribute under Python 2. This output is not an error, and install process will continue as normal, but if you want to get rid of that error this is easy. Simply conditionally add the new parameters into an extra dict and pass that dict into setup():: from setuptools import setup import sys extra = {} if sys.version_info >= (3,): extra['use_2to3'] = True extra['convert_2to3_doctests'] = ['src/your/module/README.txt'] extra['use_2to3_fixers'] = ['your.fixers'] setup( name='your.module', version = '1.0', description='This is your awesome module', author='You', author_email='your@email', package_dir = {'': 'src'}, packages = ['your', 'you.module'], test_suite = 'your.module.tests', **extra ) This way the parameters will only be used under Python 3, where Distribute or Setuptools 0.7 or later is required. share/doc/alt-python34-setuptools/docs/formats.txt000064400000074527152342604300016262 0ustar00===================================== The Internal Structure of Python Eggs ===================================== STOP! This is not the first document you should read! .. contents:: **Table of Contents** ---------------------- Eggs and their Formats ---------------------- A "Python egg" is a logical structure embodying the release of a specific version of a Python project, comprising its code, resources, and metadata. There are multiple formats that can be used to physically encode a Python egg, and others can be developed. However, a key principle of Python eggs is that they should be discoverable and importable. That is, it should be possible for a Python application to easily and efficiently find out what eggs are present on a system, and to ensure that the desired eggs' contents are importable. There are two basic formats currently implemented for Python eggs: 1. ``.egg`` format: a directory or zipfile *containing* the project's code and resources, along with an ``EGG-INFO`` subdirectory that contains the project's metadata 2. ``.egg-info`` format: a file or directory placed *adjacent* to the project's code and resources, that directly contains the project's metadata. Both formats can include arbitrary Python code and resources, including static data files, package and non-package directories, Python modules, C extension modules, and so on. But each format is optimized for different purposes. The ``.egg`` format is well-suited to distribution and the easy uninstallation or upgrades of code, since the project is essentially self-contained within a single directory or file, unmingled with any other projects' code or resources. It also makes it possible to have multiple versions of a project simultaneously installed, such that individual programs can select the versions they wish to use. The ``.egg-info`` format, on the other hand, was created to support backward-compatibility, performance, and ease of installation for system packaging tools that expect to install all projects' code and resources to a single directory (e.g. ``site-packages``). Placing the metadata in that same directory simplifies the installation process, since it isn't necessary to create ``.pth`` files or otherwise modify ``sys.path`` to include each installed egg. Its disadvantage, however, is that it provides no support for clean uninstallation or upgrades, and of course only a single version of a project can be installed to a given directory. Thus, support from a package management tool is required. (This is why setuptools' "install" command refers to this type of egg installation as "single-version, externally managed".) Also, they lack sufficient data to allow them to be copied from their installation source. easy_install can "ship" an application by copying ``.egg`` files or directories to a target location, but it cannot do this for ``.egg-info`` installs, because there is no way to tell what code and resources belong to a particular egg -- there may be several eggs "scrambled" together in a single installation location, and the ``.egg-info`` format does not currently include a way to list the files that were installed. (This may change in a future version.) Code and Resources ================== The layout of the code and resources is dictated by Python's normal import layout, relative to the egg's "base location". For the ``.egg`` format, the base location is the ``.egg`` itself. That is, adding the ``.egg`` filename or directory name to ``sys.path`` makes its contents importable. For the ``.egg-info`` format, however, the base location is the directory that *contains* the ``.egg-info``, and thus it is the directory that must be added to ``sys.path`` to make the egg importable. (Note that this means that the "normal" installation of a package to a ``sys.path`` directory is sufficient to make it an "egg" if it has an ``.egg-info`` file or directory installed alongside of it.) Project Metadata ================= If eggs contained only code and resources, there would of course be no difference between them and any other directory or zip file on ``sys.path``. Thus, metadata must also be included, using a metadata file or directory. For the ``.egg`` format, the metadata is placed in an ``EGG-INFO`` subdirectory, directly within the ``.egg`` file or directory. For the ``.egg-info`` format, metadata is stored directly within the ``.egg-info`` directory itself. The minimum project metadata that all eggs must have is a standard Python ``PKG-INFO`` file, named ``PKG-INFO`` and placed within the metadata directory appropriate to the format. Because it's possible for this to be the only metadata file included, ``.egg-info`` format eggs are not required to be a directory; they can just be a ``.egg-info`` file that directly contains the ``PKG-INFO`` metadata. This eliminates the need to create a directory just to store one file. This option is *not* available for ``.egg`` formats, since setuptools always includes other metadata. (In fact, setuptools itself never generates ``.egg-info`` files, either; the support for using files was added so that the requirement could easily be satisfied by other tools, such as the distutils in Python 2.5). In addition to the ``PKG-INFO`` file, an egg's metadata directory may also include files and directories representing various forms of optional standard metadata (see the section on `Standard Metadata`_, below) or user-defined metadata required by the project. For example, some projects may define a metadata format to describe their application plugins, and metadata in this format would then be included by plugin creators in their projects' metadata directories. Filename-Embedded Metadata ========================== To allow introspection of installed projects and runtime resolution of inter-project dependencies, a certain amount of information is embedded in egg filenames. At a minimum, this includes the project name, and ideally will also include the project version number. Optionally, it can also include the target Python version and required runtime platform if platform-specific C code is included. The syntax of an egg filename is as follows:: name ["-" version ["-py" pyver ["-" required_platform]]] "." ext The "name" and "version" should be escaped using the ``to_filename()`` function provided by ``pkg_resources``, after first processing them with ``safe_name()`` and ``safe_version()`` respectively. These latter two functions can also be used to later "unescape" these parts of the filename. (For a detailed description of these transformations, please see the "Parsing Utilities" section of the ``pkg_resources`` manual.) The "pyver" string is the Python major version, as found in the first 3 characters of ``sys.version``. "required_platform" is essentially a distutils ``get_platform()`` string, but with enhancements to properly distinguish Mac OS versions. (See the ``get_build_platform()`` documentation in the "Platform Utilities" section of the ``pkg_resources`` manual for more details.) Finally, the "ext" is either ``.egg`` or ``.egg-info``, as appropriate for the egg's format. Normally, an egg's filename should include at least the project name and version, as this allows the runtime system to find desired project versions without having to read the egg's PKG-INFO to determine its version number. Setuptools, however, only includes the version number in the filename when an ``.egg`` file is built using the ``bdist_egg`` command, or when an ``.egg-info`` directory is being installed by the ``install_egg_info`` command. When generating metadata for use with the original source tree, it only includes the project name, so that the directory will not have to be renamed each time the project's version changes. This is especially important when version numbers change frequently, and the source metadata directory is kept under version control with the rest of the project. (As would be the case when the project's source includes project-defined metadata that is not generated from by setuptools from data in the setup script.) Egg Links ========= In addition to the ``.egg`` and ``.egg-info`` formats, there is a third egg-related extension that you may encounter on occasion: ``.egg-link`` files. These files are not eggs, strictly speaking. They simply provide a way to reference an egg that is not physically installed in the desired location. They exist primarily as a cross-platform alternative to symbolic links, to support "installing" code that is being developed in a different location than the desired installation location. For example, if a user is developing an application plugin in their home directory, but the plugin needs to be "installed" in an application plugin directory, running "setup.py develop -md /path/to/app/plugins" will install an ``.egg-link`` file in ``/path/to/app/plugins``, that tells the egg runtime system where to find the actual egg (the user's project source directory and its ``.egg-info`` subdirectory). ``.egg-link`` files are named following the format for ``.egg`` and ``.egg-info`` names, but only the project name is included; no version, Python version, or platform information is included. When the runtime searches for available eggs, ``.egg-link`` files are opened and the actual egg file/directory name is read from them. Each ``.egg-link`` file should contain a single file or directory name, with no newlines. This filename should be the base location of one or more eggs. That is, the name must either end in ``.egg``, or else it should be the parent directory of one or more ``.egg-info`` format eggs. As of setuptools 0.6c6, the path may be specified as a platform-independent (i.e. ``/``-separated) relative path from the directory containing the ``.egg-link`` file, and a second line may appear in the file, specifying a platform-independent relative path from the egg's base directory to its setup script directory. This allows installation tools such as EasyInstall to find the project's setup directory and build eggs or perform other setup commands on it. ----------------- Standard Metadata ----------------- In addition to the minimum required ``PKG-INFO`` metadata, projects can include a variety of standard metadata files or directories, as described below. Except as otherwise noted, these files and directories are automatically generated by setuptools, based on information supplied in the setup script or through analysis of the project's code and resources. Most of these files and directories are generated via "egg-info writers" during execution of the setuptools ``egg_info`` command, and are listed in the ``egg_info.writers`` entry point group defined by setuptools' own ``setup.py`` file. Project authors can register their own metadata writers as entry points in this group (as described in the setuptools manual under "Adding new EGG-INFO Files") to cause setuptools to generate project-specific metadata files or directories during execution of the ``egg_info`` command. It is up to project authors to document these new metadata formats, if they create any. ``.txt`` File Formats ===================== Files described in this section that have ``.txt`` extensions have a simple lexical format consisting of a sequence of text lines, each line terminated by a linefeed character (regardless of platform). Leading and trailing whitespace on each line is ignored, as are blank lines and lines whose first nonblank character is a ``#`` (comment symbol). (This is the parsing format defined by the ``yield_lines()`` function of the ``pkg_resources`` module.) All ``.txt`` files defined by this section follow this format, but some are also "sectioned" files, meaning that their contents are divided into sections, using square-bracketed section headers akin to Windows ``.ini`` format. Note that this does *not* imply that the lines within the sections follow an ``.ini`` format, however. Please see an individual metadata file's documentation for a description of what the lines and section names mean in that particular file. Sectioned files can be parsed using the ``split_sections()`` function; see the "Parsing Utilities" section of the ``pkg_resources`` manual for for details. Dependency Metadata =================== ``requires.txt`` ---------------- This is a "sectioned" text file. Each section is a sequence of "requirements", as parsed by the ``parse_requirements()`` function; please see the ``pkg_resources`` manual for the complete requirement parsing syntax. The first, unnamed section (i.e., before the first section header) in this file is the project's core requirements, which must be installed for the project to function. (Specified using the ``install_requires`` keyword to ``setup()``). The remaining (named) sections describe the project's "extra" requirements, as specified using the ``extras_require`` keyword to ``setup()``. The section name is the name of the optional feature, and the section body lists that feature's dependencies. Note that it is not normally necessary to inspect this file directly; ``pkg_resources.Distribution`` objects have a ``requires()`` method that can be used to obtain ``Requirement`` objects describing the project's core and optional dependencies. ``dependency_links.txt`` ------------------------ A list of dependency URLs, one per line, as specified using the ``dependency_links`` keyword to ``setup()``. These may be direct download URLs, or the URLs of web pages containing direct download links, and will be used by EasyInstall to find dependencies, as though the user had manually provided them via the ``--find-links`` command line option. Please see the setuptools manual and EasyInstall manual for more information on specifying this option, and for information on how EasyInstall processes ``--find-links`` URLs. ``depends.txt`` -- Obsolete, do not create! ------------------------------------------- This file follows an identical format to ``requires.txt``, but is obsolete and should not be used. The earliest versions of setuptools required users to manually create and maintain this file, so the runtime still supports reading it, if it exists. The new filename was created so that it could be automatically generated from ``setup()`` information without overwriting an existing hand-created ``depends.txt``, if one was already present in the project's source ``.egg-info`` directory. ``namespace_packages.txt`` -- Namespace Package Metadata ======================================================== A list of namespace package names, one per line, as supplied to the ``namespace_packages`` keyword to ``setup()``. Please see the manuals for setuptools and ``pkg_resources`` for more information about namespace packages. ``entry_points.txt`` -- "Entry Point"/Plugin Metadata ===================================================== This is a "sectioned" text file, whose contents encode the ``entry_points`` keyword supplied to ``setup()``. All sections are named, as the section names specify the entry point groups in which the corresponding section's entry points are registered. Each section is a sequence of "entry point" lines, each parseable using the ``EntryPoint.parse`` classmethod; please see the ``pkg_resources`` manual for the complete entry point parsing syntax. Note that it is not necessary to parse this file directly; the ``pkg_resources`` module provides a variety of APIs to locate and load entry points automatically. Please see the setuptools and ``pkg_resources`` manuals for details on the nature and uses of entry points. The ``scripts`` Subdirectory ============================ This directory is currently only created for ``.egg`` files built by the setuptools ``bdist_egg`` command. It will contain copies of all of the project's "traditional" scripts (i.e., those specified using the ``scripts`` keyword to ``setup()``). This is so that they can be reconstituted when an ``.egg`` file is installed. The scripts are placed here using the disutils' standard ``install_scripts`` command, so any ``#!`` lines reflect the Python installation where the egg was built. But instead of copying the scripts to the local script installation directory, EasyInstall writes short wrapper scripts that invoke the original scripts from inside the egg, after ensuring that sys.path includes the egg and any eggs it depends on. For more about `script wrappers`_, see the section below on `Installation and Path Management Issues`_. Zip Support Metadata ==================== ``native_libs.txt`` ------------------- A list of C extensions and other dynamic link libraries contained in the egg, one per line. Paths are ``/``-separated and relative to the egg's base location. This file is generated as part of ``bdist_egg`` processing, and as such only appears in ``.egg`` files (and ``.egg`` directories created by unpacking them). It is used to ensure that all libraries are extracted from a zipped egg at the same time, in case there is any direct linkage between them. Please see the `Zip File Issues`_ section below for more information on library and resource extraction from ``.egg`` files. ``eager_resources.txt`` ----------------------- A list of resource files and/or directories, one per line, as specified via the ``eager_resources`` keyword to ``setup()``. Paths are ``/``-separated and relative to the egg's base location. Resource files or directories listed here will be extracted simultaneously, if any of the named resources are extracted, or if any native libraries listed in ``native_libs.txt`` are extracted. Please see the setuptools manual for details on what this feature is used for and how it works, as well as the `Zip File Issues`_ section below. ``zip-safe`` and ``not-zip-safe`` --------------------------------- These are zero-length files, and either one or the other should exist. If ``zip-safe`` exists, it means that the project will work properly when installedas an ``.egg`` zipfile, and conversely the existence of ``not-zip-safe`` means the project should not be installed as an ``.egg`` file. The ``zip_safe`` option to setuptools' ``setup()`` determines which file will be written. If the option isn't provided, setuptools attempts to make its own assessment of whether the package can work, based on code and content analysis. If neither file is present at installation time, EasyInstall defaults to assuming that the project should be unzipped. (Command-line options to EasyInstall, however, take precedence even over an existing ``zip-safe`` or ``not-zip-safe`` file.) Note that these flag files appear only in ``.egg`` files generated by ``bdist_egg``, and in ``.egg`` directories created by unpacking such an ``.egg`` file. ``top_level.txt`` -- Conflict Management Metadata ================================================= This file is a list of the top-level module or package names provided by the project, one Python identifier per line. Subpackages are not included; a project containing both a ``foo.bar`` and a ``foo.baz`` would include only one line, ``foo``, in its ``top_level.txt``. This data is used by ``pkg_resources`` at runtime to issue a warning if an egg is added to ``sys.path`` when its contained packages may have already been imported. (It was also once used to detect conflicts with non-egg packages at installation time, but in more recent versions, setuptools installs eggs in such a way that they always override non-egg packages, thus preventing a problem from arising.) ``SOURCES.txt`` -- Source Files Manifest ======================================== This file is roughly equivalent to the distutils' ``MANIFEST`` file. The differences are as follows: * The filenames always use ``/`` as a path separator, which must be converted back to a platform-specific path whenever they are read. * The file is automatically generated by setuptools whenever the ``egg_info`` or ``sdist`` commands are run, and it is *not* user-editable. Although this metadata is included with distributed eggs, it is not actually used at runtime for any purpose. Its function is to ensure that setuptools-built *source* distributions can correctly discover what files are part of the project's source, even if the list had been generated using revision control metadata on the original author's system. In other words, ``SOURCES.txt`` has little or no runtime value for being included in distributed eggs, and it is possible that future versions of the ``bdist_egg`` and ``install_egg_info`` commands will strip it before installation or distribution. Therefore, do not rely on its being available outside of an original source directory or source distribution. ------------------------------ Other Technical Considerations ------------------------------ Zip File Issues =============== Although zip files resemble directories, they are not fully substitutable for them. Most platforms do not support loading dynamic link libraries contained in zipfiles, so it is not possible to directly import C extensions from ``.egg`` zipfiles. Similarly, there are many existing libraries -- whether in Python or C -- that require actual operating system filenames, and do not work with arbitrary "file-like" objects or in-memory strings, and thus cannot operate directly on the contents of zip files. To address these issues, the ``pkg_resources`` module provides a "resource API" to support obtaining either the contents of a resource, or a true operating system filename for the resource. If the egg containing the resource is a directory, the resource's real filename is simply returned. However, if the egg is a zipfile, then the resource is first extracted to a cache directory, and the filename within the cache is returned. The cache directory is determined by the ``pkg_resources`` API; please see the ``set_cache_path()`` and ``get_default_cache()`` documentation for details. The Extraction Process ---------------------- Resources are extracted to a cache subdirectory whose name is based on the enclosing ``.egg`` filename and the path to the resource. If there is already a file of the correct name, size, and timestamp, its filename is returned to the requester. Otherwise, the desired file is extracted first to a temporary name generated using ``mkstemp(".$extract",target_dir)``, and then its timestamp is set to match the one in the zip file, before renaming it to its final name. (Some collision detection and resolution code is used to handle the fact that Windows doesn't overwrite files when renaming.) If a resource directory is requested, all of its contents are recursively extracted in this fashion, to ensure that the directory name can be used as if it were valid all along. If the resource requested for extraction is listed in the ``native_libs.txt`` or ``eager_resources.txt`` metadata files, then *all* resources listed in *either* file will be extracted before the requested resource's filename is returned, thus ensuring that all C extensions and data used by them will be simultaneously available. Extension Import Wrappers ------------------------- Since Python's built-in zip import feature does not support loading C extension modules from zipfiles, the setuptools ``bdist_egg`` command generates special import wrappers to make it work. The wrappers are ``.py`` files (along with corresponding ``.pyc`` and/or ``.pyo`` files) that have the same module name as the corresponding C extension. These wrappers are located in the same package directory (or top-level directory) within the zipfile, so that say, ``foomodule.so`` will get a corresponding ``foo.py``, while ``bar/baz.pyd`` will get a corresponding ``bar/baz.py``. These wrapper files contain a short stanza of Python code that asks ``pkg_resources`` for the filename of the corresponding C extension, then reloads the module using the obtained filename. This will cause ``pkg_resources`` to first ensure that all of the egg's C extensions (and any accompanying "eager resources") are extracted to the cache before attempting to link to the C library. Note, by the way, that ``.egg`` directories will also contain these wrapper files. However, Python's default import priority is such that C extensions take precedence over same-named Python modules, so the import wrappers are ignored unless the egg is a zipfile. Installation and Path Management Issues ======================================= Python's initial setup of ``sys.path`` is very dependent on the Python version and installation platform, as well as how Python was started (i.e., script vs. ``-c`` vs. ``-m`` vs. interactive interpreter). In fact, Python also provides only two relatively robust ways to affect ``sys.path`` outside of direct manipulation in code: the ``PYTHONPATH`` environment variable, and ``.pth`` files. However, with no cross-platform way to safely and persistently change environment variables, this leaves ``.pth`` files as EasyInstall's only real option for persistent configuration of ``sys.path``. But ``.pth`` files are rather strictly limited in what they are allowed to do normally. They add directories only to the *end* of ``sys.path``, after any locally-installed ``site-packages`` directory, and they are only processed *in* the ``site-packages`` directory to start with. This is a double whammy for users who lack write access to that directory, because they can't create a ``.pth`` file that Python will read, and even if a sympathetic system administrator adds one for them that calls ``site.addsitedir()`` to allow some other directory to contain ``.pth`` files, they won't be able to install newer versions of anything that's installed in the systemwide ``site-packages``, because their paths will still be added *after* ``site-packages``. So EasyInstall applies two workarounds to solve these problems. The first is that EasyInstall leverages ``.pth`` files' "import" feature to manipulate ``sys.path`` and ensure that anything EasyInstall adds to a ``.pth`` file will always appear before both the standard library and the local ``site-packages`` directories. Thus, it is always possible for a user who can write a Python-read ``.pth`` file to ensure that their packages come first in their own environment. Second, when installing to a ``PYTHONPATH`` directory (as opposed to a "site" directory like ``site-packages``) EasyInstall will also install a special version of the ``site`` module. Because it's in a ``PYTHONPATH`` directory, this module will get control before the standard library version of ``site`` does. It will record the state of ``sys.path`` before invoking the "real" ``site`` module, and then afterwards it processes any ``.pth`` files found in ``PYTHONPATH`` directories, including all the fixups needed to ensure that eggs always appear before the standard library in sys.path, but are in a relative order to one another that is defined by their ``PYTHONPATH`` and ``.pth``-prescribed sequence. The net result of these changes is that ``sys.path`` order will be as follows at runtime: 1. The ``sys.argv[0]`` directory, or an emtpy string if no script is being executed. 2. All eggs installed by EasyInstall in any ``.pth`` file in each ``PYTHONPATH`` directory, in order first by ``PYTHONPATH`` order, then normal ``.pth`` processing order (which is to say alphabetical by ``.pth`` filename, then by the order of listing within each ``.pth`` file). 3. All eggs installed by EasyInstall in any ``.pth`` file in each "site" directory (such as ``site-packages``), following the same ordering rules as for the ones on ``PYTHONPATH``. 4. The ``PYTHONPATH`` directories themselves, in their original order 5. Any paths from ``.pth`` files found on ``PYTHONPATH`` that were *not* eggs installed by EasyInstall, again following the same relative ordering rules. 6. The standard library and "site" directories, along with the contents of any ``.pth`` files found in the "site" directories. Notice that sections 1, 4, and 6 comprise the "normal" Python setup for ``sys.path``. Sections 2 and 3 are inserted to support eggs, and section 5 emulates what the "normal" semantics of ``.pth`` files on ``PYTHONPATH`` would be if Python natively supported them. For further discussion of the tradeoffs that went into this design, as well as notes on the actual magic inserted into ``.pth`` files to make them do these things, please see also the following messages to the distutils-SIG mailing list: * http://mail.python.org/pipermail/distutils-sig/2006-February/006026.html * http://mail.python.org/pipermail/distutils-sig/2006-March/006123.html Script Wrappers --------------- EasyInstall never directly installs a project's original scripts to a script installation directory. Instead, it writes short wrapper scripts that first ensure that the project's dependencies are active on sys.path, before invoking the original script. These wrappers have a #! line that points to the version of Python that was used to install them, and their second line is always a comment that indicates the type of script wrapper, the project version required for the script to run, and information identifying the script to be invoked. The format of this marker line is:: "# EASY-INSTALL-" script_type ": " tuple_of_strings "\n" The ``script_type`` is one of ``SCRIPT``, ``DEV-SCRIPT``, or ``ENTRY-SCRIPT``. The ``tuple_of_strings`` is a comma-separated sequence of Python string constants. For ``SCRIPT`` and ``DEV-SCRIPT`` wrappers, there are two strings: the project version requirement, and the script name (as a filename within the ``scripts`` metadata directory). For ``ENTRY-SCRIPT`` wrappers, there are three: the project version requirement, the entry point group name, and the entry point name. (See the "Automatic Script Creation" section in the setuptools manual for more information about entry point scripts.) In each case, the project version requirement string will be a string parseable with the ``pkg_resources`` modules' ``Requirement.parse()`` classmethod. The only difference between a ``SCRIPT`` wrapper and a ``DEV-SCRIPT`` is that a ``DEV-SCRIPT`` actually executes the original source script in the project's source tree, and is created when the "setup.py develop" command is run. A ``SCRIPT`` wrapper, on the other hand, uses the "installed" script written to the ``EGG-INFO/scripts`` subdirectory of the corresponding ``.egg`` zipfile or directory. (``.egg-info`` eggs do not have script wrappers associated with them, except in the "setup.py develop" case.) The purpose of including the marker line in generated script wrappers is to facilitate introspection of installed scripts, and their relationship to installed eggs. For example, an uninstallation tool could use this data to identify what scripts can safely be removed, and/or identify what scripts would stop working if a particular egg is uninstalled. share/doc/alt-python34-setuptools/docs/development.txt000064400000002660152342604300017116 0ustar00------------------------- Development on Setuptools ------------------------- Setuptools is maintained by the Python community under the Python Packaging Authority (PyPA) and led by Jason R. Coombs. This document describes the process by which Setuptools is developed. This document assumes the reader has some passing familiarity with *using* setuptools, the ``pkg_resources`` module, and EasyInstall. It does not attempt to explain basic concepts like inter-project dependencies, nor does it contain detailed lexical syntax for most file formats. Neither does it explain concepts like "namespace packages" or "resources" in any detail, as all of these subjects are covered at length in the setuptools developer's guide and the ``pkg_resources`` reference manual. Instead, this is **internal** documentation for how those concepts and features are *implemented* in concrete terms. It is intended for people who are working on the setuptools code base, who want to be able to troubleshoot setuptools problems, want to write code that reads the file formats involved, or want to otherwise tinker with setuptools-generated files and directories. Note, however, that these are all internal implementation details and are therefore subject to change; stick to the published API if you don't want to be responsible for keeping your code from breaking when setuptools changes. You have been warned. .. toctree:: :maxdepth: 1 formats releases share/doc/alt-python34-setuptools/docs/using.txt000064400000000517152342604300015720 0ustar00================================ Using Setuptools in your project ================================ To use Setuptools in your project, the recommended way is to ship `ez_setup.py` alongside your `setup.py` script and call it at the very beginning of `setup.py` like this:: from ez_setup import use_setuptools use_setuptools() share/doc/alt-python34-setuptools/docs/merge-faq.txt000064400000016133152342604300016440 0ustar00Setuptools/Distribute Merge FAQ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ How do I upgrade from Distribute? ================================= Distribute specifically prohibits installation of Setuptools 0.7 from Distribute 0.6. There are then two options for upgrading. Note that after upgrading using either technique, the only option to downgrade to either version is to completely uninstall Distribute and Setuptools 0.7 versions before reinstalling an 0.6 release. Use Distribute 0.7 ------------------ The PYPA has put together a compatibility wrapper, a new release of Distribute version 0.7. This package will install over Distribute 0.6.x installations and will replace Distribute with a simple wrapper that requires Setuptools 0.7 or later. This technique is experimental, but initial results indicate this technique is the easiest upgrade path. Uninstall --------- First, completely uninstall Distribute. Since Distribute does not have an automated installation routine, this process is manual. Follow the instructions in the README for uninstalling. How do I upgrade from Setuptools 0.6? ===================================== There are no special instructions for upgrading over older versions of Setuptools. Simply use `easy_install -U` or run the latest `ez_setup.py`. Where does the merge occur? ======================================================== The merge is occurring between the heads of the default branch of Distribute and the setuptools-0.6 branch of Setuptools. The Setuptools SVN repo has been converted to a Mercurial repo hosted on Bitbucket. The work is still underway, so the exact changesets included may change, although the anticipated merge targets are Setuptools at 0.6c12 and Distribute at 0.6.35. What happens to other branches? ======================================================== Distribute 0.7 was abandoned long ago and won't be included in the resulting code tree, but may be retained for posterity in the original repo. Setuptools default branch (also 0.7 development) may also be abandoned or may be incorporated into the new merged line if desirable (and as resources allow). What history is lost/changed? ======================================================== As setuptools was not on Mercurial when the fork occurred and as Distribute did not include the full setuptools history (prior to the creation of the setuptools-0.6 branch), the two source trees were not compatible. In order to most effectively communicate the code history, the Distribute code was grafted onto the (originally private) setuptools Mercurial repo. Although this grafting maintained the full code history with names, dates, and changes, it did lose the original hashes of those changes. Therefore, references to changes by hash (including tags) are lost. Additionally, any heads that were not actively merged into the Distribute 0.6.35 release were also omitted. As a result, the changesets included in the merge repo are those from the original setuptools repo and all changesets ancestral to the Distribute 0.6.35 release. What features will be in the merged code base? ======================================================== In general, all "features" added in distribute will be included in setuptools. Where there exist conflicts or undesirable features, we will be explicit about what these limitations are. Changes that are backward-incompatible from setuptools 0.6 to distribute will likely be removed, and these also will be well documented. Bootstrapping scripts (ez_setup/distribute_setup) and docs, as with distribute, will be maintained in the repository and built as part of the release process. Documentation and bootstrapping scripts will be hosted at python.org, as they are with distribute now. Documentation at telecommunity will be updated to refer or redirect to the new, merged docs. On the whole, the merged setuptools should be largely compatible with the latest releases of both setuptools and distribute and will be an easy transition for users of either library. Who is invited to contribute? Who is excluded? ======================================================== While we've worked privately to initiate this merge due to the potential sensitivity of the topic, no one is excluded from this effort. We invite all members of the community, especially those most familiar with Python packaging and its challenges to join us in the effort. We have lots of ideas for how we'd like to improve the codebase, release process, everything. Like distribute, the post-merge setuptools will have its source hosted on bitbucket. (So if you're currently a distribute contributor, about the only thing that's going to change is the URL of the repository you follow.) Also like distribute, it'll support Python 3, and hopefully we'll soon merge Vinay Sajip's patches to make it run on Python 3 without needing 2to3 to be run on the code first. While we've worked privately to initiate this merge due to the potential sensitivity of the topic, no one is excluded from this effort. We invite all members of the community, especially those most familiar with Python packaging and its challenges to join us in the effort. Why Setuptools and not Distribute or another name? ======================================================== We do, however, understand that this announcement might be unsettling for some. The setuptools name has been subjected to a lot of deprecation in recent years, so the idea that it will now be the preferred name instead of distribute might be somewhat difficult or disorienting for some. We considered use of another name (Distribute or an entirely new name), but that would serve to only complicate matters further. Instead, our goal is to simplify the packaging landscape but without losing any hard-won advancements. We hope that the people who worked to spread the first message will be equally enthusiastic about spreading the new one, and we especially look forward to seeing the new posters and slogans celebrating setuptools. What is the timeframe of release? ======================================================== There are no hard timeframes for any of this effort, although progress is underway and a draft merge is underway and being tested privately. As an unfunded volunteer effort, our time to put in on it is limited, and we've both had some recent health and other challenges that have made working on this difficult, which in part explains why we haven't met our original deadline of a completed merge before PyCon. The final Setuptools 0.7 was cut on June 1, 2013 and will be released to PyPI shortly thereafter. What version number can I expect for the new release? ======================================================== The new release will roughly follow the previous trend for setuptools and release the new release as 0.7. This number is somewhat arbitrary, but we wanted something other than 0.6 to distinguish it from its ancestor forks but not 1.0 to avoid putting too much emphasis on the release itself and to focus on merging the functionality. In the future, the project will likely adopt a versioning scheme similar to semver to convey semantic meaning about the release in the version number. share/doc/alt-python34-setuptools/docs/pkg_resources.txt000064400000273732152342604300017461 0ustar00============================================================= Package Discovery and Resource Access using ``pkg_resources`` ============================================================= The ``pkg_resources`` module distributed with ``setuptools`` provides an API for Python libraries to access their resource files, and for extensible applications and frameworks to automatically discover plugins. It also provides runtime support for using C extensions that are inside zipfile-format eggs, support for merging packages that have separately-distributed modules or subpackages, and APIs for managing Python's current "working set" of active packages. .. contents:: **Table of Contents** -------- Overview -------- The ``pkg_resources`` module provides runtime facilities for finding, introspecting, activating and using installed Python distributions. Some of the more advanced features (notably the support for parallel installation of multiple versions) rely specifically on the "egg" format (either as a zip archive or subdirectory), while others (such as plugin discovery) will work correctly so long as "egg-info" metadata directories are available for relevant distributions. Eggs are a distribution format for Python modules, similar in concept to Java's "jars" or Ruby's "gems", or the "wheel" format defined in PEP 427. However, unlike a pure distribution format, eggs can also be installed and added directly to ``sys.path`` as an import location. When installed in this way, eggs are *discoverable*, meaning that they carry metadata that unambiguously identifies their contents and dependencies. This means that an installed egg can be *automatically* found and added to ``sys.path`` in response to simple requests of the form, "get me everything I need to use docutils' PDF support". This feature allows mutually conflicting versions of a distribution to co-exist in the same Python installation, with individual applications activating the desired version at runtime by manipulating the contents of ``sys.path`` (this differs from the virtual environment approach, which involves creating isolated environments for each application). The following terms are needed in order to explain the capabilities offered by this module: project A library, framework, script, plugin, application, or collection of data or other resources, or some combination thereof. Projects are assumed to have "relatively unique" names, e.g. names registered with PyPI. release A snapshot of a project at a particular point in time, denoted by a version identifier. distribution A file or files that represent a particular release. importable distribution A file or directory that, if placed on ``sys.path``, allows Python to import any modules contained within it. pluggable distribution An importable distribution whose filename unambiguously identifies its release (i.e. project and version), and whose contents unamabiguously specify what releases of other projects will satisfy its runtime requirements. extra An "extra" is an optional feature of a release, that may impose additional runtime requirements. For example, if docutils PDF support required a PDF support library to be present, docutils could define its PDF support as an "extra", and list what other project releases need to be available in order to provide it. environment A collection of distributions potentially available for importing, but not necessarily active. More than one distribution (i.e. release version) for a given project may be present in an environment. working set A collection of distributions actually available for importing, as on ``sys.path``. At most one distribution (release version) of a given project may be present in a working set, as otherwise there would be ambiguity as to what to import. eggs Eggs are pluggable distributions in one of the three formats currently supported by ``pkg_resources``. There are built eggs, development eggs, and egg links. Built eggs are directories or zipfiles whose name ends with ``.egg`` and follows the egg naming conventions, and contain an ``EGG-INFO`` subdirectory (zipped or otherwise). Development eggs are normal directories of Python code with one or more ``ProjectName.egg-info`` subdirectories. The development egg format is also used to provide a default version of a distribution that is available to software that doesn't use ``pkg_resources`` to request specific versions. Egg links are ``*.egg-link`` files that contain the name of a built or development egg, to support symbolic linking on platforms that do not have native symbolic links (or where the symbolic link support is limited). (For more information about these terms and concepts, see also this `architectural overview`_ of ``pkg_resources`` and Python Eggs in general.) .. _architectural overview: http://mail.python.org/pipermail/distutils-sig/2005-June/004652.html .. ----------------- .. Developer's Guide .. ----------------- .. This section isn't written yet. Currently planned topics include Accessing Resources Finding and Activating Package Distributions get_provider() require() WorkingSet iter_distributions Running Scripts Configuration Namespace Packages Extensible Applications and Frameworks Locating entry points Activation listeners Metadata access Extended Discovery and Installation Supporting Custom PEP 302 Implementations .. For now, please check out the extensive `API Reference`_ below. ------------- API Reference ------------- Namespace Package Support ========================= A namespace package is a package that only contains other packages and modules, with no direct contents of its own. Such packages can be split across multiple, separately-packaged distributions. Normally, you do not need to use the namespace package APIs directly; instead you should supply the ``namespace_packages`` argument to ``setup()`` in your project's ``setup.py``. See the `setuptools documentation on namespace packages`_ for more information. However, if for some reason you need to manipulate namespace packages or directly alter ``sys.path`` at runtime, you may find these APIs useful: ``declare_namespace(name)`` Declare that the dotted package name `name` is a "namespace package" whose contained packages and modules may be spread across multiple distributions. The named package's ``__path__`` will be extended to include the corresponding package in all distributions on ``sys.path`` that contain a package of that name. (More precisely, if an importer's ``find_module(name)`` returns a loader, then it will also be searched for the package's contents.) Whenever a Distribution's ``activate()`` method is invoked, it checks for the presence of namespace packages and updates their ``__path__`` contents accordingly. Applications that manipulate namespace packages or directly alter ``sys.path`` at runtime may also need to use this API function: ``fixup_namespace_packages(path_item)`` Declare that `path_item` is a newly added item on ``sys.path`` that may need to be used to update existing namespace packages. Ordinarily, this is called for you when an egg is automatically added to ``sys.path``, but if your application modifies ``sys.path`` to include locations that may contain portions of a namespace package, you will need to call this function to ensure they are added to the existing namespace packages. Although by default ``pkg_resources`` only supports namespace packages for filesystem and zip importers, you can extend its support to other "importers" compatible with PEP 302 using the ``register_namespace_handler()`` function. See the section below on `Supporting Custom Importers`_ for details. .. _setuptools documentation on namespace packages: http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages ``WorkingSet`` Objects ====================== The ``WorkingSet`` class provides access to a collection of "active" distributions. In general, there is only one meaningful ``WorkingSet`` instance: the one that represents the distributions that are currently active on ``sys.path``. This global instance is available under the name ``working_set`` in the ``pkg_resources`` module. However, specialized tools may wish to manipulate working sets that don't correspond to ``sys.path``, and therefore may wish to create other ``WorkingSet`` instances. It's important to note that the global ``working_set`` object is initialized from ``sys.path`` when ``pkg_resources`` is first imported, but is only updated if you do all future ``sys.path`` manipulation via ``pkg_resources`` APIs. If you manually modify ``sys.path``, you must invoke the appropriate methods on the ``working_set`` instance to keep it in sync. Unfortunately, Python does not provide any way to detect arbitrary changes to a list object like ``sys.path``, so ``pkg_resources`` cannot automatically update the ``working_set`` based on changes to ``sys.path``. ``WorkingSet(entries=None)`` Create a ``WorkingSet`` from an iterable of path entries. If `entries` is not supplied, it defaults to the value of ``sys.path`` at the time the constructor is called. Note that you will not normally construct ``WorkingSet`` instances yourself, but instead you will implicitly or explicitly use the global ``working_set`` instance. For the most part, the ``pkg_resources`` API is designed so that the ``working_set`` is used by default, such that you don't have to explicitly refer to it most of the time. All distributions available directly on ``sys.path`` will be activated automatically when ``pkg_resources`` is imported. This behaviour can cause version conflicts for applications which require non-default versions of those distributions. To handle this situation, ``pkg_resources`` checks for a ``__requires__`` attribute in the ``__main__`` module when initializing the default working set, and uses this to ensure a suitable version of each affected distribution is activated. For example:: __requires__ = ["CherryPy < 3"] # Must be set before pkg_resources import import pkg_resources Basic ``WorkingSet`` Methods ---------------------------- The following methods of ``WorkingSet`` objects are also available as module- level functions in ``pkg_resources`` that apply to the default ``working_set`` instance. Thus, you can use e.g. ``pkg_resources.require()`` as an abbreviation for ``pkg_resources.working_set.require()``: ``require(*requirements)`` Ensure that distributions matching `requirements` are activated `requirements` must be a string or a (possibly-nested) sequence thereof, specifying the distributions and versions required. The return value is a sequence of the distributions that needed to be activated to fulfill the requirements; all relevant distributions are included, even if they were already activated in this working set. For the syntax of requirement specifiers, see the section below on `Requirements Parsing`_. In general, it should not be necessary for you to call this method directly. It's intended more for use in quick-and-dirty scripting and interactive interpreter hacking than for production use. If you're creating an actual library or application, it's strongly recommended that you create a "setup.py" script using ``setuptools``, and declare all your requirements there. That way, tools like EasyInstall can automatically detect what requirements your package has, and deal with them accordingly. Note that calling ``require('SomePackage')`` will not install ``SomePackage`` if it isn't already present. If you need to do this, you should use the ``resolve()`` method instead, which allows you to pass an ``installer`` callback that will be invoked when a needed distribution can't be found on the local machine. You can then have this callback display a dialog, automatically download the needed distribution, or whatever else is appropriate for your application. See the documentation below on the ``resolve()`` method for more information, and also on the ``obtain()`` method of ``Environment`` objects. ``run_script(requires, script_name)`` Locate distribution specified by `requires` and run its `script_name` script. `requires` must be a string containing a requirement specifier. (See `Requirements Parsing`_ below for the syntax.) The script, if found, will be executed in *the caller's globals*. That's because this method is intended to be called from wrapper scripts that act as a proxy for the "real" scripts in a distribution. A wrapper script usually doesn't need to do anything but invoke this function with the correct arguments. If you need more control over the script execution environment, you probably want to use the ``run_script()`` method of a ``Distribution`` object's `Metadata API`_ instead. ``iter_entry_points(group, name=None)`` Yield entry point objects from `group` matching `name` If `name` is None, yields all entry points in `group` from all distributions in the working set, otherwise only ones matching both `group` and `name` are yielded. Entry points are yielded from the active distributions in the order that the distributions appear in the working set. (For the global ``working_set``, this should be the same as the order that they are listed in ``sys.path``.) Note that within the entry points advertised by an individual distribution, there is no particular ordering. Please see the section below on `Entry Points`_ for more information. ``WorkingSet`` Methods and Attributes ------------------------------------- These methods are used to query or manipulate the contents of a specific working set, so they must be explicitly invoked on a particular ``WorkingSet`` instance: ``add_entry(entry)`` Add a path item to the ``entries``, finding any distributions on it. You should use this when you add additional items to ``sys.path`` and you want the global ``working_set`` to reflect the change. This method is also called by the ``WorkingSet()`` constructor during initialization. This method uses ``find_distributions(entry,True)`` to find distributions corresponding to the path entry, and then ``add()`` them. `entry` is always appended to the ``entries`` attribute, even if it is already present, however. (This is because ``sys.path`` can contain the same value more than once, and the ``entries`` attribute should be able to reflect this.) ``__contains__(dist)`` True if `dist` is active in this ``WorkingSet``. Note that only one distribution for a given project can be active in a given ``WorkingSet``. ``__iter__()`` Yield distributions for non-duplicate projects in the working set. The yield order is the order in which the items' path entries were added to the working set. ``find(req)`` Find a distribution matching `req` (a ``Requirement`` instance). If there is an active distribution for the requested project, this returns it, as long as it meets the version requirement specified by `req`. But, if there is an active distribution for the project and it does *not* meet the `req` requirement, ``VersionConflict`` is raised. If there is no active distribution for the requested project, ``None`` is returned. ``resolve(requirements, env=None, installer=None)`` List all distributions needed to (recursively) meet `requirements` `requirements` must be a sequence of ``Requirement`` objects. `env`, if supplied, should be an ``Environment`` instance. If not supplied, an ``Environment`` is created from the working set's ``entries``. `installer`, if supplied, will be invoked with each requirement that cannot be met by an already-installed distribution; it should return a ``Distribution`` or ``None``. (See the ``obtain()`` method of `Environment Objects`_, below, for more information on the `installer` argument.) ``add(dist, entry=None)`` Add `dist` to working set, associated with `entry` If `entry` is unspecified, it defaults to ``dist.location``. On exit from this routine, `entry` is added to the end of the working set's ``.entries`` (if it wasn't already present). `dist` is only added to the working set if it's for a project that doesn't already have a distribution active in the set. If it's successfully added, any callbacks registered with the ``subscribe()`` method will be called. (See `Receiving Change Notifications`_, below.) Note: ``add()`` is automatically called for you by the ``require()`` method, so you don't normally need to use this method directly. ``entries`` This attribute represents a "shadow" ``sys.path``, primarily useful for debugging. If you are experiencing import problems, you should check the global ``working_set`` object's ``entries`` against ``sys.path``, to ensure that they match. If they do not, then some part of your program is manipulating ``sys.path`` without updating the ``working_set`` accordingly. IMPORTANT NOTE: do not directly manipulate this attribute! Setting it equal to ``sys.path`` will not fix your problem, any more than putting black tape over an "engine warning" light will fix your car! If this attribute is out of sync with ``sys.path``, it's merely an *indicator* of the problem, not the cause of it. Receiving Change Notifications ------------------------------ Extensible applications and frameworks may need to receive notification when a new distribution (such as a plug-in component) has been added to a working set. This is what the ``subscribe()`` method and ``add_activation_listener()`` function are for. ``subscribe(callback)`` Invoke ``callback(distribution)`` once for each active distribution that is in the set now, or gets added later. Because the callback is invoked for already-active distributions, you do not need to loop over the working set yourself to deal with the existing items; just register the callback and be prepared for the fact that it will be called immediately by this method. Note that callbacks *must not* allow exceptions to propagate, or they will interfere with the operation of other callbacks and possibly result in an inconsistent working set state. Callbacks should use a try/except block to ignore, log, or otherwise process any errors, especially since the code that caused the callback to be invoked is unlikely to be able to handle the errors any better than the callback itself. ``pkg_resources.add_activation_listener()`` is an alternate spelling of ``pkg_resources.working_set.subscribe()``. Locating Plugins ---------------- Extensible applications will sometimes have a "plugin directory" or a set of plugin directories, from which they want to load entry points or other metadata. The ``find_plugins()`` method allows you to do this, by scanning an environment for the newest version of each project that can be safely loaded without conflicts or missing requirements. ``find_plugins(plugin_env, full_env=None, fallback=True)`` Scan `plugin_env` and identify which distributions could be added to this working set without version conflicts or missing requirements. Example usage:: distributions, errors = working_set.find_plugins( Environment(plugin_dirlist) ) map(working_set.add, distributions) # add plugins+libs to sys.path print "Couldn't load", errors # display errors The `plugin_env` should be an ``Environment`` instance that contains only distributions that are in the project's "plugin directory" or directories. The `full_env`, if supplied, should be an ``Environment`` instance that contains all currently-available distributions. If `full_env` is not supplied, one is created automatically from the ``WorkingSet`` this method is called on, which will typically mean that every directory on ``sys.path`` will be scanned for distributions. This method returns a 2-tuple: (`distributions`, `error_info`), where `distributions` is a list of the distributions found in `plugin_env` that were loadable, along with any other distributions that are needed to resolve their dependencies. `error_info` is a dictionary mapping unloadable plugin distributions to an exception instance describing the error that occurred. Usually this will be a ``DistributionNotFound`` or ``VersionConflict`` instance. Most applications will use this method mainly on the master ``working_set`` instance in ``pkg_resources``, and then immediately add the returned distributions to the working set so that they are available on sys.path. This will make it possible to find any entry points, and allow any other metadata tracking and hooks to be activated. The resolution algorithm used by ``find_plugins()`` is as follows. First, the project names of the distributions present in `plugin_env` are sorted. Then, each project's eggs are tried in descending version order (i.e., newest version first). An attempt is made to resolve each egg's dependencies. If the attempt is successful, the egg and its dependencies are added to the output list and to a temporary copy of the working set. The resolution process continues with the next project name, and no older eggs for that project are tried. If the resolution attempt fails, however, the error is added to the error dictionary. If the `fallback` flag is true, the next older version of the plugin is tried, until a working version is found. If false, the resolution process continues with the next plugin project name. Some applications may have stricter fallback requirements than others. For example, an application that has a database schema or persistent objects may not be able to safely downgrade a version of a package. Others may want to ensure that a new plugin configuration is either 100% good or else revert to a known-good configuration. (That is, they may wish to revert to a known configuration if the `error_info` return value is non-empty.) Note that this algorithm gives precedence to satisfying the dependencies of alphabetically prior project names in case of version conflicts. If two projects named "AaronsPlugin" and "ZekesPlugin" both need different versions of "TomsLibrary", then "AaronsPlugin" will win and "ZekesPlugin" will be disabled due to version conflict. ``Environment`` Objects ======================= An "environment" is a collection of ``Distribution`` objects, usually ones that are present and potentially importable on the current platform. ``Environment`` objects are used by ``pkg_resources`` to index available distributions during dependency resolution. ``Environment(search_path=None, platform=get_supported_platform(), python=PY_MAJOR)`` Create an environment snapshot by scanning `search_path` for distributions compatible with `platform` and `python`. `search_path` should be a sequence of strings such as might be used on ``sys.path``. If a `search_path` isn't supplied, ``sys.path`` is used. `platform` is an optional string specifying the name of the platform that platform-specific distributions must be compatible with. If unspecified, it defaults to the current platform. `python` is an optional string naming the desired version of Python (e.g. ``'2.4'``); it defaults to the currently-running version. You may explicitly set `platform` (and/or `python`) to ``None`` if you wish to include *all* distributions, not just those compatible with the running platform or Python version. Note that `search_path` is scanned immediately for distributions, and the resulting ``Environment`` is a snapshot of the found distributions. It is not automatically updated if the system's state changes due to e.g. installation or removal of distributions. ``__getitem__(project_name)`` Returns a list of distributions for the given project name, ordered from newest to oldest version. (And highest to lowest format precedence for distributions that contain the same version of the project.) If there are no distributions for the project, returns an empty list. ``__iter__()`` Yield the unique project names of the distributions in this environment. The yielded names are always in lower case. ``add(dist)`` Add `dist` to the environment if it matches the platform and python version specified at creation time, and only if the distribution hasn't already been added. (i.e., adding the same distribution more than once is a no-op.) ``remove(dist)`` Remove `dist` from the environment. ``can_add(dist)`` Is distribution `dist` acceptable for this environment? If it's not compatible with the ``platform`` and ``python`` version values specified when the environment was created, a false value is returned. ``__add__(dist_or_env)`` (``+`` operator) Add a distribution or environment to an ``Environment`` instance, returning a *new* environment object that contains all the distributions previously contained by both. The new environment will have a ``platform`` and ``python`` of ``None``, meaning that it will not reject any distributions from being added to it; it will simply accept whatever is added. If you want the added items to be filtered for platform and Python version, or you want to add them to the *same* environment instance, you should use in-place addition (``+=``) instead. ``__iadd__(dist_or_env)`` (``+=`` operator) Add a distribution or environment to an ``Environment`` instance *in-place*, updating the existing instance and returning it. The ``platform`` and ``python`` filter attributes take effect, so distributions in the source that do not have a suitable platform string or Python version are silently ignored. ``best_match(req, working_set, installer=None)`` Find distribution best matching `req` and usable on `working_set` This calls the ``find(req)`` method of the `working_set` to see if a suitable distribution is already active. (This may raise ``VersionConflict`` if an unsuitable version of the project is already active in the specified `working_set`.) If a suitable distribution isn't active, this method returns the newest distribution in the environment that meets the ``Requirement`` in `req`. If no suitable distribution is found, and `installer` is supplied, then the result of calling the environment's ``obtain(req, installer)`` method will be returned. ``obtain(requirement, installer=None)`` Obtain a distro that matches requirement (e.g. via download). In the base ``Environment`` class, this routine just returns ``installer(requirement)``, unless `installer` is None, in which case None is returned instead. This method is a hook that allows subclasses to attempt other ways of obtaining a distribution before falling back to the `installer` argument. ``scan(search_path=None)`` Scan `search_path` for distributions usable on `platform` Any distributions found are added to the environment. `search_path` should be a sequence of strings such as might be used on ``sys.path``. If not supplied, ``sys.path`` is used. Only distributions conforming to the platform/python version defined at initialization are added. This method is a shortcut for using the ``find_distributions()`` function to find the distributions from each item in `search_path`, and then calling ``add()`` to add each one to the environment. ``Requirement`` Objects ======================= ``Requirement`` objects express what versions of a project are suitable for some purpose. These objects (or their string form) are used by various ``pkg_resources`` APIs in order to find distributions that a script or distribution needs. Requirements Parsing -------------------- ``parse_requirements(s)`` Yield ``Requirement`` objects for a string or iterable of lines. Each requirement must start on a new line. See below for syntax. ``Requirement.parse(s)`` Create a ``Requirement`` object from a string or iterable of lines. A ``ValueError`` is raised if the string or lines do not contain a valid requirement specifier, or if they contain more than one specifier. (To parse multiple specifiers from a string or iterable of strings, use ``parse_requirements()`` instead.) The syntax of a requirement specifier can be defined in EBNF as follows:: requirement ::= project_name versionspec? extras? versionspec ::= comparison version (',' comparison version)* comparison ::= '<' | '<=' | '!=' | '==' | '>=' | '>' extras ::= '[' extralist? ']' extralist ::= identifier (',' identifier)* project_name ::= identifier identifier ::= [-A-Za-z0-9_]+ version ::= [-A-Za-z0-9_.]+ Tokens can be separated by whitespace, and a requirement can be continued over multiple lines using a backslash (``\\``). Line-end comments (using ``#``) are also allowed. Some examples of valid requirement specifiers:: FooProject >= 1.2 Fizzy [foo, bar] PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1 SomethingWhoseVersionIDontCareAbout The project name is the only required portion of a requirement string, and if it's the only thing supplied, the requirement will accept any version of that project. The "extras" in a requirement are used to request optional features of a project, that may require additional project distributions in order to function. For example, if the hypothetical "Report-O-Rama" project offered optional PDF support, it might require an additional library in order to provide that support. Thus, a project needing Report-O-Rama's PDF features could use a requirement of ``Report-O-Rama[PDF]`` to request installation or activation of both Report-O-Rama and any libraries it needs in order to provide PDF support. For example, you could use:: easy_install.py Report-O-Rama[PDF] To install the necessary packages using the EasyInstall program, or call ``pkg_resources.require('Report-O-Rama[PDF]')`` to add the necessary distributions to sys.path at runtime. ``Requirement`` Methods and Attributes -------------------------------------- ``__contains__(dist_or_version)`` Return true if `dist_or_version` fits the criteria for this requirement. If `dist_or_version` is a ``Distribution`` object, its project name must match the requirement's project name, and its version must meet the requirement's version criteria. If `dist_or_version` is a string, it is parsed using the ``parse_version()`` utility function. Otherwise, it is assumed to be an already-parsed version. The ``Requirement`` object's version specifiers (``.specs``) are internally sorted into ascending version order, and used to establish what ranges of versions are acceptable. Adjacent redundant conditions are effectively consolidated (e.g. ``">1, >2"`` produces the same results as ``">1"``, and ``"<2,<3"`` produces the same results as``"<3"``). ``"!="`` versions are excised from the ranges they fall within. The version being tested for acceptability is then checked for membership in the resulting ranges. (Note that providing conflicting conditions for the same version (e.g. ``"<2,>=2"`` or ``"==2,!=2"``) is meaningless and may therefore produce bizarre results when compared with actual version number(s).) ``__eq__(other_requirement)`` A requirement compares equal to another requirement if they have case-insensitively equal project names, version specifiers, and "extras". (The order that extras and version specifiers are in is also ignored.) Equal requirements also have equal hashes, so that requirements can be used in sets or as dictionary keys. ``__str__()`` The string form of a ``Requirement`` is a string that, if passed to ``Requirement.parse()``, would return an equal ``Requirement`` object. ``project_name`` The name of the required project ``key`` An all-lowercase version of the ``project_name``, useful for comparison or indexing. ``extras`` A tuple of names of "extras" that this requirement calls for. (These will be all-lowercase and normalized using the ``safe_extra()`` parsing utility function, so they may not exactly equal the extras the requirement was created with.) ``specs`` A list of ``(op,version)`` tuples, sorted in ascending parsed-version order. The `op` in each tuple is a comparison operator, represented as a string. The `version` is the (unparsed) version number. The relative order of tuples containing the same version numbers is undefined, since having more than one operator for a given version is either redundant or self-contradictory. Entry Points ============ Entry points are a simple way for distributions to "advertise" Python objects (such as functions or classes) for use by other distributions. Extensible applications and frameworks can search for entry points with a particular name or group, either from a specific distribution or from all active distributions on sys.path, and then inspect or load the advertised objects at will. Entry points belong to "groups" which are named with a dotted name similar to a Python package or module name. For example, the ``setuptools`` package uses an entry point named ``distutils.commands`` in order to find commands defined by distutils extensions. ``setuptools`` treats the names of entry points defined in that group as the acceptable commands for a setup script. In a similar way, other packages can define their own entry point groups, either using dynamic names within the group (like ``distutils.commands``), or possibly using predefined names within the group. For example, a blogging framework that offers various pre- or post-publishing hooks might define an entry point group and look for entry points named "pre_process" and "post_process" within that group. To advertise an entry point, a project needs to use ``setuptools`` and provide an ``entry_points`` argument to ``setup()`` in its setup script, so that the entry points will be included in the distribution's metadata. For more details, see the ``setuptools`` documentation. (XXX link here to setuptools) Each project distribution can advertise at most one entry point of a given name within the same entry point group. For example, a distutils extension could advertise two different ``distutils.commands`` entry points, as long as they had different names. However, there is nothing that prevents *different* projects from advertising entry points of the same name in the same group. In some cases, this is a desirable thing, since the application or framework that uses the entry points may be calling them as hooks, or in some other way combining them. It is up to the application or framework to decide what to do if multiple distributions advertise an entry point; some possibilities include using both entry points, displaying an error message, using the first one found in sys.path order, etc. Convenience API --------------- In the following functions, the `dist` argument can be a ``Distribution`` instance, a ``Requirement`` instance, or a string specifying a requirement (i.e. project name, version, etc.). If the argument is a string or ``Requirement``, the specified distribution is located (and added to sys.path if not already present). An error will be raised if a matching distribution is not available. The `group` argument should be a string containing a dotted identifier, identifying an entry point group. If you are defining an entry point group, you should include some portion of your package's name in the group name so as to avoid collision with other packages' entry point groups. ``load_entry_point(dist, group, name)`` Load the named entry point from the specified distribution, or raise ``ImportError``. ``get_entry_info(dist, group, name)`` Return an ``EntryPoint`` object for the given `group` and `name` from the specified distribution. Returns ``None`` if the distribution has not advertised a matching entry point. ``get_entry_map(dist, group=None)`` Return the distribution's entry point map for `group`, or the full entry map for the distribution. This function always returns a dictionary, even if the distribution advertises no entry points. If `group` is given, the dictionary maps entry point names to the corresponding ``EntryPoint`` object. If `group` is None, the dictionary maps group names to dictionaries that then map entry point names to the corresponding ``EntryPoint`` instance in that group. ``iter_entry_points(group, name=None)`` Yield entry point objects from `group` matching `name`. If `name` is None, yields all entry points in `group` from all distributions in the working set on sys.path, otherwise only ones matching both `group` and `name` are yielded. Entry points are yielded from the active distributions in the order that the distributions appear on sys.path. (Within entry points for a particular distribution, however, there is no particular ordering.) (This API is actually a method of the global ``working_set`` object; see the section above on `Basic WorkingSet Methods`_ for more information.) Creating and Parsing -------------------- ``EntryPoint(name, module_name, attrs=(), extras=(), dist=None)`` Create an ``EntryPoint`` instance. `name` is the entry point name. The `module_name` is the (dotted) name of the module containing the advertised object. `attrs` is an optional tuple of names to look up from the module to obtain the advertised object. For example, an `attrs` of ``("foo","bar")`` and a `module_name` of ``"baz"`` would mean that the advertised object could be obtained by the following code:: import baz advertised_object = baz.foo.bar The `extras` are an optional tuple of "extra feature" names that the distribution needs in order to provide this entry point. When the entry point is loaded, these extra features are looked up in the `dist` argument to find out what other distributions may need to be activated on sys.path; see the ``load()`` method for more details. The `extras` argument is only meaningful if `dist` is specified. `dist` must be a ``Distribution`` instance. ``EntryPoint.parse(src, dist=None)`` (classmethod) Parse a single entry point from string `src` Entry point syntax follows the form:: name = some.module:some.attr [extra1,extra2] The entry name and module name are required, but the ``:attrs`` and ``[extras]`` parts are optional, as is the whitespace shown between some of the items. The `dist` argument is passed through to the ``EntryPoint()`` constructor, along with the other values parsed from `src`. ``EntryPoint.parse_group(group, lines, dist=None)`` (classmethod) Parse `lines` (a string or sequence of lines) to create a dictionary mapping entry point names to ``EntryPoint`` objects. ``ValueError`` is raised if entry point names are duplicated, if `group` is not a valid entry point group name, or if there are any syntax errors. (Note: the `group` parameter is used only for validation and to create more informative error messages.) If `dist` is provided, it will be used to set the ``dist`` attribute of the created ``EntryPoint`` objects. ``EntryPoint.parse_map(data, dist=None)`` (classmethod) Parse `data` into a dictionary mapping group names to dictionaries mapping entry point names to ``EntryPoint`` objects. If `data` is a dictionary, then the keys are used as group names and the values are passed to ``parse_group()`` as the `lines` argument. If `data` is a string or sequence of lines, it is first split into .ini-style sections (using the ``split_sections()`` utility function) and the section names are used as group names. In either case, the `dist` argument is passed through to ``parse_group()`` so that the entry points will be linked to the specified distribution. ``EntryPoint`` Objects ---------------------- For simple introspection, ``EntryPoint`` objects have attributes that correspond exactly to the constructor argument names: ``name``, ``module_name``, ``attrs``, ``extras``, and ``dist`` are all available. In addition, the following methods are provided: ``load(require=True, env=None, installer=None)`` Load the entry point, returning the advertised Python object, or raise ``ImportError`` if it cannot be obtained. If `require` is a true value, then ``require(env, installer)`` is called before attempting the import. ``require(env=None, installer=None)`` Ensure that any "extras" needed by the entry point are available on sys.path. ``UnknownExtra`` is raised if the ``EntryPoint`` has ``extras``, but no ``dist``, or if the named extras are not defined by the distribution. If `env` is supplied, it must be an ``Environment``, and it will be used to search for needed distributions if they are not already present on sys.path. If `installer` is supplied, it must be a callable taking a ``Requirement`` instance and returning a matching importable ``Distribution`` instance or None. ``__str__()`` The string form of an ``EntryPoint`` is a string that could be passed to ``EntryPoint.parse()`` to produce an equivalent ``EntryPoint``. ``Distribution`` Objects ======================== ``Distribution`` objects represent collections of Python code that may or may not be importable, and may or may not have metadata and resources associated with them. Their metadata may include information such as what other projects the distribution depends on, what entry points the distribution advertises, and so on. Getting or Creating Distributions --------------------------------- Most commonly, you'll obtain ``Distribution`` objects from a ``WorkingSet`` or an ``Environment``. (See the sections above on `WorkingSet Objects`_ and `Environment Objects`_, which are containers for active distributions and available distributions, respectively.) You can also obtain ``Distribution`` objects from one of these high-level APIs: ``find_distributions(path_item, only=False)`` Yield distributions accessible via `path_item`. If `only` is true, yield only distributions whose ``location`` is equal to `path_item`. In other words, if `only` is true, this yields any distributions that would be importable if `path_item` were on ``sys.path``. If `only` is false, this also yields distributions that are "in" or "under" `path_item`, but would not be importable unless their locations were also added to ``sys.path``. ``get_distribution(dist_spec)`` Return a ``Distribution`` object for a given ``Requirement`` or string. If `dist_spec` is already a ``Distribution`` instance, it is returned. If it is a ``Requirement`` object or a string that can be parsed into one, it is used to locate and activate a matching distribution, which is then returned. However, if you're creating specialized tools for working with distributions, or creating a new distribution format, you may also need to create ``Distribution`` objects directly, using one of the three constructors below. These constructors all take an optional `metadata` argument, which is used to access any resources or metadata associated with the distribution. `metadata` must be an object that implements the ``IResourceProvider`` interface, or None. If it is None, an ``EmptyProvider`` is used instead. ``Distribution`` objects implement both the `IResourceProvider`_ and `IMetadataProvider Methods`_ by delegating them to the `metadata` object. ``Distribution.from_location(location, basename, metadata=None, **kw)`` (classmethod) Create a distribution for `location`, which must be a string such as a URL, filename, or other string that might be used on ``sys.path``. `basename` is a string naming the distribution, like ``Foo-1.2-py2.4.egg``. If `basename` ends with ``.egg``, then the project's name, version, python version and platform are extracted from the filename and used to set those properties of the created distribution. Any additional keyword arguments are forwarded to the ``Distribution()`` constructor. ``Distribution.from_filename(filename, metadata=None**kw)`` (classmethod) Create a distribution by parsing a local filename. This is a shorter way of saying ``Distribution.from_location(normalize_path(filename), os.path.basename(filename), metadata)``. In other words, it creates a distribution whose location is the normalize form of the filename, parsing name and version information from the base portion of the filename. Any additional keyword arguments are forwarded to the ``Distribution()`` constructor. ``Distribution(location,metadata,project_name,version,py_version,platform,precedence)`` Create a distribution by setting its properties. All arguments are optional and default to None, except for `py_version` (which defaults to the current Python version) and `precedence` (which defaults to ``EGG_DIST``; for more details see ``precedence`` under `Distribution Attributes`_ below). Note that it's usually easier to use the ``from_filename()`` or ``from_location()`` constructors than to specify all these arguments individually. ``Distribution`` Attributes --------------------------- location A string indicating the distribution's location. For an importable distribution, this is the string that would be added to ``sys.path`` to make it actively importable. For non-importable distributions, this is simply a filename, URL, or other way of locating the distribution. project_name A string, naming the project that this distribution is for. Project names are defined by a project's setup script, and they are used to identify projects on PyPI. When a ``Distribution`` is constructed, the `project_name` argument is passed through the ``safe_name()`` utility function to filter out any unacceptable characters. key ``dist.key`` is short for ``dist.project_name.lower()``. It's used for case-insensitive comparison and indexing of distributions by project name. extras A list of strings, giving the names of extra features defined by the project's dependency list (the ``extras_require`` argument specified in the project's setup script). version A string denoting what release of the project this distribution contains. When a ``Distribution`` is constructed, the `version` argument is passed through the ``safe_version()`` utility function to filter out any unacceptable characters. If no `version` is specified at construction time, then attempting to access this attribute later will cause the ``Distribution`` to try to discover its version by reading its ``PKG-INFO`` metadata file. If ``PKG-INFO`` is unavailable or can't be parsed, ``ValueError`` is raised. parsed_version The ``parsed_version`` is a tuple representing a "parsed" form of the distribution's ``version``. ``dist.parsed_version`` is a shortcut for calling ``parse_version(dist.version)``. It is used to compare or sort distributions by version. (See the `Parsing Utilities`_ section below for more information on the ``parse_version()`` function.) Note that accessing ``parsed_version`` may result in a ``ValueError`` if the ``Distribution`` was constructed without a `version` and without `metadata` capable of supplying the missing version info. py_version The major/minor Python version the distribution supports, as a string. For example, "2.7" or "3.4". The default is the current version of Python. platform A string representing the platform the distribution is intended for, or ``None`` if the distribution is "pure Python" and therefore cross-platform. See `Platform Utilities`_ below for more information on platform strings. precedence A distribution's ``precedence`` is used to determine the relative order of two distributions that have the same ``project_name`` and ``parsed_version``. The default precedence is ``pkg_resources.EGG_DIST``, which is the highest (i.e. most preferred) precedence. The full list of predefined precedences, from most preferred to least preferred, is: ``EGG_DIST``, ``BINARY_DIST``, ``SOURCE_DIST``, ``CHECKOUT_DIST``, and ``DEVELOP_DIST``. Normally, precedences other than ``EGG_DIST`` are used only by the ``setuptools.package_index`` module, when sorting distributions found in a package index to determine their suitability for installation. "System" and "Development" eggs (i.e., ones that use the ``.egg-info`` format), however, are automatically given a precedence of ``DEVELOP_DIST``. ``Distribution`` Methods ------------------------ ``activate(path=None)`` Ensure distribution is importable on `path`. If `path` is None, ``sys.path`` is used instead. This ensures that the distribution's ``location`` is in the `path` list, and it also performs any necessary namespace package fixups or declarations. (That is, if the distribution contains namespace packages, this method ensures that they are declared, and that the distribution's contents for those namespace packages are merged with the contents provided by any other active distributions. See the section above on `Namespace Package Support`_ for more information.) ``pkg_resources`` adds a notification callback to the global ``working_set`` that ensures this method is called whenever a distribution is added to it. Therefore, you should not normally need to explicitly call this method. (Note that this means that namespace packages on ``sys.path`` are always imported as soon as ``pkg_resources`` is, which is another reason why namespace packages should not contain any code or import statements.) ``as_requirement()`` Return a ``Requirement`` instance that matches this distribution's project name and version. ``requires(extras=())`` List the ``Requirement`` objects that specify this distribution's dependencies. If `extras` is specified, it should be a sequence of names of "extras" defined by the distribution, and the list returned will then include any dependencies needed to support the named "extras". ``clone(**kw)`` Create a copy of the distribution. Any supplied keyword arguments override the corresponding argument to the ``Distribution()`` constructor, allowing you to change some of the copied distribution's attributes. ``egg_name()`` Return what this distribution's standard filename should be, not including the ".egg" extension. For example, a distribution for project "Foo" version 1.2 that runs on Python 2.3 for Windows would have an ``egg_name()`` of ``Foo-1.2-py2.3-win32``. Any dashes in the name or version are converted to underscores. (``Distribution.from_location()`` will convert them back when parsing a ".egg" file name.) ``__cmp__(other)``, ``__hash__()`` Distribution objects are hashed and compared on the basis of their parsed version and precedence, followed by their key (lowercase project name), location, Python version, and platform. The following methods are used to access ``EntryPoint`` objects advertised by the distribution. See the section above on `Entry Points`_ for more detailed information about these operations: ``get_entry_info(group, name)`` Return the ``EntryPoint`` object for `group` and `name`, or None if no such point is advertised by this distribution. ``get_entry_map(group=None)`` Return the entry point map for `group`. If `group` is None, return a dictionary mapping group names to entry point maps for all groups. (An entry point map is a dictionary of entry point names to ``EntryPoint`` objects.) ``load_entry_point(group, name)`` Short for ``get_entry_info(group, name).load()``. Returns the object advertised by the named entry point, or raises ``ImportError`` if the entry point isn't advertised by this distribution, or there is some other import problem. In addition to the above methods, ``Distribution`` objects also implement all of the `IResourceProvider`_ and `IMetadataProvider Methods`_ (which are documented in later sections): * ``has_metadata(name)`` * ``metadata_isdir(name)`` * ``metadata_listdir(name)`` * ``get_metadata(name)`` * ``get_metadata_lines(name)`` * ``run_script(script_name, namespace)`` * ``get_resource_filename(manager, resource_name)`` * ``get_resource_stream(manager, resource_name)`` * ``get_resource_string(manager, resource_name)`` * ``has_resource(resource_name)`` * ``resource_isdir(resource_name)`` * ``resource_listdir(resource_name)`` If the distribution was created with a `metadata` argument, these resource and metadata access methods are all delegated to that `metadata` provider. Otherwise, they are delegated to an ``EmptyProvider``, so that the distribution will appear to have no resources or metadata. This delegation approach is used so that supporting custom importers or new distribution formats can be done simply by creating an appropriate `IResourceProvider`_ implementation; see the section below on `Supporting Custom Importers`_ for more details. ``ResourceManager`` API ======================= The ``ResourceManager`` class provides uniform access to package resources, whether those resources exist as files and directories or are compressed in an archive of some kind. Normally, you do not need to create or explicitly manage ``ResourceManager`` instances, as the ``pkg_resources`` module creates a global instance for you, and makes most of its methods available as top-level names in the ``pkg_resources`` module namespace. So, for example, this code actually calls the ``resource_string()`` method of the global ``ResourceManager``:: import pkg_resources my_data = pkg_resources.resource_string(__name__, "foo.dat") Thus, you can use the APIs below without needing an explicit ``ResourceManager`` instance; just import and use them as needed. Basic Resource Access --------------------- In the following methods, the `package_or_requirement` argument may be either a Python package/module name (e.g. ``foo.bar``) or a ``Requirement`` instance. If it is a package or module name, the named module or package must be importable (i.e., be in a distribution or directory on ``sys.path``), and the `resource_name` argument is interpreted relative to the named package. (Note that if a module name is used, then the resource name is relative to the package immediately containing the named module. Also, you should not use use a namespace package name, because a namespace package can be spread across multiple distributions, and is therefore ambiguous as to which distribution should be searched for the resource.) If it is a ``Requirement``, then the requirement is automatically resolved (searching the current ``Environment`` if necessary) and a matching distribution is added to the ``WorkingSet`` and ``sys.path`` if one was not already present. (Unless the ``Requirement`` can't be satisfied, in which case an exception is raised.) The `resource_name` argument is then interpreted relative to the root of the identified distribution; i.e. its first path segment will be treated as a peer of the top-level modules or packages in the distribution. Note that resource names must be ``/``-separated paths and cannot be absolute (i.e. no leading ``/``) or contain relative names like ``".."``. Do *not* use ``os.path`` routines to manipulate resource paths, as they are *not* filesystem paths. ``resource_exists(package_or_requirement, resource_name)`` Does the named resource exist? Return ``True`` or ``False`` accordingly. ``resource_stream(package_or_requirement, resource_name)`` Return a readable file-like object for the specified resource; it may be an actual file, a ``StringIO``, or some similar object. The stream is in "binary mode", in the sense that whatever bytes are in the resource will be read as-is. ``resource_string(package_or_requirement, resource_name)`` Return the specified resource as a string. The resource is read in binary fashion, such that the returned string contains exactly the bytes that are stored in the resource. ``resource_isdir(package_or_requirement, resource_name)`` Is the named resource a directory? Return ``True`` or ``False`` accordingly. ``resource_listdir(package_or_requirement, resource_name)`` List the contents of the named resource directory, just like ``os.listdir`` except that it works even if the resource is in a zipfile. Note that only ``resource_exists()`` and ``resource_isdir()`` are insensitive as to the resource type. You cannot use ``resource_listdir()`` on a file resource, and you can't use ``resource_string()`` or ``resource_stream()`` on directory resources. Using an inappropriate method for the resource type may result in an exception or undefined behavior, depending on the platform and distribution format involved. Resource Extraction ------------------- ``resource_filename(package_or_requirement, resource_name)`` Sometimes, it is not sufficient to access a resource in string or stream form, and a true filesystem filename is needed. In such cases, you can use this method (or module-level function) to obtain a filename for a resource. If the resource is in an archive distribution (such as a zipped egg), it will be extracted to a cache directory, and the filename within the cache will be returned. If the named resource is a directory, then all resources within that directory (including subdirectories) are also extracted. If the named resource is a C extension or "eager resource" (see the ``setuptools`` documentation for details), then all C extensions and eager resources are extracted at the same time. Archived resources are extracted to a cache location that can be managed by the following two methods: ``set_extraction_path(path)`` Set the base path where resources will be extracted to, if needed. If you do not call this routine before any extractions take place, the path defaults to the return value of ``get_default_cache()``. (Which is based on the ``PYTHON_EGG_CACHE`` environment variable, with various platform-specific fallbacks. See that routine's documentation for more details.) Resources are extracted to subdirectories of this path based upon information given by the resource provider. You may set this to a temporary directory, but then you must call ``cleanup_resources()`` to delete the extracted files when done. There is no guarantee that ``cleanup_resources()`` will be able to remove all extracted files. (On Windows, for example, you can't unlink .pyd or .dll files that are still in use.) Note that you may not change the extraction path for a given resource manager once resources have been extracted, unless you first call ``cleanup_resources()``. ``cleanup_resources(force=False)`` Delete all extracted resource files and directories, returning a list of the file and directory names that could not be successfully removed. This function does not have any concurrency protection, so it should generally only be called when the extraction path is a temporary directory exclusive to a single process. This method is not automatically called; you must call it explicitly or register it as an ``atexit`` function if you wish to ensure cleanup of a temporary directory used for extractions. "Provider" Interface -------------------- If you are implementing an ``IResourceProvider`` and/or ``IMetadataProvider`` for a new distribution archive format, you may need to use the following ``IResourceManager`` methods to co-ordinate extraction of resources to the filesystem. If you're not implementing an archive format, however, you have no need to use these methods. Unlike the other methods listed above, they are *not* available as top-level functions tied to the global ``ResourceManager``; you must therefore have an explicit ``ResourceManager`` instance to use them. ``get_cache_path(archive_name, names=())`` Return absolute location in cache for `archive_name` and `names` The parent directory of the resulting path will be created if it does not already exist. `archive_name` should be the base filename of the enclosing egg (which may not be the name of the enclosing zipfile!), including its ".egg" extension. `names`, if provided, should be a sequence of path name parts "under" the egg's extraction location. This method should only be called by resource providers that need to obtain an extraction location, and only for names they intend to extract, as it tracks the generated names for possible cleanup later. ``extraction_error()`` Raise an ``ExtractionError`` describing the active exception as interfering with the extraction process. You should call this if you encounter any OS errors extracting the file to the cache path; it will format the operating system exception for you, and add other information to the ``ExtractionError`` instance that may be needed by programs that want to wrap or handle extraction errors themselves. ``postprocess(tempname, filename)`` Perform any platform-specific postprocessing of `tempname`. Resource providers should call this method ONLY after successfully extracting a compressed resource. They must NOT call it on resources that are already in the filesystem. `tempname` is the current (temporary) name of the file, and `filename` is the name it will be renamed to by the caller after this routine returns. Metadata API ============ The metadata API is used to access metadata resources bundled in a pluggable distribution. Metadata resources are virtual files or directories containing information about the distribution, such as might be used by an extensible application or framework to connect "plugins". Like other kinds of resources, metadata resource names are ``/``-separated and should not contain ``..`` or begin with a ``/``. You should not use ``os.path`` routines to manipulate resource paths. The metadata API is provided by objects implementing the ``IMetadataProvider`` or ``IResourceProvider`` interfaces. ``Distribution`` objects implement this interface, as do objects returned by the ``get_provider()`` function: ``get_provider(package_or_requirement)`` If a package name is supplied, return an ``IResourceProvider`` for the package. If a ``Requirement`` is supplied, resolve it by returning a ``Distribution`` from the current working set (searching the current ``Environment`` if necessary and adding the newly found ``Distribution`` to the working set). If the named package can't be imported, or the ``Requirement`` can't be satisfied, an exception is raised. NOTE: if you use a package name rather than a ``Requirement``, the object you get back may not be a pluggable distribution, depending on the method by which the package was installed. In particular, "development" packages and "single-version externally-managed" packages do not have any way to map from a package name to the corresponding project's metadata. Do not write code that passes a package name to ``get_provider()`` and then tries to retrieve project metadata from the returned object. It may appear to work when the named package is in an ``.egg`` file or directory, but it will fail in other installation scenarios. If you want project metadata, you need to ask for a *project*, not a package. ``IMetadataProvider`` Methods ----------------------------- The methods provided by objects (such as ``Distribution`` instances) that implement the ``IMetadataProvider`` or ``IResourceProvider`` interfaces are: ``has_metadata(name)`` Does the named metadata resource exist? ``metadata_isdir(name)`` Is the named metadata resource a directory? ``metadata_listdir(name)`` List of metadata names in the directory (like ``os.listdir()``) ``get_metadata(name)`` Return the named metadata resource as a string. The data is read in binary mode; i.e., the exact bytes of the resource file are returned. ``get_metadata_lines(name)`` Yield named metadata resource as list of non-blank non-comment lines. This is short for calling ``yield_lines(provider.get_metadata(name))``. See the section on `yield_lines()`_ below for more information on the syntax it recognizes. ``run_script(script_name, namespace)`` Execute the named script in the supplied namespace dictionary. Raises ``ResolutionError`` if there is no script by that name in the ``scripts`` metadata directory. `namespace` should be a Python dictionary, usually a module dictionary if the script is being run as a module. Exceptions ========== ``pkg_resources`` provides a simple exception hierarchy for problems that may occur when processing requests to locate and activate packages:: ResolutionError DistributionNotFound VersionConflict UnknownExtra ExtractionError ``ResolutionError`` This class is used as a base class for the other three exceptions, so that you can catch all of them with a single "except" clause. It is also raised directly for miscellaneous requirement-resolution problems like trying to run a script that doesn't exist in the distribution it was requested from. ``DistributionNotFound`` A distribution needed to fulfill a requirement could not be found. ``VersionConflict`` The requested version of a project conflicts with an already-activated version of the same project. ``UnknownExtra`` One of the "extras" requested was not recognized by the distribution it was requested from. ``ExtractionError`` A problem occurred extracting a resource to the Python Egg cache. The following attributes are available on instances of this exception: manager The resource manager that raised this exception cache_path The base directory for resource extraction original_error The exception instance that caused extraction to fail Supporting Custom Importers =========================== By default, ``pkg_resources`` supports normal filesystem imports, and ``zipimport`` importers. If you wish to use the ``pkg_resources`` features with other (PEP 302-compatible) importers or module loaders, you may need to register various handlers and support functions using these APIs: ``register_finder(importer_type, distribution_finder)`` Register `distribution_finder` to find distributions in ``sys.path`` items. `importer_type` is the type or class of a PEP 302 "Importer" (``sys.path`` item handler), and `distribution_finder` is a callable that, when passed a path item, the importer instance, and an `only` flag, yields ``Distribution`` instances found under that path item. (The `only` flag, if true, means the finder should yield only ``Distribution`` objects whose ``location`` is equal to the path item provided.) See the source of the ``pkg_resources.find_on_path`` function for an example finder function. ``register_loader_type(loader_type, provider_factory)`` Register `provider_factory` to make ``IResourceProvider`` objects for `loader_type`. `loader_type` is the type or class of a PEP 302 ``module.__loader__``, and `provider_factory` is a function that, when passed a module object, returns an `IResourceProvider`_ for that module, allowing it to be used with the `ResourceManager API`_. ``register_namespace_handler(importer_type, namespace_handler)`` Register `namespace_handler` to declare namespace packages for the given `importer_type`. `importer_type` is the type or class of a PEP 302 "importer" (sys.path item handler), and `namespace_handler` is a callable with a signature like this:: def namespace_handler(importer, path_entry, moduleName, module): # return a path_entry to use for child packages Namespace handlers are only called if the relevant importer object has already agreed that it can handle the relevant path item. The handler should only return a subpath if the module ``__path__`` does not already contain an equivalent subpath. Otherwise, it should return None. For an example namespace handler, see the source of the ``pkg_resources.file_ns_handler`` function, which is used for both zipfile importing and regular importing. IResourceProvider ----------------- ``IResourceProvider`` is an abstract class that documents what methods are required of objects returned by a `provider_factory` registered with ``register_loader_type()``. ``IResourceProvider`` is a subclass of ``IMetadataProvider``, so objects that implement this interface must also implement all of the `IMetadataProvider Methods`_ as well as the methods shown here. The `manager` argument to the methods below must be an object that supports the full `ResourceManager API`_ documented above. ``get_resource_filename(manager, resource_name)`` Return a true filesystem path for `resource_name`, co-ordinating the extraction with `manager`, if the resource must be unpacked to the filesystem. ``get_resource_stream(manager, resource_name)`` Return a readable file-like object for `resource_name`. ``get_resource_string(manager, resource_name)`` Return a string containing the contents of `resource_name`. ``has_resource(resource_name)`` Does the package contain the named resource? ``resource_isdir(resource_name)`` Is the named resource a directory? Return a false value if the resource does not exist or is not a directory. ``resource_listdir(resource_name)`` Return a list of the contents of the resource directory, ala ``os.listdir()``. Requesting the contents of a non-existent directory may raise an exception. Note, by the way, that your provider classes need not (and should not) subclass ``IResourceProvider`` or ``IMetadataProvider``! These classes exist solely for documentation purposes and do not provide any useful implementation code. You may instead wish to subclass one of the `built-in resource providers`_. Built-in Resource Providers --------------------------- ``pkg_resources`` includes several provider classes that are automatically used where appropriate. Their inheritance tree looks like this:: NullProvider EggProvider DefaultProvider PathMetadata ZipProvider EggMetadata EmptyProvider FileMetadata ``NullProvider`` This provider class is just an abstract base that provides for common provider behaviors (such as running scripts), given a definition for just a few abstract methods. ``EggProvider`` This provider class adds in some egg-specific features that are common to zipped and unzipped eggs. ``DefaultProvider`` This provider class is used for unpacked eggs and "plain old Python" filesystem modules. ``ZipProvider`` This provider class is used for all zipped modules, whether they are eggs or not. ``EmptyProvider`` This provider class always returns answers consistent with a provider that has no metadata or resources. ``Distribution`` objects created without a ``metadata`` argument use an instance of this provider class instead. Since all ``EmptyProvider`` instances are equivalent, there is no need to have more than one instance. ``pkg_resources`` therefore creates a global instance of this class under the name ``empty_provider``, and you may use it if you have need of an ``EmptyProvider`` instance. ``PathMetadata(path, egg_info)`` Create an ``IResourceProvider`` for a filesystem-based distribution, where `path` is the filesystem location of the importable modules, and `egg_info` is the filesystem location of the distribution's metadata directory. `egg_info` should usually be the ``EGG-INFO`` subdirectory of `path` for an "unpacked egg", and a ``ProjectName.egg-info`` subdirectory of `path` for a "development egg". However, other uses are possible for custom purposes. ``EggMetadata(zipimporter)`` Create an ``IResourceProvider`` for a zipfile-based distribution. The `zipimporter` should be a ``zipimport.zipimporter`` instance, and may represent a "basket" (a zipfile containing multiple ".egg" subdirectories) a specific egg *within* a basket, or a zipfile egg (where the zipfile itself is a ".egg"). It can also be a combination, such as a zipfile egg that also contains other eggs. ``FileMetadata(path_to_pkg_info)`` Create an ``IResourceProvider`` that provides exactly one metadata resource: ``PKG-INFO``. The supplied path should be a distutils PKG-INFO file. This is basically the same as an ``EmptyProvider``, except that requests for ``PKG-INFO`` will be answered using the contents of the designated file. (This provider is used to wrap ``.egg-info`` files installed by vendor-supplied system packages.) Utility Functions ================= In addition to its high-level APIs, ``pkg_resources`` also includes several generally-useful utility routines. These routines are used to implement the high-level APIs, but can also be quite useful by themselves. Parsing Utilities ----------------- ``parse_version(version)`` Parse a project's version string, returning a value that can be used to compare versions by chronological order. Semantically, the format is a rough cross between distutils' ``StrictVersion`` and ``LooseVersion`` classes; if you give it versions that would work with ``StrictVersion``, then they will compare the same way. Otherwise, comparisons are more like a "smarter" form of ``LooseVersion``. It is *possible* to create pathological version coding schemes that will fool this parser, but they should be very rare in practice. The returned value will be a tuple of strings. Numeric portions of the version are padded to 8 digits so they will compare numerically, but without relying on how numbers compare relative to strings. Dots are dropped, but dashes are retained. Trailing zeros between alpha segments or dashes are suppressed, so that e.g. "2.4.0" is considered the same as "2.4". Alphanumeric parts are lower-cased. The algorithm assumes that strings like "-" and any alpha string that alphabetically follows "final" represents a "patch level". So, "2.4-1" is assumed to be a branch or patch of "2.4", and therefore "2.4.1" is considered newer than "2.4-1", which in turn is newer than "2.4". Strings like "a", "b", "c", "alpha", "beta", "candidate" and so on (that come before "final" alphabetically) are assumed to be pre-release versions, so that the version "2.4" is considered newer than "2.4a1". Any "-" characters preceding a pre-release indicator are removed. (In versions of setuptools prior to 0.6a9, "-" characters were not removed, leading to the unintuitive result that "0.2-rc1" was considered a newer version than "0.2".) Finally, to handle miscellaneous cases, the strings "pre", "preview", and "rc" are treated as if they were "c", i.e. as though they were release candidates, and therefore are not as new as a version string that does not contain them. And the string "dev" is treated as if it were an "@" sign; that is, a version coming before even "a" or "alpha". .. _yield_lines(): ``yield_lines(strs)`` Yield non-empty/non-comment lines from a string/unicode or a possibly- nested sequence thereof. If `strs` is an instance of ``basestring``, it is split into lines, and each non-blank, non-comment line is yielded after stripping leading and trailing whitespace. (Lines whose first non-blank character is ``#`` are considered comment lines.) If `strs` is not an instance of ``basestring``, it is iterated over, and each item is passed recursively to ``yield_lines()``, so that an arbitarily nested sequence of strings, or sequences of sequences of strings can be flattened out to the lines contained therein. So for example, passing a file object or a list of strings to ``yield_lines`` will both work. (Note that between each string in a sequence of strings there is assumed to be an implicit line break, so lines cannot bridge two strings in a sequence.) This routine is used extensively by ``pkg_resources`` to parse metadata and file formats of various kinds, and most other ``pkg_resources`` parsing functions that yield multiple values will use it to break up their input. However, this routine is idempotent, so calling ``yield_lines()`` on the output of another call to ``yield_lines()`` is completely harmless. ``split_sections(strs)`` Split a string (or possibly-nested iterable thereof), yielding ``(section, content)`` pairs found using an ``.ini``-like syntax. Each ``section`` is a whitespace-stripped version of the section name ("``[section]``") and each ``content`` is a list of stripped lines excluding blank lines and comment-only lines. If there are any non-blank, non-comment lines before the first section header, they're yielded in a first ``section`` of ``None``. This routine uses ``yield_lines()`` as its front end, so you can pass in anything that ``yield_lines()`` accepts, such as an open text file, string, or sequence of strings. ``ValueError`` is raised if a malformed section header is found (i.e. a line starting with ``[`` but not ending with ``]``). Note that this simplistic parser assumes that any line whose first nonblank character is ``[`` is a section heading, so it can't support .ini format variations that allow ``[`` as the first nonblank character on other lines. ``safe_name(name)`` Return a "safe" form of a project's name, suitable for use in a ``Requirement`` string, as a distribution name, or a PyPI project name. All non-alphanumeric runs are condensed to single "-" characters, such that a name like "The $$$ Tree" becomes "The-Tree". Note that if you are generating a filename from this value you should combine it with a call to ``to_filename()`` so all dashes ("-") are replaced by underscores ("_"). See ``to_filename()``. ``safe_version(version)`` Similar to ``safe_name()`` except that spaces in the input become dots, and dots are allowed to exist in the output. As with ``safe_name()``, if you are generating a filename from this you should replace any "-" characters in the output with underscores. ``safe_extra(extra)`` Return a "safe" form of an extra's name, suitable for use in a requirement string or a setup script's ``extras_require`` keyword. This routine is similar to ``safe_name()`` except that non-alphanumeric runs are replaced by a single underbar (``_``), and the result is lowercased. ``to_filename(name_or_version)`` Escape a name or version string so it can be used in a dash-separated filename (or ``#egg=name-version`` tag) without ambiguity. You should only pass in values that were returned by ``safe_name()`` or ``safe_version()``. Platform Utilities ------------------ ``get_build_platform()`` Return this platform's identifier string. For Windows, the return value is ``"win32"``, and for Mac OS X it is a string of the form ``"macosx-10.4-ppc"``. All other platforms return the same uname-based string that the ``distutils.util.get_platform()`` function returns. This string is the minimum platform version required by distributions built on the local machine. (Backward compatibility note: setuptools versions prior to 0.6b1 called this function ``get_platform()``, and the function is still available under that name for backward compatibility reasons.) ``get_supported_platform()`` (New in 0.6b1) This is the similar to ``get_build_platform()``, but is the maximum platform version that the local machine supports. You will usually want to use this value as the ``provided`` argument to the ``compatible_platforms()`` function. ``compatible_platforms(provided, required)`` Return true if a distribution built on the `provided` platform may be used on the `required` platform. If either platform value is ``None``, it is considered a wildcard, and the platforms are therefore compatible. Likewise, if the platform strings are equal, they're also considered compatible, and ``True`` is returned. Currently, the only non-equal platform strings that are considered compatible are Mac OS X platform strings with the same hardware type (e.g. ``ppc``) and major version (e.g. ``10``) with the `provided` platform's minor version being less than or equal to the `required` platform's minor version. ``get_default_cache()`` Determine the default cache location for extracting resources from zipped eggs. This routine returns the ``PYTHON_EGG_CACHE`` environment variable, if set. Otherwise, on Windows, it returns a "Python-Eggs" subdirectory of the user's "Application Data" directory. On all other systems, it returns ``os.path.expanduser("~/.python-eggs")`` if ``PYTHON_EGG_CACHE`` is not set. PEP 302 Utilities ----------------- ``get_importer(path_item)`` Retrieve a PEP 302 "importer" for the given path item (which need not actually be on ``sys.path``). This routine simulates the PEP 302 protocol for obtaining an "importer" object. It first checks for an importer for the path item in ``sys.path_importer_cache``, and if not found it calls each of the ``sys.path_hooks`` and caches the result if a good importer is found. If no importer is found, this routine returns an ``ImpWrapper`` instance that wraps the builtin import machinery as a PEP 302-compliant "importer" object. This ``ImpWrapper`` is *not* cached; instead a new instance is returned each time. (Note: When run under Python 2.5, this function is simply an alias for ``pkgutil.get_importer()``, and instead of ``pkg_resources.ImpWrapper`` instances, it may return ``pkgutil.ImpImporter`` instances.) File/Path Utilities ------------------- ``ensure_directory(path)`` Ensure that the parent directory (``os.path.dirname``) of `path` actually exists, using ``os.makedirs()`` if necessary. ``normalize_path(path)`` Return a "normalized" version of `path`, such that two paths represent the same filesystem location if they have equal ``normalized_path()`` values. Specifically, this is a shortcut for calling ``os.path.realpath`` and ``os.path.normcase`` on `path`. Unfortunately, on certain platforms (notably Cygwin and Mac OS X) the ``normcase`` function does not accurately reflect the platform's case-sensitivity, so there is always the possibility of two apparently-different paths being equal on such platforms. History ------- 0.6c9 * Fix ``resource_listdir('')`` always returning an empty list for zipped eggs. 0.6c7 * Fix package precedence problem where single-version eggs installed in ``site-packages`` would take precedence over ``.egg`` files (or directories) installed in ``site-packages``. 0.6c6 * Fix extracted C extensions not having executable permissions under Cygwin. * Allow ``.egg-link`` files to contain relative paths. * Fix cache dir defaults on Windows when multiple environment vars are needed to construct a path. 0.6c4 * Fix "dev" versions being considered newer than release candidates. 0.6c3 * Python 2.5 compatibility fixes. 0.6c2 * Fix a problem with eggs specified directly on ``PYTHONPATH`` on case-insensitive filesystems possibly not showing up in the default working set, due to differing normalizations of ``sys.path`` entries. 0.6b3 * Fixed a duplicate path insertion problem on case-insensitive filesystems. 0.6b1 * Split ``get_platform()`` into ``get_supported_platform()`` and ``get_build_platform()`` to work around a Mac versioning problem that caused the behavior of ``compatible_platforms()`` to be platform specific. * Fix entry point parsing when a standalone module name has whitespace between it and the extras. 0.6a11 * Added ``ExtractionError`` and ``ResourceManager.extraction_error()`` so that cache permission problems get a more user-friendly explanation of the problem, and so that programs can catch and handle extraction errors if they need to. 0.6a10 * Added the ``extras`` attribute to ``Distribution``, the ``find_plugins()`` method to ``WorkingSet``, and the ``__add__()`` and ``__iadd__()`` methods to ``Environment``. * ``safe_name()`` now allows dots in project names. * There is a new ``to_filename()`` function that escapes project names and versions for safe use in constructing egg filenames from a Distribution object's metadata. * Added ``Distribution.clone()`` method, and keyword argument support to other ``Distribution`` constructors. * Added the ``DEVELOP_DIST`` precedence, and automatically assign it to eggs using ``.egg-info`` format. 0.6a9 * Don't raise an error when an invalid (unfinished) distribution is found unless absolutely necessary. Warn about skipping invalid/unfinished eggs when building an Environment. * Added support for ``.egg-info`` files or directories with version/platform information embedded in the filename, so that system packagers have the option of including ``PKG-INFO`` files to indicate the presence of a system-installed egg, without needing to use ``.egg`` directories, zipfiles, or ``.pth`` manipulation. * Changed ``parse_version()`` to remove dashes before pre-release tags, so that ``0.2-rc1`` is considered an *older* version than ``0.2``, and is equal to ``0.2rc1``. The idea that a dash *always* meant a post-release version was highly non-intuitive to setuptools users and Python developers, who seem to want to use ``-rc`` version numbers a lot. 0.6a8 * Fixed a problem with ``WorkingSet.resolve()`` that prevented version conflicts from being detected at runtime. * Improved runtime conflict warning message to identify a line in the user's program, rather than flagging the ``warn()`` call in ``pkg_resources``. * Avoid giving runtime conflict warnings for namespace packages, even if they were declared by a different package than the one currently being activated. * Fix path insertion algorithm for case-insensitive filesystems. * Fixed a problem with nested namespace packages (e.g. ``peak.util``) not being set as an attribute of their parent package. 0.6a6 * Activated distributions are now inserted in ``sys.path`` (and the working set) just before the directory that contains them, instead of at the end. This allows e.g. eggs in ``site-packages`` to override unmanaged modules in the same location, and allows eggs found earlier on ``sys.path`` to override ones found later. * When a distribution is activated, it now checks whether any contained non-namespace modules have already been imported and issues a warning if a conflicting module has already been imported. * Changed dependency processing so that it's breadth-first, allowing a depender's preferences to override those of a dependee, to prevent conflicts when a lower version is acceptable to the dependee, but not the depender. * Fixed a problem extracting zipped files on Windows, when the egg in question has had changed contents but still has the same version number. 0.6a4 * Fix a bug in ``WorkingSet.resolve()`` that was introduced in 0.6a3. 0.6a3 * Added ``safe_extra()`` parsing utility routine, and use it for Requirement, EntryPoint, and Distribution objects' extras handling. 0.6a1 * Enhanced performance of ``require()`` and related operations when all requirements are already in the working set, and enhanced performance of directory scanning for distributions. * Fixed some problems using ``pkg_resources`` w/PEP 302 loaders other than ``zipimport``, and the previously-broken "eager resource" support. * Fixed ``pkg_resources.resource_exists()`` not working correctly, along with some other resource API bugs. * Many API changes and enhancements: * Added ``EntryPoint``, ``get_entry_map``, ``load_entry_point``, and ``get_entry_info`` APIs for dynamic plugin discovery. * ``list_resources`` is now ``resource_listdir`` (and it actually works) * Resource API functions like ``resource_string()`` that accepted a package name and resource name, will now also accept a ``Requirement`` object in place of the package name (to allow access to non-package data files in an egg). * ``get_provider()`` will now accept a ``Requirement`` instance or a module name. If it is given a ``Requirement``, it will return a corresponding ``Distribution`` (by calling ``require()`` if a suitable distribution isn't already in the working set), rather than returning a metadata and resource provider for a specific module. (The difference is in how resource paths are interpreted; supplying a module name means resources path will be module-relative, rather than relative to the distribution's root.) * ``Distribution`` objects now implement the ``IResourceProvider`` and ``IMetadataProvider`` interfaces, so you don't need to reference the (no longer available) ``metadata`` attribute to get at these interfaces. * ``Distribution`` and ``Requirement`` both have a ``project_name`` attribute for the project name they refer to. (Previously these were ``name`` and ``distname`` attributes.) * The ``path`` attribute of ``Distribution`` objects is now ``location``, because it isn't necessarily a filesystem path (and hasn't been for some time now). The ``location`` of ``Distribution`` objects in the filesystem should always be normalized using ``pkg_resources.normalize_path()``; all of the setuptools and EasyInstall code that generates distributions from the filesystem (including ``Distribution.from_filename()``) ensure this invariant, but if you use a more generic API like ``Distribution()`` or ``Distribution.from_location()`` you should take care that you don't create a distribution with an un-normalized filesystem path. * ``Distribution`` objects now have an ``as_requirement()`` method that returns a ``Requirement`` for the distribution's project name and version. * Distribution objects no longer have an ``installed_on()`` method, and the ``install_on()`` method is now ``activate()`` (but may go away altogether soon). The ``depends()`` method has also been renamed to ``requires()``, and ``InvalidOption`` is now ``UnknownExtra``. * ``find_distributions()`` now takes an additional argument called ``only``, that tells it to only yield distributions whose location is the passed-in path. (It defaults to False, so that the default behavior is unchanged.) * ``AvailableDistributions`` is now called ``Environment``, and the ``get()``, ``__len__()``, and ``__contains__()`` methods were removed, because they weren't particularly useful. ``__getitem__()`` no longer raises ``KeyError``; it just returns an empty list if there are no distributions for the named project. * The ``resolve()`` method of ``Environment`` is now a method of ``WorkingSet`` instead, and the ``best_match()`` method now uses a working set instead of a path list as its second argument. * There is a new ``pkg_resources.add_activation_listener()`` API that lets you register a callback for notifications about distributions added to ``sys.path`` (including the distributions already on it). This is basically a hook for extensible applications and frameworks to be able to search for plugin metadata in distributions added at runtime. 0.5a13 * Fixed a bug in resource extraction from nested packages in a zipped egg. 0.5a12 * Updated extraction/cache mechanism for zipped resources to avoid inter- process and inter-thread races during extraction. The default cache location can now be set via the ``PYTHON_EGGS_CACHE`` environment variable, and the default Windows cache is now a ``Python-Eggs`` subdirectory of the current user's "Application Data" directory, if the ``PYTHON_EGGS_CACHE`` variable isn't set. 0.5a10 * Fix a problem with ``pkg_resources`` being confused by non-existent eggs on ``sys.path`` (e.g. if a user deletes an egg without removing it from the ``easy-install.pth`` file). * Fix a problem with "basket" support in ``pkg_resources``, where egg-finding never actually went inside ``.egg`` files. * Made ``pkg_resources`` import the module you request resources from, if it's not already imported. 0.5a4 * ``pkg_resources.AvailableDistributions.resolve()`` and related methods now accept an ``installer`` argument: a callable taking one argument, a ``Requirement`` instance. The callable must return a ``Distribution`` object, or ``None`` if no distribution is found. This feature is used by EasyInstall to resolve dependencies by recursively invoking itself. 0.4a4 * Fix problems with ``resource_listdir()``, ``resource_isdir()`` and resource directory extraction for zipped eggs. 0.4a3 * Fixed scripts not being able to see a ``__file__`` variable in ``__main__`` * Fixed a problem with ``resource_isdir()`` implementation that was introduced in 0.4a2. 0.4a1 * Fixed a bug in requirements processing for exact versions (i.e. ``==`` and ``!=``) when only one condition was included. * Added ``safe_name()`` and ``safe_version()`` APIs to clean up handling of arbitrary distribution names and versions found on PyPI. 0.3a4 * ``pkg_resources`` now supports resource directories, not just the resources in them. In particular, there are ``resource_listdir()`` and ``resource_isdir()`` APIs. * ``pkg_resources`` now supports "egg baskets" -- .egg zipfiles which contain multiple distributions in subdirectories whose names end with ``.egg``. Having such a "basket" in a directory on ``sys.path`` is equivalent to having the individual eggs in that directory, but the contained eggs can be individually added (or not) to ``sys.path``. Currently, however, there is no automated way to create baskets. * Namespace package manipulation is now protected by the Python import lock. 0.3a1 * Initial release. share/doc/alt-python34-setuptools/docs/_theme/nature/theme.conf000064400000000107152342604300020535 0ustar00[theme] inherit = basic stylesheet = nature.css pygments_style = tango share/doc/alt-python34-setuptools/docs/_theme/nature/static/nature.css_t000064400000007415152342604300022417 0ustar00/** * Sphinx stylesheet -- default theme * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ body { font-family: Arial, sans-serif; font-size: 100%; background-color: #111111; color: #555555; margin: 0; padding: 0; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 300px; } hr{ border: 1px solid #B1B4B6; } div.document { background-color: #fafafa; } div.body { background-color: #ffffff; color: #3E4349; padding: 1em 30px 30px 30px; font-size: 0.9em; } div.footer { color: #555; width: 100%; padding: 13px 0; text-align: center; font-size: 75%; } div.footer a { color: #444444; } div.related { background-color: #6BA81E; line-height: 36px; color: #ffffff; text-shadow: 0px 1px 0 #444444; font-size: 1.1em; } div.related a { color: #E2F3CC; } div.related .right { font-size: 0.9em; } div.sphinxsidebar { font-size: 0.9em; line-height: 1.5em; width: 300px; } div.sphinxsidebarwrapper{ padding: 20px 0; } div.sphinxsidebar h3, div.sphinxsidebar h4 { font-family: Arial, sans-serif; color: #222222; font-size: 1.2em; font-weight: bold; margin: 0; padding: 5px 10px; text-shadow: 1px 1px 0 white } div.sphinxsidebar h3 a { color: #444444; } div.sphinxsidebar p { color: #888888; padding: 5px 20px; margin: 0.5em 0px; } div.sphinxsidebar p.topless { } div.sphinxsidebar ul { margin: 10px 10px 10px 20px; padding: 0; color: #000000; } div.sphinxsidebar a { color: #444444; } div.sphinxsidebar a:hover { color: #E32E00; } div.sphinxsidebar input { border: 1px solid #cccccc; font-family: sans-serif; font-size: 1.1em; padding: 0.15em 0.3em; } div.sphinxsidebar input[type=text]{ margin-left: 20px; } /* -- body styles ----------------------------------------------------------- */ a { color: #005B81; text-decoration: none; } a:hover { color: #E32E00; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: Arial, sans-serif; font-weight: normal; color: #212224; margin: 30px 0px 10px 0px; padding: 5px 0 5px 0px; text-shadow: 0px 1px 0 white; border-bottom: 1px solid #C8D5E3; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 150%; } div.body h3 { font-size: 120%; } div.body h4 { font-size: 110%; } div.body h5 { font-size: 100%; } div.body h6 { font-size: 100%; } a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; } a.headerlink:hover { background-color: #c60f0f; color: white; } div.body p, div.body dd, div.body li { line-height: 1.8em; } div.admonition p.admonition-title + p { display: inline; } div.highlight{ background-color: white; } div.note { background-color: #eeeeee; border: 1px solid #cccccc; } div.seealso { background-color: #ffffcc; border: 1px solid #ffff66; } div.topic { background-color: #fafafa; border-width: 0; } div.warning { background-color: #ffe4e4; border: 1px solid #ff6666; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre { padding: 10px; background-color: #fafafa; color: #222222; line-height: 1.5em; font-size: 1.1em; margin: 1.5em 0 1.5em 0; -webkit-box-shadow: 0px 0px 4px #d8d8d8; -moz-box-shadow: 0px 0px 4px #d8d8d8; box-shadow: 0px 0px 4px #d8d8d8; } tt { color: #222222; padding: 1px 2px; font-size: 1.2em; font-family: monospace; } #table-of-contents ul { padding-left: 2em; } share/doc/alt-python34-setuptools/docs/_theme/nature/static/pygments.css000064400000005235152342604300022442 0ustar00.c { color: #999988; font-style: italic } /* Comment */ .k { font-weight: bold } /* Keyword */ .o { font-weight: bold } /* Operator */ .cm { color: #999988; font-style: italic } /* Comment.Multiline */ .cp { color: #999999; font-weight: bold } /* Comment.preproc */ .c1 { color: #999988; font-style: italic } /* Comment.Single */ .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #aa0000 } /* Generic.Error */ .gh { color: #999999 } /* Generic.Heading */ .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .go { color: #111 } /* Generic.Output */ .gp { color: #555555 } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #aaaaaa } /* Generic.Subheading */ .gt { color: #aa0000 } /* Generic.Traceback */ .kc { font-weight: bold } /* Keyword.Constant */ .kd { font-weight: bold } /* Keyword.Declaration */ .kp { font-weight: bold } /* Keyword.Pseudo */ .kr { font-weight: bold } /* Keyword.Reserved */ .kt { color: #445588; font-weight: bold } /* Keyword.Type */ .m { color: #009999 } /* Literal.Number */ .s { color: #bb8844 } /* Literal.String */ .na { color: #008080 } /* Name.Attribute */ .nb { color: #999999 } /* Name.Builtin */ .nc { color: #445588; font-weight: bold } /* Name.Class */ .no { color: #ff99ff } /* Name.Constant */ .ni { color: #800080 } /* Name.Entity */ .ne { color: #990000; font-weight: bold } /* Name.Exception */ .nf { color: #990000; font-weight: bold } /* Name.Function */ .nn { color: #555555 } /* Name.Namespace */ .nt { color: #000080 } /* Name.Tag */ .nv { color: purple } /* Name.Variable */ .ow { font-weight: bold } /* Operator.Word */ .mf { color: #009999 } /* Literal.Number.Float */ .mh { color: #009999 } /* Literal.Number.Hex */ .mi { color: #009999 } /* Literal.Number.Integer */ .mo { color: #009999 } /* Literal.Number.Oct */ .sb { color: #bb8844 } /* Literal.String.Backtick */ .sc { color: #bb8844 } /* Literal.String.Char */ .sd { color: #bb8844 } /* Literal.String.Doc */ .s2 { color: #bb8844 } /* Literal.String.Double */ .se { color: #bb8844 } /* Literal.String.Escape */ .sh { color: #bb8844 } /* Literal.String.Heredoc */ .si { color: #bb8844 } /* Literal.String.Interpol */ .sx { color: #bb8844 } /* Literal.String.Other */ .sr { color: #808000 } /* Literal.String.Regex */ .s1 { color: #bb8844 } /* Literal.String.Single */ .ss { color: #bb8844 } /* Literal.String.Symbol */ .bp { color: #999999 } /* Name.Builtin.Pseudo */ .vc { color: #ff99ff } /* Name.Variable.Class */ .vg { color: #ff99ff } /* Name.Variable.Global */ .vi { color: #ff99ff } /* Name.Variable.Instance */ .il { color: #009999 } /* Literal.Number.Integer.Long */share/doc/alt-python34-setuptools/docs/index.txt000064400000001040152342604300015672 0ustar00Welcome to Setuptools' documentation! ===================================== Setuptools is a fully-featured, actively-maintained, and stable library designed to facilitate packaging Python projects, where packaging includes: - Python package and module definitions - Distribution package metadata - Test hooks - Project installation - Platform-specific details - Python 3 support Documentation content: .. toctree:: :maxdepth: 2 roadmap python3 using setuptools easy_install pkg_resources development merge share/doc/alt-python34-setuptools/docs/merge.txt000064400000011441152342604300015670 0ustar00Merge with Distribute ~~~~~~~~~~~~~~~~~~~~~ In 2013, the fork of Distribute was merged back into Setuptools. This document describes some of the details of the merge. .. toctree:: :maxdepth: 2 merge-faq Process ======= In order to try to accurately reflect the fork and then re-merge of the projects, the merge process brought both code trees together into one repository and grafted the Distribute fork onto the Setuptools development line (as if it had been created as a branch in the first place). The rebase to get distribute onto setuptools went something like this:: hg phase -d -f -r 26b4c29b62db hg rebase -s 26b4c29b62db -d 7a5cf59c78d7 The technique required a late version of mercurial (2.5) to work correctly. The only code that was included was the code that was ancestral to the public releases of Distribute 0.6. Additionally, because Setuptools was not hosted on Mercurial at the time of the fork and because the Distribute fork did not include a complete conversion of the Setuptools history, the Distribute changesets had to be re-applied to a new, different conversion of the Setuptools SVN repository. As a result, all of the hashes have changed. Distribute was grafted in a 'distribute' branch and the 'setuptools-0.6' branch was targeted for the merge. The 'setuptools' branch remains with unreleased code and may be incorporated in the future. Reconciling Differences ======================= There were both technical and philosophical differences between Setuptools and Distribute. To reconcile these differences in a manageable way, the following technique was undertaken: Create a 'Setuptools-Distribute merge' branch, based on a late release of Distribute (0.6.35). This was done with a00b441856c4. In that branch, first remove code that is no longer relevant to Setuptools (such as the setuptools patching code). Next, in the the merge branch, create another base from at the point where the fork occurred (such that the code is still essentially an older but pristine setuptools). This base can be found as 955792b069d0. This creates two heads in the merge branch, each with a basis in the fork. Then, repeatedly copy changes for a single file or small group of files from a late revision of that file in the 'setuptools-0.6' branch (1aae1efe5733 was used) and commit those changes on the setuptools-only head. That head is then merged with the head with Distribute changes. It is in this Mercurial merge operation that the fundamental differences between Distribute and Setuptools are reconciled, but since only a single file or small set of files are used, the scope is limited. Finally, once all the challenging files have been reconciled and merged, the remaining changes from the setuptools-0.6 branch are merged, deferring to the reconciled changes (a1fa855a5a62 and 160ccaa46be0). Originally, jaraco attempted all of this using anonymous heads in the Distribute branch, but later realized this technique made for a somewhat unclear merge process, so the changes were re-committed as described above for clarity. In this way, the "distribute" and "setuptools" branches can continue to track the official Distribute changesets. Concessions =========== With the merge of Setuptools and Distribute, the following concessions were made: Differences from setuptools 0.6c12: Major Changes ------------- * Python 3 support. * Improved support for GAE. * Support `PEP-370 `_ per-user site packages. * Sort order of Distributions in pkg_resources now prefers PyPI to external links (Distribute issue 163). * Python 2.4 or greater is required (drop support for Python 2.3). Minor Changes ------------- * Wording of some output has changed to replace contractions with their canonical form (i.e. prefer "could not" to "couldn't"). * Manifest files are only written for 32-bit .exe launchers. Differences from Distribute 0.6.36: Major Changes ------------- * The _distribute property of the setuptools module has been removed. * Distributions are once again installed as zipped eggs by default, per the rationale given in `the seminal bug report `_ indicates that the feature should remain and no substantial justification was given in the `Distribute report `_. Minor Changes ------------- * The patch for `#174 `_ has been rolled-back, as the comment on the ticket indicates that the patch addressed a symptom and not the fundamental issue. * ``easy_install`` (the command) once again honors setup.cfg if found in the current directory. The "mis-behavior" characterized in `#99 `_ is actually intended behavior, and no substantial rationale was given for the deviation. share/doc/alt-python34-setuptools/docs/Makefile000064400000004443152342604300015474 0ustar00# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html web pickle htmlhelp latex changes linkcheck help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview over all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" clean: -rm -rf build/* html: mkdir -p build/html build/doctrees $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html @echo @echo "Build finished. The HTML pages are in build/html." pickle: mkdir -p build/pickle build/doctrees $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle @echo @echo "Build finished; now you can process the pickle files." web: pickle json: mkdir -p build/json build/doctrees $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: mkdir -p build/htmlhelp build/doctrees $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in build/htmlhelp." latex: mkdir -p build/latex build/doctrees $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex @echo @echo "Build finished; the LaTeX files are in build/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: mkdir -p build/changes build/doctrees $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes @echo @echo "The overview file is in build/changes." linkcheck: mkdir -p build/linkcheck build/doctrees $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in build/linkcheck/output.txt." share/doc/alt-python34-setuptools/docs/_templates/indexsidebar.html000064400000000467152342604300021522 0ustar00

Download

Current version: {{ version }}

Get Setuptools from the Python Package Index

Questions? Suggestions? Contributions?

Visit the Setuptools project page

share/doc/alt-python34-setuptools/docs/releases.txt000064400000001241152342604300016371 0ustar00=============== Release Process =============== In order to allow for rapid, predictable releases, Setuptools uses a mechanical technique for releases. The release script, ``release.py`` in the repository, defines the details of the releases, and is executed by the `jaraco.packaging `_ release module. The script does some checks (some interactive) and fully automates the release process. A Setuptools release manager must have maintainer access on PyPI to the project and administrative access to the BitBucket project. Release Managers ---------------- Currently, the project has one release manager, Jason R. Coombs. share/doc/alt-python34-setuptools/docs/roadmap.txt000064400000000247152342604300016216 0ustar00======= Roadmap ======= Setuptools is primarily in maintenance mode. The project attempts to address user issues, concerns, and feature requests in a timely fashion. share/doc/alt-python34-setuptools/docs/setuptools.txt000064400000371551152342604300017025 0ustar00================================================== Building and Distributing Packages with Setuptools ================================================== ``Setuptools`` is a collection of enhancements to the Python ``distutils`` (for Python 2.6 and up) that allow developers to more easily build and distribute Python packages, especially ones that have dependencies on other packages. Packages built and distributed using ``setuptools`` look to the user like ordinary Python packages based on the ``distutils``. Your users don't need to install or even know about setuptools in order to use them, and you don't have to include the entire setuptools package in your distributions. By including just a single `bootstrap module`_ (a 12K .py file), your package will automatically download and install ``setuptools`` if the user is building your package from source and doesn't have a suitable version already installed. .. _bootstrap module: https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py Feature Highlights: * Automatically find/download/install/upgrade dependencies at build time using the `EasyInstall tool `_, which supports downloading via HTTP, FTP, Subversion, and SourceForge, and automatically scans web pages linked from PyPI to find download links. (It's the closest thing to CPAN currently available for Python.) * Create `Python Eggs `_ - a single-file importable distribution format * Enhanced support for accessing data files hosted in zipped packages. * Automatically include all packages in your source tree, without listing them individually in setup.py * Automatically include all relevant files in your source distributions, without needing to create a ``MANIFEST.in`` file, and without having to force regeneration of the ``MANIFEST`` file when your source tree changes. * Automatically generate wrapper scripts or Windows (console and GUI) .exe files for any number of "main" functions in your project. (Note: this is not a py2exe replacement; the .exe files rely on the local Python installation.) * Transparent Pyrex support, so that your setup.py can list ``.pyx`` files and still work even when the end-user doesn't have Pyrex installed (as long as you include the Pyrex-generated C in your source distribution) * Command aliases - create project-specific, per-user, or site-wide shortcut names for commonly used commands and options * PyPI upload support - upload your source distributions and eggs to PyPI * Deploy your project in "development mode", such that it's available on ``sys.path``, yet can still be edited directly from its source checkout. * Easily extend the distutils with new commands or ``setup()`` arguments, and distribute/reuse your extensions for multiple projects, without copying code. * Create extensible applications and frameworks that automatically discover extensions, using simple "entry points" declared in a project's setup script. In addition to the PyPI downloads, the development version of ``setuptools`` is available from the `Python SVN sandbox`_, and in-development versions of the `0.6 branch`_ are available as well. .. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 .. _Python SVN sandbox: http://svn.python.org/projects/sandbox/trunk/setuptools/#egg=setuptools-dev .. contents:: **Table of Contents** .. _ez_setup.py: `bootstrap module`_ ----------------- Developer's Guide ----------------- Installing ``setuptools`` ========================= Please follow the `EasyInstall Installation Instructions`_ to install the current stable version of setuptools. In particular, be sure to read the section on `Custom Installation Locations`_ if you are installing anywhere other than Python's ``site-packages`` directory. .. _EasyInstall Installation Instructions: easy_install.html#installation-instructions .. _Custom Installation Locations: easy_install.html#custom-installation-locations If you want the current in-development version of setuptools, you should first install a stable version, and then run:: ez_setup.py setuptools==dev This will download and install the latest development (i.e. unstable) version of setuptools from the Python Subversion sandbox. Basic Use ========= For basic use of setuptools, just import things from setuptools instead of the distutils. Here's a minimal setup script using setuptools:: from setuptools import setup, find_packages setup( name = "HelloWorld", version = "0.1", packages = find_packages(), ) As you can see, it doesn't take much to use setuptools in a project. Just by doing the above, this project will be able to produce eggs, upload to PyPI, and automatically include all packages in the directory where the setup.py lives. See the `Command Reference`_ section below to see what commands you can give to this setup script. Of course, before you release your project to PyPI, you'll want to add a bit more information to your setup script to help people find or learn about your project. And maybe your project will have grown by then to include a few dependencies, and perhaps some data files and scripts:: from setuptools import setup, find_packages setup( name = "HelloWorld", version = "0.1", packages = find_packages(), scripts = ['say_hello.py'], # Project uses reStructuredText, so ensure that the docutils get # installed or upgraded on the target machine install_requires = ['docutils>=0.3'], package_data = { # If any package contains *.txt or *.rst files, include them: '': ['*.txt', '*.rst'], # And include any *.msg files found in the 'hello' package, too: 'hello': ['*.msg'], }, # metadata for upload to PyPI author = "Me", author_email = "me@example.com", description = "This is an Example Package", license = "PSF", keywords = "hello world example examples", url = "http://example.com/HelloWorld/", # project home page, if any # could also include long_description, download_url, classifiers, etc. ) In the sections that follow, we'll explain what most of these ``setup()`` arguments do (except for the metadata ones), and the various ways you might use them in your own project(s). Specifying Your Project's Version --------------------------------- Setuptools can work well with most versioning schemes; there are, however, a few special things to watch out for, in order to ensure that setuptools and EasyInstall can always tell what version of your package is newer than another version. Knowing these things will also help you correctly specify what versions of other projects your project depends on. A version consists of an alternating series of release numbers and pre-release or post-release tags. A release number is a series of digits punctuated by dots, such as ``2.4`` or ``0.5``. Each series of digits is treated numerically, so releases ``2.1`` and ``2.1.0`` are different ways to spell the same release number, denoting the first subrelease of release 2. But ``2.10`` is the *tenth* subrelease of release 2, and so is a different and newer release from ``2.1`` or ``2.1.0``. Leading zeros within a series of digits are also ignored, so ``2.01`` is the same as ``2.1``, and different from ``2.0.1``. Following a release number, you can have either a pre-release or post-release tag. Pre-release tags make a version be considered *older* than the version they are appended to. So, revision ``2.4`` is *newer* than revision ``2.4c1``, which in turn is newer than ``2.4b1`` or ``2.4a1``. Postrelease tags make a version be considered *newer* than the version they are appended to. So, revisions like ``2.4-1`` and ``2.4pl3`` are newer than ``2.4``, but are *older* than ``2.4.1`` (which has a higher release number). A pre-release tag is a series of letters that are alphabetically before "final". Some examples of prerelease tags would include ``alpha``, ``beta``, ``a``, ``c``, ``dev``, and so on. You do not have to place a dot or dash before the prerelease tag if it's immediately after a number, but it's okay to do so if you prefer. Thus, ``2.4c1`` and ``2.4.c1`` and ``2.4-c1`` all represent release candidate 1 of version ``2.4``, and are treated as identical by setuptools. In addition, there are three special prerelease tags that are treated as if they were the letter ``c``: ``pre``, ``preview``, and ``rc``. So, version ``2.4rc1``, ``2.4pre1`` and ``2.4preview1`` are all the exact same version as ``2.4c1``, and are treated as identical by setuptools. A post-release tag is either a series of letters that are alphabetically greater than or equal to "final", or a dash (``-``). Post-release tags are generally used to separate patch numbers, port numbers, build numbers, revision numbers, or date stamps from the release number. For example, the version ``2.4-r1263`` might denote Subversion revision 1263 of a post-release patch of version ``2.4``. Or you might use ``2.4-20051127`` to denote a date-stamped post-release. Notice that after each pre or post-release tag, you are free to place another release number, followed again by more pre- or post-release tags. For example, ``0.6a9.dev-r41475`` could denote Subversion revision 41475 of the in- development version of the ninth alpha of release 0.6. Notice that ``dev`` is a pre-release tag, so this version is a *lower* version number than ``0.6a9``, which would be the actual ninth alpha of release 0.6. But the ``-r41475`` is a post-release tag, so this version is *newer* than ``0.6a9.dev``. For the most part, setuptools' interpretation of version numbers is intuitive, but here are a few tips that will keep you out of trouble in the corner cases: * Don't stick adjoining pre-release tags together without a dot or number between them. Version ``1.9adev`` is the ``adev`` prerelease of ``1.9``, *not* a development pre-release of ``1.9a``. Use ``.dev`` instead, as in ``1.9a.dev``, or separate the prerelease tags with a number, as in ``1.9a0dev``. ``1.9a.dev``, ``1.9a0dev``, and even ``1.9.a.dev`` are identical versions from setuptools' point of view, so you can use whatever scheme you prefer. * If you want to be certain that your chosen numbering scheme works the way you think it will, you can use the ``pkg_resources.parse_version()`` function to compare different version numbers:: >>> from pkg_resources import parse_version >>> parse_version('1.9.a.dev') == parse_version('1.9a0dev') True >>> parse_version('2.1-rc2') < parse_version('2.1') True >>> parse_version('0.6a9dev-r41475') < parse_version('0.6a9') True Once you've decided on a version numbering scheme for your project, you can have setuptools automatically tag your in-development releases with various pre- or post-release tags. See the following sections for more details: * `Tagging and "Daily Build" or "Snapshot" Releases`_ * `Managing "Continuous Releases" Using Subversion`_ * The `egg_info`_ command New and Changed ``setup()`` Keywords ==================================== The following keyword arguments to ``setup()`` are added or changed by ``setuptools``. All of them are optional; you do not have to supply them unless you need the associated ``setuptools`` feature. ``include_package_data`` If set to ``True``, this tells ``setuptools`` to automatically include any data files it finds inside your package directories, that are either under CVS or Subversion control, or which are specified by your ``MANIFEST.in`` file. For more information, see the section below on `Including Data Files`_. ``exclude_package_data`` A dictionary mapping package names to lists of glob patterns that should be *excluded* from your package directories. You can use this to trim back any excess files included by ``include_package_data``. For a complete description and examples, see the section below on `Including Data Files`_. ``package_data`` A dictionary mapping package names to lists of glob patterns. For a complete description and examples, see the section below on `Including Data Files`_. You do not need to use this option if you are using ``include_package_data``, unless you need to add e.g. files that are generated by your setup script and build process. (And are therefore not in source control or are files that you don't want to include in your source distribution.) ``zip_safe`` A boolean (True or False) flag specifying whether the project can be safely installed and run from a zip file. If this argument is not supplied, the ``bdist_egg`` command will have to analyze all of your project's contents for possible problems each time it buids an egg. ``install_requires`` A string or list of strings specifying what other distributions need to be installed when this one is. See the section below on `Declaring Dependencies`_ for details and examples of the format of this argument. ``entry_points`` A dictionary mapping entry point group names to strings or lists of strings defining the entry points. Entry points are used to support dynamic discovery of services or plugins provided by a project. See `Dynamic Discovery of Services and Plugins`_ for details and examples of the format of this argument. In addition, this keyword is used to support `Automatic Script Creation`_. ``extras_require`` A dictionary mapping names of "extras" (optional features of your project) to strings or lists of strings specifying what other distributions must be installed to support those features. See the section below on `Declaring Dependencies`_ for details and examples of the format of this argument. ``setup_requires`` A string or list of strings specifying what other distributions need to be present in order for the *setup script* to run. ``setuptools`` will attempt to obtain these (even going so far as to download them using ``EasyInstall``) before processing the rest of the setup script or commands. This argument is needed if you are using distutils extensions as part of your build process; for example, extensions that process setup() arguments and turn them into EGG-INFO metadata files. (Note: projects listed in ``setup_requires`` will NOT be automatically installed on the system where the setup script is being run. They are simply downloaded to the setup directory if they're not locally available already. If you want them to be installed, as well as being available when the setup script is run, you should add them to ``install_requires`` **and** ``setup_requires``.) ``dependency_links`` A list of strings naming URLs to be searched when satisfying dependencies. These links will be used if needed to install packages specified by ``setup_requires`` or ``tests_require``. They will also be written into the egg's metadata for use by tools like EasyInstall to use when installing an ``.egg`` file. ``namespace_packages`` A list of strings naming the project's "namespace packages". A namespace package is a package that may be split across multiple project distributions. For example, Zope 3's ``zope`` package is a namespace package, because subpackages like ``zope.interface`` and ``zope.publisher`` may be distributed separately. The egg runtime system can automatically merge such subpackages into a single parent package at runtime, as long as you declare them in each project that contains any subpackages of the namespace package, and as long as the namespace package's ``__init__.py`` does not contain any code other than a namespace declaration. See the section below on `Namespace Packages`_ for more information. ``test_suite`` A string naming a ``unittest.TestCase`` subclass (or a package or module containing one or more of them, or a method of such a subclass), or naming a function that can be called with no arguments and returns a ``unittest.TestSuite``. If the named suite is a module, and the module has an ``additional_tests()`` function, it is called and the results are added to the tests to be run. If the named suite is a package, any submodules and subpackages are recursively added to the overall test suite. Specifying this argument enables use of the `test`_ command to run the specified test suite, e.g. via ``setup.py test``. See the section on the `test`_ command below for more details. ``tests_require`` If your project's tests need one or more additional packages besides those needed to install it, you can use this option to specify them. It should be a string or list of strings specifying what other distributions need to be present for the package's tests to run. When you run the ``test`` command, ``setuptools`` will attempt to obtain these (even going so far as to download them using ``EasyInstall``). Note that these required projects will *not* be installed on the system where the tests are run, but only downloaded to the project's setup directory if they're not already installed locally. .. _test_loader: ``test_loader`` If you would like to use a different way of finding tests to run than what setuptools normally uses, you can specify a module name and class name in this argument. The named class must be instantiable with no arguments, and its instances must support the ``loadTestsFromNames()`` method as defined in the Python ``unittest`` module's ``TestLoader`` class. Setuptools will pass only one test "name" in the `names` argument: the value supplied for the ``test_suite`` argument. The loader you specify may interpret this string in any way it likes, as there are no restrictions on what may be contained in a ``test_suite`` string. The module name and class name must be separated by a ``:``. The default value of this argument is ``"setuptools.command.test:ScanningLoader"``. If you want to use the default ``unittest`` behavior, you can specify ``"unittest:TestLoader"`` as your ``test_loader`` argument instead. This will prevent automatic scanning of submodules and subpackages. The module and class you specify here may be contained in another package, as long as you use the ``tests_require`` option to ensure that the package containing the loader class is available when the ``test`` command is run. ``eager_resources`` A list of strings naming resources that should be extracted together, if any of them is needed, or if any C extensions included in the project are imported. This argument is only useful if the project will be installed as a zipfile, and there is a need to have all of the listed resources be extracted to the filesystem *as a unit*. Resources listed here should be '/'-separated paths, relative to the source root, so to list a resource ``foo.png`` in package ``bar.baz``, you would include the string ``bar/baz/foo.png`` in this argument. If you only need to obtain resources one at a time, or you don't have any C extensions that access other files in the project (such as data files or shared libraries), you probably do NOT need this argument and shouldn't mess with it. For more details on how this argument works, see the section below on `Automatic Resource Extraction`_. ``use_2to3`` Convert the source code from Python 2 to Python 3 with 2to3 during the build process. See :doc:`python3` for more details. ``convert_2to3_doctests`` List of doctest source files that need to be converted with 2to3. See :doc:`python3` for more details. ``use_2to3_fixers`` A list of modules to search for additional fixers to be used during the 2to3 conversion. See :doc:`python3` for more details. Using ``find_packages()`` ------------------------- For simple projects, it's usually easy enough to manually add packages to the ``packages`` argument of ``setup()``. However, for very large projects (Twisted, PEAK, Zope, Chandler, etc.), it can be a big burden to keep the package list updated. That's what ``setuptools.find_packages()`` is for. ``find_packages()`` takes a source directory, and a list of package names or patterns to exclude. If omitted, the source directory defaults to the same directory as the setup script. Some projects use a ``src`` or ``lib`` directory as the root of their source tree, and those projects would of course use ``"src"`` or ``"lib"`` as the first argument to ``find_packages()``. (And such projects also need something like ``package_dir = {'':'src'}`` in their ``setup()`` arguments, but that's just a normal distutils thing.) Anyway, ``find_packages()`` walks the target directory, and finds Python packages by looking for ``__init__.py`` files. It then filters the list of packages using the exclusion patterns. Exclusion patterns are package names, optionally including wildcards. For example, ``find_packages(exclude=["*.tests"])`` will exclude all packages whose last name part is ``tests``. Or, ``find_packages(exclude=["*.tests", "*.tests.*"])`` will also exclude any subpackages of packages named ``tests``, but it still won't exclude a top-level ``tests`` package or the children thereof. In fact, if you really want no ``tests`` packages at all, you'll need something like this:: find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]) in order to cover all the bases. Really, the exclusion patterns are intended to cover simpler use cases than this, like excluding a single, specified package and its subpackages. Regardless of the target directory or exclusions, the ``find_packages()`` function returns a list of package names suitable for use as the ``packages`` argument to ``setup()``, and so is usually the easiest way to set that argument in your setup script. Especially since it frees you from having to remember to modify your setup script whenever your project grows additional top-level packages or subpackages. Automatic Script Creation ========================= Packaging and installing scripts can be a bit awkward with the distutils. For one thing, there's no easy way to have a script's filename match local conventions on both Windows and POSIX platforms. For another, you often have to create a separate file just for the "main" script, when your actual "main" is a function in a module somewhere. And even in Python 2.4, using the ``-m`` option only works for actual ``.py`` files that aren't installed in a package. ``setuptools`` fixes all of these problems by automatically generating scripts for you with the correct extension, and on Windows it will even create an ``.exe`` file so that users don't have to change their ``PATHEXT`` settings. The way to use this feature is to define "entry points" in your setup script that indicate what function the generated script should import and run. For example, to create two console scripts called ``foo`` and ``bar``, and a GUI script called ``baz``, you might do something like this:: setup( # other arguments here... entry_points = { 'console_scripts': [ 'foo = my_package.some_module:main_func', 'bar = other_module:some_func', ], 'gui_scripts': [ 'baz = my_package_gui.start_func', ] } ) When this project is installed on non-Windows platforms (using "setup.py install", "setup.py develop", or by using EasyInstall), a set of ``foo``, ``bar``, and ``baz`` scripts will be installed that import ``main_func`` and ``some_func`` from the specified modules. The functions you specify are called with no arguments, and their return value is passed to ``sys.exit()``, so you can return an errorlevel or message to print to stderr. On Windows, a set of ``foo.exe``, ``bar.exe``, and ``baz.exe`` launchers are created, alongside a set of ``foo.py``, ``bar.py``, and ``baz.pyw`` files. The ``.exe`` wrappers find and execute the right version of Python to run the ``.py`` or ``.pyw`` file. You may define as many "console script" and "gui script" entry points as you like, and each one can optionally specify "extras" that it depends on, that will be added to ``sys.path`` when the script is run. For more information on "extras", see the section below on `Declaring Extras`_. For more information on "entry points" in general, see the section below on `Dynamic Discovery of Services and Plugins`_. "Eggsecutable" Scripts ---------------------- Occasionally, there are situations where it's desirable to make an ``.egg`` file directly executable. You can do this by including an entry point such as the following:: setup( # other arguments here... entry_points = { 'setuptools.installation': [ 'eggsecutable = my_package.some_module:main_func', ] } ) Any eggs built from the above setup script will include a short excecutable prelude that imports and calls ``main_func()`` from ``my_package.some_module``. The prelude can be run on Unix-like platforms (including Mac and Linux) by invoking the egg with ``/bin/sh``, or by enabling execute permissions on the ``.egg`` file. For the executable prelude to run, the appropriate version of Python must be available via the ``PATH`` environment variable, under its "long" name. That is, if the egg is built for Python 2.3, there must be a ``python2.3`` executable present in a directory on ``PATH``. This feature is primarily intended to support ez_setup the installation of setuptools itself on non-Windows platforms, but may also be useful for other projects as well. IMPORTANT NOTE: Eggs with an "eggsecutable" header cannot be renamed, or invoked via symlinks. They *must* be invoked using their original filename, in order to ensure that, once running, ``pkg_resources`` will know what project and version is in use. The header script will check this and exit with an error if the ``.egg`` file has been renamed or is invoked via a symlink that changes its base name. Declaring Dependencies ====================== ``setuptools`` supports automatically installing dependencies when a package is installed, and including information about dependencies in Python Eggs (so that package management tools like EasyInstall can use the information). ``setuptools`` and ``pkg_resources`` use a common syntax for specifying a project's required dependencies. This syntax consists of a project's PyPI name, optionally followed by a comma-separated list of "extras" in square brackets, optionally followed by a comma-separated list of version specifiers. A version specifier is one of the operators ``<``, ``>``, ``<=``, ``>=``, ``==`` or ``!=``, followed by a version identifier. Tokens may be separated by whitespace, but any whitespace or nonstandard characters within a project name or version identifier must be replaced with ``-``. Version specifiers for a given project are internally sorted into ascending version order, and used to establish what ranges of versions are acceptable. Adjacent redundant conditions are also consolidated (e.g. ``">1, >2"`` becomes ``">1"``, and ``"<2,<3"`` becomes ``"<3"``). ``"!="`` versions are excised from the ranges they fall within. A project's version is then checked for membership in the resulting ranges. (Note that providing conflicting conditions for the same version (e.g. "<2,>=2" or "==2,!=2") is meaningless and may therefore produce bizarre results.) Here are some example requirement specifiers:: docutils >= 0.3 # comment lines and \ continuations are allowed in requirement strings BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \ ==1.6, ==1.7 # and so are line-end comments PEAK[FastCGI, reST]>=0.5a4 setuptools==0.5a7 The simplest way to include requirement specifiers is to use the ``install_requires`` argument to ``setup()``. It takes a string or list of strings containing requirement specifiers. If you include more than one requirement in a string, each requirement must begin on a new line. This has three effects: 1. When your project is installed, either by using EasyInstall, ``setup.py install``, or ``setup.py develop``, all of the dependencies not already installed will be located (via PyPI), downloaded, built (if necessary), and installed. 2. Any scripts in your project will be installed with wrappers that verify the availability of the specified dependencies at runtime, and ensure that the correct versions are added to ``sys.path`` (e.g. if multiple versions have been installed). 3. Python Egg distributions will include a metadata file listing the dependencies. Note, by the way, that if you declare your dependencies in ``setup.py``, you do *not* need to use the ``require()`` function in your scripts or modules, as long as you either install the project or use ``setup.py develop`` to do development work on it. (See `"Development Mode"`_ below for more details on using ``setup.py develop``.) Dependencies that aren't in PyPI -------------------------------- If your project depends on packages that aren't registered in PyPI, you may still be able to depend on them, as long as they are available for download as: - an egg, in the standard distutils ``sdist`` format, - a single ``.py`` file, or - a VCS repository (Subversion, Mercurial, or Git). You just need to add some URLs to the ``dependency_links`` argument to ``setup()``. The URLs must be either: 1. direct download URLs, 2. the URLs of web pages that contain direct download links, or 3. the repository's URL In general, it's better to link to web pages, because it is usually less complex to update a web page than to release a new version of your project. You can also use a SourceForge ``showfiles.php`` link in the case where a package you depend on is distributed via SourceForge. If you depend on a package that's distributed as a single ``.py`` file, you must include an ``"#egg=project-version"`` suffix to the URL, to give a project name and version number. (Be sure to escape any dashes in the name or version by replacing them with underscores.) EasyInstall will recognize this suffix and automatically create a trivial ``setup.py`` to wrap the single ``.py`` file as an egg. In the case of a VCS checkout, you should also append ``#egg=project-version`` in order to identify for what package that checkout should be used. You can append ``@REV`` to the URL's path (before the fragment) to specify a revision. Additionally, you can also force the VCS being used by prepending the URL with a certain prefix. Currently available are: - ``svn+URL`` for Subversion, - ``git+URL`` for Git, and - ``hg+URL`` for Mercurial A more complete example would be: ``vcs+proto://host/path@revision#egg=project-version`` Be careful with the version. It should match the one inside the project files. If you want to disregard the version, you have to omit it both in the ``requires`` and in the URL's fragment. This will do a checkout (or a clone, in Git and Mercurial parlance) to a temporary folder and run ``setup.py bdist_egg``. The ``dependency_links`` option takes the form of a list of URL strings. For example, the below will cause EasyInstall to search the specified page for eggs or source distributions, if the package's dependencies aren't already installed:: setup( ... dependency_links = [ "http://peak.telecommunity.com/snapshots/" ], ) .. _Declaring Extras: Declaring "Extras" (optional features with their own dependencies) ------------------------------------------------------------------ Sometimes a project has "recommended" dependencies, that are not required for all uses of the project. For example, a project might offer optional PDF output if ReportLab is installed, and reStructuredText support if docutils is installed. These optional features are called "extras", and setuptools allows you to define their requirements as well. In this way, other projects that require these optional features can force the additional requirements to be installed, by naming the desired extras in their ``install_requires``. For example, let's say that Project A offers optional PDF and reST support:: setup( name="Project-A", ... extras_require = { 'PDF': ["ReportLab>=1.2", "RXP"], 'reST': ["docutils>=0.3"], } ) As you can see, the ``extras_require`` argument takes a dictionary mapping names of "extra" features, to strings or lists of strings describing those features' requirements. These requirements will *not* be automatically installed unless another package depends on them (directly or indirectly) by including the desired "extras" in square brackets after the associated project name. (Or if the extras were listed in a requirement spec on the EasyInstall command line.) Extras can be used by a project's `entry points`_ to specify dynamic dependencies. For example, if Project A includes a "rst2pdf" script, it might declare it like this, so that the "PDF" requirements are only resolved if the "rst2pdf" script is run:: setup( name="Project-A", ... entry_points = { 'console_scripts': [ 'rst2pdf = project_a.tools.pdfgen [PDF]', 'rst2html = project_a.tools.htmlgen', # more script entry points ... ], } ) Projects can also use another project's extras when specifying dependencies. For example, if project B needs "project A" with PDF support installed, it might declare the dependency like this:: setup( name="Project-B", install_requires = ["Project-A[PDF]"], ... ) This will cause ReportLab to be installed along with project A, if project B is installed -- even if project A was already installed. In this way, a project can encapsulate groups of optional "downstream dependencies" under a feature name, so that packages that depend on it don't have to know what the downstream dependencies are. If a later version of Project A builds in PDF support and no longer needs ReportLab, or if it ends up needing other dependencies besides ReportLab in order to provide PDF support, Project B's setup information does not need to change, but the right packages will still be installed if needed. Note, by the way, that if a project ends up not needing any other packages to support a feature, it should keep an empty requirements list for that feature in its ``extras_require`` argument, so that packages depending on that feature don't break (due to an invalid feature name). For example, if Project A above builds in PDF support and no longer needs ReportLab, it could change its setup to this:: setup( name="Project-A", ... extras_require = { 'PDF': [], 'reST': ["docutils>=0.3"], } ) so that Package B doesn't have to remove the ``[PDF]`` from its requirement specifier. Including Data Files ==================== The distutils have traditionally allowed installation of "data files", which are placed in a platform-specific location. However, the most common use case for data files distributed with a package is for use *by* the package, usually by including the data files in the package directory. Setuptools offers three ways to specify data files to be included in your packages. First, you can simply use the ``include_package_data`` keyword, e.g.:: from setuptools import setup, find_packages setup( ... include_package_data = True ) This tells setuptools to install any data files it finds in your packages. The data files must be under CVS or Subversion control, or else they must be specified via the distutils' ``MANIFEST.in`` file. (They can also be tracked by another revision control system, using an appropriate plugin. See the section below on `Adding Support for Other Revision Control Systems`_ for information on how to write such plugins.) If the data files are not under version control, or are not in a supported version control system, or if you want finer-grained control over what files are included (for example, if you have documentation files in your package directories and want to exclude them from installation), then you can also use the ``package_data`` keyword, e.g.:: from setuptools import setup, find_packages setup( ... package_data = { # If any package contains *.txt or *.rst files, include them: '': ['*.txt', '*.rst'], # And include any *.msg files found in the 'hello' package, too: 'hello': ['*.msg'], } ) The ``package_data`` argument is a dictionary that maps from package names to lists of glob patterns. The globs may include subdirectory names, if the data files are contained in a subdirectory of the package. For example, if the package tree looks like this:: setup.py src/ mypkg/ __init__.py mypkg.txt data/ somefile.dat otherdata.dat The setuptools setup file might look like this:: from setuptools import setup, find_packages setup( ... packages = find_packages('src'), # include all packages under src package_dir = {'':'src'}, # tell distutils packages are under src package_data = { # If any package contains *.txt files, include them: '': ['*.txt'], # And include any *.dat files found in the 'data' subdirectory # of the 'mypkg' package, also: 'mypkg': ['data/*.dat'], } ) Notice that if you list patterns in ``package_data`` under the empty string, these patterns are used to find files in every package, even ones that also have their own patterns listed. Thus, in the above example, the ``mypkg.txt`` file gets included even though it's not listed in the patterns for ``mypkg``. Also notice that if you use paths, you *must* use a forward slash (``/``) as the path separator, even if you are on Windows. Setuptools automatically converts slashes to appropriate platform-specific separators at build time. (Note: although the ``package_data`` argument was previously only available in ``setuptools``, it was also added to the Python ``distutils`` package as of Python 2.4; there is `some documentation for the feature`__ available on the python.org website. If using the setuptools-specific ``include_package_data`` argument, files specified by ``package_data`` will *not* be automatically added to the manifest unless they are tracked by a supported version control system, or are listed in the MANIFEST.in file.) __ http://docs.python.org/dist/node11.html Sometimes, the ``include_package_data`` or ``package_data`` options alone aren't sufficient to precisely define what files you want included. For example, you may want to include package README files in your revision control system and source distributions, but exclude them from being installed. So, setuptools offers an ``exclude_package_data`` option as well, that allows you to do things like this:: from setuptools import setup, find_packages setup( ... packages = find_packages('src'), # include all packages under src package_dir = {'':'src'}, # tell distutils packages are under src include_package_data = True, # include everything in source control # ...but exclude README.txt from all packages exclude_package_data = { '': ['README.txt'] }, ) The ``exclude_package_data`` option is a dictionary mapping package names to lists of wildcard patterns, just like the ``package_data`` option. And, just as with that option, a key of ``''`` will apply the given pattern(s) to all packages. However, any files that match these patterns will be *excluded* from installation, even if they were listed in ``package_data`` or were included as a result of using ``include_package_data``. In summary, the three options allow you to: ``include_package_data`` Accept all data files and directories matched by ``MANIFEST.in`` or found in source control. ``package_data`` Specify additional patterns to match files and directories that may or may not be matched by ``MANIFEST.in`` or found in source control. ``exclude_package_data`` Specify patterns for data files and directories that should *not* be included when a package is installed, even if they would otherwise have been included due to the use of the preceding options. NOTE: Due to the way the distutils build process works, a data file that you include in your project and then stop including may be "orphaned" in your project's build directories, requiring you to run ``setup.py clean --all`` to fully remove them. This may also be important for your users and contributors if they track intermediate revisions of your project using Subversion; be sure to let them know when you make changes that remove files from inclusion so they can run ``setup.py clean --all``. Accessing Data Files at Runtime ------------------------------- Typically, existing programs manipulate a package's ``__file__`` attribute in order to find the location of data files. However, this manipulation isn't compatible with PEP 302-based import hooks, including importing from zip files and Python Eggs. It is strongly recommended that, if you are using data files, you should use the `Resource Management API`_ of ``pkg_resources`` to access them. The ``pkg_resources`` module is distributed as part of setuptools, so if you're using setuptools to distribute your package, there is no reason not to use its resource management API. See also `Accessing Package Resources`_ for a quick example of converting code that uses ``__file__`` to use ``pkg_resources`` instead. .. _Resource Management API: http://peak.telecommunity.com/DevCenter/PythonEggs#resource-management .. _Accessing Package Resources: http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources Non-Package Data Files ---------------------- The ``distutils`` normally install general "data files" to a platform-specific location (e.g. ``/usr/share``). This feature intended to be used for things like documentation, example configuration files, and the like. ``setuptools`` does not install these data files in a separate location, however. They are bundled inside the egg file or directory, alongside the Python modules and packages. The data files can also be accessed using the `Resource Management API`_, by specifying a ``Requirement`` instead of a package name:: from pkg_resources import Requirement, resource_filename filename = resource_filename(Requirement.parse("MyProject"),"sample.conf") The above code will obtain the filename of the "sample.conf" file in the data root of the "MyProject" distribution. Note, by the way, that this encapsulation of data files means that you can't actually install data files to some arbitrary location on a user's machine; this is a feature, not a bug. You can always include a script in your distribution that extracts and copies your the documentation or data files to a user-specified location, at their discretion. If you put related data files in a single directory, you can use ``resource_filename()`` with the directory name to get a filesystem directory that then can be copied with the ``shutil`` module. (Even if your package is installed as a zipfile, calling ``resource_filename()`` on a directory will return an actual filesystem directory, whose contents will be that entire subtree of your distribution.) (Of course, if you're writing a new package, you can just as easily place your data files or directories inside one of your packages, rather than using the distutils' approach. However, if you're updating an existing application, it may be simpler not to change the way it currently specifies these data files.) Automatic Resource Extraction ----------------------------- If you are using tools that expect your resources to be "real" files, or your project includes non-extension native libraries or other files that your C extensions expect to be able to access, you may need to list those files in the ``eager_resources`` argument to ``setup()``, so that the files will be extracted together, whenever a C extension in the project is imported. This is especially important if your project includes shared libraries *other* than distutils-built C extensions, and those shared libraries use file extensions other than ``.dll``, ``.so``, or ``.dylib``, which are the extensions that setuptools 0.6a8 and higher automatically detects as shared libraries and adds to the ``native_libs.txt`` file for you. Any shared libraries whose names do not end with one of those extensions should be listed as ``eager_resources``, because they need to be present in the filesystem when he C extensions that link to them are used. The ``pkg_resources`` runtime for compressed packages will automatically extract *all* C extensions and ``eager_resources`` at the same time, whenever *any* C extension or eager resource is requested via the ``resource_filename()`` API. (C extensions are imported using ``resource_filename()`` internally.) This ensures that C extensions will see all of the "real" files that they expect to see. Note also that you can list directory resource names in ``eager_resources`` as well, in which case the directory's contents (including subdirectories) will be extracted whenever any C extension or eager resource is requested. Please note that if you're not sure whether you need to use this argument, you don't! It's really intended to support projects with lots of non-Python dependencies and as a last resort for crufty projects that can't otherwise handle being compressed. If your package is pure Python, Python plus data files, or Python plus C, you really don't need this. You've got to be using either C or an external program that needs "real" files in your project before there's any possibility of ``eager_resources`` being relevant to your project. Extensible Applications and Frameworks ====================================== .. _Entry Points: Dynamic Discovery of Services and Plugins ----------------------------------------- ``setuptools`` supports creating libraries that "plug in" to extensible applications and frameworks, by letting you register "entry points" in your project that can be imported by the application or framework. For example, suppose that a blogging tool wants to support plugins that provide translation for various file types to the blog's output format. The framework might define an "entry point group" called ``blogtool.parsers``, and then allow plugins to register entry points for the file extensions they support. This would allow people to create distributions that contain one or more parsers for different file types, and then the blogging tool would be able to find the parsers at runtime by looking up an entry point for the file extension (or mime type, or however it wants to). Note that if the blogging tool includes parsers for certain file formats, it can register these as entry points in its own setup script, which means it doesn't have to special-case its built-in formats. They can just be treated the same as any other plugin's entry points would be. If you're creating a project that plugs in to an existing application or framework, you'll need to know what entry points or entry point groups are defined by that application or framework. Then, you can register entry points in your setup script. Here are a few examples of ways you might register an ``.rst`` file parser entry point in the ``blogtool.parsers`` entry point group, for our hypothetical blogging tool:: setup( # ... entry_points = {'blogtool.parsers': '.rst = some_module:SomeClass'} ) setup( # ... entry_points = {'blogtool.parsers': ['.rst = some_module:a_func']} ) setup( # ... entry_points = """ [blogtool.parsers] .rst = some.nested.module:SomeClass.some_classmethod [reST] """, extras_require = dict(reST = "Docutils>=0.3.5") ) The ``entry_points`` argument to ``setup()`` accepts either a string with ``.ini``-style sections, or a dictionary mapping entry point group names to either strings or lists of strings containing entry point specifiers. An entry point specifier consists of a name and value, separated by an ``=`` sign. The value consists of a dotted module name, optionally followed by a ``:`` and a dotted identifier naming an object within the module. It can also include a bracketed list of "extras" that are required for the entry point to be used. When the invoking application or framework requests loading of an entry point, any requirements implied by the associated extras will be passed to ``pkg_resources.require()``, so that an appropriate error message can be displayed if the needed package(s) are missing. (Of course, the invoking app or framework can ignore such errors if it wants to make an entry point optional if a requirement isn't installed.) Defining Additional Metadata ---------------------------- Some extensible applications and frameworks may need to define their own kinds of metadata to include in eggs, which they can then access using the ``pkg_resources`` metadata APIs. Ordinarily, this is done by having plugin developers include additional files in their ``ProjectName.egg-info`` directory. However, since it can be tedious to create such files by hand, you may want to create a distutils extension that will create the necessary files from arguments to ``setup()``, in much the same way that ``setuptools`` does for many of the ``setup()`` arguments it adds. See the section below on `Creating distutils Extensions`_ for more details, especially the subsection on `Adding new EGG-INFO Files`_. "Development Mode" ================== Under normal circumstances, the ``distutils`` assume that you are going to build a distribution of your project, not use it in its "raw" or "unbuilt" form. If you were to use the ``distutils`` that way, you would have to rebuild and reinstall your project every time you made a change to it during development. Another problem that sometimes comes up with the ``distutils`` is that you may need to do development on two related projects at the same time. You may need to put both projects' packages in the same directory to run them, but need to keep them separate for revision control purposes. How can you do this? Setuptools allows you to deploy your projects for use in a common directory or staging area, but without copying any files. Thus, you can edit each project's code in its checkout directory, and only need to run build commands when you change a project's C extensions or similarly compiled files. You can even deploy a project into another project's checkout directory, if that's your preferred way of working (as opposed to using a common independent staging area or the site-packages directory). To do this, use the ``setup.py develop`` command. It works very similarly to ``setup.py install`` or the EasyInstall tool, except that it doesn't actually install anything. Instead, it creates a special ``.egg-link`` file in the deployment directory, that links to your project's source code. And, if your deployment directory is Python's ``site-packages`` directory, it will also update the ``easy-install.pth`` file to include your project's source code, thereby making it available on ``sys.path`` for all programs using that Python installation. If you have enabled the ``use_2to3`` flag, then of course the ``.egg-link`` will not link directly to your source code when run under Python 3, since that source code would be made for Python 2 and not work under Python 3. Instead the ``setup.py develop`` will build Python 3 code under the ``build`` directory, and link there. This means that after doing code changes you will have to run ``setup.py build`` before these changes are picked up by your Python 3 installation. In addition, the ``develop`` command creates wrapper scripts in the target script directory that will run your in-development scripts after ensuring that all your ``install_requires`` packages are available on ``sys.path``. You can deploy the same project to multiple staging areas, e.g. if you have multiple projects on the same machine that are sharing the same project you're doing development work. When you're done with a given development task, you can remove the project source from a staging area using ``setup.py develop --uninstall``, specifying the desired staging area if it's not the default. There are several options to control the precise behavior of the ``develop`` command; see the section on the `develop`_ command below for more details. Note that you can also apply setuptools commands to non-setuptools projects, using commands like this:: python -c "import setuptools; execfile('setup.py')" develop That is, you can simply list the normal setup commands and options following the quoted part. Distributing a ``setuptools``-based project =========================================== Using ``setuptools``... Without bundling it! --------------------------------------------- Your users might not have ``setuptools`` installed on their machines, or even if they do, it might not be the right version. Fixing this is easy; just download `ez_setup.py`_, and put it in the same directory as your ``setup.py`` script. (Be sure to add it to your revision control system, too.) Then add these two lines to the very top of your setup script, before the script imports anything from setuptools: .. code-block:: python import ez_setup ez_setup.use_setuptools() That's it. The ``ez_setup`` module will automatically download a matching version of ``setuptools`` from PyPI, if it isn't present on the target system. Whenever you install an updated version of setuptools, you should also update your projects' ``ez_setup.py`` files, so that a matching version gets installed on the target machine(s). By the way, setuptools supports the new PyPI "upload" command, so you can use ``setup.py sdist upload`` or ``setup.py bdist_egg upload`` to upload your source or egg distributions respectively. Your project's current version must be registered with PyPI first, of course; you can use ``setup.py register`` to do that. Or you can do it all in one step, e.g. ``setup.py register sdist bdist_egg upload`` will register the package, build source and egg distributions, and then upload them both to PyPI, where they'll be easily found by other projects that depend on them. (By the way, if you need to distribute a specific version of ``setuptools``, you can specify the exact version and base download URL as parameters to the ``use_setuptools()`` function. See the function's docstring for details.) What Your Users Should Know --------------------------- In general, a setuptools-based project looks just like any distutils-based project -- as long as your users have an internet connection and are installing to ``site-packages``, that is. But for some users, these conditions don't apply, and they may become frustrated if this is their first encounter with a setuptools-based project. To keep these users happy, you should review the following topics in your project's installation instructions, if they are relevant to your project and your target audience isn't already familiar with setuptools and ``easy_install``. Network Access If your project is using ``ez_setup``, you should inform users of the need to either have network access, or to preinstall the correct version of setuptools using the `EasyInstall installation instructions`_. Those instructions also have tips for dealing with firewalls as well as how to manually download and install setuptools. Custom Installation Locations You should inform your users that if they are installing your project to somewhere other than the main ``site-packages`` directory, they should first install setuptools using the instructions for `Custom Installation Locations`_, before installing your project. Your Project's Dependencies If your project depends on other projects that may need to be downloaded from PyPI or elsewhere, you should list them in your installation instructions, or tell users how to find out what they are. While most users will not need this information, any users who don't have unrestricted internet access may have to find, download, and install the other projects manually. (Note, however, that they must still install those projects using ``easy_install``, or your project will not know they are installed, and your setup script will try to download them again.) If you want to be especially friendly to users with limited network access, you may wish to build eggs for your project and its dependencies, making them all available for download from your site, or at least create a page with links to all of the needed eggs. In this way, users with limited network access can manually download all the eggs to a single directory, then use the ``-f`` option of ``easy_install`` to specify the directory to find eggs in. Users who have full network access can just use ``-f`` with the URL of your download page, and ``easy_install`` will find all the needed eggs using your links directly. This is also useful when your target audience isn't able to compile packages (e.g. most Windows users) and your package or some of its dependencies include C code. Subversion or CVS Users and Co-Developers Users and co-developers who are tracking your in-development code using CVS, Subversion, or some other revision control system should probably read this manual's sections regarding such development. Alternately, you may wish to create a quick-reference guide containing the tips from this manual that apply to your particular situation. For example, if you recommend that people use ``setup.py develop`` when tracking your in-development code, you should let them know that this needs to be run after every update or commit. Similarly, if you remove modules or data files from your project, you should remind them to run ``setup.py clean --all`` and delete any obsolete ``.pyc`` or ``.pyo``. (This tip applies to the distutils in general, not just setuptools, but not everybody knows about them; be kind to your users by spelling out your project's best practices rather than leaving them guessing.) Creating System Packages Some users want to manage all Python packages using a single package manager, and sometimes that package manager isn't ``easy_install``! Setuptools currently supports ``bdist_rpm``, ``bdist_wininst``, and ``bdist_dumb`` formats for system packaging. If a user has a locally- installed "bdist" packaging tool that internally uses the distutils ``install`` command, it should be able to work with ``setuptools``. Some examples of "bdist" formats that this should work with include the ``bdist_nsi`` and ``bdist_msi`` formats for Windows. However, packaging tools that build binary distributions by running ``setup.py install`` on the command line or as a subprocess will require modification to work with setuptools. They should use the ``--single-version-externally-managed`` option to the ``install`` command, combined with the standard ``--root`` or ``--record`` options. See the `install command`_ documentation below for more details. The ``bdist_deb`` command is an example of a command that currently requires this kind of patching to work with setuptools. If you or your users have a problem building a usable system package for your project, please report the problem via the mailing list so that either the "bdist" tool in question or setuptools can be modified to resolve the issue. Setting the ``zip_safe`` flag ----------------------------- For maximum performance, Python packages are best installed as zip files. Not all packages, however, are capable of running in compressed form, because they may expect to be able to access either source code or data files as normal operating system files. So, ``setuptools`` can install your project as a zipfile or a directory, and its default choice is determined by the project's ``zip_safe`` flag. You can pass a True or False value for the ``zip_safe`` argument to the ``setup()`` function, or you can omit it. If you omit it, the ``bdist_egg`` command will analyze your project's contents to see if it can detect any conditions that would prevent it from working in a zipfile. It will output notices to the console about any such conditions that it finds. Currently, this analysis is extremely conservative: it will consider the project unsafe if it contains any C extensions or datafiles whatsoever. This does *not* mean that the project can't or won't work as a zipfile! It just means that the ``bdist_egg`` authors aren't yet comfortable asserting that the project *will* work. If the project contains no C or data files, and does no ``__file__`` or ``__path__`` introspection or source code manipulation, then there is an extremely solid chance the project will work when installed as a zipfile. (And if the project uses ``pkg_resources`` for all its data file access, then C extensions and other data files shouldn't be a problem at all. See the `Accessing Data Files at Runtime`_ section above for more information.) However, if ``bdist_egg`` can't be *sure* that your package will work, but you've checked over all the warnings it issued, and you are either satisfied it *will* work (or if you want to try it for yourself), then you should set ``zip_safe`` to ``True`` in your ``setup()`` call. If it turns out that it doesn't work, you can always change it to ``False``, which will force ``setuptools`` to install your project as a directory rather than as a zipfile. Of course, the end-user can still override either decision, if they are using EasyInstall to install your package. And, if you want to override for testing purposes, you can just run ``setup.py easy_install --zip-ok .`` or ``setup.py easy_install --always-unzip .`` in your project directory. to install the package as a zipfile or directory, respectively. In the future, as we gain more experience with different packages and become more satisfied with the robustness of the ``pkg_resources`` runtime, the "zip safety" analysis may become less conservative. However, we strongly recommend that you determine for yourself whether your project functions correctly when installed as a zipfile, correct any problems if you can, and then make an explicit declaration of ``True`` or ``False`` for the ``zip_safe`` flag, so that it will not be necessary for ``bdist_egg`` or ``EasyInstall`` to try to guess whether your project can work as a zipfile. Namespace Packages ------------------ Sometimes, a large package is more useful if distributed as a collection of smaller eggs. However, Python does not normally allow the contents of a package to be retrieved from more than one location. "Namespace packages" are a solution for this problem. When you declare a package to be a namespace package, it means that the package has no meaningful contents in its ``__init__.py``, and that it is merely a container for modules and subpackages. The ``pkg_resources`` runtime will then automatically ensure that the contents of namespace packages that are spread over multiple eggs or directories are combined into a single "virtual" package. The ``namespace_packages`` argument to ``setup()`` lets you declare your project's namespace packages, so that they will be included in your project's metadata. The argument should list the namespace packages that the egg participates in. For example, the ZopeInterface project might do this:: setup( # ... namespace_packages = ['zope'] ) because it contains a ``zope.interface`` package that lives in the ``zope`` namespace package. Similarly, a project for a standalone ``zope.publisher`` would also declare the ``zope`` namespace package. When these projects are installed and used, Python will see them both as part of a "virtual" ``zope`` package, even though they will be installed in different locations. Namespace packages don't have to be top-level packages. For example, Zope 3's ``zope.app`` package is a namespace package, and in the future PEAK's ``peak.util`` package will be too. Note, by the way, that your project's source tree must include the namespace packages' ``__init__.py`` files (and the ``__init__.py`` of any parent packages), in a normal Python package layout. These ``__init__.py`` files *must* contain the line:: __import__('pkg_resources').declare_namespace(__name__) This code ensures that the namespace package machinery is operating and that the current package is registered as a namespace package. You must NOT include any other code and data in a namespace package's ``__init__.py``. Even though it may appear to work during development, or when projects are installed as ``.egg`` files, it will not work when the projects are installed using "system" packaging tools -- in such cases the ``__init__.py`` files will not be installed, let alone executed. You must include the ``declare_namespace()`` line in the ``__init__.py`` of *every* project that has contents for the namespace package in question, in order to ensure that the namespace will be declared regardless of which project's copy of ``__init__.py`` is loaded first. If the first loaded ``__init__.py`` doesn't declare it, it will never *be* declared, because no other copies will ever be loaded!) TRANSITIONAL NOTE ~~~~~~~~~~~~~~~~~ Setuptools automatically calls ``declare_namespace()`` for you at runtime, but future versions may *not*. This is because the automatic declaration feature has some negative side effects, such as needing to import all namespace packages during the initialization of the ``pkg_resources`` runtime, and also the need for ``pkg_resources`` to be explicitly imported before any namespace packages work at all. In some future releases, you'll be responsible for including your own declaration lines, and the automatic declaration feature will be dropped to get rid of the negative side effects. During the remainder of the current development cycle, therefore, setuptools will warn you about missing ``declare_namespace()`` calls in your ``__init__.py`` files, and you should correct these as soon as possible before the compatibility support is removed. Namespace packages without declaration lines will not work correctly once a user has upgraded to a later version, so it's important that you make this change now in order to avoid having your code break in the field. Our apologies for the inconvenience, and thank you for your patience. Tagging and "Daily Build" or "Snapshot" Releases ------------------------------------------------ When a set of related projects are under development, it may be important to track finer-grained version increments than you would normally use for e.g. "stable" releases. While stable releases might be measured in dotted numbers with alpha/beta/etc. status codes, development versions of a project often need to be tracked by revision or build number or even build date. This is especially true when projects in development need to refer to one another, and therefore may literally need an up-to-the-minute version of something! To support these scenarios, ``setuptools`` allows you to "tag" your source and egg distributions by adding one or more of the following to the project's "official" version identifier: * A manually-specified pre-release tag, such as "build" or "dev", or a manually-specified post-release tag, such as a build or revision number (``--tag-build=STRING, -bSTRING``) * A "last-modified revision number" string generated automatically from Subversion's metadata (assuming your project is being built from a Subversion "working copy") (``--tag-svn-revision, -r``) * An 8-character representation of the build date (``--tag-date, -d``), as a postrelease tag You can add these tags by adding ``egg_info`` and the desired options to the command line ahead of the ``sdist`` or ``bdist`` commands that you want to generate a daily build or snapshot for. See the section below on the `egg_info`_ command for more details. (Also, before you release your project, be sure to see the section above on `Specifying Your Project's Version`_ for more information about how pre- and post-release tags affect how setuptools and EasyInstall interpret version numbers. This is important in order to make sure that dependency processing tools will know which versions of your project are newer than others.) Finally, if you are creating builds frequently, and either building them in a downloadable location or are copying them to a distribution server, you should probably also check out the `rotate`_ command, which lets you automatically delete all but the N most-recently-modified distributions matching a glob pattern. So, you can use a command line like:: setup.py egg_info -rbDEV bdist_egg rotate -m.egg -k3 to build an egg whose version info includes 'DEV-rNNNN' (where NNNN is the most recent Subversion revision that affected the source tree), and then delete any egg files from the distribution directory except for the three that were built most recently. If you have to manage automated builds for multiple packages, each with different tagging and rotation policies, you may also want to check out the `alias`_ command, which would let each package define an alias like ``daily`` that would perform the necessary tag, build, and rotate commands. Then, a simpler script or cron job could just run ``setup.py daily`` in each project directory. (And, you could also define sitewide or per-user default versions of the ``daily`` alias, so that projects that didn't define their own would use the appropriate defaults.) Generating Source Distributions ------------------------------- ``setuptools`` enhances the distutils' default algorithm for source file selection, so that all files managed by CVS or Subversion in your project tree are included in any source distribution you build. This is a big improvement over having to manually write a ``MANIFEST.in`` file and try to keep it in sync with your project. So, if you are using CVS or Subversion, and your source distributions only need to include files that you're tracking in revision control, don't create a a ``MANIFEST.in`` file for your project. (And, if you already have one, you might consider deleting it the next time you would otherwise have to change it.) (NOTE: other revision control systems besides CVS and Subversion can be supported using plugins; see the section below on `Adding Support for Other Revision Control Systems`_ for information on how to write such plugins.) If you need to include automatically generated files, or files that are kept in an unsupported revision control system, you'll need to create a ``MANIFEST.in`` file to specify any files that the default file location algorithm doesn't catch. See the distutils documentation for more information on the format of the ``MANIFEST.in`` file. But, be sure to ignore any part of the distutils documentation that deals with ``MANIFEST`` or how it's generated from ``MANIFEST.in``; setuptools shields you from these issues and doesn't work the same way in any case. Unlike the distutils, setuptools regenerates the source distribution manifest file every time you build a source distribution, and it builds it inside the project's ``.egg-info`` directory, out of the way of your main project directory. You therefore need not worry about whether it is up-to-date or not. Indeed, because setuptools' approach to determining the contents of a source distribution is so much simpler, its ``sdist`` command omits nearly all of the options that the distutils' more complex ``sdist`` process requires. For all practical purposes, you'll probably use only the ``--formats`` option, if you use any option at all. (By the way, if you're using some other revision control system, you might consider creating and publishing a `revision control plugin for setuptools`_.) .. _revision control plugin for setuptools: `Adding Support for Other Revision Control Systems`_ Making your package available for EasyInstall --------------------------------------------- If you use the ``register`` command (``setup.py register``) to register your package with PyPI, that's most of the battle right there. (See the `docs for the register command`_ for more details.) .. _docs for the register command: http://docs.python.org/dist/package-index.html If you also use the `upload`_ command to upload actual distributions of your package, that's even better, because EasyInstall will be able to find and download them directly from your project's PyPI page. However, there may be reasons why you don't want to upload distributions to PyPI, and just want your existing distributions (or perhaps a Subversion checkout) to be used instead. So here's what you need to do before running the ``register`` command. There are three ``setup()`` arguments that affect EasyInstall: ``url`` and ``download_url`` These become links on your project's PyPI page. EasyInstall will examine them to see if they link to a package ("primary links"), or whether they are HTML pages. If they're HTML pages, EasyInstall scans all HREF's on the page for primary links ``long_description`` EasyInstall will check any URLs contained in this argument to see if they are primary links. A URL is considered a "primary link" if it is a link to a .tar.gz, .tgz, .zip, .egg, .egg.zip, .tar.bz2, or .exe file, or if it has an ``#egg=project`` or ``#egg=project-version`` fragment identifier attached to it. EasyInstall attempts to determine a project name and optional version number from the text of a primary link *without* downloading it. When it has found all the primary links, EasyInstall will select the best match based on requested version, platform compatibility, and other criteria. So, if your ``url`` or ``download_url`` point either directly to a downloadable source distribution, or to HTML page(s) that have direct links to such, then EasyInstall will be able to locate downloads automatically. If you want to make Subversion checkouts available, then you should create links with either ``#egg=project`` or ``#egg=project-version`` added to the URL. You should replace ``project`` and ``version`` with the values they would have in an egg filename. (Be sure to actually generate an egg and then use the initial part of the filename, rather than trying to guess what the escaped form of the project name and version number will be.) Note that Subversion checkout links are of lower precedence than other kinds of distributions, so EasyInstall will not select a Subversion checkout for downloading unless it has a version included in the ``#egg=`` suffix, and it's a higher version than EasyInstall has seen in any other links for your project. As a result, it's a common practice to use mark checkout URLs with a version of "dev" (i.e., ``#egg=projectname-dev``), so that users can do something like this:: easy_install --editable projectname==dev in order to check out the in-development version of ``projectname``. Managing "Continuous Releases" Using Subversion ----------------------------------------------- If you expect your users to track in-development versions of your project via Subversion, there are a few additional steps you should take to ensure that things work smoothly with EasyInstall. First, you should add the following to your project's ``setup.cfg`` file: .. code-block:: ini [egg_info] tag_build = .dev tag_svn_revision = 1 This will tell ``setuptools`` to generate package version numbers like ``1.0a1.dev-r1263``, which will be considered to be an *older* release than ``1.0a1``. Thus, when you actually release ``1.0a1``, the entire egg infrastructure (including ``setuptools``, ``pkg_resources`` and EasyInstall) will know that ``1.0a1`` supersedes any interim snapshots from Subversion, and handle upgrades accordingly. (Note: the project version number you specify in ``setup.py`` should always be the *next* version of your software, not the last released version. Alternately, you can leave out the ``tag_build=.dev``, and always use the *last* release as a version number, so that your post-1.0 builds are labelled ``1.0-r1263``, indicating a post-1.0 patchlevel. Most projects so far, however, seem to prefer to think of their project as being a future version still under development, rather than a past version being patched. It is of course possible for a single project to have both situations, using post-release numbering on release branches, and pre-release numbering on the trunk. But you don't have to make things this complex if you don't want to.) Commonly, projects releasing code from Subversion will include a PyPI link to their checkout URL (as described in the previous section) with an ``#egg=projectname-dev`` suffix. This allows users to request EasyInstall to download ``projectname==dev`` in order to get the latest in-development code. Note that if your project depends on such in-progress code, you may wish to specify your ``install_requires`` (or other requirements) to include ``==dev``, e.g.: .. code-block:: python install_requires = ["OtherProject>=0.2a1.dev-r143,==dev"] The above example says, "I really want at least this particular development revision number, but feel free to follow and use an ``#egg=OtherProject-dev`` link if you find one". This avoids the need to have actual source or binary distribution snapshots of in-development code available, just to be able to depend on the latest and greatest a project has to offer. A final note for Subversion development: if you are using SVN revision tags as described in this section, it's a good idea to run ``setup.py develop`` after each Subversion checkin or update, because your project's version number will be changing, and your script wrappers need to be updated accordingly. Also, if the project's requirements have changed, the ``develop`` command will take care of fetching the updated dependencies, building changed extensions, etc. Be sure to also remind any of your users who check out your project from Subversion that they need to run ``setup.py develop`` after every update in order to keep their checkout completely in sync. Making "Official" (Non-Snapshot) Releases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When you make an official release, creating source or binary distributions, you will need to override the tag settings from ``setup.cfg``, so that you don't end up registering versions like ``foobar-0.7a1.dev-r34832``. This is easy to do if you are developing on the trunk and using tags or branches for your releases - just make the change to ``setup.cfg`` after branching or tagging the release, so the trunk will still produce development snapshots. Alternately, if you are not branching for releases, you can override the default version options on the command line, using something like:: python setup.py egg_info -RDb "" sdist bdist_egg register upload The first part of this command (``egg_info -RDb ""``) will override the configured tag information, before creating source and binary eggs, registering the project with PyPI, and uploading the files. Thus, these commands will use the plain version from your ``setup.py``, without adding the Subversion revision number or build designation string. Of course, if you will be doing this a lot, you may wish to create a personal alias for this operation, e.g.:: python setup.py alias -u release egg_info -RDb "" You can then use it like this:: python setup.py release sdist bdist_egg register upload Or of course you can create more elaborate aliases that do all of the above. See the sections below on the `egg_info`_ and `alias`_ commands for more ideas. Distributing Extensions compiled with Pyrex ------------------------------------------- ``setuptools`` includes transparent support for building Pyrex extensions, as long as you define your extensions using ``setuptools.Extension``, *not* ``distutils.Extension``. You must also not import anything from Pyrex in your setup script. If you follow these rules, you can safely list ``.pyx`` files as the source of your ``Extension`` objects in the setup script. ``setuptools`` will detect at build time whether Pyrex is installed or not. If it is, then ``setuptools`` will use it. If not, then ``setuptools`` will silently change the ``Extension`` objects to refer to the ``.c`` counterparts of the ``.pyx`` files, so that the normal distutils C compilation process will occur. Of course, for this to work, your source distributions must include the C code generated by Pyrex, as well as your original ``.pyx`` files. This means that you will probably want to include current ``.c`` files in your revision control system, rebuilding them whenever you check changes in for the ``.pyx`` source files. This will ensure that people tracking your project in CVS or Subversion will be able to build it even if they don't have Pyrex installed, and that your source releases will be similarly usable with or without Pyrex. ----------------- Command Reference ----------------- .. _alias: ``alias`` - Define shortcuts for commonly used commands ======================================================= Sometimes, you need to use the same commands over and over, but you can't necessarily set them as defaults. For example, if you produce both development snapshot releases and "stable" releases of a project, you may want to put the distributions in different places, or use different ``egg_info`` tagging options, etc. In these cases, it doesn't make sense to set the options in a distutils configuration file, because the values of the options changed based on what you're trying to do. Setuptools therefore allows you to define "aliases" - shortcut names for an arbitrary string of commands and options, using ``setup.py alias aliasname expansion``, where aliasname is the name of the new alias, and the remainder of the command line supplies its expansion. For example, this command defines a sitewide alias called "daily", that sets various ``egg_info`` tagging options:: setup.py alias --global-config daily egg_info --tag-svn-revision \ --tag-build=development Once the alias is defined, it can then be used with other setup commands, e.g.:: setup.py daily bdist_egg # generate a daily-build .egg file setup.py daily sdist # generate a daily-build source distro setup.py daily sdist bdist_egg # generate both The above commands are interpreted as if the word ``daily`` were replaced with ``egg_info --tag-svn-revision --tag-build=development``. Note that setuptools will expand each alias *at most once* in a given command line. This serves two purposes. First, if you accidentally create an alias loop, it will have no effect; you'll instead get an error message about an unknown command. Second, it allows you to define an alias for a command, that uses that command. For example, this (project-local) alias:: setup.py alias bdist_egg bdist_egg rotate -k1 -m.egg redefines the ``bdist_egg`` command so that it always runs the ``rotate`` command afterwards to delete all but the newest egg file. It doesn't loop indefinitely on ``bdist_egg`` because the alias is only expanded once when used. You can remove a defined alias with the ``--remove`` (or ``-r``) option, e.g.:: setup.py alias --global-config --remove daily would delete the "daily" alias we defined above. Aliases can be defined on a project-specific, per-user, or sitewide basis. The default is to define or remove a project-specific alias, but you can use any of the `configuration file options`_ (listed under the `saveopts`_ command, below) to determine which distutils configuration file an aliases will be added to (or removed from). Note that if you omit the "expansion" argument to the ``alias`` command, you'll get output showing that alias' current definition (and what configuration file it's defined in). If you omit the alias name as well, you'll get a listing of all current aliases along with their configuration file locations. ``bdist_egg`` - Create a Python Egg for the project =================================================== This command generates a Python Egg (``.egg`` file) for the project. Python Eggs are the preferred binary distribution format for EasyInstall, because they are cross-platform (for "pure" packages), directly importable, and contain project metadata including scripts and information about the project's dependencies. They can be simply downloaded and added to ``sys.path`` directly, or they can be placed in a directory on ``sys.path`` and then automatically discovered by the egg runtime system. This command runs the `egg_info`_ command (if it hasn't already run) to update the project's metadata (``.egg-info``) directory. If you have added any extra metadata files to the ``.egg-info`` directory, those files will be included in the new egg file's metadata directory, for use by the egg runtime system or by any applications or frameworks that use that metadata. You won't usually need to specify any special options for this command; just use ``bdist_egg`` and you're done. But there are a few options that may be occasionally useful: ``--dist-dir=DIR, -d DIR`` Set the directory where the ``.egg`` file will be placed. If you don't supply this, then the ``--dist-dir`` setting of the ``bdist`` command will be used, which is usually a directory named ``dist`` in the project directory. ``--plat-name=PLATFORM, -p PLATFORM`` Set the platform name string that will be embedded in the egg's filename (assuming the egg contains C extensions). This can be used to override the distutils default platform name with something more meaningful. Keep in mind, however, that the egg runtime system expects to see eggs with distutils platform names, so it may ignore or reject eggs with non-standard platform names. Similarly, the EasyInstall program may ignore them when searching web pages for download links. However, if you are cross-compiling or doing some other unusual things, you might find a use for this option. ``--exclude-source-files`` Don't include any modules' ``.py`` files in the egg, just compiled Python, C, and data files. (Note that this doesn't affect any ``.py`` files in the EGG-INFO directory or its subdirectories, since for example there may be scripts with a ``.py`` extension which must still be retained.) We don't recommend that you use this option except for packages that are being bundled for proprietary end-user applications, or for "embedded" scenarios where space is at an absolute premium. On the other hand, if your package is going to be installed and used in compressed form, you might as well exclude the source because Python's ``traceback`` module doesn't currently understand how to display zipped source code anyway, or how to deal with files that are in a different place from where their code was compiled. There are also some options you will probably never need, but which are there because they were copied from similar ``bdist`` commands used as an example for creating this one. They may be useful for testing and debugging, however, which is why we kept them: ``--keep-temp, -k`` Keep the contents of the ``--bdist-dir`` tree around after creating the ``.egg`` file. ``--bdist-dir=DIR, -b DIR`` Set the temporary directory for creating the distribution. The entire contents of this directory are zipped to create the ``.egg`` file, after running various installation commands to copy the package's modules, data, and extensions here. ``--skip-build`` Skip doing any "build" commands; just go straight to the install-and-compress phases. .. _develop: ``develop`` - Deploy the project source in "Development Mode" ============================================================= This command allows you to deploy your project's source for use in one or more "staging areas" where it will be available for importing. This deployment is done in such a way that changes to the project source are immediately available in the staging area(s), without needing to run a build or install step after each change. The ``develop`` command works by creating an ``.egg-link`` file (named for the project) in the given staging area. If the staging area is Python's ``site-packages`` directory, it also updates an ``easy-install.pth`` file so that the project is on ``sys.path`` by default for all programs run using that Python installation. The ``develop`` command also installs wrapper scripts in the staging area (or a separate directory, as specified) that will ensure the project's dependencies are available on ``sys.path`` before running the project's source scripts. And, it ensures that any missing project dependencies are available in the staging area, by downloading and installing them if necessary. Last, but not least, the ``develop`` command invokes the ``build_ext -i`` command to ensure any C extensions in the project have been built and are up-to-date, and the ``egg_info`` command to ensure the project's metadata is updated (so that the runtime and wrappers know what the project's dependencies are). If you make any changes to the project's setup script or C extensions, you should rerun the ``develop`` command against all relevant staging areas to keep the project's scripts, metadata and extensions up-to-date. Most other kinds of changes to your project should not require any build operations or rerunning ``develop``, but keep in mind that even minor changes to the setup script (e.g. changing an entry point definition) require you to re-run the ``develop`` or ``test`` commands to keep the distribution updated. Here are some of the options that the ``develop`` command accepts. Note that they affect the project's dependencies as well as the project itself, so if you have dependencies that need to be installed and you use ``--exclude-scripts`` (for example), the dependencies' scripts will not be installed either! For this reason, you may want to use EasyInstall to install the project's dependencies before using the ``develop`` command, if you need finer control over the installation options for dependencies. ``--uninstall, -u`` Un-deploy the current project. You may use the ``--install-dir`` or ``-d`` option to designate the staging area. The created ``.egg-link`` file will be removed, if present and it is still pointing to the project directory. The project directory will be removed from ``easy-install.pth`` if the staging area is Python's ``site-packages`` directory. Note that this option currently does *not* uninstall script wrappers! You must uninstall them yourself, or overwrite them by using EasyInstall to activate a different version of the package. You can also avoid installing script wrappers in the first place, if you use the ``--exclude-scripts`` (aka ``-x``) option when you run ``develop`` to deploy the project. ``--multi-version, -m`` "Multi-version" mode. Specifying this option prevents ``develop`` from adding an ``easy-install.pth`` entry for the project(s) being deployed, and if an entry for any version of a project already exists, the entry will be removed upon successful deployment. In multi-version mode, no specific version of the package is available for importing, unless you use ``pkg_resources.require()`` to put it on ``sys.path``, or you are running a wrapper script generated by ``setuptools`` or EasyInstall. (In which case the wrapper script calls ``require()`` for you.) Note that if you install to a directory other than ``site-packages``, this option is automatically in effect, because ``.pth`` files can only be used in ``site-packages`` (at least in Python 2.3 and 2.4). So, if you use the ``--install-dir`` or ``-d`` option (or they are set via configuration file(s)) your project and its dependencies will be deployed in multi- version mode. ``--install-dir=DIR, -d DIR`` Set the installation directory (staging area). If this option is not directly specified on the command line or in a distutils configuration file, the distutils default installation location is used. Normally, this will be the ``site-packages`` directory, but if you are using distutils configuration files, setting things like ``prefix`` or ``install_lib``, then those settings are taken into account when computing the default staging area. ``--script-dir=DIR, -s DIR`` Set the script installation directory. If you don't supply this option (via the command line or a configuration file), but you *have* supplied an ``--install-dir`` (via command line or config file), then this option defaults to the same directory, so that the scripts will be able to find their associated package installation. Otherwise, this setting defaults to the location where the distutils would normally install scripts, taking any distutils configuration file settings into account. ``--exclude-scripts, -x`` Don't deploy script wrappers. This is useful if you don't want to disturb existing versions of the scripts in the staging area. ``--always-copy, -a`` Copy all needed distributions to the staging area, even if they are already present in another directory on ``sys.path``. By default, if a requirement can be met using a distribution that is already available in a directory on ``sys.path``, it will not be copied to the staging area. ``--egg-path=DIR`` Force the generated ``.egg-link`` file to use a specified relative path to the source directory. This can be useful in circumstances where your installation directory is being shared by code running under multiple platforms (e.g. Mac and Windows) which have different absolute locations for the code under development, but the same *relative* locations with respect to the installation directory. If you use this option when installing, you must supply the same relative path when uninstalling. In addition to the above options, the ``develop`` command also accepts all of the same options accepted by ``easy_install``. If you've configured any ``easy_install`` settings in your ``setup.cfg`` (or other distutils config files), the ``develop`` command will use them as defaults, unless you override them in a ``[develop]`` section or on the command line. ``easy_install`` - Find and install packages ============================================ This command runs the `EasyInstall tool `_ for you. It is exactly equivalent to running the ``easy_install`` command. All command line arguments following this command are consumed and not processed further by the distutils, so this must be the last command listed on the command line. Please see the EasyInstall documentation for the options reference and usage examples. Normally, there is no reason to use this command via the command line, as you can just use ``easy_install`` directly. It's only listed here so that you know it's a distutils command, which means that you can: * create command aliases that use it, * create distutils extensions that invoke it as a subcommand, and * configure options for it in your ``setup.cfg`` or other distutils config files. .. _egg_info: ``egg_info`` - Create egg metadata and set build tags ===================================================== This command performs two operations: it updates a project's ``.egg-info`` metadata directory (used by the ``bdist_egg``, ``develop``, and ``test`` commands), and it allows you to temporarily change a project's version string, to support "daily builds" or "snapshot" releases. It is run automatically by the ``sdist``, ``bdist_egg``, ``develop``, ``register``, and ``test`` commands in order to update the project's metadata, but you can also specify it explicitly in order to temporarily change the project's version string while executing other commands. (It also generates the``.egg-info/SOURCES.txt`` manifest file, which is used when you are building source distributions.) In addition to writing the core egg metadata defined by ``setuptools`` and required by ``pkg_resources``, this command can be extended to write other metadata files as well, by defining entry points in the ``egg_info.writers`` group. See the section on `Adding new EGG-INFO Files`_ below for more details. Note that using additional metadata writers may require you to include a ``setup_requires`` argument to ``setup()`` in order to ensure that the desired writers are available on ``sys.path``. Release Tagging Options ----------------------- The following options can be used to modify the project's version string for all remaining commands on the setup command line. The options are processed in the order shown, so if you use more than one, the requested tags will be added in the following order: ``--tag-build=NAME, -b NAME`` Append NAME to the project's version string. Due to the way setuptools processes "pre-release" version suffixes beginning with the letters "a" through "e" (like "alpha", "beta", and "candidate"), you will usually want to use a tag like ".build" or ".dev", as this will cause the version number to be considered *lower* than the project's default version. (If you want to make the version number *higher* than the default version, you can always leave off --tag-build and then use one or both of the following options.) If you have a default build tag set in your ``setup.cfg``, you can suppress it on the command line using ``-b ""`` or ``--tag-build=""`` as an argument to the ``egg_info`` command. ``--tag-svn-revision, -r`` If the current directory is a Subversion checkout (i.e. has a ``.svn`` subdirectory, this appends a string of the form "-rNNNN" to the project's version string, where NNNN is the revision number of the most recent modification to the current directory, as obtained from the ``svn info`` command. If the current directory is not a Subversion checkout, the command will look for a ``PKG-INFO`` file instead, and try to find the revision number from that, by looking for a "-rNNNN" string at the end of the version number. (This is so that building a package from a source distribution of a Subversion snapshot will produce a binary with the correct version number.) If there is no ``PKG-INFO`` file, or the version number contained therein does not end with ``-r`` and a number, then ``-r0`` is used. ``--no-svn-revision, -R`` Don't include the Subversion revision in the version number. This option is included so you can override a default setting put in ``setup.cfg``. ``--tag-date, -d`` Add a date stamp of the form "-YYYYMMDD" (e.g. "-20050528") to the project's version number. ``--no-date, -D`` Don't include a date stamp in the version number. This option is included so you can override a default setting in ``setup.cfg``. (Note: Because these options modify the version number used for source and binary distributions of your project, you should first make sure that you know how the resulting version numbers will be interpreted by automated tools like EasyInstall. See the section above on `Specifying Your Project's Version`_ for an explanation of pre- and post-release tags, as well as tips on how to choose and verify a versioning scheme for your your project.) For advanced uses, there is one other option that can be set, to change the location of the project's ``.egg-info`` directory. Commands that need to find the project's source directory or metadata should get it from this setting: Other ``egg_info`` Options -------------------------- ``--egg-base=SOURCEDIR, -e SOURCEDIR`` Specify the directory that should contain the .egg-info directory. This should normally be the root of your project's source tree (which is not necessarily the same as your project directory; some projects use a ``src`` or ``lib`` subdirectory as the source root). You should not normally need to specify this directory, as it is normally determined from the ``package_dir`` argument to the ``setup()`` function, if any. If there is no ``package_dir`` set, this option defaults to the current directory. ``egg_info`` Examples --------------------- Creating a dated "nightly build" snapshot egg:: python setup.py egg_info --tag-date --tag-build=DEV bdist_egg Creating and uploading a release with no version tags, even if some default tags are specified in ``setup.cfg``:: python setup.py egg_info -RDb "" sdist bdist_egg register upload (Notice that ``egg_info`` must always appear on the command line *before* any commands that you want the version changes to apply to.) .. _install command: ``install`` - Run ``easy_install`` or old-style installation ============================================================ The setuptools ``install`` command is basically a shortcut to run the ``easy_install`` command on the current project. However, for convenience in creating "system packages" of setuptools-based projects, you can also use this option: ``--single-version-externally-managed`` This boolean option tells the ``install`` command to perform an "old style" installation, with the addition of an ``.egg-info`` directory so that the installed project will still have its metadata available and operate normally. If you use this option, you *must* also specify the ``--root`` or ``--record`` options (or both), because otherwise you will have no way to identify and remove the installed files. This option is automatically in effect when ``install`` is invoked by another distutils command, so that commands like ``bdist_wininst`` and ``bdist_rpm`` will create system packages of eggs. It is also automatically in effect if you specify the ``--root`` option. ``install_egg_info`` - Install an ``.egg-info`` directory in ``site-packages`` ============================================================================== Setuptools runs this command as part of ``install`` operations that use the ``--single-version-externally-managed`` options. You should not invoke it directly; it is documented here for completeness and so that distutils extensions such as system package builders can make use of it. This command has only one option: ``--install-dir=DIR, -d DIR`` The parent directory where the ``.egg-info`` directory will be placed. Defaults to the same as the ``--install-dir`` option specified for the ``install_lib`` command, which is usually the system ``site-packages`` directory. This command assumes that the ``egg_info`` command has been given valid options via the command line or ``setup.cfg``, as it will invoke the ``egg_info`` command and use its options to locate the project's source ``.egg-info`` directory. .. _rotate: ``rotate`` - Delete outdated distribution files =============================================== As you develop new versions of your project, your distribution (``dist``) directory will gradually fill up with older source and/or binary distribution files. The ``rotate`` command lets you automatically clean these up, keeping only the N most-recently modified files matching a given pattern. ``--match=PATTERNLIST, -m PATTERNLIST`` Comma-separated list of glob patterns to match. This option is *required*. The project name and ``-*`` is prepended to the supplied patterns, in order to match only distributions belonging to the current project (in case you have a shared distribution directory for multiple projects). Typically, you will use a glob pattern like ``.zip`` or ``.egg`` to match files of the specified type. Note that each supplied pattern is treated as a distinct group of files for purposes of selecting files to delete. ``--keep=COUNT, -k COUNT`` Number of matching distributions to keep. For each group of files identified by a pattern specified with the ``--match`` option, delete all but the COUNT most-recently-modified files in that group. This option is *required*. ``--dist-dir=DIR, -d DIR`` Directory where the distributions are. This defaults to the value of the ``bdist`` command's ``--dist-dir`` option, which will usually be the project's ``dist`` subdirectory. **Example 1**: Delete all .tar.gz files from the distribution directory, except for the 3 most recently modified ones:: setup.py rotate --match=.tar.gz --keep=3 **Example 2**: Delete all Python 2.3 or Python 2.4 eggs from the distribution directory, except the most recently modified one for each Python version:: setup.py rotate --match=-py2.3*.egg,-py2.4*.egg --keep=1 .. _saveopts: ``saveopts`` - Save used options to a configuration file ======================================================== Finding and editing ``distutils`` configuration files can be a pain, especially since you also have to translate the configuration options from command-line form to the proper configuration file format. You can avoid these hassles by using the ``saveopts`` command. Just add it to the command line to save the options you used. For example, this command builds the project using the ``mingw32`` C compiler, then saves the --compiler setting as the default for future builds (even those run implicitly by the ``install`` command):: setup.py build --compiler=mingw32 saveopts The ``saveopts`` command saves all options for every commmand specified on the command line to the project's local ``setup.cfg`` file, unless you use one of the `configuration file options`_ to change where the options are saved. For example, this command does the same as above, but saves the compiler setting to the site-wide (global) distutils configuration:: setup.py build --compiler=mingw32 saveopts -g Note that it doesn't matter where you place the ``saveopts`` command on the command line; it will still save all the options specified for all commands. For example, this is another valid way to spell the last example:: setup.py saveopts -g build --compiler=mingw32 Note, however, that all of the commands specified are always run, regardless of where ``saveopts`` is placed on the command line. Configuration File Options -------------------------- Normally, settings such as options and aliases are saved to the project's local ``setup.cfg`` file. But you can override this and save them to the global or per-user configuration files, or to a manually-specified filename. ``--global-config, -g`` Save settings to the global ``distutils.cfg`` file inside the ``distutils`` package directory. You must have write access to that directory to use this option. You also can't combine this option with ``-u`` or ``-f``. ``--user-config, -u`` Save settings to the current user's ``~/.pydistutils.cfg`` (POSIX) or ``$HOME/pydistutils.cfg`` (Windows) file. You can't combine this option with ``-g`` or ``-f``. ``--filename=FILENAME, -f FILENAME`` Save settings to the specified configuration file to use. You can't combine this option with ``-g`` or ``-u``. Note that if you specify a non-standard filename, the ``distutils`` and ``setuptools`` will not use the file's contents. This option is mainly included for use in testing. These options are used by other ``setuptools`` commands that modify configuration files, such as the `alias`_ and `setopt`_ commands. .. _setopt: ``setopt`` - Set a distutils or setuptools option in a config file ================================================================== This command is mainly for use by scripts, but it can also be used as a quick and dirty way to change a distutils configuration option without having to remember what file the options are in and then open an editor. **Example 1**. Set the default C compiler to ``mingw32`` (using long option names):: setup.py setopt --command=build --option=compiler --set-value=mingw32 **Example 2**. Remove any setting for the distutils default package installation directory (short option names):: setup.py setopt -c install -o install_lib -r Options for the ``setopt`` command: ``--command=COMMAND, -c COMMAND`` Command to set the option for. This option is required. ``--option=OPTION, -o OPTION`` The name of the option to set. This option is required. ``--set-value=VALUE, -s VALUE`` The value to set the option to. Not needed if ``-r`` or ``--remove`` is set. ``--remove, -r`` Remove (unset) the option, instead of setting it. In addition to the above options, you may use any of the `configuration file options`_ (listed under the `saveopts`_ command, above) to determine which distutils configuration file the option will be added to (or removed from). .. _test: ``test`` - Build package and run a unittest suite ================================================= When doing test-driven development, or running automated builds that need testing before they are deployed for downloading or use, it's often useful to be able to run a project's unit tests without actually deploying the project anywhere, even using the ``develop`` command. The ``test`` command runs a project's unit tests without actually deploying it, by temporarily putting the project's source on ``sys.path``, after first running ``build_ext -i`` and ``egg_info`` to ensure that any C extensions and project metadata are up-to-date. To use this command, your project's tests must be wrapped in a ``unittest`` test suite by either a function, a ``TestCase`` class or method, or a module or package containing ``TestCase`` classes. If the named suite is a module, and the module has an ``additional_tests()`` function, it is called and the result (which must be a ``unittest.TestSuite``) is added to the tests to be run. If the named suite is a package, any submodules and subpackages are recursively added to the overall test suite. (Note: if your project specifies a ``test_loader``, the rules for processing the chosen ``test_suite`` may differ; see the `test_loader`_ documentation for more details.) Note that many test systems including ``doctest`` support wrapping their non-``unittest`` tests in ``TestSuite`` objects. So, if you are using a test package that does not support this, we suggest you encourage its developers to implement test suite support, as this is a convenient and standard way to aggregate a collection of tests to be run under a common test harness. By default, tests will be run in the "verbose" mode of the ``unittest`` package's text test runner, but you can get the "quiet" mode (just dots) if you supply the ``-q`` or ``--quiet`` option, either as a global option to the setup script (e.g. ``setup.py -q test``) or as an option for the ``test`` command itself (e.g. ``setup.py test -q``). There is one other option available: ``--test-suite=NAME, -s NAME`` Specify the test suite (or module, class, or method) to be run (e.g. ``some_module.test_suite``). The default for this option can be set by giving a ``test_suite`` argument to the ``setup()`` function, e.g.:: setup( # ... test_suite = "my_package.tests.test_all" ) If you did not set a ``test_suite`` in your ``setup()`` call, and do not provide a ``--test-suite`` option, an error will occur. .. _upload: ``upload`` - Upload source and/or egg distributions to PyPI =========================================================== PyPI now supports uploading project files for redistribution; uploaded files are easily found by EasyInstall, even if you don't have download links on your project's home page. Although Python 2.5 will support uploading all types of distributions to PyPI, setuptools only supports source distributions and eggs. (This is partly because PyPI's upload support is currently broken for various other file types.) To upload files, you must include the ``upload`` command *after* the ``sdist`` or ``bdist_egg`` commands on the setup command line. For example:: setup.py bdist_egg upload # create an egg and upload it setup.py sdist upload # create a source distro and upload it setup.py sdist bdist_egg upload # create and upload both Note that to upload files for a project, the corresponding version must already be registered with PyPI, using the distutils ``register`` command. It's usually a good idea to include the ``register`` command at the start of the command line, so that any registration problems can be found and fixed before building and uploading the distributions, e.g.:: setup.py register sdist bdist_egg upload This will update PyPI's listing for your project's current version. Note, by the way, that the metadata in your ``setup()`` call determines what will be listed in PyPI for your package. Try to fill out as much of it as possible, as it will save you a lot of trouble manually adding and updating your PyPI listings. Just put it in ``setup.py`` and use the ``register`` comamnd to keep PyPI up to date. The ``upload`` command has a few options worth noting: ``--sign, -s`` Sign each uploaded file using GPG (GNU Privacy Guard). The ``gpg`` program must be available for execution on the system ``PATH``. ``--identity=NAME, -i NAME`` Specify the identity or key name for GPG to use when signing. The value of this option will be passed through the ``--local-user`` option of the ``gpg`` program. ``--show-response`` Display the full response text from server; this is useful for debugging PyPI problems. ``--repository=URL, -r URL`` The URL of the repository to upload to. Defaults to https://pypi.python.org/pypi (i.e., the main PyPI installation). .. _upload_docs: ``upload_docs`` - Upload package documentation to PyPI ====================================================== PyPI now supports uploading project documentation to the dedicated URL https://pythonhosted.org//. The ``upload_docs`` command will create the necessary zip file out of a documentation directory and will post to the repository. Note that to upload the documentation of a project, the corresponding version must already be registered with PyPI, using the distutils ``register`` command -- just like the ``upload`` command. Assuming there is an ``Example`` project with documentation in the subdirectory ``docs``, e.g.:: Example/ |-- example.py |-- setup.cfg |-- setup.py |-- docs | |-- build | | `-- html | | | |-- index.html | | | `-- tips_tricks.html | |-- conf.py | |-- index.txt | `-- tips_tricks.txt You can simply pass the documentation directory path to the ``upload_docs`` command:: python setup.py upload_docs --upload-dir=docs/build/html If no ``--upload-dir`` is given, ``upload_docs`` will attempt to run the ``build_sphinx`` command to generate uploadable documentation. For the command to become available, `Sphinx `_ must be installed in the same environment as distribute. As with other ``setuptools``-based commands, you can define useful defaults in the ``setup.cfg`` of your Python project, e.g.: .. code-block:: ini [upload_docs] upload-dir = docs/build/html The ``upload_docs`` command has the following options: ``--upload-dir`` The directory to be uploaded to the repository. ``--show-response`` Display the full response text from server; this is useful for debugging PyPI problems. ``--repository=URL, -r URL`` The URL of the repository to upload to. Defaults to https://pypi.python.org/pypi (i.e., the main PyPI installation). -------------------------------- Extending and Reusing Distribute -------------------------------- Creating ``distutils`` Extensions ================================= It can be hard to add new commands or setup arguments to the distutils. But the ``setuptools`` package makes it a bit easier, by allowing you to distribute a distutils extension as a separate project, and then have projects that need the extension just refer to it in their ``setup_requires`` argument. With ``setuptools``, your distutils extension projects can hook in new commands and ``setup()`` arguments just by defining "entry points". These are mappings from command or argument names to a specification of where to import a handler from. (See the section on `Dynamic Discovery of Services and Plugins`_ above for some more background on entry points.) Adding Commands --------------- You can add new ``setup`` commands by defining entry points in the ``distutils.commands`` group. For example, if you wanted to add a ``foo`` command, you might add something like this to your distutils extension project's setup script:: setup( # ... entry_points = { "distutils.commands": [ "foo = mypackage.some_module:foo", ], }, ) (Assuming, of course, that the ``foo`` class in ``mypackage.some_module`` is a ``setuptools.Command`` subclass.) Once a project containing such entry points has been activated on ``sys.path``, (e.g. by running "install" or "develop" with a site-packages installation directory) the command(s) will be available to any ``setuptools``-based setup scripts. It is not necessary to use the ``--command-packages`` option or to monkeypatch the ``distutils.command`` package to install your commands; ``setuptools`` automatically adds a wrapper to the distutils to search for entry points in the active distributions on ``sys.path``. In fact, this is how setuptools' own commands are installed: the setuptools project's setup script defines entry points for them! Adding ``setup()`` Arguments ---------------------------- Sometimes, your commands may need additional arguments to the ``setup()`` call. You can enable this by defining entry points in the ``distutils.setup_keywords`` group. For example, if you wanted a ``setup()`` argument called ``bar_baz``, you might add something like this to your distutils extension project's setup script:: setup( # ... entry_points = { "distutils.commands": [ "foo = mypackage.some_module:foo", ], "distutils.setup_keywords": [ "bar_baz = mypackage.some_module:validate_bar_baz", ], }, ) The idea here is that the entry point defines a function that will be called to validate the ``setup()`` argument, if it's supplied. The ``Distribution`` object will have the initial value of the attribute set to ``None``, and the validation function will only be called if the ``setup()`` call sets it to a non-None value. Here's an example validation function:: def assert_bool(dist, attr, value): """Verify that value is True, False, 0, or 1""" if bool(value) != value: raise DistutilsSetupError( "%r must be a boolean value (got %r)" % (attr,value) ) Your function should accept three arguments: the ``Distribution`` object, the attribute name, and the attribute value. It should raise a ``DistutilsSetupError`` (from the ``distutils.errors`` module) if the argument is invalid. Remember, your function will only be called with non-None values, and the default value of arguments defined this way is always None. So, your commands should always be prepared for the possibility that the attribute will be ``None`` when they access it later. If more than one active distribution defines an entry point for the same ``setup()`` argument, *all* of them will be called. This allows multiple distutils extensions to define a common argument, as long as they agree on what values of that argument are valid. Also note that as with commands, it is not necessary to subclass or monkeypatch the distutils ``Distribution`` class in order to add your arguments; it is sufficient to define the entry points in your extension, as long as any setup script using your extension lists your project in its ``setup_requires`` argument. Adding new EGG-INFO Files ------------------------- Some extensible applications or frameworks may want to allow third parties to develop plugins with application or framework-specific metadata included in the plugins' EGG-INFO directory, for easy access via the ``pkg_resources`` metadata API. The easiest way to allow this is to create a distutils extension to be used from the plugin projects' setup scripts (via ``setup_requires``) that defines a new setup keyword, and then uses that data to write an EGG-INFO file when the ``egg_info`` command is run. The ``egg_info`` command looks for extension points in an ``egg_info.writers`` group, and calls them to write the files. Here's a simple example of a distutils extension defining a setup argument ``foo_bar``, which is a list of lines that will be written to ``foo_bar.txt`` in the EGG-INFO directory of any project that uses the argument:: setup( # ... entry_points = { "distutils.setup_keywords": [ "foo_bar = setuptools.dist:assert_string_list", ], "egg_info.writers": [ "foo_bar.txt = setuptools.command.egg_info:write_arg", ], }, ) This simple example makes use of two utility functions defined by setuptools for its own use: a routine to validate that a setup keyword is a sequence of strings, and another one that looks up a setup argument and writes it to a file. Here's what the writer utility looks like:: def write_arg(cmd, basename, filename): argname = os.path.splitext(basename)[0] value = getattr(cmd.distribution, argname, None) if value is not None: value = '\n'.join(value)+'\n' cmd.write_or_delete_file(argname, filename, value) As you can see, ``egg_info.writers`` entry points must be a function taking three arguments: a ``egg_info`` command instance, the basename of the file to write (e.g. ``foo_bar.txt``), and the actual full filename that should be written to. In general, writer functions should honor the command object's ``dry_run`` setting when writing files, and use the ``distutils.log`` object to do any console output. The easiest way to conform to this requirement is to use the ``cmd`` object's ``write_file()``, ``delete_file()``, and ``write_or_delete_file()`` methods exclusively for your file operations. See those methods' docstrings for more details. Adding Support for Other Revision Control Systems ------------------------------------------------- If you would like to create a plugin for ``setuptools`` to find files in other source control systems besides CVS and Subversion, you can do so by adding an entry point to the ``setuptools.file_finders`` group. The entry point should be a function accepting a single directory name, and should yield all the filenames within that directory (and any subdirectories thereof) that are under revision control. For example, if you were going to create a plugin for a revision control system called "foobar", you would write a function something like this: .. code-block:: python def find_files_for_foobar(dirname): # loop to yield paths that start with `dirname` And you would register it in a setup script using something like this:: entry_points = { "setuptools.file_finders": [ "foobar = my_foobar_module:find_files_for_foobar" ] } Then, anyone who wants to use your plugin can simply install it, and their local setuptools installation will be able to find the necessary files. It is not necessary to distribute source control plugins with projects that simply use the other source control system, or to specify the plugins in ``setup_requires``. When you create a source distribution with the ``sdist`` command, setuptools automatically records what files were found in the ``SOURCES.txt`` file. That way, recipients of source distributions don't need to have revision control at all. However, if someone is working on a package by checking out with that system, they will need the same plugin(s) that the original author is using. A few important points for writing revision control file finders: * Your finder function MUST return relative paths, created by appending to the passed-in directory name. Absolute paths are NOT allowed, nor are relative paths that reference a parent directory of the passed-in directory. * Your finder function MUST accept an empty string as the directory name, meaning the current directory. You MUST NOT convert this to a dot; just yield relative paths. So, yielding a subdirectory named ``some/dir`` under the current directory should NOT be rendered as ``./some/dir`` or ``/somewhere/some/dir``, but *always* as simply ``some/dir`` * Your finder function SHOULD NOT raise any errors, and SHOULD deal gracefully with the absence of needed programs (i.e., ones belonging to the revision control system itself. It *may*, however, use ``distutils.log.warn()`` to inform the user of the missing program(s). Subclassing ``Command`` ----------------------- Sorry, this section isn't written yet, and neither is a lot of what's below this point, except for the change log. You might want to `subscribe to changes in this page `_ to see when new documentation is added or updated. XXX Reusing ``setuptools`` Code =========================== ``ez_setup`` ------------ XXX ``setuptools.archive_util`` --------------------------- XXX ``setuptools.sandbox`` ---------------------- XXX ``setuptools.package_index`` ---------------------------- XXX Mailing List and Bug Tracker ============================ Please use the `distutils-sig mailing list`_ for questions and discussion about setuptools, and the `setuptools bug tracker`_ ONLY for issues you have confirmed via the list are actual bugs, and which you have reduced to a minimal set of steps to reproduce. .. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ .. _setuptools bug tracker: https://bitbucket.org/pypa/setuptools/ share/doc/alt-python34-setuptools/docs/easy_install.txt000064400000223414152342604300017265 0ustar00============ Easy Install ============ Easy Install is a python module (``easy_install``) bundled with ``setuptools`` that lets you automatically download, build, install, and manage Python packages. Please share your experiences with us! If you encounter difficulty installing a package, please contact us via the `distutils mailing list `_. (Note: please DO NOT send private email directly to the author of setuptools; it will be discarded. The mailing list is a searchable archive of previously-asked and answered questions; you should begin your research there before reporting something as a bug -- and then do so via list discussion first.) (Also, if you'd like to learn about how you can use ``setuptools`` to make your own packages work better with EasyInstall, or provide EasyInstall-like features without requiring your users to use EasyInstall directly, you'll probably want to check out the full `setuptools`_ documentation as well.) .. contents:: **Table of Contents** Using "Easy Install" ==================== .. _installation instructions: Installing "Easy Install" ------------------------- Please see the `setuptools PyPI page `_ for download links and basic installation instructions for each of the supported platforms. You will need at least Python 2.6. An ``easy_install`` script will be installed in the normal location for Python scripts on your platform. Note that the instructions on the setuptools PyPI page assume that you are are installling to Python's primary ``site-packages`` directory. If this is not the case, you should consult the section below on `Custom Installation Locations`_ before installing. (And, on Windows, you should not use the ``.exe`` installer when installing to an alternate location.) Note that ``easy_install`` normally works by downloading files from the internet. If you are behind an NTLM-based firewall that prevents Python programs from accessing the net directly, you may wish to first install and use the `APS proxy server `_, which lets you get past such firewalls in the same way that your web browser(s) do. (Alternately, if you do not wish easy_install to actually download anything, you can restrict it from doing so with the ``--allow-hosts`` option; see the sections on `restricting downloads with --allow-hosts`_ and `command-line options`_ for more details.) Troubleshooting ~~~~~~~~~~~~~~~ If EasyInstall/setuptools appears to install correctly, and you can run the ``easy_install`` command but it fails with an ``ImportError``, the most likely cause is that you installed to a location other than ``site-packages``, without taking any of the steps described in the `Custom Installation Locations`_ section below. Please see that section and follow the steps to make sure that your custom location will work correctly. Then re-install. Similarly, if you can run ``easy_install``, and it appears to be installing packages, but then you can't import them, the most likely issue is that you installed EasyInstall correctly but are using it to install packages to a non-standard location that hasn't been properly prepared. Again, see the section on `Custom Installation Locations`_ for more details. Windows Notes ~~~~~~~~~~~~~ Installing setuptools will provide an ``easy_install`` command according to the techniques described in `Executables and Launchers`_. If the ``easy_install`` command is not available after installation, that section provides details on how to configure Windows to make the commands available. Downloading and Installing a Package ------------------------------------ For basic use of ``easy_install``, you need only supply the filename or URL of a source distribution or .egg file (`Python Egg`__). __ http://peak.telecommunity.com/DevCenter/PythonEggs **Example 1**. Install a package by name, searching PyPI for the latest version, and automatically downloading, building, and installing it:: easy_install SQLObject **Example 2**. Install or upgrade a package by name and version by finding links on a given "download page":: easy_install -f http://pythonpaste.org/package_index.html SQLObject **Example 3**. Download a source distribution from a specified URL, automatically building and installing it:: easy_install http://example.com/path/to/MyPackage-1.2.3.tgz **Example 4**. Install an already-downloaded .egg file:: easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg **Example 5**. Upgrade an already-installed package to the latest version listed on PyPI:: easy_install --upgrade PyProtocols **Example 6**. Install a source distribution that's already downloaded and extracted in the current directory (New in 0.5a9):: easy_install . **Example 7**. (New in 0.6a1) Find a source distribution or Subversion checkout URL for a package, and extract it or check it out to ``~/projects/sqlobject`` (the name will always be in all-lowercase), where it can be examined or edited. (The package will not be installed, but it can easily be installed with ``easy_install ~/projects/sqlobject``. See `Editing and Viewing Source Packages`_ below for more info.):: easy_install --editable --build-directory ~/projects SQLObject **Example 7**. (New in 0.6.11) Install a distribution within your home dir:: easy_install --user SQLAlchemy Easy Install accepts URLs, filenames, PyPI package names (i.e., ``distutils`` "distribution" names), and package+version specifiers. In each case, it will attempt to locate the latest available version that meets your criteria. When downloading or processing downloaded files, Easy Install recognizes distutils source distribution files with extensions of .tgz, .tar, .tar.gz, .tar.bz2, or .zip. And of course it handles already-built .egg distributions as well as ``.win32.exe`` installers built using distutils. By default, packages are installed to the running Python installation's ``site-packages`` directory, unless you provide the ``-d`` or ``--install-dir`` option to specify an alternative directory, or specify an alternate location using distutils configuration files. (See `Configuration Files`_, below.) By default, any scripts included with the package are installed to the running Python installation's standard script installation location. However, if you specify an installation directory via the command line or a config file, then the default directory for installing scripts will be the same as the package installation directory, to ensure that the script will have access to the installed package. You can override this using the ``-s`` or ``--script-dir`` option. Installed packages are added to an ``easy-install.pth`` file in the install directory, so that Python will always use the most-recently-installed version of the package. If you would like to be able to select which version to use at runtime, you should use the ``-m`` or ``--multi-version`` option. Upgrading a Package ------------------- You don't need to do anything special to upgrade a package: just install the new version, either by requesting a specific version, e.g.:: easy_install "SomePackage==2.0" a version greater than the one you have now:: easy_install "SomePackage>2.0" using the upgrade flag, to find the latest available version on PyPI:: easy_install --upgrade SomePackage or by using a download page, direct download URL, or package filename:: easy_install -f http://example.com/downloads ExamplePackage easy_install http://example.com/downloads/ExamplePackage-2.0-py2.4.egg easy_install my_downloads/ExamplePackage-2.0.tgz If you're using ``-m`` or ``--multi-version`` , using the ``require()`` function at runtime automatically selects the newest installed version of a package that meets your version criteria. So, installing a newer version is the only step needed to upgrade such packages. If you're installing to a directory on PYTHONPATH, or a configured "site" directory (and not using ``-m``), installing a package automatically replaces any previous version in the ``easy-install.pth`` file, so that Python will import the most-recently installed version by default. So, again, installing the newer version is the only upgrade step needed. If you haven't suppressed script installation (using ``--exclude-scripts`` or ``-x``), then the upgraded version's scripts will be installed, and they will be automatically patched to ``require()`` the corresponding version of the package, so that you can use them even if they are installed in multi-version mode. ``easy_install`` never actually deletes packages (unless you're installing a package with the same name and version number as an existing package), so if you want to get rid of older versions of a package, please see `Uninstalling Packages`_, below. Changing the Active Version --------------------------- If you've upgraded a package, but need to revert to a previously-installed version, you can do so like this:: easy_install PackageName==1.2.3 Where ``1.2.3`` is replaced by the exact version number you wish to switch to. If a package matching the requested name and version is not already installed in a directory on ``sys.path``, it will be located via PyPI and installed. If you'd like to switch to the latest installed version of ``PackageName``, you can do so like this:: easy_install PackageName This will activate the latest installed version. (Note: if you have set any ``find_links`` via distutils configuration files, those download pages will be checked for the latest available version of the package, and it will be downloaded and installed if it is newer than your current version.) Note that changing the active version of a package will install the newly active version's scripts, unless the ``--exclude-scripts`` or ``-x`` option is specified. Uninstalling Packages --------------------- If you have replaced a package with another version, then you can just delete the package(s) you don't need by deleting the PackageName-versioninfo.egg file or directory (found in the installation directory). If you want to delete the currently installed version of a package (or all versions of a package), you should first run:: easy_install -m PackageName This will ensure that Python doesn't continue to search for a package you're planning to remove. After you've done this, you can safely delete the .egg files or directories, along with any scripts you wish to remove. Managing Scripts ---------------- Whenever you install, upgrade, or change versions of a package, EasyInstall automatically installs the scripts for the selected package version, unless you tell it not to with ``-x`` or ``--exclude-scripts``. If any scripts in the script directory have the same name, they are overwritten. Thus, you do not normally need to manually delete scripts for older versions of a package, unless the newer version of the package does not include a script of the same name. However, if you are completely uninstalling a package, you may wish to manually delete its scripts. EasyInstall's default behavior means that you can normally only run scripts from one version of a package at a time. If you want to keep multiple versions of a script available, however, you can simply use the ``--multi-version`` or ``-m`` option, and rename the scripts that EasyInstall creates. This works because EasyInstall installs scripts as short code stubs that ``require()`` the matching version of the package the script came from, so renaming the script has no effect on what it executes. For example, suppose you want to use two versions of the ``rst2html`` tool provided by the `docutils `_ package. You might first install one version:: easy_install -m docutils==0.3.9 then rename the ``rst2html.py`` to ``r2h_039``, and install another version:: easy_install -m docutils==0.3.10 This will create another ``rst2html.py`` script, this one using docutils version 0.3.10 instead of 0.3.9. You now have two scripts, each using a different version of the package. (Notice that we used ``-m`` for both installations, so that Python won't lock us out of using anything but the most recently-installed version of the package.) Executables and Launchers ------------------------- On Unix systems, scripts are installed with as natural files with a "#!" header and no extension and they launch under the Python version indicated in the header. On Windows, there is no mechanism to "execute" files without extensions, so EasyInstall provides two techniques to mirror the Unix behavior. The behavior is indicated by the SETUPTOOLS_LAUNCHER environment variable, which may be "executable" (default) or "natural". Regardless of the technique used, the script(s) will be installed to a Scripts directory (by default in the Python installation directory). It is recommended for EasyInstall that you ensure this directory is in the PATH environment variable. The easiest way to ensure the Scripts directory is in the PATH is to run ``Tools\Scripts\win_add2path.py`` from the Python directory (requires Python 2.6 or later). Note that instead of changing your ``PATH`` to include the Python scripts directory, you can also retarget the installation location for scripts so they go on a directory that's already on the ``PATH``. For more information see `Command-Line Options`_ and `Configuration Files`_. During installation, pass command line options (such as ``--script-dir``) to ``ez_setup.py`` to control where ``easy_install.exe`` will be installed. Windows Executable Launcher ~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the "executable" launcher is used, EasyInstall will create a '.exe' launcher of the same name beside each installed script (including ``easy_install`` itself). These small .exe files launch the script of the same name using the Python version indicated in the '#!' header. This behavior is currently default. To force the use of executable launchers, set ``SETUPTOOLS_LAUNCHER`` to "executable". Natural Script Launcher ~~~~~~~~~~~~~~~~~~~~~~~ EasyInstall also supports deferring to an external launcher such as `pylauncher `_ for launching scripts. Enable this experimental functionality by setting the ``SETUPTOOLS_LAUNCHER`` environment variable to "natural". EasyInstall will then install scripts as simple scripts with a .pya (or .pyw) extension appended. If these extensions are associated with the pylauncher and listed in the PATHEXT environment variable, these scripts can then be invoked simply and directly just like any other executable. This behavior may become default in a future version. EasyInstall uses the .pya extension instead of simply the typical '.py' extension. This distinct extension is necessary to prevent Python from treating the scripts as importable modules (where name conflicts exist). Current releases of pylauncher do not yet associate with .pya files by default, but future versions should do so. Tips & Techniques ----------------- Multiple Python Versions ~~~~~~~~~~~~~~~~~~~~~~~~ EasyInstall installs itself under two names: ``easy_install`` and ``easy_install-N.N``, where ``N.N`` is the Python version used to install it. Thus, if you install EasyInstall for both Python 3.2 and 2.7, you can use the ``easy_install-3.2`` or ``easy_install-2.7`` scripts to install packages for the respective Python version. Setuptools also supplies easy_install as a runnable module which may be invoked using ``python -m easy_install`` for any Python with Setuptools installed. Restricting Downloads with ``--allow-hosts`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can use the ``--allow-hosts`` (``-H``) option to restrict what domains EasyInstall will look for links and downloads on. ``--allow-hosts=None`` prevents downloading altogether. You can also use wildcards, for example to restrict downloading to hosts in your own intranet. See the section below on `Command-Line Options`_ for more details on the ``--allow-hosts`` option. By default, there are no host restrictions in effect, but you can change this default by editing the appropriate `configuration files`_ and adding: .. code-block:: ini [easy_install] allow_hosts = *.myintranet.example.com,*.python.org The above example would then allow downloads only from hosts in the ``python.org`` and ``myintranet.example.com`` domains, unless overridden on the command line. Installing on Un-networked Machines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Just copy the eggs or source packages you need to a directory on the target machine, then use the ``-f`` or ``--find-links`` option to specify that directory's location. For example:: easy_install -H None -f somedir SomePackage will attempt to install SomePackage using only eggs and source packages found in ``somedir`` and disallowing all remote access. You should of course make sure you have all of SomePackage's dependencies available in somedir. If you have another machine of the same operating system and library versions (or if the packages aren't platform-specific), you can create the directory of eggs using a command like this:: easy_install -zmaxd somedir SomePackage This will tell EasyInstall to put zipped eggs or source packages for SomePackage and all its dependencies into ``somedir``, without creating any scripts or .pth files. You can then copy the contents of ``somedir`` to the target machine. (``-z`` means zipped eggs, ``-m`` means multi-version, which prevents .pth files from being used, ``-a`` means to copy all the eggs needed, even if they're installed elsewhere on the machine, and ``-d`` indicates the directory to place the eggs in.) You can also build the eggs from local development packages that were installed with the ``setup.py develop`` command, by including the ``-l`` option, e.g.:: easy_install -zmaxld somedir SomePackage This will use locally-available source distributions to build the eggs. Packaging Others' Projects As Eggs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Need to distribute a package that isn't published in egg form? You can use EasyInstall to build eggs for a project. You'll want to use the ``--zip-ok``, ``--exclude-scripts``, and possibly ``--no-deps`` options (``-z``, ``-x`` and ``-N``, respectively). Use ``-d`` or ``--install-dir`` to specify the location where you'd like the eggs placed. By placing them in a directory that is published to the web, you can then make the eggs available for download, either in an intranet or to the internet at large. If someone distributes a package in the form of a single ``.py`` file, you can wrap it in an egg by tacking an ``#egg=name-version`` suffix on the file's URL. So, something like this:: easy_install -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo will install the package as an egg, and this:: easy_install -zmaxd. \ -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo will create a ``.egg`` file in the current directory. Creating your own Package Index ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In addition to local directories and the Python Package Index, EasyInstall can find download links on most any web page whose URL is given to the ``-f`` (``--find-links``) option. In the simplest case, you can simply have a web page with links to eggs or Python source packages, even an automatically generated directory listing (such as the Apache web server provides). If you are setting up an intranet site for package downloads, you may want to configure the target machines to use your download site by default, adding something like this to their `configuration files`_: .. code-block:: ini [easy_install] find_links = http://mypackages.example.com/somedir/ http://turbogears.org/download/ http://peak.telecommunity.com/dist/ As you can see, you can list multiple URLs separated by whitespace, continuing on multiple lines if necessary (as long as the subsequent lines are indented. If you are more ambitious, you can also create an entirely custom package index or PyPI mirror. See the ``--index-url`` option under `Command-Line Options`_, below, and also the section on `Package Index "API"`_. Password-Protected Sites ------------------------ If a site you want to download from is password-protected using HTTP "Basic" authentication, you can specify your credentials in the URL, like so:: http://some_userid:some_password@some.example.com/some_path/ You can do this with both index page URLs and direct download URLs. As long as any HTML pages read by easy_install use *relative* links to point to the downloads, the same user ID and password will be used to do the downloading. Using .pypirc Credentials ------------------------- In additional to supplying credentials in the URL, ``easy_install`` will also honor credentials if present in the .pypirc file. Teams maintaining a private repository of packages may already have defined access credentials for uploading packages according to the distutils documentation. ``easy_install`` will attempt to honor those if present. Refer to the distutils documentation for Python 2.5 or later for details on the syntax. Controlling Build Options ~~~~~~~~~~~~~~~~~~~~~~~~~ EasyInstall respects standard distutils `Configuration Files`_, so you can use them to configure build options for packages that it installs from source. For example, if you are on Windows using the MinGW compiler, you can configure the default compiler by putting something like this: .. code-block:: ini [build] compiler = mingw32 into the appropriate distutils configuration file. In fact, since this is just normal distutils configuration, it will affect any builds using that config file, not just ones done by EasyInstall. For example, if you add those lines to ``distutils.cfg`` in the ``distutils`` package directory, it will be the default compiler for *all* packages you build. See `Configuration Files`_ below for a list of the standard configuration file locations, and links to more documentation on using distutils configuration files. Editing and Viewing Source Packages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sometimes a package's source distribution contains additional documentation, examples, configuration files, etc., that are not part of its actual code. If you want to be able to examine these files, you can use the ``--editable`` option to EasyInstall, and EasyInstall will look for a source distribution or Subversion URL for the package, then download and extract it or check it out as a subdirectory of the ``--build-directory`` you specify. If you then wish to install the package after editing or configuring it, you can do so by rerunning EasyInstall with that directory as the target. Note that using ``--editable`` stops EasyInstall from actually building or installing the package; it just finds, obtains, and possibly unpacks it for you. This allows you to make changes to the package if necessary, and to either install it in development mode using ``setup.py develop`` (if the package uses setuptools, that is), or by running ``easy_install projectdir`` (where ``projectdir`` is the subdirectory EasyInstall created for the downloaded package. In order to use ``--editable`` (``-e`` for short), you *must* also supply a ``--build-directory`` (``-b`` for short). The project will be placed in a subdirectory of the build directory. The subdirectory will have the same name as the project itself, but in all-lowercase. If a file or directory of that name already exists, EasyInstall will print an error message and exit. Also, when using ``--editable``, you cannot use URLs or filenames as arguments. You *must* specify project names (and optional version requirements) so that EasyInstall knows what directory name(s) to create. If you need to force EasyInstall to use a particular URL or filename, you should specify it as a ``--find-links`` item (``-f`` for short), and then also specify the project name, e.g.:: easy_install -eb ~/projects \ -fhttp://prdownloads.sourceforge.net/ctypes/ctypes-0.9.6.tar.gz?download \ ctypes==0.9.6 Dealing with Installation Conflicts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (NOTE: As of 0.6a11, this section is obsolete; it is retained here only so that people using older versions of EasyInstall can consult it. As of version 0.6a11, installation conflicts are handled automatically without deleting the old or system-installed packages, and without ignoring the issue. Instead, eggs are automatically shifted to the front of ``sys.path`` using special code added to the ``easy-install.pth`` file. So, if you are using version 0.6a11 or better of setuptools, you do not need to worry about conflicts, and the following issues do not apply to you.) EasyInstall installs distributions in a "managed" way, such that each distribution can be independently activated or deactivated on ``sys.path``. However, packages that were not installed by EasyInstall are "unmanaged", in that they usually live all in one directory and cannot be independently activated or deactivated. As a result, if you are using EasyInstall to upgrade an existing package, or to install a package with the same name as an existing package, EasyInstall will warn you of the conflict. (This is an improvement over ``setup.py install``, becuase the ``distutils`` just install new packages on top of old ones, possibly combining two unrelated packages or leaving behind modules that have been deleted in the newer version of the package.) EasyInstall will stop the installation if it detects a conflict between an existing, "unmanaged" package, and a module or package in any of the distributions you're installing. It will display a list of all of the existing files and directories that would need to be deleted for the new package to be able to function correctly. To proceed, you must manually delete these conflicting files and directories and re-run EasyInstall. Of course, once you've replaced all of your existing "unmanaged" packages with versions managed by EasyInstall, you won't have any more conflicts to worry about! Compressed Installation ~~~~~~~~~~~~~~~~~~~~~~~ EasyInstall tries to install packages in zipped form, if it can. Zipping packages can improve Python's overall import performance if you're not using the ``--multi-version`` option, because Python processes zipfile entries on ``sys.path`` much faster than it does directories. As of version 0.5a9, EasyInstall analyzes packages to determine whether they can be safely installed as a zipfile, and then acts on its analysis. (Previous versions would not install a package as a zipfile unless you used the ``--zip-ok`` option.) The current analysis approach is fairly conservative; it currenly looks for: * Any use of the ``__file__`` or ``__path__`` variables (which should be replaced with ``pkg_resources`` API calls) * Possible use of ``inspect`` functions that expect to manipulate source files (e.g. ``inspect.getsource()``) * Top-level modules that might be scripts used with ``python -m`` (Python 2.4) If any of the above are found in the package being installed, EasyInstall will assume that the package cannot be safely run from a zipfile, and unzip it to a directory instead. You can override this analysis with the ``-zip-ok`` flag, which will tell EasyInstall to install the package as a zipfile anyway. Or, you can use the ``--always-unzip`` flag, in which case EasyInstall will always unzip, even if its analysis says the package is safe to run as a zipfile. Normally, however, it is simplest to let EasyInstall handle the determination of whether to zip or unzip, and only specify overrides when needed to work around a problem. If you find you need to override EasyInstall's guesses, you may want to contact the package author and the EasyInstall maintainers, so that they can make appropriate changes in future versions. (Note: If a package uses ``setuptools`` in its setup script, the package author has the option to declare the package safe or unsafe for zipped usage via the ``zip_safe`` argument to ``setup()``. If the package author makes such a declaration, EasyInstall believes the package's author and does not perform its own analysis. However, your command-line option, if any, will still override the package author's choice.) Reference Manual ================ Configuration Files ------------------- (New in 0.4a2) You may specify default options for EasyInstall using the standard distutils configuration files, under the command heading ``easy_install``. EasyInstall will look first for a ``setup.cfg`` file in the current directory, then a ``~/.pydistutils.cfg`` or ``$HOME\\pydistutils.cfg`` (on Unix-like OSes and Windows, respectively), and finally a ``distutils.cfg`` file in the ``distutils`` package directory. Here's a simple example: .. code-block:: ini [easy_install] # set the default location to install packages install_dir = /home/me/lib/python # Notice that indentation can be used to continue an option # value; this is especially useful for the "--find-links" # option, which tells easy_install to use download links on # these pages before consulting PyPI: # find_links = http://sqlobject.org/ http://peak.telecommunity.com/dist/ In addition to accepting configuration for its own options under ``[easy_install]``, EasyInstall also respects defaults specified for other distutils commands. For example, if you don't set an ``install_dir`` for ``[easy_install]``, but *have* set an ``install_lib`` for the ``[install]`` command, this will become EasyInstall's default installation directory. Thus, if you are already using distutils configuration files to set default install locations, build options, etc., EasyInstall will respect your existing settings until and unless you override them explicitly in an ``[easy_install]`` section. For more information, see also the current Python documentation on the `use and location of distutils configuration files `_. Notice that ``easy_install`` will use the ``setup.cfg`` from the current working directory only if it was triggered from ``setup.py`` through the ``install_requires`` option. The standalone command will not use that file. Command-Line Options -------------------- ``--zip-ok, -z`` Install all packages as zip files, even if they are marked as unsafe for running as a zipfile. This can be useful when EasyInstall's analysis of a non-setuptools package is too conservative, but keep in mind that the package may not work correctly. (Changed in 0.5a9; previously this option was required in order for zipped installation to happen at all.) ``--always-unzip, -Z`` Don't install any packages as zip files, even if the packages are marked as safe for running as a zipfile. This can be useful if a package does something unsafe, but not in a way that EasyInstall can easily detect. EasyInstall's default analysis is currently very conservative, however, so you should only use this option if you've had problems with a particular package, and *after* reporting the problem to the package's maintainer and to the EasyInstall maintainers. (Note: the ``-z/-Z`` options only affect the installation of newly-built or downloaded packages that are not already installed in the target directory; if you want to convert an existing installed version from zipped to unzipped or vice versa, you'll need to delete the existing version first, and re-run EasyInstall.) ``--multi-version, -m`` "Multi-version" mode. Specifying this option prevents ``easy_install`` from adding an ``easy-install.pth`` entry for the package being installed, and if an entry for any version the package already exists, it will be removed upon successful installation. In multi-version mode, no specific version of the package is available for importing, unless you use ``pkg_resources.require()`` to put it on ``sys.path``. This can be as simple as:: from pkg_resources import require require("SomePackage", "OtherPackage", "MyPackage") which will put the latest installed version of the specified packages on ``sys.path`` for you. (For more advanced uses, like selecting specific versions and enabling optional dependencies, see the ``pkg_resources`` API doc.) Changed in 0.6a10: this option is no longer silently enabled when installing to a non-PYTHONPATH, non-"site" directory. You must always explicitly use this option if you want it to be active. ``--upgrade, -U`` (New in 0.5a4) By default, EasyInstall only searches online if a project/version requirement can't be met by distributions already installed on sys.path or the installation directory. However, if you supply the ``--upgrade`` or ``-U`` flag, EasyInstall will always check the package index and ``--find-links`` URLs before selecting a version to install. In this way, you can force EasyInstall to use the latest available version of any package it installs (subject to any version requirements that might exclude such later versions). ``--install-dir=DIR, -d DIR`` Set the installation directory. It is up to you to ensure that this directory is on ``sys.path`` at runtime, and to use ``pkg_resources.require()`` to enable the installed package(s) that you need. (New in 0.4a2) If this option is not directly specified on the command line or in a distutils configuration file, the distutils default installation location is used. Normally, this would be the ``site-packages`` directory, but if you are using distutils configuration files, setting things like ``prefix`` or ``install_lib``, then those settings are taken into account when computing the default installation directory, as is the ``--prefix`` option. ``--script-dir=DIR, -s DIR`` Set the script installation directory. If you don't supply this option (via the command line or a configuration file), but you *have* supplied an ``--install-dir`` (via command line or config file), then this option defaults to the same directory, so that the scripts will be able to find their associated package installation. Otherwise, this setting defaults to the location where the distutils would normally install scripts, taking any distutils configuration file settings into account. ``--exclude-scripts, -x`` Don't install scripts. This is useful if you need to install multiple versions of a package, but do not want to reset the version that will be run by scripts that are already installed. ``--user`` (New in 0.6.11) Use the the user-site-packages as specified in :pep:`370` instead of the global site-packages. ``--always-copy, -a`` (New in 0.5a4) Copy all needed distributions to the installation directory, even if they are already present in a directory on sys.path. In older versions of EasyInstall, this was the default behavior, but now you must explicitly request it. By default, EasyInstall will no longer copy such distributions from other sys.path directories to the installation directory, unless you explicitly gave the distribution's filename on the command line. Note that as of 0.6a10, using this option excludes "system" and "development" eggs from consideration because they can't be reliably copied. This may cause EasyInstall to choose an older version of a package than what you expected, or it may cause downloading and installation of a fresh copy of something that's already installed. You will see warning messages for any eggs that EasyInstall skips, before it falls back to an older version or attempts to download a fresh copy. ``--find-links=URLS_OR_FILENAMES, -f URLS_OR_FILENAMES`` Scan the specified "download pages" or directories for direct links to eggs or other distributions. Any existing file or directory names or direct download URLs are immediately added to EasyInstall's search cache, and any indirect URLs (ones that don't point to eggs or other recognized archive formats) are added to a list of additional places to search for download links. As soon as EasyInstall has to go online to find a package (either because it doesn't exist locally, or because ``--upgrade`` or ``-U`` was used), the specified URLs will be downloaded and scanned for additional direct links. Eggs and archives found by way of ``--find-links`` are only downloaded if they are needed to meet a requirement specified on the command line; links to unneeded packages are ignored. If all requested packages can be found using links on the specified download pages, the Python Package Index will not be consulted unless you also specified the ``--upgrade`` or ``-U`` option. (Note: if you want to refer to a local HTML file containing links, you must use a ``file:`` URL, as filenames that do not refer to a directory, egg, or archive are ignored.) You may specify multiple URLs or file/directory names with this option, separated by whitespace. Note that on the command line, you will probably have to surround the URL list with quotes, so that it is recognized as a single option value. You can also specify URLs in a configuration file; see `Configuration Files`_, above. Changed in 0.6a10: previously all URLs and directories passed to this option were scanned as early as possible, but from 0.6a10 on, only directories and direct archive links are scanned immediately; URLs are not retrieved unless a package search was already going to go online due to a package not being available locally, or due to the use of the ``--update`` or ``-U`` option. ``--no-find-links`` Blocks the addition of any link. This parameter is useful if you want to avoid adding links defined in a project easy_install is installing (whether it's a requested project or a dependency). When used, ``--find-links`` is ignored. Added in Distribute 0.6.11 and Setuptools 0.7. ``--index-url=URL, -i URL`` (New in 0.4a1; default changed in 0.6c7) Specifies the base URL of the Python Package Index. The default is https://pypi.python.org/simple if not specified. When a package is requested that is not locally available or linked from a ``--find-links`` download page, the package index will be searched for download pages for the needed package, and those download pages will be searched for links to download an egg or source distribution. ``--editable, -e`` (New in 0.6a1) Only find and download source distributions for the specified projects, unpacking them to subdirectories of the specified ``--build-directory``. EasyInstall will not actually build or install the requested projects or their dependencies; it will just find and extract them for you. See `Editing and Viewing Source Packages`_ above for more details. ``--build-directory=DIR, -b DIR`` (UPDATED in 0.6a1) Set the directory used to build source packages. If a package is built from a source distribution or checkout, it will be extracted to a subdirectory of the specified directory. The subdirectory will have the same name as the extracted distribution's project, but in all-lowercase. If a file or directory of that name already exists in the given directory, a warning will be printed to the console, and the build will take place in a temporary directory instead. This option is most useful in combination with the ``--editable`` option, which forces EasyInstall to *only* find and extract (but not build and install) source distributions. See `Editing and Viewing Source Packages`_, above, for more information. ``--verbose, -v, --quiet, -q`` (New in 0.4a4) Control the level of detail of EasyInstall's progress messages. The default detail level is "info", which prints information only about relatively time-consuming operations like running a setup script, unpacking an archive, or retrieving a URL. Using ``-q`` or ``--quiet`` drops the detail level to "warn", which will only display installation reports, warnings, and errors. Using ``-v`` or ``--verbose`` increases the detail level to include individual file-level operations, link analysis messages, and distutils messages from any setup scripts that get run. If you include the ``-v`` option more than once, the second and subsequent uses are passed down to any setup scripts, increasing the verbosity of their reporting as well. ``--dry-run, -n`` (New in 0.4a4) Don't actually install the package or scripts. This option is passed down to any setup scripts run, so packages should not actually build either. This does *not* skip downloading, nor does it skip extracting source distributions to a temporary/build directory. ``--optimize=LEVEL``, ``-O LEVEL`` (New in 0.4a4) If you are installing from a source distribution, and are *not* using the ``--zip-ok`` option, this option controls the optimization level for compiling installed ``.py`` files to ``.pyo`` files. It does not affect the compilation of modules contained in ``.egg`` files, only those in ``.egg`` directories. The optimization level can be set to 0, 1, or 2; the default is 0 (unless it's set under ``install`` or ``install_lib`` in one of your distutils configuration files). ``--record=FILENAME`` (New in 0.5a4) Write a record of all installed files to FILENAME. This is basically the same as the same option for the standard distutils "install" command, and is included for compatibility with tools that expect to pass this option to "setup.py install". ``--site-dirs=DIRLIST, -S DIRLIST`` (New in 0.6a1) Specify one or more custom "site" directories (separated by commas). "Site" directories are directories where ``.pth`` files are processed, such as the main Python ``site-packages`` directory. As of 0.6a10, EasyInstall automatically detects whether a given directory processes ``.pth`` files (or can be made to do so), so you should not normally need to use this option. It is is now only necessary if you want to override EasyInstall's judgment and force an installation directory to be treated as if it supported ``.pth`` files. ``--no-deps, -N`` (New in 0.6a6) Don't install any dependencies. This is intended as a convenience for tools that wrap eggs in a platform-specific packaging system. (We don't recommend that you use it for anything else.) ``--allow-hosts=PATTERNS, -H PATTERNS`` (New in 0.6a6) Restrict downloading and spidering to hosts matching the specified glob patterns. E.g. ``-H *.python.org`` restricts web access so that only packages listed and downloadable from machines in the ``python.org`` domain. The glob patterns must match the *entire* user/host/port section of the target URL(s). For example, ``*.python.org`` will NOT accept a URL like ``http://python.org/foo`` or ``http://www.python.org:8080/``. Multiple patterns can be specified by separting them with commas. The default pattern is ``*``, which matches anything. In general, this option is mainly useful for blocking EasyInstall's web access altogether (e.g. ``-Hlocalhost``), or to restrict it to an intranet or other trusted site. EasyInstall will do the best it can to satisfy dependencies given your host restrictions, but of course can fail if it can't find suitable packages. EasyInstall displays all blocked URLs, so that you can adjust your ``--allow-hosts`` setting if it is more strict than you intended. Some sites may wish to define a restrictive default setting for this option in their `configuration files`_, and then manually override the setting on the command line as needed. ``--prefix=DIR`` (New in 0.6a10) Use the specified directory as a base for computing the default installation and script directories. On Windows, the resulting default directories will be ``prefix\\Lib\\site-packages`` and ``prefix\\Scripts``, while on other platforms the defaults will be ``prefix/lib/python2.X/site-packages`` (with the appropriate version substituted) for libraries and ``prefix/bin`` for scripts. Note that the ``--prefix`` option only sets the *default* installation and script directories, and does not override the ones set on the command line or in a configuration file. ``--local-snapshots-ok, -l`` (New in 0.6c6) Normally, EasyInstall prefers to only install *released* versions of projects, not in-development ones, because such projects may not have a currently-valid version number. So, it usually only installs them when their ``setup.py`` directory is explicitly passed on the command line. However, if this option is used, then any in-development projects that were installed using the ``setup.py develop`` command, will be used to build eggs, effectively upgrading the "in-development" project to a snapshot release. Normally, this option is used only in conjunction with the ``--always-copy`` option to create a distributable snapshot of every egg needed to run an application. Note that if you use this option, you must make sure that there is a valid version number (such as an SVN revision number tag) for any in-development projects that may be used, as otherwise EasyInstall may not be able to tell what version of the project is "newer" when future installations or upgrades are attempted. .. _non-root installation: Custom Installation Locations ----------------------------- By default, EasyInstall installs python packages into Python's main ``site-packages`` directory, and manages them using a custom ``.pth`` file in that same directory. Very often though, a user or developer wants ``easy_install`` to install and manage python packages in an alternative location, usually for one of 3 reasons: 1. They don't have access to write to the main Python site-packages directory. 2. They want a user-specific stash of packages, that is not visible to other users. 3. They want to isolate a set of packages to a specific python application, usually to minimize the possibility of version conflicts. Historically, there have been many approaches to achieve custom installation. The following section lists only the easiest and most relevant approaches [1]_. `Use the "--user" option`_ `Use the "--user" option and customize "PYTHONUSERBASE"`_ `Use "virtualenv"`_ .. [1] There are older ways to achieve custom installation using various ``easy_install`` and ``setup.py install`` options, combined with ``PYTHONPATH`` and/or ``PYTHONUSERBASE`` alterations, but all of these are effectively deprecated by the User scheme brought in by `PEP-370`_ in Python 2.6. .. _PEP-370: http://www.python.org/dev/peps/pep-0370/ Use the "--user" option ~~~~~~~~~~~~~~~~~~~~~~~ With Python 2.6 came the User scheme for installation, which means that all python distributions support an alternative install location that is specific to a user [2]_ [3]_. The Default location for each OS is explained in the python documentation for the ``site.USER_BASE`` variable. This mode of installation can be turned on by specifying the ``--user`` option to ``setup.py install`` or ``easy_install``. This approach serves the need to have a user-specific stash of packages. .. [2] Prior to Python2.6, Mac OS X offered a form of the User scheme. That is now subsumed into the User scheme introduced in Python 2.6. .. [3] Prior to the User scheme, there was the Home scheme, which is still available, but requires more effort than the User scheme to get packages recognized. Use the "--user" option and customize "PYTHONUSERBASE" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The User scheme install location can be customized by setting the ``PYTHONUSERBASE`` environment variable, which updates the value of ``site.USER_BASE``. To isolate packages to a specific application, simply set the OS environment of that application to a specific value of ``PYTHONUSERBASE``, that contains just those packages. Use "virtualenv" ~~~~~~~~~~~~~~~~ "virtualenv" is a 3rd-party python package that effectively "clones" a python installation, thereby creating an isolated location to intall packages. The evolution of "virtualenv" started before the existence of the User installation scheme. "virtualenv" provides a version of ``easy_install`` that is scoped to the cloned python install and is used in the normal way. "virtualenv" does offer various features that the User installation scheme alone does not provide, e.g. the ability to hide the main python site-packages. Please refer to the `virtualenv`_ documentation for more details. .. _virtualenv: https://pypi.python.org/pypi/virtualenv Package Index "API" ------------------- Custom package indexes (and PyPI) must follow the following rules for EasyInstall to be able to look up and download packages: 1. Except where stated otherwise, "pages" are HTML or XHTML, and "links" refer to ``href`` attributes. 2. Individual project version pages' URLs must be of the form ``base/projectname/version``, where ``base`` is the package index's base URL. 3. Omitting the ``/version`` part of a project page's URL (but keeping the trailing ``/``) should result in a page that is either: a) The single active version of that project, as though the version had been explicitly included, OR b) A page with links to all of the active version pages for that project. 4. Individual project version pages should contain direct links to downloadable distributions where possible. It is explicitly permitted for a project's "long_description" to include URLs, and these should be formatted as HTML links by the package index, as EasyInstall does no special processing to identify what parts of a page are index-specific and which are part of the project's supplied description. 5. Where available, MD5 information should be added to download URLs by appending a fragment identifier of the form ``#md5=...``, where ``...`` is the 32-character hex MD5 digest. EasyInstall will verify that the downloaded file's MD5 digest matches the given value. 6. Individual project version pages should identify any "homepage" or "download" URLs using ``rel="homepage"`` and ``rel="download"`` attributes on the HTML elements linking to those URLs. Use of these attributes will cause EasyInstall to always follow the provided links, unless it can be determined by inspection that they are downloadable distributions. If the links are not to downloadable distributions, they are retrieved, and if they are HTML, they are scanned for download links. They are *not* scanned for additional "homepage" or "download" links, as these are only processed for pages that are part of a package index site. 7. The root URL of the index, if retrieved with a trailing ``/``, must result in a page containing links to *all* projects' active version pages. (Note: This requirement is a workaround for the absence of case-insensitive ``safe_name()`` matching of project names in URL paths. If project names are matched in this fashion (e.g. via the PyPI server, mod_rewrite, or a similar mechanism), then it is not necessary to include this all-packages listing page.) 8. If a package index is accessed via a ``file://`` URL, then EasyInstall will automatically use ``index.html`` files, if present, when trying to read a directory with a trailing ``/`` on the URL. Backward Compatibility ~~~~~~~~~~~~~~~~~~~~~~ Package indexes that wish to support setuptools versions prior to 0.6b4 should also follow these rules: * Homepage and download links must be preceded with ``"Home Page"`` or ``"Download URL"``, in addition to (or instead of) the ``rel=""`` attributes on the actual links. These marker strings do not need to be visible, or uncommented, however! For example, the following is a valid homepage link that will work with any version of setuptools::
  • Home Page: http://sqlobject.org
  • Even though the marker string is in an HTML comment, older versions of EasyInstall will still "see" it and know that the link that follows is the project's home page URL. * The pages described by paragraph 3(b) of the preceding section *must* contain the string ``"Index of Packages"`` somewhere in their text. This can be inside of an HTML comment, if desired, and it can be anywhere in the page. (Note: this string MUST NOT appear on normal project pages, as described in paragraphs 2 and 3(a)!) In addition, for compatibility with PyPI versions that do not use ``#md5=`` fragment IDs, EasyInstall uses the following regular expression to match PyPI's displayed MD5 info (broken onto two lines for readability):: ([^<]+)\n\s+\(md5\) History ======= 0.6c9 * Fixed ``win32.exe`` support for .pth files, so unnecessary directory nesting is flattened out in the resulting egg. (There was a case-sensitivity problem that affected some distributions, notably ``pywin32``.) * Prevent ``--help-commands`` and other junk from showing under Python 2.5 when running ``easy_install --help``. * Fixed GUI scripts sometimes not executing on Windows * Fixed not picking up dependency links from recursive dependencies. * Only make ``.py``, ``.dll`` and ``.so`` files executable when unpacking eggs * Changes for Jython compatibility * Improved error message when a requirement is also a directory name, but the specified directory is not a source package. * Fixed ``--allow-hosts`` option blocking ``file:`` URLs * Fixed HTTP SVN detection failing when the page title included a project name (e.g. on SourceForge-hosted SVN) * Fix Jython script installation to handle ``#!`` lines better when ``sys.executable`` is a script. * Removed use of deprecated ``md5`` module if ``hashlib`` is available * Keep site directories (e.g. ``site-packages``) from being included in ``.pth`` files. 0.6c7 * ``ftp:`` download URLs now work correctly. * The default ``--index-url`` is now ``https://pypi.python.org/simple``, to use the Python Package Index's new simpler (and faster!) REST API. 0.6c6 * EasyInstall no longer aborts the installation process if a URL it wants to retrieve can't be downloaded, unless the URL is an actual package download. Instead, it issues a warning and tries to keep going. * Fixed distutils-style scripts originally built on Windows having their line endings doubled when installed on any platform. * Added ``--local-snapshots-ok`` flag, to allow building eggs from projects installed using ``setup.py develop``. * Fixed not HTML-decoding URLs scraped from web pages 0.6c5 * Fixed ``.dll`` files on Cygwin not having executable permisions when an egg is installed unzipped. 0.6c4 * Added support for HTTP "Basic" authentication using ``http://user:pass@host`` URLs. If a password-protected page contains links to the same host (and protocol), those links will inherit the credentials used to access the original page. * Removed all special support for Sourceforge mirrors, as Sourceforge's mirror system now works well for non-browser downloads. * Fixed not recognizing ``win32.exe`` installers that included a custom bitmap. * Fixed not allowing ``os.open()`` of paths outside the sandbox, even if they are opened read-only (e.g. reading ``/dev/urandom`` for random numbers, as is done by ``os.urandom()`` on some platforms). * Fixed a problem with ``.pth`` testing on Windows when ``sys.executable`` has a space in it (e.g., the user installed Python to a ``Program Files`` directory). 0.6c3 * You can once again use "python -m easy_install" with Python 2.4 and above. * Python 2.5 compatibility fixes added. 0.6c2 * Windows script wrappers now support quoted arguments and arguments containing spaces. (Patch contributed by Jim Fulton.) * The ``ez_setup.py`` script now actually works when you put a setuptools ``.egg`` alongside it for bootstrapping an offline machine. * A writable installation directory on ``sys.path`` is no longer required to download and extract a source distribution using ``--editable``. * Generated scripts now use ``-x`` on the ``#!`` line when ``sys.executable`` contains non-ASCII characters, to prevent deprecation warnings about an unspecified encoding when the script is run. 0.6c1 * EasyInstall now includes setuptools version information in the ``User-Agent`` string sent to websites it visits. 0.6b4 * Fix creating Python wrappers for non-Python scripts * Fix ``ftp://`` directory listing URLs from causing a crash when used in the "Home page" or "Download URL" slots on PyPI. * Fix ``sys.path_importer_cache`` not being updated when an existing zipfile or directory is deleted/overwritten. * Fix not recognizing HTML 404 pages from package indexes. * Allow ``file://`` URLs to be used as a package index. URLs that refer to directories will use an internally-generated directory listing if there is no ``index.html`` file in the directory. * Allow external links in a package index to be specified using ``rel="homepage"`` or ``rel="download"``, without needing the old PyPI-specific visible markup. * Suppressed warning message about possibly-misspelled project name, if an egg or link for that project name has already been seen. 0.6b3 * Fix local ``--find-links`` eggs not being copied except with ``--always-copy``. * Fix sometimes not detecting local packages installed outside of "site" directories. * Fix mysterious errors during initial ``setuptools`` install, caused by ``ez_setup`` trying to run ``easy_install`` twice, due to a code fallthru after deleting the egg from which it's running. 0.6b2 * Don't install or update a ``site.py`` patch when installing to a ``PYTHONPATH`` directory with ``--multi-version``, unless an ``easy-install.pth`` file is already in use there. * Construct ``.pth`` file paths in such a way that installing an egg whose name begins with ``import`` doesn't cause a syntax error. * Fixed a bogus warning message that wasn't updated since the 0.5 versions. 0.6b1 * Better ambiguity management: accept ``#egg`` name/version even if processing what appears to be a correctly-named distutils file, and ignore ``.egg`` files with no ``-``, since valid Python ``.egg`` files always have a version number (but Scheme eggs often don't). * Support ``file://`` links to directories in ``--find-links``, so that easy_install can build packages from local source checkouts. * Added automatic retry for Sourceforge mirrors. The new download process is to first just try dl.sourceforge.net, then randomly select mirror IPs and remove ones that fail, until something works. The removed IPs stay removed for the remainder of the run. * Ignore bdist_dumb distributions when looking at download URLs. 0.6a11 * Process ``dependency_links.txt`` if found in a distribution, by adding the URLs to the list for scanning. * Use relative paths in ``.pth`` files when eggs are being installed to the same directory as the ``.pth`` file. This maximizes portability of the target directory when building applications that contain eggs. * Added ``easy_install-N.N`` script(s) for convenience when using multiple Python versions. * Added automatic handling of installation conflicts. Eggs are now shifted to the front of sys.path, in an order consistent with where they came from, making EasyInstall seamlessly co-operate with system package managers. The ``--delete-conflicting`` and ``--ignore-conflicts-at-my-risk`` options are now no longer necessary, and will generate warnings at the end of a run if you use them. * Don't recursively traverse subdirectories given to ``--find-links``. 0.6a10 * Added exhaustive testing of the install directory, including a spawn test for ``.pth`` file support, and directory writability/existence checks. This should virtually eliminate the need to set or configure ``--site-dirs``. * Added ``--prefix`` option for more do-what-I-mean-ishness in the absence of RTFM-ing. :) * Enhanced ``PYTHONPATH`` support so that you don't have to put any eggs on it manually to make it work. ``--multi-version`` is no longer a silent default; you must explicitly use it if installing to a non-PYTHONPATH, non-"site" directory. * Expand ``$variables`` used in the ``--site-dirs``, ``--build-directory``, ``--install-dir``, and ``--script-dir`` options, whether on the command line or in configuration files. * Improved SourceForge mirror processing to work faster and be less affected by transient HTML changes made by SourceForge. * PyPI searches now use the exact spelling of requirements specified on the command line or in a project's ``install_requires``. Previously, a normalized form of the name was used, which could lead to unnecessary full-index searches when a project's name had an underscore (``_``) in it. * EasyInstall can now download bare ``.py`` files and wrap them in an egg, as long as you include an ``#egg=name-version`` suffix on the URL, or if the ``.py`` file is listed as the "Download URL" on the project's PyPI page. This allows third parties to "package" trivial Python modules just by linking to them (e.g. from within their own PyPI page or download links page). * The ``--always-copy`` option now skips "system" and "development" eggs since they can't be reliably copied. Note that this may cause EasyInstall to choose an older version of a package than what you expected, or it may cause downloading and installation of a fresh version of what's already installed. * The ``--find-links`` option previously scanned all supplied URLs and directories as early as possible, but now only directories and direct archive links are scanned immediately. URLs are not retrieved unless a package search was already going to go online due to a package not being available locally, or due to the use of the ``--update`` or ``-U`` option. * Fixed the annoying ``--help-commands`` wart. 0.6a9 * Fixed ``.pth`` file processing picking up nested eggs (i.e. ones inside "baskets") when they weren't explicitly listed in the ``.pth`` file. * If more than one URL appears to describe the exact same distribution, prefer the shortest one. This helps to avoid "table of contents" CGI URLs like the ones on effbot.org. * Quote arguments to python.exe (including python's path) to avoid problems when Python (or a script) is installed in a directory whose name contains spaces on Windows. * Support full roundtrip translation of eggs to and from ``bdist_wininst`` format. Running ``bdist_wininst`` on a setuptools-based package wraps the egg in an .exe that will safely install it as an egg (i.e., with metadata and entry-point wrapper scripts), and ``easy_install`` can turn the .exe back into an ``.egg`` file or directory and install it as such. 0.6a8 * Update for changed SourceForge mirror format * Fixed not installing dependencies for some packages fetched via Subversion * Fixed dependency installation with ``--always-copy`` not using the same dependency resolution procedure as other operations. * Fixed not fully removing temporary directories on Windows, if a Subversion checkout left read-only files behind * Fixed some problems building extensions when Pyrex was installed, especially with Python 2.4 and/or packages using SWIG. 0.6a7 * Fixed not being able to install Windows script wrappers using Python 2.3 0.6a6 * Added support for "traditional" PYTHONPATH-based non-root installation, and also the convenient ``virtual-python.py`` script, based on a contribution by Ian Bicking. The setuptools egg now contains a hacked ``site`` module that makes the PYTHONPATH-based approach work with .pth files, so that you can get the full EasyInstall feature set on such installations. * Added ``--no-deps`` and ``--allow-hosts`` options. * Improved Windows ``.exe`` script wrappers so that the script can have the same name as a module without confusing Python. * Changed dependency processing so that it's breadth-first, allowing a depender's preferences to override those of a dependee, to prevent conflicts when a lower version is acceptable to the dependee, but not the depender. Also, ensure that currently installed/selected packages aren't given precedence over ones desired by a package being installed, which could cause conflict errors. 0.6a3 * Improved error message when trying to use old ways of running ``easy_install``. Removed the ability to run via ``python -m`` or by running ``easy_install.py``; ``easy_install`` is the command to run on all supported platforms. * Improved wrapper script generation and runtime initialization so that a VersionConflict doesn't occur if you later install a competing version of a needed package as the default version of that package. * Fixed a problem parsing version numbers in ``#egg=`` links. 0.6a2 * EasyInstall can now install "console_scripts" defined by packages that use ``setuptools`` and define appropriate entry points. On Windows, console scripts get an ``.exe`` wrapper so you can just type their name. On other platforms, the scripts are installed without a file extension. * Using ``python -m easy_install`` or running ``easy_install.py`` is now DEPRECATED, since an ``easy_install`` wrapper is now available on all platforms. 0.6a1 * EasyInstall now does MD5 validation of downloads from PyPI, or from any link that has an "#md5=..." trailer with a 32-digit lowercase hex md5 digest. * EasyInstall now handles symlinks in target directories by removing the link, rather than attempting to overwrite the link's destination. This makes it easier to set up an alternate Python "home" directory (as described above in the `Non-Root Installation`_ section). * Added support for handling MacOS platform information in ``.egg`` filenames, based on a contribution by Kevin Dangoor. You may wish to delete and reinstall any eggs whose filename includes "darwin" and "Power_Macintosh", because the format for this platform information has changed so that minor OS X upgrades (such as 10.4.1 to 10.4.2) do not cause eggs built with a previous OS version to become obsolete. * easy_install's dependency processing algorithms have changed. When using ``--always-copy``, it now ensures that dependencies are copied too. When not using ``--always-copy``, it tries to use a single resolution loop, rather than recursing. * Fixed installing extra ``.pyc`` or ``.pyo`` files for scripts with ``.py`` extensions. * Added ``--site-dirs`` option to allow adding custom "site" directories. Made ``easy-install.pth`` work in platform-specific alternate site directories (e.g. ``~/Library/Python/2.x/site-packages`` on Mac OS X). * If you manually delete the current version of a package, the next run of EasyInstall against the target directory will now remove the stray entry from the ``easy-install.pth`` file. * EasyInstall now recognizes URLs with a ``#egg=project_name`` fragment ID as pointing to the named project's source checkout. Such URLs have a lower match precedence than any other kind of distribution, so they'll only be used if they have a higher version number than any other available distribution, or if you use the ``--editable`` option. The ``#egg`` fragment can contain a version if it's formatted as ``#egg=proj-ver``, where ``proj`` is the project name, and ``ver`` is the version number. You *must* use the format for these values that the ``bdist_egg`` command uses; i.e., all non-alphanumeric runs must be condensed to single underscore characters. * Added the ``--editable`` option; see `Editing and Viewing Source Packages`_ above for more info. Also, slightly changed the behavior of the ``--build-directory`` option. * Fixed the setup script sandbox facility not recognizing certain paths as valid on case-insensitive platforms. 0.5a12 * Fix ``python -m easy_install`` not working due to setuptools being installed as a zipfile. Update safety scanner to check for modules that might be used as ``python -m`` scripts. * Misc. fixes for win32.exe support, including changes to support Python 2.4's changed ``bdist_wininst`` format. 0.5a10 * Put the ``easy_install`` module back in as a module, as it's needed for ``python -m`` to run it! * Allow ``--find-links/-f`` to accept local directories or filenames as well as URLs. 0.5a9 * EasyInstall now automatically detects when an "unmanaged" package or module is going to be on ``sys.path`` ahead of a package you're installing, thereby preventing the newer version from being imported. By default, it will abort installation to alert you of the problem, but there are also new options (``--delete-conflicting`` and ``--ignore-conflicts-at-my-risk``) available to change the default behavior. (Note: this new feature doesn't take effect for egg files that were built with older ``setuptools`` versions, because they lack the new metadata file required to implement it.) * The ``easy_install`` distutils command now uses ``DistutilsError`` as its base error type for errors that should just issue a message to stderr and exit the program without a traceback. * EasyInstall can now be given a path to a directory containing a setup script, and it will attempt to build and install the package there. * EasyInstall now performs a safety analysis on module contents to determine whether a package is likely to run in zipped form, and displays information about what modules may be doing introspection that would break when running as a zipfile. * Added the ``--always-unzip/-Z`` option, to force unzipping of packages that would ordinarily be considered safe to unzip, and changed the meaning of ``--zip-ok/-z`` to "always leave everything zipped". 0.5a8 * There is now a separate documentation page for `setuptools`_; revision history that's not specific to EasyInstall has been moved to that page. .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools 0.5a5 * Made ``easy_install`` a standard ``setuptools`` command, moving it from the ``easy_install`` module to ``setuptools.command.easy_install``. Note that if you were importing or extending it, you must now change your imports accordingly. ``easy_install.py`` is still installed as a script, but not as a module. 0.5a4 * Added ``--always-copy/-a`` option to always copy needed packages to the installation directory, even if they're already present elsewhere on sys.path. (In previous versions, this was the default behavior, but now you must request it.) * Added ``--upgrade/-U`` option to force checking PyPI for latest available version(s) of all packages requested by name and version, even if a matching version is available locally. * Added automatic installation of dependencies declared by a distribution being installed. These dependencies must be listed in the distribution's ``EGG-INFO`` directory, so the distribution has to have declared its dependencies by using setuptools. If a package has requirements it didn't declare, you'll still have to deal with them yourself. (E.g., by asking EasyInstall to find and install them.) * Added the ``--record`` option to ``easy_install`` for the benefit of tools that run ``setup.py install --record=filename`` on behalf of another packaging system.) 0.5a3 * Fixed not setting script permissions to allow execution. * Improved sandboxing so that setup scripts that want a temporary directory (e.g. pychecker) can still run in the sandbox. 0.5a2 * Fix stupid stupid refactoring-at-the-last-minute typos. :( 0.5a1 * Added support for converting ``.win32.exe`` installers to eggs on the fly. EasyInstall will now recognize such files by name and install them. * Fixed a problem with picking the "best" version to install (versions were being sorted as strings, rather than as parsed values) 0.4a4 * Added support for the distutils "verbose/quiet" and "dry-run" options, as well as the "optimize" flag. * Support downloading packages that were uploaded to PyPI (by scanning all links on package pages, not just the homepage/download links). 0.4a3 * Add progress messages to the search/download process so that you can tell what URLs it's reading to find download links. (Hopefully, this will help people report out-of-date and broken links to package authors, and to tell when they've asked for a package that doesn't exist.) 0.4a2 * Added support for installing scripts * Added support for setting options via distutils configuration files, and using distutils' default options as a basis for EasyInstall's defaults. * Renamed ``--scan-url/-s`` to ``--find-links/-f`` to free up ``-s`` for the script installation directory option. * Use ``urllib2`` instead of ``urllib``, to allow use of ``https:`` URLs if Python includes SSL support. 0.4a1 * Added ``--scan-url`` and ``--index-url`` options, to scan download pages and search PyPI for needed packages. 0.3a4 * Restrict ``--build-directory=DIR/-b DIR`` option to only be used with single URL installs, to avoid running the wrong setup.py. 0.3a3 * Added ``--build-directory=DIR/-b DIR`` option. * Added "installation report" that explains how to use 'require()' when doing a multiversion install or alternate installation directory. * Added SourceForge mirror auto-select (Contributed by Ian Bicking) * Added "sandboxing" that stops a setup script from running if it attempts to write to the filesystem outside of the build area * Added more workarounds for packages with quirky ``install_data`` hacks 0.3a2 * Added subversion download support for ``svn:`` and ``svn+`` URLs, as well as automatic recognition of HTTP subversion URLs (Contributed by Ian Bicking) * Misc. bug fixes 0.3a1 * Initial release. Future Plans ============ * Additional utilities to list/remove/verify packages * Signature checking? SSL? Ability to suppress PyPI search? * Display byte progress meter when downloading distributions and long pages? * Redirect stdout/stderr to log during run_setup? share/doc/alt-python34-setuptools/CHANGES (links).txt000064400000174601152342604300016143 0ustar00======= CHANGES ======= --- 2.0 --- * `Issue #121 `_: Exempt lib2to3 pickled grammars from DirectorySandbox. * `Issue #41 `_: Dropped support for Python 2.4 and Python 2.5. Clients requiring setuptools for those versions of Python should use setuptools 1.x. * Removed ``setuptools.command.easy_install.HAS_USER_SITE``. Clients expecting this boolean variable should use ``site.ENABLE_USER_SITE`` instead. * Removed ``pkg_resources.ImpWrapper``. Clients that expected this class should use ``pkgutil.ImpImporter`` instead. ----- 1.4.2 ----- * `Issue #116 `_: Correct TypeError when reading a local package index on Python 3. ----- 1.4.1 ----- * `Issue #114 `_: Use ``sys.getfilesystemencoding`` for decoding config in ``bdist_wininst`` distributions. * `Issue #105 `_ and `Issue #113 `_: Establish a more robust technique for determining the terminal encoding:: 1. Try ``getpreferredencoding`` 2. If that returns US_ASCII or None, try the encoding from ``getdefaultlocale``. If that encoding was a "fallback" because Python could not figure it out from the environment or OS, encoding remains unresolved. 3. If the encoding is resolved, then make sure Python actually implements the encoding. 4. On the event of an error or unknown codec, revert to fallbacks (UTF-8 on Darwin, ASCII on everything else). 5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was a bug on older Python releases. On a side note, it would seem that the encoding only matters for when SVN does not yet support ``--xml`` and when getting repository and svn version numbers. The ``--xml`` technique should yield UTF-8 according to some messages on the SVN mailing lists. So if the version numbers are always 7-bit ASCII clean, it may be best to only support the file parsing methods for legacy SVN releases and support for SVN without the subprocess command would simple go away as support for the older SVNs does. --- 1.4 --- * `Issue #27 `_: ``easy_install`` will now use credentials from .pypirc if present for connecting to the package index. * `Pull Request #21 `_: Omit unwanted newlines in ``package_index._encode_auth`` when the username/password pair length indicates wrapping. ----- 1.3.2 ----- * `Issue #99 `_: Fix filename encoding issues in SVN support. ----- 1.3.1 ----- * Remove exuberant warning in SVN support when SVN is not used. --- 1.3 --- * Address security vulnerability in SSL match_hostname check as reported in `Python #17997 `_. * Prefer `backports.ssl_match_hostname `_ for backport implementation if present. * Correct NameError in ``ssl_support`` module (``socket.error``). --- 1.2 --- * `Issue #26 `_: Add support for SVN 1.7. Special thanks to Philip Thiem for the contribution. * `Issue #93 `_: Wheels are now distributed with every release. Note that as reported in `Issue #108 `_, as of Pip 1.4, scripts aren't installed properly from wheels. Therefore, if using Pip to install setuptools from a wheel, the ``easy_install`` command will not be available. * Setuptools "natural" launcher support, introduced in 1.0, is now officially supported. ----- 1.1.7 ----- * Fixed behavior of NameError handling in 'script template (dev).py' (script launcher for 'develop' installs). * ``ez_setup.py`` now ensures partial downloads are cleaned up following a failed download. * `Distribute #363 `_ and `Issue #55 `_: Skip an sdist test that fails on locales other than UTF-8. ----- 1.1.6 ----- * `Distribute #349 `_: ``sandbox.execfile`` now opens the target file in binary mode, thus honoring a BOM in the file when compiled. ----- 1.1.5 ----- * `Issue #69 `_: Second attempt at fix (logic was reversed). ----- 1.1.4 ----- * `Issue #77 `_: Fix error in upload command (Python 2.4). ----- 1.1.3 ----- * Fix NameError in previous patch. ----- 1.1.2 ----- * `Issue #69 `_: Correct issue where 404 errors are returned for URLs with fragments in them (such as #egg=). ----- 1.1.1 ----- * `Issue #75 `_: Add ``--insecure`` option to ez_setup.py to accommodate environments where a trusted SSL connection cannot be validated. * `Issue #76 `_: Fix AttributeError in upload command with Python 2.4. --- 1.1 --- * `Issue #71 `_ (`Distribute #333 `_): EasyInstall now puts less emphasis on the condition when a host is blocked via ``--allow-hosts``. * `Issue #72 `_: Restored Python 2.4 compatibility in ``ez_setup.py``. --- 1.0 --- * `Issue #60 `_: On Windows, Setuptools supports deferring to another launcher, such as Vinay Sajip's `pylauncher `_ (included with Python 3.3) to launch console and GUI scripts and not install its own launcher executables. This experimental functionality is currently only enabled if the ``SETUPTOOLS_LAUNCHER`` environment variable is set to "natural". In the future, this behavior may become default, but only after it has matured and seen substantial adoption. The ``SETUPTOOLS_LAUNCHER`` also accepts "executable" to force the default behavior of creating launcher executables. * `Issue #63 `_: Bootstrap script (ez_setup.py) now prefers Powershell, curl, or wget for retrieving the Setuptools tarball for improved security of the install. The script will still fall back to a simple ``urlopen`` on platforms that do not have these tools. * `Issue #65 `_: Deprecated the ``Features`` functionality. * `Issue #52 `_: In ``VerifyingHTTPSConn``, handle a tunnelled (proxied) connection. Backward-Incompatible Changes ============================= This release includes a couple of backward-incompatible changes, but most if not all users will find 1.0 a drop-in replacement for 0.9. * `Issue #50 `_: Normalized API of environment marker support. Specifically, removed line number and filename from SyntaxErrors when returned from `pkg_resources.invalid_marker`. Any clients depending on the specific string representation of exceptions returned by that function may need to be updated to account for this change. * `Issue #50 `_: SyntaxErrors generated by `pkg_resources.invalid_marker` are normalized for cross-implementation consistency. * Removed ``--ignore-conflicts-at-my-risk`` and ``--delete-conflicting`` options to easy_install. These options have been deprecated since 0.6a11. ----- 0.9.8 ----- * `Issue #53 `_: Fix NameErrors in `_vcs_split_rev_from_url`. ----- 0.9.7 ----- * `Issue #49 `_: Correct AttributeError on PyPy where a hashlib.HASH object does not have a `.name` attribute. * `Issue #34 `_: Documentation now refers to bootstrap script in code repository referenced by bookmark. * Add underscore-separated keys to environment markers (markerlib). ----- 0.9.6 ----- * `Issue #44 `_: Test failure on Python 2.4 when MD5 hash doesn't have a `.name` attribute. ----- 0.9.5 ----- * `Python #17980 `_: Fix security vulnerability in SSL certificate validation. ----- 0.9.4 ----- * `Issue #43 `_: Fix issue (introduced in 0.9.1) with version resolution when upgrading over other releases of Setuptools. ----- 0.9.3 ----- * `Issue #42 `_: Fix new ``AttributeError`` introduced in last fix. ----- 0.9.2 ----- * `Issue #42 `_: Fix regression where blank checksums would trigger an ``AttributeError``. ----- 0.9.1 ----- * `Distribute #386 `_: Allow other positional and keyword arguments to os.open. * Corrected dependency on certifi mis-referenced in 0.9. --- 0.9 --- * `package_index` now validates hashes other than MD5 in download links. --- 0.8 --- * Code base now runs on Python 2.4 - Python 3.3 without Python 2to3 conversion. ----- 0.7.8 ----- * `Distribute #375 `_: Yet another fix for yet another regression. ----- 0.7.7 ----- * `Distribute #375 `_: Repair AttributeError created in last release (redo). * `Issue #30 `_: Added test for get_cache_path. ----- 0.7.6 ----- * `Distribute #375 `_: Repair AttributeError created in last release. ----- 0.7.5 ----- * `Issue #21 `_: Restore Python 2.4 compatibility in ``test_easy_install``. * `Distribute #375 `_: Merged additional warning from Distribute 0.6.46. * Now honor the environment variable ``SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT`` in addition to the now deprecated ``DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT``. ----- 0.7.4 ----- * `Issue #20 `_: Fix comparison of parsed SVN version on Python 3. ----- 0.7.3 ----- * `Issue #1 `_: Disable installation of Windows-specific files on non-Windows systems. * Use new sysconfig module with Python 2.7 or >=3.2. ----- 0.7.2 ----- * `Issue #14 `_: Use markerlib when the `parser` module is not available. * `Issue #10 `_: ``ez_setup.py`` now uses HTTPS to download setuptools from PyPI. ----- 0.7.1 ----- * Fix NameError (`Issue #3 `_) again - broken in bad merge. --- 0.7 --- * Merged Setuptools and Distribute. See docs/merge.txt for details. Added several features that were slated for setuptools 0.6c12: * Index URL now defaults to HTTPS. * Added experimental environment marker support. Now clients may designate a PEP-426 environment marker for "extra" dependencies. Setuptools uses this feature in ``setup.py`` for optional SSL and certificate validation support on older platforms. Based on Distutils-SIG discussions, the syntax is somewhat tentative. There should probably be a PEP with a firmer spec before the feature should be considered suitable for use. * Added support for SSL certificate validation when installing packages from an HTTPS service. ----- 0.7b4 ----- * `Issue #3 `_: Fixed NameError in SSL support. ------ 0.6.49 ------ * Move warning check in ``get_cache_path`` to follow the directory creation to avoid errors when the cache path does not yet exist. Fixes the error reported in `Distribute #375 `_. ------ 0.6.48 ------ * Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in 0.6.46 (redo). ------ 0.6.47 ------ * Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in 0.6.46. ------ 0.6.46 ------ * `Distribute #375 `_: Issue a warning if the PYTHON_EGG_CACHE or otherwise customized egg cache location specifies a directory that's group- or world-writable. ------ 0.6.45 ------ * `Distribute #379 `_: ``distribute_setup.py`` now traps VersionConflict as well, restoring ability to upgrade from an older setuptools version. ------ 0.6.44 ------ * ``distribute_setup.py`` has been updated to allow Setuptools 0.7 to satisfy use_setuptools. ------ 0.6.43 ------ * `Distribute #378 `_: Restore support for Python 2.4 Syntax (regression in 0.6.42). ------ 0.6.42 ------ * External links finder no longer yields duplicate links. * `Distribute #337 `_: Moved site.py to setuptools/site-patch.py (graft of very old patch from setuptools trunk which inspired PR `#31 `_). ------ 0.6.41 ------ * `Distribute #27 `_: Use public api for loading resources from zip files rather than the private method `_zip_directory_cache`. * Added a new function ``easy_install.get_win_launcher`` which may be used by third-party libraries such as buildout to get a suitable script launcher. ------ 0.6.40 ------ * `Distribute #376 `_: brought back cli.exe and gui.exe that were deleted in the previous release. ------ 0.6.39 ------ * Add support for console launchers on ARM platforms. * Fix possible issue in GUI launchers where the subsystem was not supplied to the linker. * Launcher build script now refactored for robustness. * `Distribute #375 `_: Resources extracted from a zip egg to the file system now also check the contents of the file against the zip contents during each invocation of get_resource_filename. ------ 0.6.38 ------ * `Distribute #371 `_: The launcher manifest file is now installed properly. ------ 0.6.37 ------ * `Distribute #143 `_: Launcher scripts, including easy_install itself, are now accompanied by a manifest on 32-bit Windows environments to avoid the Installer Detection Technology and thus undesirable UAC elevation described in `this Microsoft article `_. ------ 0.6.36 ------ * `Pull Request #35 `_: In `Buildout #64 `_, it was reported that under Python 3, installation of distutils scripts could attempt to copy the ``__pycache__`` directory as a file, causing an error, apparently only under Windows. Easy_install now skips all directories when processing metadata scripts. ------ 0.6.35 ------ Note this release is backward-incompatible with distribute 0.6.23-0.6.34 in how it parses version numbers. * `Distribute #278 `_: Restored compatibility with distribute 0.6.22 and setuptools 0.6. Updated the documentation to match more closely with the version parsing as intended in setuptools 0.6. ------ 0.6.34 ------ * `Distribute #341 `_: 0.6.33 fails to build under Python 2.4. ------ 0.6.33 ------ * Fix 2 errors with Jython 2.5. * Fix 1 failure with Jython 2.5 and 2.7. * Disable workaround for Jython scripts on Linux systems. * `Distribute #336 `_: `setup.py` no longer masks failure exit code when tests fail. * Fix issue in pkg_resources where try/except around a platform-dependent import would trigger hook load failures on Mercurial. See pull request 32 for details. * `Distribute #341 `_: Fix a ResourceWarning. ------ 0.6.32 ------ * Fix test suite with Python 2.6. * Fix some DeprecationWarnings and ResourceWarnings. * `Distribute #335 `_: Backed out `setup_requires` superceding installed requirements until regression can be addressed. ------ 0.6.31 ------ * `Distribute #303 `_: Make sure the manifest only ever contains UTF-8 in Python 3. * `Distribute #329 `_: Properly close files created by tests for compatibility with Jython. * Work around `Jython #1980 `_ and `Jython #1981 `_. * `Distribute #334 `_: Provide workaround for packages that reference `sys.__stdout__` such as numpy does. This change should address `virtualenv `#359 `_ `_ as long as the system encoding is UTF-8 or the IO encoding is specified in the environment, i.e.:: PYTHONIOENCODING=utf8 pip install numpy * Fix for encoding issue when installing from Windows executable on Python 3. * `Distribute #323 `_: Allow `setup_requires` requirements to supercede installed requirements. Added some new keyword arguments to existing pkg_resources methods. Also had to updated how __path__ is handled for namespace packages to ensure that when a new egg distribution containing a namespace package is placed on sys.path, the entries in __path__ are found in the same order they would have been in had that egg been on the path when pkg_resources was first imported. ------ 0.6.30 ------ * `Distribute #328 `_: Clean up temporary directories in distribute_setup.py. * Fix fatal bug in distribute_setup.py. ------ 0.6.29 ------ * `Pull Request #14 `_: Honor file permissions in zip files. * `Distribute #327 `_: Merged pull request `#24 `_ to fix a dependency problem with pip. * Merged pull request `#23 `_ to fix https://github.com/pypa/virtualenv/issues/301. * If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` to produce uploadable documentation. * `Distribute #326 `_: `upload_docs` provided mangled auth credentials under Python 3. * `Distribute #320 `_: Fix check for "createable" in distribute_setup.py. * `Distribute #305 `_: Remove a warning that was triggered during normal operations. * `Distribute #311 `_: Print metadata in UTF-8 independent of platform. * `Distribute #303 `_: Read manifest file with UTF-8 encoding under Python 3. * `Distribute #301 `_: Allow to run tests of namespace packages when using 2to3. * `Distribute #304 `_: Prevent import loop in site.py under Python 3.3. * `Distribute #283 `_: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. * `Distribute #299 `_: The develop command didn't work on Python 3, when using 2to3, as the egg link would go to the Python 2 source. Linking to the 2to3'd code in build/lib makes it work, although you will have to rebuild the module before testing it. * `Distribute #306 `_: Even if 2to3 is used, we build in-place under Python 2. * `Distribute #307 `_: Prints the full path when .svn/entries is broken. * `Distribute #313 `_: Support for sdist subcommands (Python 2.7) * `Distribute #314 `_: test_local_index() would fail an OS X. * `Distribute #310 `_: Non-ascii characters in a namespace __init__.py causes errors. * `Distribute #218 `_: Improved documentation on behavior of `package_data` and `include_package_data`. Files indicated by `package_data` are now included in the manifest. * `distribute_setup.py` now allows a `--download-base` argument for retrieving distribute from a specified location. ------ 0.6.28 ------ * `Distribute #294 `_: setup.py can now be invoked from any directory. * Scripts are now installed honoring the umask. * Added support for .dist-info directories. * `Distribute #283 `_: Fix and disable scanning of `*.pyc` / `*.pyo` files on Python 3.3. ------ 0.6.27 ------ * Support current snapshots of CPython 3.3. * Distribute now recognizes README.rst as a standard, default readme file. * Exclude 'encodings' modules when removing modules from sys.modules. Workaround for `#285 `_. * `Distribute #231 `_: Don't fiddle with system python when used with buildout (bootstrap.py) ------ 0.6.26 ------ * `Distribute #183 `_: Symlinked files are now extracted from source distributions. * `Distribute #227 `_: Easy_install fetch parameters are now passed during the installation of a source distribution; now fulfillment of setup_requires dependencies will honor the parameters passed to easy_install. ------ 0.6.25 ------ * `Distribute #258 `_: Workaround a cache issue * `Distribute #260 `_: distribute_setup.py now accepts the --user parameter for Python 2.6 and later. * `Distribute #262 `_: package_index.open_with_auth no longer throws LookupError on Python 3. * `Distribute #269 `_: AttributeError when an exception occurs reading Manifest.in on late releases of Python. * `Distribute #272 `_: Prevent TypeError when namespace package names are unicode and single-install-externally-managed is used. Also fixes PIP issue 449. * `Distribute #273 `_: Legacy script launchers now install with Python2/3 support. ------ 0.6.24 ------ * `Distribute #249 `_: Added options to exclude 2to3 fixers ------ 0.6.23 ------ * `Distribute #244 `_: Fixed a test * `Distribute #243 `_: Fixed a test * `Distribute #239 `_: Fixed a test * `Distribute #240 `_: Fixed a test * `Distribute #241 `_: Fixed a test * `Distribute #237 `_: Fixed a test * `Distribute #238 `_: easy_install now uses 64bit executable wrappers on 64bit Python * `Distribute #208 `_: Fixed parsed_versions, it now honors post-releases as noted in the documentation * `Distribute #207 `_: Windows cli and gui wrappers pass CTRL-C to child python process * `Distribute #227 `_: easy_install now passes its arguments to setup.py bdist_egg * `Distribute #225 `_: Fixed a NameError on Python 2.5, 2.4 ------ 0.6.21 ------ * `Distribute #225 `_: FIxed a regression on py2.4 ------ 0.6.20 ------ * `Distribute #135 `_: Include url in warning when processing URLs in package_index. * `Distribute #212 `_: Fix issue where easy_instal fails on Python 3 on windows installer. * `Distribute #213 `_: Fix typo in documentation. ------ 0.6.19 ------ * `Distribute #206 `_: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' ------ 0.6.18 ------ * `Distribute #210 `_: Fixed a regression introduced by `Distribute #204 `_ fix. ------ 0.6.17 ------ * Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment variable to allow to disable installation of easy_install-${version} script. * Support Python >=3.1.4 and >=3.2.1. * `Distribute #204 `_: Don't try to import the parent of a namespace package in declare_namespace * `Distribute #196 `_: Tolerate responses with multiple Content-Length headers * `Distribute #205 `_: Sandboxing doesn't preserve working_set. Leads to setup_requires problems. ------ 0.6.16 ------ * Builds sdist gztar even on Windows (avoiding `Distribute #193 `_). * `Distribute #192 `_: Fixed metadata omitted on Windows when package_dir specified with forward-slash. * `Distribute #195 `_: Cython build support. * `Distribute #200 `_: Issues with recognizing 64-bit packages on Windows. ------ 0.6.15 ------ * Fixed typo in bdist_egg * Several issues under Python 3 has been solved. * `Distribute #146 `_: Fixed missing DLL files after easy_install of windows exe package. ------ 0.6.14 ------ * `Distribute #170 `_: Fixed unittest failure. Thanks to Toshio. * `Distribute #171 `_: Fixed race condition in unittests cause deadlocks in test suite. * `Distribute #143 `_: Fixed a lookup issue with easy_install. Thanks to David and Zooko. * `Distribute #174 `_: Fixed the edit mode when its used with setuptools itself ------ 0.6.13 ------ * `Distribute #160 `_: 2.7 gives ValueError("Invalid IPv6 URL") * `Distribute #150 `_: Fixed using ~/.local even in a --no-site-packages virtualenv * `Distribute #163 `_: scan index links before external links, and don't use the md5 when comparing two distributions ------ 0.6.12 ------ * `Distribute #149 `_: Fixed various failures on 2.3/2.4 ------ 0.6.11 ------ * Found another case of SandboxViolation - fixed * `Distribute #15 `_ and `Distribute #48 `_: Introduced a socket timeout of 15 seconds on url openings * Added indexsidebar.html into MANIFEST.in * `Distribute #108 `_: Fixed TypeError with Python3.1 * `Distribute #121 `_: Fixed --help install command trying to actually install. * `Distribute #112 `_: Added an os.makedirs so that Tarek's solution will work. * `Distribute #133 `_: Added --no-find-links to easy_install * Added easy_install --user * `Distribute #100 `_: Fixed develop --user not taking '.' in PYTHONPATH into account * `Distribute #134 `_: removed spurious UserWarnings. Patch by VanLindberg * `Distribute #138 `_: cant_write_to_target error when setup_requires is used. * `Distribute #147 `_: respect the sys.dont_write_bytecode flag ------ 0.6.10 ------ * Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution. ----- 0.6.9 ----- * `Distribute #90 `_: unknown setuptools version can be added in the working set * `Distribute #87 `_: setupt.py doesn't try to convert distribute_setup.py anymore Initial Patch by arfrever. * `Distribute #89 `_: added a side bar with a download link to the doc. * `Distribute #86 `_: fixed missing sentence in pkg_resources doc. * Added a nicer error message when a DistributionNotFound is raised. * `Distribute #80 `_: test_develop now works with Python 3.1 * `Distribute #93 `_: upload_docs now works if there is an empty sub-directory. * `Distribute #70 `_: exec bit on non-exec files * `Distribute #99 `_: now the standalone easy_install command doesn't uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by ``install_requires`` from a setup.py call (install, develop, etc). * `Distribute #101 `_: Allowing ``os.devnull`` in Sandbox * `Distribute #92 `_: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails) * `Distribute #103 `_: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever. * `Distribute #104 `_: remvoved the assertion when the installation fails, with a nicer message for the end user. * `Distribute #100 `_: making sure there's no SandboxViolation when the setup script patches setuptools. ----- 0.6.8 ----- * Added "check_packages" in dist. (added in Setuptools 0.6c11) * Fixed the DONT_PATCH_SETUPTOOLS state. ----- 0.6.7 ----- * `Distribute #58 `_: Added --user support to the develop command * `Distribute #11 `_: Generated scripts now wrap their call to the script entry point in the standard "if name == 'main'" * Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv can drive an installation that doesn't patch a global setuptools. * Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. Distribute should work fine with Unladen Swallow 2009Q3. * `Distribute #21 `_: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine. * Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead. * `Distribute #64 `_: use_setuptools no longer rebuilds the distribute egg every time it is run * use_setuptools now properly respects the requested version * use_setuptools will no longer try to import a distribute egg for the wrong Python version * `Distribute #74 `_: no_fake should be True by default. * `Distribute #72 `_: avoid a bootstrapping issue with easy_install -U ----- 0.6.6 ----- * Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel) ----- 0.6.5 ----- * `Distribute #65 `_: cli.exe and gui.exe are now generated at build time, depending on the platform in use. * `Distribute #67 `_: Fixed doc typo (PEP 381/382) * Distribute no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with distribute. * When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools. * Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox. ----- 0.6.4 ----- * Added the generation of `distribute_setup_3k.py` during the release. This closes `Distribute #52 `_. * Added an upload_docs command to easily upload project documentation to PyPI's https://pythonhosted.org. This close issue `Distribute #56 `_. * Fixed a bootstrap bug on the use_setuptools() API. ----- 0.6.3 ----- setuptools ========== * Fixed a bunch of calls to file() that caused crashes on Python 3. bootstrapping ============= * Fixed a bug in sorting that caused bootstrap to fail on Python 3. ----- 0.6.2 ----- setuptools ========== * Added Python 3 support; see docs/python3.txt. This closes `Old Setuptools #39 `_. * Added option to run 2to3 automatically when installing on Python 3. This closes issue `Distribute #31 `_. * Fixed invalid usage of requirement.parse, that broke develop -d. This closes `Old Setuptools #44 `_. * Fixed script launcher for 64-bit Windows. This closes `Old Setuptools #2 `_. * KeyError when compiling extensions. This closes `Old Setuptools #41 `_. bootstrapping ============= * Fixed bootstrap not working on Windows. This closes issue `Distribute #49 `_. * Fixed 2.6 dependencies. This closes issue `Distribute #50 `_. * Make sure setuptools is patched when running through easy_install This closes `Old Setuptools #40 `_. ----- 0.6.1 ----- setuptools ========== * package_index.urlopen now catches BadStatusLine and malformed url errors. This closes `Distribute #16 `_ and `Distribute #18 `_. * zip_ok is now False by default. This closes `Old Setuptools #33 `_. * Fixed invalid URL error catching. `Old Setuptools #20 `_. * Fixed invalid bootstraping with easy_install installation (`Distribute #40 `_). Thanks to Florian Schulze for the help. * Removed buildout/bootstrap.py. A new repository will create a specific bootstrap.py script. bootstrapping ============= * The boostrap process leave setuptools alone if detected in the system and --root or --prefix is provided, but is not in the same location. This closes `Distribute #10 `_. --- 0.6 --- setuptools ========== * Packages required at build time where not fully present at install time. This closes `Distribute #12 `_. * Protected against failures in tarfile extraction. This closes `Distribute #10 `_. * Made Jython api_tests.txt doctest compatible. This closes `Distribute #7 `_. * sandbox.py replaced builtin type file with builtin function open. This closes `Distribute #6 `_. * Immediately close all file handles. This closes `Distribute #3 `_. * Added compatibility with Subversion 1.6. This references `Distribute #1 `_. pkg_resources ============= * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API instead. Based on a patch from ronaldoussoren. This closes issue `#5 `_. * Fixed a SandboxViolation for mkdir that could occur in certain cases. This closes `Distribute #13 `_. * Allow to find_on_path on systems with tight permissions to fail gracefully. This closes `Distribute #9 `_. * Corrected inconsistency between documentation and code of add_entry. This closes `Distribute #8 `_. * Immediately close all file handles. This closes `Distribute #3 `_. easy_install ============ * Immediately close all file handles. This closes `Distribute #3 `_. ----- 0.6c9 ----- * Fixed a missing files problem when using Windows source distributions on non-Windows platforms, due to distutils not handling manifest file line endings correctly. * Updated Pyrex support to work with Pyrex 0.9.6 and higher. * Minor changes for Jython compatibility, including skipping tests that can't work on Jython. * Fixed not installing eggs in ``install_requires`` if they were also used for ``setup_requires`` or ``tests_require``. * Fixed not fetching eggs in ``install_requires`` when running tests. * Allow ``ez_setup.use_setuptools()`` to upgrade existing setuptools installations when called from a standalone ``setup.py``. * Added a warning if a namespace package is declared, but its parent package is not also declared as a namespace. * Support Subversion 1.5 * Removed use of deprecated ``md5`` module if ``hashlib`` is available * Fixed ``bdist_wininst upload`` trying to upload the ``.exe`` twice * Fixed ``bdist_egg`` putting a ``native_libs.txt`` in the source package's ``.egg-info``, when it should only be in the built egg's ``EGG-INFO``. * Ensure that _full_name is set on all shared libs before extensions are checked for shared lib usage. (Fixes a bug in the experimental shared library build support.) * Fix to allow unpacked eggs containing native libraries to fail more gracefully under Google App Engine (with an ``ImportError`` loading the C-based module, instead of getting a ``NameError``). ----- 0.6c7 ----- * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and ``egg_info`` command failing on new, uncommitted SVN directories. * Fix import problems with nested namespace packages installed via ``--root`` or ``--single-version-externally-managed``, due to the parent package not having the child package as an attribute. ----- 0.6c6 ----- * Added ``--egg-path`` option to ``develop`` command, allowing you to force ``.egg-link`` files to use relative paths (allowing them to be shared across platforms on a networked drive). * Fix not building binary RPMs correctly. * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with bash-compatible shells. * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there was whitespace inside a quoted argument or at the end of the ``#!`` line (a regression introduced in 0.6c4). * Fix ``test`` command possibly failing if an older version of the project being tested was installed on ``sys.path`` ahead of the test source directory. * Fix ``find_packages()`` treating ``ez_setup`` and directories with ``.`` in their names as packages. ----- 0.6c5 ----- * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` packages under Python versions less than 2.5. * Fix uploaded ``bdist_wininst`` packages being described as suitable for "any" version by Python 2.5, even if a ``--target-version`` was specified. ----- 0.6c4 ----- * Overhauled Windows script wrapping to support ``bdist_wininst`` better. Scripts installed with ``bdist_wininst`` will always use ``#!python.exe`` or ``#!pythonw.exe`` as the executable name (even when built on non-Windows platforms!), and the wrappers will look for the executable in the script's parent directory (which should find the right version of Python). * Fix ``upload`` command not uploading files built by ``bdist_rpm`` or ``bdist_wininst`` under Python 2.3 and 2.4. * Add support for "eggsecutable" headers: a ``#!/bin/sh`` script that is prepended to an ``.egg`` file to allow it to be run as a script on Unix-ish platforms. (This is mainly so that setuptools itself can have a single-file installer on Unix, without doing multiple downloads, dealing with firewalls, etc.) * Fix problem with empty revision numbers in Subversion 1.4 ``entries`` files * Use cross-platform relative paths in ``easy-install.pth`` when doing ``develop`` and the source directory is a subdirectory of the installation target directory. * Fix a problem installing eggs with a system packaging tool if the project contained an implicit namespace package; for example if the ``setup()`` listed a namespace package ``foo.bar`` without explicitly listing ``foo`` as a namespace package. ----- 0.6c3 ----- * Fixed breakages caused by Subversion 1.4's new "working copy" format ----- 0.6c2 ----- * The ``ez_setup`` module displays the conflicting version of setuptools (and its installation location) when a script requests a version that's not available. * Running ``setup.py develop`` on a setuptools-using project will now install setuptools if needed, instead of only downloading the egg. ----- 0.6c1 ----- * Fixed ``AttributeError`` when trying to download a ``setup_requires`` dependency when a distribution lacks a ``dependency_links`` setting. * Made ``zip-safe`` and ``not-zip-safe`` flag files contain a single byte, so as to play better with packaging tools that complain about zero-length files. * Made ``setup.py develop`` respect the ``--no-deps`` option, which it previously was ignoring. * Support ``extra_path`` option to ``setup()`` when ``install`` is run in backward-compatibility mode. * Source distributions now always include a ``setup.cfg`` file that explicitly sets ``egg_info`` options such that they produce an identical version number to the source distribution's version number. (Previously, the default version number could be different due to the use of ``--tag-date``, or if the version was overridden on the command line that built the source distribution.) ----- 0.6b4 ----- * Fix ``register`` not obeying name/version set by ``egg_info`` command, if ``egg_info`` wasn't explicitly run first on the same command line. * Added ``--no-date`` and ``--no-svn-revision`` options to ``egg_info`` command, to allow suppressing tags configured in ``setup.cfg``. * Fixed redundant warnings about missing ``README`` file(s); it should now appear only if you are actually a source distribution. ----- 0.6b3 ----- * Fix ``bdist_egg`` not including files in subdirectories of ``.egg-info``. * Allow ``.py`` files found by the ``include_package_data`` option to be automatically included. Remove duplicate data file matches if both ``include_package_data`` and ``package_data`` are used to refer to the same files. ----- 0.6b1 ----- * Strip ``module`` from the end of compiled extension modules when computing the name of a ``.py`` loader/wrapper. (Python's import machinery ignores this suffix when searching for an extension module.) ------ 0.6a11 ------ * Added ``test_loader`` keyword to support custom test loaders * Added ``setuptools.file_finders`` entry point group to allow implementing revision control plugins. * Added ``--identity`` option to ``upload`` command. * Added ``dependency_links`` to allow specifying URLs for ``--find-links``. * Enhanced test loader to scan packages as well as modules, and call ``additional_tests()`` if present to get non-unittest tests. * Support namespace packages in conjunction with system packagers, by omitting the installation of any ``__init__.py`` files for namespace packages, and adding a special ``.pth`` file to create a working package in ``sys.modules``. * Made ``--single-version-externally-managed`` automatic when ``--root`` is used, so that most system packagers won't require special support for setuptools. * Fixed ``setup_requires``, ``tests_require``, etc. not using ``setup.cfg`` or other configuration files for their option defaults when installing, and also made the install use ``--multi-version`` mode so that the project directory doesn't need to support .pth files. * ``MANIFEST.in`` is now forcibly closed when any errors occur while reading it. Previously, the file could be left open and the actual error would be masked by problems trying to remove the open file on Windows systems. ------ 0.6a10 ------ * Fixed the ``develop`` command ignoring ``--find-links``. ----- 0.6a9 ----- * The ``sdist`` command no longer uses the traditional ``MANIFEST`` file to create source distributions. ``MANIFEST.in`` is still read and processed, as are the standard defaults and pruning. But the manifest is built inside the project's ``.egg-info`` directory as ``SOURCES.txt``, and it is rebuilt every time the ``egg_info`` command is run. * Added the ``include_package_data`` keyword to ``setup()``, allowing you to automatically include any package data listed in revision control or ``MANIFEST.in`` * Added the ``exclude_package_data`` keyword to ``setup()``, allowing you to trim back files included via the ``package_data`` and ``include_package_data`` options. * Fixed ``--tag-svn-revision`` not working when run from a source distribution. * Added warning for namespace packages with missing ``declare_namespace()`` * Added ``tests_require`` keyword to ``setup()``, so that e.g. packages requiring ``nose`` to run unit tests can make this dependency optional unless the ``test`` command is run. * Made all commands that use ``easy_install`` respect its configuration options, as this was causing some problems with ``setup.py install``. * Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so that you can process a directory tree through a processing filter as if it were a zipfile or tarfile. * Added an internal ``install_egg_info`` command to use as part of old-style ``install`` operations, that installs an ``.egg-info`` directory with the package. * Added a ``--single-version-externally-managed`` option to the ``install`` command so that you can more easily wrap a "flat" egg in a system package. * Enhanced ``bdist_rpm`` so that it installs single-version eggs that don't rely on a ``.pth`` file. The ``--no-egg`` option has been removed, since all RPMs are now built in a more backwards-compatible format. * Support full roundtrip translation of eggs to and from ``bdist_wininst`` format. Running ``bdist_wininst`` on a setuptools-based package wraps the egg in an .exe that will safely install it as an egg (i.e., with metadata and entry-point wrapper scripts), and ``easy_install`` can turn the .exe back into an ``.egg`` file or directory and install it as such. ----- 0.6a8 ----- * Fixed some problems building extensions when Pyrex was installed, especially with Python 2.4 and/or packages using SWIG. * Made ``develop`` command accept all the same options as ``easy_install``, and use the ``easy_install`` command's configuration settings as defaults. * Made ``egg_info --tag-svn-revision`` fall back to extracting the revision number from ``PKG-INFO`` in case it is being run on a source distribution of a snapshot taken from a Subversion-based project. * Automatically detect ``.dll``, ``.so`` and ``.dylib`` files that are being installed as data, adding them to ``native_libs.txt`` automatically. * Fixed some problems with fresh checkouts of projects that don't include ``.egg-info/PKG-INFO`` under revision control and put the project's source code directly in the project directory. If such a package had any requirements that get processed before the ``egg_info`` command can be run, the setup scripts would fail with a "Missing 'Version:' header and/or PKG-INFO file" error, because the egg runtime interpreted the unbuilt metadata in a directory on ``sys.path`` (i.e. the current directory) as being a corrupted egg. Setuptools now monkeypatches the distribution metadata cache to pretend that the egg has valid version information, until it has a chance to make it actually be so (via the ``egg_info`` command). ----- 0.6a5 ----- * Fixed missing gui/cli .exe files in distribution. Fixed bugs in tests. ----- 0.6a3 ----- * Added ``gui_scripts`` entry point group to allow installing GUI scripts on Windows and other platforms. (The special handling is only for Windows; other platforms are treated the same as for ``console_scripts``.) ----- 0.6a2 ----- * Added ``console_scripts`` entry point group to allow installing scripts without the need to create separate script files. On Windows, console scripts get an ``.exe`` wrapper so you can just type their name. On other platforms, the scripts are written without a file extension. ----- 0.6a1 ----- * Added support for building "old-style" RPMs that don't install an egg for the target package, using a ``--no-egg`` option. * The ``build_ext`` command now works better when using the ``--inplace`` option and multiple Python versions. It now makes sure that all extensions match the current Python version, even if newer copies were built for a different Python version. * The ``upload`` command no longer attaches an extra ``.zip`` when uploading eggs, as PyPI now supports egg uploads without trickery. * The ``ez_setup`` script/module now displays a warning before downloading the setuptools egg, and attempts to check the downloaded egg against an internal MD5 checksum table. * Fixed the ``--tag-svn-revision`` option of ``egg_info`` not finding the latest revision number; it was using the revision number of the directory containing ``setup.py``, not the highest revision number in the project. * Added ``eager_resources`` setup argument * The ``sdist`` command now recognizes Subversion "deleted file" entries and does not include them in source distributions. * ``setuptools`` now embeds itself more thoroughly into the distutils, so that other distutils extensions (e.g. py2exe, py2app) will subclass setuptools' versions of things, rather than the native distutils ones. * Added ``entry_points`` and ``setup_requires`` arguments to ``setup()``; ``setup_requires`` allows you to automatically find and download packages that are needed in order to *build* your project (as opposed to running it). * ``setuptools`` now finds its commands, ``setup()`` argument validators, and metadata writers using entry points, so that they can be extended by third-party packages. See `Creating distutils Extensions `_ for more details. * The vestigial ``depends`` command has been removed. It was never finished or documented, and never would have worked without EasyInstall - which it pre-dated and was never compatible with. ------ 0.5a12 ------ * The zip-safety scanner now checks for modules that might be used with ``python -m``, and marks them as unsafe for zipping, since Python 2.4 can't handle ``-m`` on zipped modules. ------ 0.5a11 ------ * Fix breakage of the "develop" command that was caused by the addition of ``--always-unzip`` to the ``easy_install`` command. ----- 0.5a9 ----- * Include ``svn:externals`` directories in source distributions as well as normal subversion-controlled files and directories. * Added ``exclude=patternlist`` option to ``setuptools.find_packages()`` * Changed --tag-svn-revision to include an "r" in front of the revision number for better readability. * Added ability to build eggs without including source files (except for any scripts, of course), using the ``--exclude-source-files`` option to ``bdist_egg``. * ``setup.py install`` now automatically detects when an "unmanaged" package or module is going to be on ``sys.path`` ahead of a package being installed, thereby preventing the newer version from being imported. If this occurs, a warning message is output to ``sys.stderr``, but installation proceeds anyway. The warning message informs the user what files or directories need deleting, and advises them they can also use EasyInstall (with the ``--delete-conflicting`` option) to do it automatically. * The ``egg_info`` command now adds a ``top_level.txt`` file to the metadata directory that lists all top-level modules and packages in the distribution. This is used by the ``easy_install`` command to find possibly-conflicting "unmanaged" packages when installing the distribution. * Added ``zip_safe`` and ``namespace_packages`` arguments to ``setup()``. Added package analysis to determine zip-safety if the ``zip_safe`` flag is not given, and advise the author regarding what code might need changing. * Fixed the swapped ``-d`` and ``-b`` options of ``bdist_egg``. ----- 0.5a8 ----- * The "egg_info" command now always sets the distribution metadata to "safe" forms of the distribution name and version, so that distribution files will be generated with parseable names (i.e., ones that don't include '-' in the name or version). Also, this means that if you use the various ``--tag`` options of "egg_info", any distributions generated will use the tags in the version, not just egg distributions. * Added support for defining command aliases in distutils configuration files, under the "[aliases]" section. To prevent recursion and to allow aliases to call the command of the same name, a given alias can be expanded only once per command-line invocation. You can define new aliases with the "alias" command, either for the local, global, or per-user configuration. * Added "rotate" command to delete old distribution files, given a set of patterns to match and the number of files to keep. (Keeps the most recently-modified distribution files matching each pattern.) * Added "saveopts" command that saves all command-line options for the current invocation to the local, global, or per-user configuration file. Useful for setting defaults without having to hand-edit a configuration file. * Added a "setopt" command that sets a single option in a specified distutils configuration file. ----- 0.5a7 ----- * Added "upload" support for egg and source distributions, including a bug fix for "upload" and a temporary workaround for lack of .egg support in PyPI. ----- 0.5a6 ----- * Beefed up the "sdist" command so that if you don't have a MANIFEST.in, it will include all files under revision control (CVS or Subversion) in the current directory, and it will regenerate the list every time you create a source distribution, not just when you tell it to. This should make the default "do what you mean" more often than the distutils' default behavior did, while still retaining the old behavior in the presence of MANIFEST.in. * Fixed the "develop" command always updating .pth files, even if you specified ``-n`` or ``--dry-run``. * Slightly changed the format of the generated version when you use ``--tag-build`` on the "egg_info" command, so that you can make tagged revisions compare *lower* than the version specified in setup.py (e.g. by using ``--tag-build=dev``). ----- 0.5a5 ----- * Added ``develop`` command to ``setuptools``-based packages. This command installs an ``.egg-link`` pointing to the package's source directory, and script wrappers that ``execfile()`` the source versions of the package's scripts. This lets you put your development checkout(s) on sys.path without having to actually install them. (To uninstall the link, use use ``setup.py develop --uninstall``.) * Added ``egg_info`` command to ``setuptools``-based packages. This command just creates or updates the "projectname.egg-info" directory, without building an egg. (It's used by the ``bdist_egg``, ``test``, and ``develop`` commands.) * Enhanced the ``test`` command so that it doesn't install the package, but instead builds any C extensions in-place, updates the ``.egg-info`` metadata, adds the source directory to ``sys.path``, and runs the tests directly on the source. This avoids an "unmanaged" installation of the package to ``site-packages`` or elsewhere. * Made ``easy_install`` a standard ``setuptools`` command, moving it from the ``easy_install`` module to ``setuptools.command.easy_install``. Note that if you were importing or extending it, you must now change your imports accordingly. ``easy_install.py`` is still installed as a script, but not as a module. ----- 0.5a4 ----- * Setup scripts using setuptools can now list their dependencies directly in the setup.py file, without having to manually create a ``depends.txt`` file. The ``install_requires`` and ``extras_require`` arguments to ``setup()`` are used to create a dependencies file automatically. If you are manually creating ``depends.txt`` right now, please switch to using these setup arguments as soon as practical, because ``depends.txt`` support will be removed in the 0.6 release cycle. For documentation on the new arguments, see the ``setuptools.dist.Distribution`` class. * Setup scripts using setuptools now always install using ``easy_install`` internally, for ease of uninstallation and upgrading. ----- 0.5a1 ----- * Added support for "self-installation" bootstrapping. Packages can now include ``ez_setup.py`` in their source distribution, and add the following to their ``setup.py``, in order to automatically bootstrap installation of setuptools as part of their setup process:: from ez_setup import use_setuptools use_setuptools() from setuptools import setup # etc... ----- 0.4a2 ----- * Added ``ez_setup.py`` installer/bootstrap script to make initial setuptools installation easier, and to allow distributions using setuptools to avoid having to include setuptools in their source distribution. * All downloads are now managed by the ``PackageIndex`` class (which is now subclassable and replaceable), so that embedders can more easily override download logic, give download progress reports, etc. The class has also been moved to the new ``setuptools.package_index`` module. * The ``Installer`` class no longer handles downloading, manages a temporary directory, or tracks the ``zip_ok`` option. Downloading is now handled by ``PackageIndex``, and ``Installer`` has become an ``easy_install`` command class based on ``setuptools.Command``. * There is a new ``setuptools.sandbox.run_setup()`` API to invoke a setup script in a directory sandbox, and a new ``setuptools.archive_util`` module with an ``unpack_archive()`` API. These were split out of EasyInstall to allow reuse by other tools and applications. * ``setuptools.Command`` now supports reinitializing commands using keyword arguments to set/reset options. Also, ``Command`` subclasses can now set their ``command_consumes_arguments`` attribute to ``True`` in order to receive an ``args`` option containing the rest of the command line. ----- 0.3a2 ----- * Added new options to ``bdist_egg`` to allow tagging the egg's version number with a subversion revision number, the current date, or an explicit tag value. Run ``setup.py bdist_egg --help`` to get more information. * Misc. bug fixes ----- 0.3a1 ----- * Initial release. share/doc/alt-python34-setuptools/CHANGES.txt000064400000144723152342604300014723 0ustar00======= CHANGES ======= --- 2.0 --- * Issue #121: Exempt lib2to3 pickled grammars from DirectorySandbox. * Issue #41: Dropped support for Python 2.4 and Python 2.5. Clients requiring setuptools for those versions of Python should use setuptools 1.x. * Removed ``setuptools.command.easy_install.HAS_USER_SITE``. Clients expecting this boolean variable should use ``site.ENABLE_USER_SITE`` instead. * Removed ``pkg_resources.ImpWrapper``. Clients that expected this class should use ``pkgutil.ImpImporter`` instead. ----- 1.4.2 ----- * Issue #116: Correct TypeError when reading a local package index on Python 3. ----- 1.4.1 ----- * Issue #114: Use ``sys.getfilesystemencoding`` for decoding config in ``bdist_wininst`` distributions. * Issue #105 and Issue #113: Establish a more robust technique for determining the terminal encoding:: 1. Try ``getpreferredencoding`` 2. If that returns US_ASCII or None, try the encoding from ``getdefaultlocale``. If that encoding was a "fallback" because Python could not figure it out from the environment or OS, encoding remains unresolved. 3. If the encoding is resolved, then make sure Python actually implements the encoding. 4. On the event of an error or unknown codec, revert to fallbacks (UTF-8 on Darwin, ASCII on everything else). 5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was a bug on older Python releases. On a side note, it would seem that the encoding only matters for when SVN does not yet support ``--xml`` and when getting repository and svn version numbers. The ``--xml`` technique should yield UTF-8 according to some messages on the SVN mailing lists. So if the version numbers are always 7-bit ASCII clean, it may be best to only support the file parsing methods for legacy SVN releases and support for SVN without the subprocess command would simple go away as support for the older SVNs does. --- 1.4 --- * Issue #27: ``easy_install`` will now use credentials from .pypirc if present for connecting to the package index. * Pull Request #21: Omit unwanted newlines in ``package_index._encode_auth`` when the username/password pair length indicates wrapping. ----- 1.3.2 ----- * Issue #99: Fix filename encoding issues in SVN support. ----- 1.3.1 ----- * Remove exuberant warning in SVN support when SVN is not used. --- 1.3 --- * Address security vulnerability in SSL match_hostname check as reported in Python #17997. * Prefer `backports.ssl_match_hostname `_ for backport implementation if present. * Correct NameError in ``ssl_support`` module (``socket.error``). --- 1.2 --- * Issue #26: Add support for SVN 1.7. Special thanks to Philip Thiem for the contribution. * Issue #93: Wheels are now distributed with every release. Note that as reported in Issue #108, as of Pip 1.4, scripts aren't installed properly from wheels. Therefore, if using Pip to install setuptools from a wheel, the ``easy_install`` command will not be available. * Setuptools "natural" launcher support, introduced in 1.0, is now officially supported. ----- 1.1.7 ----- * Fixed behavior of NameError handling in 'script template (dev).py' (script launcher for 'develop' installs). * ``ez_setup.py`` now ensures partial downloads are cleaned up following a failed download. * Distribute #363 and Issue #55: Skip an sdist test that fails on locales other than UTF-8. ----- 1.1.6 ----- * Distribute #349: ``sandbox.execfile`` now opens the target file in binary mode, thus honoring a BOM in the file when compiled. ----- 1.1.5 ----- * Issue #69: Second attempt at fix (logic was reversed). ----- 1.1.4 ----- * Issue #77: Fix error in upload command (Python 2.4). ----- 1.1.3 ----- * Fix NameError in previous patch. ----- 1.1.2 ----- * Issue #69: Correct issue where 404 errors are returned for URLs with fragments in them (such as #egg=). ----- 1.1.1 ----- * Issue #75: Add ``--insecure`` option to ez_setup.py to accommodate environments where a trusted SSL connection cannot be validated. * Issue #76: Fix AttributeError in upload command with Python 2.4. --- 1.1 --- * Issue #71 (Distribute #333): EasyInstall now puts less emphasis on the condition when a host is blocked via ``--allow-hosts``. * Issue #72: Restored Python 2.4 compatibility in ``ez_setup.py``. --- 1.0 --- * Issue #60: On Windows, Setuptools supports deferring to another launcher, such as Vinay Sajip's `pylauncher `_ (included with Python 3.3) to launch console and GUI scripts and not install its own launcher executables. This experimental functionality is currently only enabled if the ``SETUPTOOLS_LAUNCHER`` environment variable is set to "natural". In the future, this behavior may become default, but only after it has matured and seen substantial adoption. The ``SETUPTOOLS_LAUNCHER`` also accepts "executable" to force the default behavior of creating launcher executables. * Issue #63: Bootstrap script (ez_setup.py) now prefers Powershell, curl, or wget for retrieving the Setuptools tarball for improved security of the install. The script will still fall back to a simple ``urlopen`` on platforms that do not have these tools. * Issue #65: Deprecated the ``Features`` functionality. * Issue #52: In ``VerifyingHTTPSConn``, handle a tunnelled (proxied) connection. Backward-Incompatible Changes ============================= This release includes a couple of backward-incompatible changes, but most if not all users will find 1.0 a drop-in replacement for 0.9. * Issue #50: Normalized API of environment marker support. Specifically, removed line number and filename from SyntaxErrors when returned from `pkg_resources.invalid_marker`. Any clients depending on the specific string representation of exceptions returned by that function may need to be updated to account for this change. * Issue #50: SyntaxErrors generated by `pkg_resources.invalid_marker` are normalized for cross-implementation consistency. * Removed ``--ignore-conflicts-at-my-risk`` and ``--delete-conflicting`` options to easy_install. These options have been deprecated since 0.6a11. ----- 0.9.8 ----- * Issue #53: Fix NameErrors in `_vcs_split_rev_from_url`. ----- 0.9.7 ----- * Issue #49: Correct AttributeError on PyPy where a hashlib.HASH object does not have a `.name` attribute. * Issue #34: Documentation now refers to bootstrap script in code repository referenced by bookmark. * Add underscore-separated keys to environment markers (markerlib). ----- 0.9.6 ----- * Issue #44: Test failure on Python 2.4 when MD5 hash doesn't have a `.name` attribute. ----- 0.9.5 ----- * Python #17980: Fix security vulnerability in SSL certificate validation. ----- 0.9.4 ----- * Issue #43: Fix issue (introduced in 0.9.1) with version resolution when upgrading over other releases of Setuptools. ----- 0.9.3 ----- * Issue #42: Fix new ``AttributeError`` introduced in last fix. ----- 0.9.2 ----- * Issue #42: Fix regression where blank checksums would trigger an ``AttributeError``. ----- 0.9.1 ----- * Distribute #386: Allow other positional and keyword arguments to os.open. * Corrected dependency on certifi mis-referenced in 0.9. --- 0.9 --- * `package_index` now validates hashes other than MD5 in download links. --- 0.8 --- * Code base now runs on Python 2.4 - Python 3.3 without Python 2to3 conversion. ----- 0.7.8 ----- * Distribute #375: Yet another fix for yet another regression. ----- 0.7.7 ----- * Distribute #375: Repair AttributeError created in last release (redo). * Issue #30: Added test for get_cache_path. ----- 0.7.6 ----- * Distribute #375: Repair AttributeError created in last release. ----- 0.7.5 ----- * Issue #21: Restore Python 2.4 compatibility in ``test_easy_install``. * Distribute #375: Merged additional warning from Distribute 0.6.46. * Now honor the environment variable ``SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT`` in addition to the now deprecated ``DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT``. ----- 0.7.4 ----- * Issue #20: Fix comparison of parsed SVN version on Python 3. ----- 0.7.3 ----- * Issue #1: Disable installation of Windows-specific files on non-Windows systems. * Use new sysconfig module with Python 2.7 or >=3.2. ----- 0.7.2 ----- * Issue #14: Use markerlib when the `parser` module is not available. * Issue #10: ``ez_setup.py`` now uses HTTPS to download setuptools from PyPI. ----- 0.7.1 ----- * Fix NameError (Issue #3) again - broken in bad merge. --- 0.7 --- * Merged Setuptools and Distribute. See docs/merge.txt for details. Added several features that were slated for setuptools 0.6c12: * Index URL now defaults to HTTPS. * Added experimental environment marker support. Now clients may designate a PEP-426 environment marker for "extra" dependencies. Setuptools uses this feature in ``setup.py`` for optional SSL and certificate validation support on older platforms. Based on Distutils-SIG discussions, the syntax is somewhat tentative. There should probably be a PEP with a firmer spec before the feature should be considered suitable for use. * Added support for SSL certificate validation when installing packages from an HTTPS service. ----- 0.7b4 ----- * Issue #3: Fixed NameError in SSL support. ------ 0.6.49 ------ * Move warning check in ``get_cache_path`` to follow the directory creation to avoid errors when the cache path does not yet exist. Fixes the error reported in Distribute #375. ------ 0.6.48 ------ * Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in 0.6.46 (redo). ------ 0.6.47 ------ * Correct AttributeError in ``ResourceManager.get_cache_path`` introduced in 0.6.46. ------ 0.6.46 ------ * Distribute #375: Issue a warning if the PYTHON_EGG_CACHE or otherwise customized egg cache location specifies a directory that's group- or world-writable. ------ 0.6.45 ------ * Distribute #379: ``distribute_setup.py`` now traps VersionConflict as well, restoring ability to upgrade from an older setuptools version. ------ 0.6.44 ------ * ``distribute_setup.py`` has been updated to allow Setuptools 0.7 to satisfy use_setuptools. ------ 0.6.43 ------ * Distribute #378: Restore support for Python 2.4 Syntax (regression in 0.6.42). ------ 0.6.42 ------ * External links finder no longer yields duplicate links. * Distribute #337: Moved site.py to setuptools/site-patch.py (graft of very old patch from setuptools trunk which inspired PR #31). ------ 0.6.41 ------ * Distribute #27: Use public api for loading resources from zip files rather than the private method `_zip_directory_cache`. * Added a new function ``easy_install.get_win_launcher`` which may be used by third-party libraries such as buildout to get a suitable script launcher. ------ 0.6.40 ------ * Distribute #376: brought back cli.exe and gui.exe that were deleted in the previous release. ------ 0.6.39 ------ * Add support for console launchers on ARM platforms. * Fix possible issue in GUI launchers where the subsystem was not supplied to the linker. * Launcher build script now refactored for robustness. * Distribute #375: Resources extracted from a zip egg to the file system now also check the contents of the file against the zip contents during each invocation of get_resource_filename. ------ 0.6.38 ------ * Distribute #371: The launcher manifest file is now installed properly. ------ 0.6.37 ------ * Distribute #143: Launcher scripts, including easy_install itself, are now accompanied by a manifest on 32-bit Windows environments to avoid the Installer Detection Technology and thus undesirable UAC elevation described in `this Microsoft article `_. ------ 0.6.36 ------ * Pull Request #35: In Buildout #64, it was reported that under Python 3, installation of distutils scripts could attempt to copy the ``__pycache__`` directory as a file, causing an error, apparently only under Windows. Easy_install now skips all directories when processing metadata scripts. ------ 0.6.35 ------ Note this release is backward-incompatible with distribute 0.6.23-0.6.34 in how it parses version numbers. * Distribute #278: Restored compatibility with distribute 0.6.22 and setuptools 0.6. Updated the documentation to match more closely with the version parsing as intended in setuptools 0.6. ------ 0.6.34 ------ * Distribute #341: 0.6.33 fails to build under Python 2.4. ------ 0.6.33 ------ * Fix 2 errors with Jython 2.5. * Fix 1 failure with Jython 2.5 and 2.7. * Disable workaround for Jython scripts on Linux systems. * Distribute #336: `setup.py` no longer masks failure exit code when tests fail. * Fix issue in pkg_resources where try/except around a platform-dependent import would trigger hook load failures on Mercurial. See pull request 32 for details. * Distribute #341: Fix a ResourceWarning. ------ 0.6.32 ------ * Fix test suite with Python 2.6. * Fix some DeprecationWarnings and ResourceWarnings. * Distribute #335: Backed out `setup_requires` superceding installed requirements until regression can be addressed. ------ 0.6.31 ------ * Distribute #303: Make sure the manifest only ever contains UTF-8 in Python 3. * Distribute #329: Properly close files created by tests for compatibility with Jython. * Work around Jython #1980 and Jython #1981. * Distribute #334: Provide workaround for packages that reference `sys.__stdout__` such as numpy does. This change should address `virtualenv #359 `_ as long as the system encoding is UTF-8 or the IO encoding is specified in the environment, i.e.:: PYTHONIOENCODING=utf8 pip install numpy * Fix for encoding issue when installing from Windows executable on Python 3. * Distribute #323: Allow `setup_requires` requirements to supercede installed requirements. Added some new keyword arguments to existing pkg_resources methods. Also had to updated how __path__ is handled for namespace packages to ensure that when a new egg distribution containing a namespace package is placed on sys.path, the entries in __path__ are found in the same order they would have been in had that egg been on the path when pkg_resources was first imported. ------ 0.6.30 ------ * Distribute #328: Clean up temporary directories in distribute_setup.py. * Fix fatal bug in distribute_setup.py. ------ 0.6.29 ------ * Pull Request #14: Honor file permissions in zip files. * Distribute #327: Merged pull request #24 to fix a dependency problem with pip. * Merged pull request #23 to fix https://github.com/pypa/virtualenv/issues/301. * If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` to produce uploadable documentation. * Distribute #326: `upload_docs` provided mangled auth credentials under Python 3. * Distribute #320: Fix check for "createable" in distribute_setup.py. * Distribute #305: Remove a warning that was triggered during normal operations. * Distribute #311: Print metadata in UTF-8 independent of platform. * Distribute #303: Read manifest file with UTF-8 encoding under Python 3. * Distribute #301: Allow to run tests of namespace packages when using 2to3. * Distribute #304: Prevent import loop in site.py under Python 3.3. * Distribute #283: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. * Distribute #299: The develop command didn't work on Python 3, when using 2to3, as the egg link would go to the Python 2 source. Linking to the 2to3'd code in build/lib makes it work, although you will have to rebuild the module before testing it. * Distribute #306: Even if 2to3 is used, we build in-place under Python 2. * Distribute #307: Prints the full path when .svn/entries is broken. * Distribute #313: Support for sdist subcommands (Python 2.7) * Distribute #314: test_local_index() would fail an OS X. * Distribute #310: Non-ascii characters in a namespace __init__.py causes errors. * Distribute #218: Improved documentation on behavior of `package_data` and `include_package_data`. Files indicated by `package_data` are now included in the manifest. * `distribute_setup.py` now allows a `--download-base` argument for retrieving distribute from a specified location. ------ 0.6.28 ------ * Distribute #294: setup.py can now be invoked from any directory. * Scripts are now installed honoring the umask. * Added support for .dist-info directories. * Distribute #283: Fix and disable scanning of `*.pyc` / `*.pyo` files on Python 3.3. ------ 0.6.27 ------ * Support current snapshots of CPython 3.3. * Distribute now recognizes README.rst as a standard, default readme file. * Exclude 'encodings' modules when removing modules from sys.modules. Workaround for #285. * Distribute #231: Don't fiddle with system python when used with buildout (bootstrap.py) ------ 0.6.26 ------ * Distribute #183: Symlinked files are now extracted from source distributions. * Distribute #227: Easy_install fetch parameters are now passed during the installation of a source distribution; now fulfillment of setup_requires dependencies will honor the parameters passed to easy_install. ------ 0.6.25 ------ * Distribute #258: Workaround a cache issue * Distribute #260: distribute_setup.py now accepts the --user parameter for Python 2.6 and later. * Distribute #262: package_index.open_with_auth no longer throws LookupError on Python 3. * Distribute #269: AttributeError when an exception occurs reading Manifest.in on late releases of Python. * Distribute #272: Prevent TypeError when namespace package names are unicode and single-install-externally-managed is used. Also fixes PIP issue 449. * Distribute #273: Legacy script launchers now install with Python2/3 support. ------ 0.6.24 ------ * Distribute #249: Added options to exclude 2to3 fixers ------ 0.6.23 ------ * Distribute #244: Fixed a test * Distribute #243: Fixed a test * Distribute #239: Fixed a test * Distribute #240: Fixed a test * Distribute #241: Fixed a test * Distribute #237: Fixed a test * Distribute #238: easy_install now uses 64bit executable wrappers on 64bit Python * Distribute #208: Fixed parsed_versions, it now honors post-releases as noted in the documentation * Distribute #207: Windows cli and gui wrappers pass CTRL-C to child python process * Distribute #227: easy_install now passes its arguments to setup.py bdist_egg * Distribute #225: Fixed a NameError on Python 2.5, 2.4 ------ 0.6.21 ------ * Distribute #225: FIxed a regression on py2.4 ------ 0.6.20 ------ * Distribute #135: Include url in warning when processing URLs in package_index. * Distribute #212: Fix issue where easy_instal fails on Python 3 on windows installer. * Distribute #213: Fix typo in documentation. ------ 0.6.19 ------ * Distribute #206: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' ------ 0.6.18 ------ * Distribute #210: Fixed a regression introduced by Distribute #204 fix. ------ 0.6.17 ------ * Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment variable to allow to disable installation of easy_install-${version} script. * Support Python >=3.1.4 and >=3.2.1. * Distribute #204: Don't try to import the parent of a namespace package in declare_namespace * Distribute #196: Tolerate responses with multiple Content-Length headers * Distribute #205: Sandboxing doesn't preserve working_set. Leads to setup_requires problems. ------ 0.6.16 ------ * Builds sdist gztar even on Windows (avoiding Distribute #193). * Distribute #192: Fixed metadata omitted on Windows when package_dir specified with forward-slash. * Distribute #195: Cython build support. * Distribute #200: Issues with recognizing 64-bit packages on Windows. ------ 0.6.15 ------ * Fixed typo in bdist_egg * Several issues under Python 3 has been solved. * Distribute #146: Fixed missing DLL files after easy_install of windows exe package. ------ 0.6.14 ------ * Distribute #170: Fixed unittest failure. Thanks to Toshio. * Distribute #171: Fixed race condition in unittests cause deadlocks in test suite. * Distribute #143: Fixed a lookup issue with easy_install. Thanks to David and Zooko. * Distribute #174: Fixed the edit mode when its used with setuptools itself ------ 0.6.13 ------ * Distribute #160: 2.7 gives ValueError("Invalid IPv6 URL") * Distribute #150: Fixed using ~/.local even in a --no-site-packages virtualenv * Distribute #163: scan index links before external links, and don't use the md5 when comparing two distributions ------ 0.6.12 ------ * Distribute #149: Fixed various failures on 2.3/2.4 ------ 0.6.11 ------ * Found another case of SandboxViolation - fixed * Distribute #15 and Distribute #48: Introduced a socket timeout of 15 seconds on url openings * Added indexsidebar.html into MANIFEST.in * Distribute #108: Fixed TypeError with Python3.1 * Distribute #121: Fixed --help install command trying to actually install. * Distribute #112: Added an os.makedirs so that Tarek's solution will work. * Distribute #133: Added --no-find-links to easy_install * Added easy_install --user * Distribute #100: Fixed develop --user not taking '.' in PYTHONPATH into account * Distribute #134: removed spurious UserWarnings. Patch by VanLindberg * Distribute #138: cant_write_to_target error when setup_requires is used. * Distribute #147: respect the sys.dont_write_bytecode flag ------ 0.6.10 ------ * Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution. ----- 0.6.9 ----- * Distribute #90: unknown setuptools version can be added in the working set * Distribute #87: setupt.py doesn't try to convert distribute_setup.py anymore Initial Patch by arfrever. * Distribute #89: added a side bar with a download link to the doc. * Distribute #86: fixed missing sentence in pkg_resources doc. * Added a nicer error message when a DistributionNotFound is raised. * Distribute #80: test_develop now works with Python 3.1 * Distribute #93: upload_docs now works if there is an empty sub-directory. * Distribute #70: exec bit on non-exec files * Distribute #99: now the standalone easy_install command doesn't uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by ``install_requires`` from a setup.py call (install, develop, etc). * Distribute #101: Allowing ``os.devnull`` in Sandbox * Distribute #92: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails) * Distribute #103: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever. * Distribute #104: remvoved the assertion when the installation fails, with a nicer message for the end user. * Distribute #100: making sure there's no SandboxViolation when the setup script patches setuptools. ----- 0.6.8 ----- * Added "check_packages" in dist. (added in Setuptools 0.6c11) * Fixed the DONT_PATCH_SETUPTOOLS state. ----- 0.6.7 ----- * Distribute #58: Added --user support to the develop command * Distribute #11: Generated scripts now wrap their call to the script entry point in the standard "if name == 'main'" * Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv can drive an installation that doesn't patch a global setuptools. * Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. Distribute should work fine with Unladen Swallow 2009Q3. * Distribute #21: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine. * Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead. * Distribute #64: use_setuptools no longer rebuilds the distribute egg every time it is run * use_setuptools now properly respects the requested version * use_setuptools will no longer try to import a distribute egg for the wrong Python version * Distribute #74: no_fake should be True by default. * Distribute #72: avoid a bootstrapping issue with easy_install -U ----- 0.6.6 ----- * Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel) ----- 0.6.5 ----- * Distribute #65: cli.exe and gui.exe are now generated at build time, depending on the platform in use. * Distribute #67: Fixed doc typo (PEP 381/382) * Distribute no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with distribute. * When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools. * Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox. ----- 0.6.4 ----- * Added the generation of `distribute_setup_3k.py` during the release. This closes Distribute #52. * Added an upload_docs command to easily upload project documentation to PyPI's https://pythonhosted.org. This close issue Distribute #56. * Fixed a bootstrap bug on the use_setuptools() API. ----- 0.6.3 ----- setuptools ========== * Fixed a bunch of calls to file() that caused crashes on Python 3. bootstrapping ============= * Fixed a bug in sorting that caused bootstrap to fail on Python 3. ----- 0.6.2 ----- setuptools ========== * Added Python 3 support; see docs/python3.txt. This closes Old Setuptools #39. * Added option to run 2to3 automatically when installing on Python 3. This closes issue Distribute #31. * Fixed invalid usage of requirement.parse, that broke develop -d. This closes Old Setuptools #44. * Fixed script launcher for 64-bit Windows. This closes Old Setuptools #2. * KeyError when compiling extensions. This closes Old Setuptools #41. bootstrapping ============= * Fixed bootstrap not working on Windows. This closes issue Distribute #49. * Fixed 2.6 dependencies. This closes issue Distribute #50. * Make sure setuptools is patched when running through easy_install This closes Old Setuptools #40. ----- 0.6.1 ----- setuptools ========== * package_index.urlopen now catches BadStatusLine and malformed url errors. This closes Distribute #16 and Distribute #18. * zip_ok is now False by default. This closes Old Setuptools #33. * Fixed invalid URL error catching. Old Setuptools #20. * Fixed invalid bootstraping with easy_install installation (Distribute #40). Thanks to Florian Schulze for the help. * Removed buildout/bootstrap.py. A new repository will create a specific bootstrap.py script. bootstrapping ============= * The boostrap process leave setuptools alone if detected in the system and --root or --prefix is provided, but is not in the same location. This closes Distribute #10. --- 0.6 --- setuptools ========== * Packages required at build time where not fully present at install time. This closes Distribute #12. * Protected against failures in tarfile extraction. This closes Distribute #10. * Made Jython api_tests.txt doctest compatible. This closes Distribute #7. * sandbox.py replaced builtin type file with builtin function open. This closes Distribute #6. * Immediately close all file handles. This closes Distribute #3. * Added compatibility with Subversion 1.6. This references Distribute #1. pkg_resources ============= * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API instead. Based on a patch from ronaldoussoren. This closes issue #5. * Fixed a SandboxViolation for mkdir that could occur in certain cases. This closes Distribute #13. * Allow to find_on_path on systems with tight permissions to fail gracefully. This closes Distribute #9. * Corrected inconsistency between documentation and code of add_entry. This closes Distribute #8. * Immediately close all file handles. This closes Distribute #3. easy_install ============ * Immediately close all file handles. This closes Distribute #3. ----- 0.6c9 ----- * Fixed a missing files problem when using Windows source distributions on non-Windows platforms, due to distutils not handling manifest file line endings correctly. * Updated Pyrex support to work with Pyrex 0.9.6 and higher. * Minor changes for Jython compatibility, including skipping tests that can't work on Jython. * Fixed not installing eggs in ``install_requires`` if they were also used for ``setup_requires`` or ``tests_require``. * Fixed not fetching eggs in ``install_requires`` when running tests. * Allow ``ez_setup.use_setuptools()`` to upgrade existing setuptools installations when called from a standalone ``setup.py``. * Added a warning if a namespace package is declared, but its parent package is not also declared as a namespace. * Support Subversion 1.5 * Removed use of deprecated ``md5`` module if ``hashlib`` is available * Fixed ``bdist_wininst upload`` trying to upload the ``.exe`` twice * Fixed ``bdist_egg`` putting a ``native_libs.txt`` in the source package's ``.egg-info``, when it should only be in the built egg's ``EGG-INFO``. * Ensure that _full_name is set on all shared libs before extensions are checked for shared lib usage. (Fixes a bug in the experimental shared library build support.) * Fix to allow unpacked eggs containing native libraries to fail more gracefully under Google App Engine (with an ``ImportError`` loading the C-based module, instead of getting a ``NameError``). ----- 0.6c7 ----- * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and ``egg_info`` command failing on new, uncommitted SVN directories. * Fix import problems with nested namespace packages installed via ``--root`` or ``--single-version-externally-managed``, due to the parent package not having the child package as an attribute. ----- 0.6c6 ----- * Added ``--egg-path`` option to ``develop`` command, allowing you to force ``.egg-link`` files to use relative paths (allowing them to be shared across platforms on a networked drive). * Fix not building binary RPMs correctly. * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with bash-compatible shells. * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there was whitespace inside a quoted argument or at the end of the ``#!`` line (a regression introduced in 0.6c4). * Fix ``test`` command possibly failing if an older version of the project being tested was installed on ``sys.path`` ahead of the test source directory. * Fix ``find_packages()`` treating ``ez_setup`` and directories with ``.`` in their names as packages. ----- 0.6c5 ----- * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` packages under Python versions less than 2.5. * Fix uploaded ``bdist_wininst`` packages being described as suitable for "any" version by Python 2.5, even if a ``--target-version`` was specified. ----- 0.6c4 ----- * Overhauled Windows script wrapping to support ``bdist_wininst`` better. Scripts installed with ``bdist_wininst`` will always use ``#!python.exe`` or ``#!pythonw.exe`` as the executable name (even when built on non-Windows platforms!), and the wrappers will look for the executable in the script's parent directory (which should find the right version of Python). * Fix ``upload`` command not uploading files built by ``bdist_rpm`` or ``bdist_wininst`` under Python 2.3 and 2.4. * Add support for "eggsecutable" headers: a ``#!/bin/sh`` script that is prepended to an ``.egg`` file to allow it to be run as a script on Unix-ish platforms. (This is mainly so that setuptools itself can have a single-file installer on Unix, without doing multiple downloads, dealing with firewalls, etc.) * Fix problem with empty revision numbers in Subversion 1.4 ``entries`` files * Use cross-platform relative paths in ``easy-install.pth`` when doing ``develop`` and the source directory is a subdirectory of the installation target directory. * Fix a problem installing eggs with a system packaging tool if the project contained an implicit namespace package; for example if the ``setup()`` listed a namespace package ``foo.bar`` without explicitly listing ``foo`` as a namespace package. ----- 0.6c3 ----- * Fixed breakages caused by Subversion 1.4's new "working copy" format ----- 0.6c2 ----- * The ``ez_setup`` module displays the conflicting version of setuptools (and its installation location) when a script requests a version that's not available. * Running ``setup.py develop`` on a setuptools-using project will now install setuptools if needed, instead of only downloading the egg. ----- 0.6c1 ----- * Fixed ``AttributeError`` when trying to download a ``setup_requires`` dependency when a distribution lacks a ``dependency_links`` setting. * Made ``zip-safe`` and ``not-zip-safe`` flag files contain a single byte, so as to play better with packaging tools that complain about zero-length files. * Made ``setup.py develop`` respect the ``--no-deps`` option, which it previously was ignoring. * Support ``extra_path`` option to ``setup()`` when ``install`` is run in backward-compatibility mode. * Source distributions now always include a ``setup.cfg`` file that explicitly sets ``egg_info`` options such that they produce an identical version number to the source distribution's version number. (Previously, the default version number could be different due to the use of ``--tag-date``, or if the version was overridden on the command line that built the source distribution.) ----- 0.6b4 ----- * Fix ``register`` not obeying name/version set by ``egg_info`` command, if ``egg_info`` wasn't explicitly run first on the same command line. * Added ``--no-date`` and ``--no-svn-revision`` options to ``egg_info`` command, to allow suppressing tags configured in ``setup.cfg``. * Fixed redundant warnings about missing ``README`` file(s); it should now appear only if you are actually a source distribution. ----- 0.6b3 ----- * Fix ``bdist_egg`` not including files in subdirectories of ``.egg-info``. * Allow ``.py`` files found by the ``include_package_data`` option to be automatically included. Remove duplicate data file matches if both ``include_package_data`` and ``package_data`` are used to refer to the same files. ----- 0.6b1 ----- * Strip ``module`` from the end of compiled extension modules when computing the name of a ``.py`` loader/wrapper. (Python's import machinery ignores this suffix when searching for an extension module.) ------ 0.6a11 ------ * Added ``test_loader`` keyword to support custom test loaders * Added ``setuptools.file_finders`` entry point group to allow implementing revision control plugins. * Added ``--identity`` option to ``upload`` command. * Added ``dependency_links`` to allow specifying URLs for ``--find-links``. * Enhanced test loader to scan packages as well as modules, and call ``additional_tests()`` if present to get non-unittest tests. * Support namespace packages in conjunction with system packagers, by omitting the installation of any ``__init__.py`` files for namespace packages, and adding a special ``.pth`` file to create a working package in ``sys.modules``. * Made ``--single-version-externally-managed`` automatic when ``--root`` is used, so that most system packagers won't require special support for setuptools. * Fixed ``setup_requires``, ``tests_require``, etc. not using ``setup.cfg`` or other configuration files for their option defaults when installing, and also made the install use ``--multi-version`` mode so that the project directory doesn't need to support .pth files. * ``MANIFEST.in`` is now forcibly closed when any errors occur while reading it. Previously, the file could be left open and the actual error would be masked by problems trying to remove the open file on Windows systems. ------ 0.6a10 ------ * Fixed the ``develop`` command ignoring ``--find-links``. ----- 0.6a9 ----- * The ``sdist`` command no longer uses the traditional ``MANIFEST`` file to create source distributions. ``MANIFEST.in`` is still read and processed, as are the standard defaults and pruning. But the manifest is built inside the project's ``.egg-info`` directory as ``SOURCES.txt``, and it is rebuilt every time the ``egg_info`` command is run. * Added the ``include_package_data`` keyword to ``setup()``, allowing you to automatically include any package data listed in revision control or ``MANIFEST.in`` * Added the ``exclude_package_data`` keyword to ``setup()``, allowing you to trim back files included via the ``package_data`` and ``include_package_data`` options. * Fixed ``--tag-svn-revision`` not working when run from a source distribution. * Added warning for namespace packages with missing ``declare_namespace()`` * Added ``tests_require`` keyword to ``setup()``, so that e.g. packages requiring ``nose`` to run unit tests can make this dependency optional unless the ``test`` command is run. * Made all commands that use ``easy_install`` respect its configuration options, as this was causing some problems with ``setup.py install``. * Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so that you can process a directory tree through a processing filter as if it were a zipfile or tarfile. * Added an internal ``install_egg_info`` command to use as part of old-style ``install`` operations, that installs an ``.egg-info`` directory with the package. * Added a ``--single-version-externally-managed`` option to the ``install`` command so that you can more easily wrap a "flat" egg in a system package. * Enhanced ``bdist_rpm`` so that it installs single-version eggs that don't rely on a ``.pth`` file. The ``--no-egg`` option has been removed, since all RPMs are now built in a more backwards-compatible format. * Support full roundtrip translation of eggs to and from ``bdist_wininst`` format. Running ``bdist_wininst`` on a setuptools-based package wraps the egg in an .exe that will safely install it as an egg (i.e., with metadata and entry-point wrapper scripts), and ``easy_install`` can turn the .exe back into an ``.egg`` file or directory and install it as such. ----- 0.6a8 ----- * Fixed some problems building extensions when Pyrex was installed, especially with Python 2.4 and/or packages using SWIG. * Made ``develop`` command accept all the same options as ``easy_install``, and use the ``easy_install`` command's configuration settings as defaults. * Made ``egg_info --tag-svn-revision`` fall back to extracting the revision number from ``PKG-INFO`` in case it is being run on a source distribution of a snapshot taken from a Subversion-based project. * Automatically detect ``.dll``, ``.so`` and ``.dylib`` files that are being installed as data, adding them to ``native_libs.txt`` automatically. * Fixed some problems with fresh checkouts of projects that don't include ``.egg-info/PKG-INFO`` under revision control and put the project's source code directly in the project directory. If such a package had any requirements that get processed before the ``egg_info`` command can be run, the setup scripts would fail with a "Missing 'Version:' header and/or PKG-INFO file" error, because the egg runtime interpreted the unbuilt metadata in a directory on ``sys.path`` (i.e. the current directory) as being a corrupted egg. Setuptools now monkeypatches the distribution metadata cache to pretend that the egg has valid version information, until it has a chance to make it actually be so (via the ``egg_info`` command). ----- 0.6a5 ----- * Fixed missing gui/cli .exe files in distribution. Fixed bugs in tests. ----- 0.6a3 ----- * Added ``gui_scripts`` entry point group to allow installing GUI scripts on Windows and other platforms. (The special handling is only for Windows; other platforms are treated the same as for ``console_scripts``.) ----- 0.6a2 ----- * Added ``console_scripts`` entry point group to allow installing scripts without the need to create separate script files. On Windows, console scripts get an ``.exe`` wrapper so you can just type their name. On other platforms, the scripts are written without a file extension. ----- 0.6a1 ----- * Added support for building "old-style" RPMs that don't install an egg for the target package, using a ``--no-egg`` option. * The ``build_ext`` command now works better when using the ``--inplace`` option and multiple Python versions. It now makes sure that all extensions match the current Python version, even if newer copies were built for a different Python version. * The ``upload`` command no longer attaches an extra ``.zip`` when uploading eggs, as PyPI now supports egg uploads without trickery. * The ``ez_setup`` script/module now displays a warning before downloading the setuptools egg, and attempts to check the downloaded egg against an internal MD5 checksum table. * Fixed the ``--tag-svn-revision`` option of ``egg_info`` not finding the latest revision number; it was using the revision number of the directory containing ``setup.py``, not the highest revision number in the project. * Added ``eager_resources`` setup argument * The ``sdist`` command now recognizes Subversion "deleted file" entries and does not include them in source distributions. * ``setuptools`` now embeds itself more thoroughly into the distutils, so that other distutils extensions (e.g. py2exe, py2app) will subclass setuptools' versions of things, rather than the native distutils ones. * Added ``entry_points`` and ``setup_requires`` arguments to ``setup()``; ``setup_requires`` allows you to automatically find and download packages that are needed in order to *build* your project (as opposed to running it). * ``setuptools`` now finds its commands, ``setup()`` argument validators, and metadata writers using entry points, so that they can be extended by third-party packages. See `Creating distutils Extensions `_ for more details. * The vestigial ``depends`` command has been removed. It was never finished or documented, and never would have worked without EasyInstall - which it pre-dated and was never compatible with. ------ 0.5a12 ------ * The zip-safety scanner now checks for modules that might be used with ``python -m``, and marks them as unsafe for zipping, since Python 2.4 can't handle ``-m`` on zipped modules. ------ 0.5a11 ------ * Fix breakage of the "develop" command that was caused by the addition of ``--always-unzip`` to the ``easy_install`` command. ----- 0.5a9 ----- * Include ``svn:externals`` directories in source distributions as well as normal subversion-controlled files and directories. * Added ``exclude=patternlist`` option to ``setuptools.find_packages()`` * Changed --tag-svn-revision to include an "r" in front of the revision number for better readability. * Added ability to build eggs without including source files (except for any scripts, of course), using the ``--exclude-source-files`` option to ``bdist_egg``. * ``setup.py install`` now automatically detects when an "unmanaged" package or module is going to be on ``sys.path`` ahead of a package being installed, thereby preventing the newer version from being imported. If this occurs, a warning message is output to ``sys.stderr``, but installation proceeds anyway. The warning message informs the user what files or directories need deleting, and advises them they can also use EasyInstall (with the ``--delete-conflicting`` option) to do it automatically. * The ``egg_info`` command now adds a ``top_level.txt`` file to the metadata directory that lists all top-level modules and packages in the distribution. This is used by the ``easy_install`` command to find possibly-conflicting "unmanaged" packages when installing the distribution. * Added ``zip_safe`` and ``namespace_packages`` arguments to ``setup()``. Added package analysis to determine zip-safety if the ``zip_safe`` flag is not given, and advise the author regarding what code might need changing. * Fixed the swapped ``-d`` and ``-b`` options of ``bdist_egg``. ----- 0.5a8 ----- * The "egg_info" command now always sets the distribution metadata to "safe" forms of the distribution name and version, so that distribution files will be generated with parseable names (i.e., ones that don't include '-' in the name or version). Also, this means that if you use the various ``--tag`` options of "egg_info", any distributions generated will use the tags in the version, not just egg distributions. * Added support for defining command aliases in distutils configuration files, under the "[aliases]" section. To prevent recursion and to allow aliases to call the command of the same name, a given alias can be expanded only once per command-line invocation. You can define new aliases with the "alias" command, either for the local, global, or per-user configuration. * Added "rotate" command to delete old distribution files, given a set of patterns to match and the number of files to keep. (Keeps the most recently-modified distribution files matching each pattern.) * Added "saveopts" command that saves all command-line options for the current invocation to the local, global, or per-user configuration file. Useful for setting defaults without having to hand-edit a configuration file. * Added a "setopt" command that sets a single option in a specified distutils configuration file. ----- 0.5a7 ----- * Added "upload" support for egg and source distributions, including a bug fix for "upload" and a temporary workaround for lack of .egg support in PyPI. ----- 0.5a6 ----- * Beefed up the "sdist" command so that if you don't have a MANIFEST.in, it will include all files under revision control (CVS or Subversion) in the current directory, and it will regenerate the list every time you create a source distribution, not just when you tell it to. This should make the default "do what you mean" more often than the distutils' default behavior did, while still retaining the old behavior in the presence of MANIFEST.in. * Fixed the "develop" command always updating .pth files, even if you specified ``-n`` or ``--dry-run``. * Slightly changed the format of the generated version when you use ``--tag-build`` on the "egg_info" command, so that you can make tagged revisions compare *lower* than the version specified in setup.py (e.g. by using ``--tag-build=dev``). ----- 0.5a5 ----- * Added ``develop`` command to ``setuptools``-based packages. This command installs an ``.egg-link`` pointing to the package's source directory, and script wrappers that ``execfile()`` the source versions of the package's scripts. This lets you put your development checkout(s) on sys.path without having to actually install them. (To uninstall the link, use use ``setup.py develop --uninstall``.) * Added ``egg_info`` command to ``setuptools``-based packages. This command just creates or updates the "projectname.egg-info" directory, without building an egg. (It's used by the ``bdist_egg``, ``test``, and ``develop`` commands.) * Enhanced the ``test`` command so that it doesn't install the package, but instead builds any C extensions in-place, updates the ``.egg-info`` metadata, adds the source directory to ``sys.path``, and runs the tests directly on the source. This avoids an "unmanaged" installation of the package to ``site-packages`` or elsewhere. * Made ``easy_install`` a standard ``setuptools`` command, moving it from the ``easy_install`` module to ``setuptools.command.easy_install``. Note that if you were importing or extending it, you must now change your imports accordingly. ``easy_install.py`` is still installed as a script, but not as a module. ----- 0.5a4 ----- * Setup scripts using setuptools can now list their dependencies directly in the setup.py file, without having to manually create a ``depends.txt`` file. The ``install_requires`` and ``extras_require`` arguments to ``setup()`` are used to create a dependencies file automatically. If you are manually creating ``depends.txt`` right now, please switch to using these setup arguments as soon as practical, because ``depends.txt`` support will be removed in the 0.6 release cycle. For documentation on the new arguments, see the ``setuptools.dist.Distribution`` class. * Setup scripts using setuptools now always install using ``easy_install`` internally, for ease of uninstallation and upgrading. ----- 0.5a1 ----- * Added support for "self-installation" bootstrapping. Packages can now include ``ez_setup.py`` in their source distribution, and add the following to their ``setup.py``, in order to automatically bootstrap installation of setuptools as part of their setup process:: from ez_setup import use_setuptools use_setuptools() from setuptools import setup # etc... ----- 0.4a2 ----- * Added ``ez_setup.py`` installer/bootstrap script to make initial setuptools installation easier, and to allow distributions using setuptools to avoid having to include setuptools in their source distribution. * All downloads are now managed by the ``PackageIndex`` class (which is now subclassable and replaceable), so that embedders can more easily override download logic, give download progress reports, etc. The class has also been moved to the new ``setuptools.package_index`` module. * The ``Installer`` class no longer handles downloading, manages a temporary directory, or tracks the ``zip_ok`` option. Downloading is now handled by ``PackageIndex``, and ``Installer`` has become an ``easy_install`` command class based on ``setuptools.Command``. * There is a new ``setuptools.sandbox.run_setup()`` API to invoke a setup script in a directory sandbox, and a new ``setuptools.archive_util`` module with an ``unpack_archive()`` API. These were split out of EasyInstall to allow reuse by other tools and applications. * ``setuptools.Command`` now supports reinitializing commands using keyword arguments to set/reset options. Also, ``Command`` subclasses can now set their ``command_consumes_arguments`` attribute to ``True`` in order to receive an ``args`` option containing the rest of the command line. ----- 0.3a2 ----- * Added new options to ``bdist_egg`` to allow tagging the egg's version number with a subversion revision number, the current date, or an explicit tag value. Run ``setup.py bdist_egg --help`` to get more information. * Misc. bug fixes ----- 0.3a1 ----- * Initial release. share/doc/alt-python34-setuptools/README.txt000064400000016551152342604300014605 0ustar00=============================== Installing and Using Setuptools =============================== .. contents:: **Table of Contents** ------------------------- Installation Instructions ------------------------- Upgrading from Distribute ========================= Currently, Distribute disallows installing Setuptools 0.7+ over Distribute. You must first uninstall any active version of Distribute first (see `Uninstalling`_). Upgrading from Setuptools 0.6 ============================= Upgrading from prior versions of Setuptools is supported. Initial reports good success in this regard. Windows ======= The recommended way to install setuptools on Windows is to download `ez_setup.py`_ and run it. The script will download the appropriate .egg file and install it for you. .. _ez_setup.py: https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py For best results, uninstall previous versions FIRST (see `Uninstalling`_). Once installation is complete, you will find an ``easy_install`` program in your Python ``Scripts`` subdirectory. For simple invocation and best results, add this directory to your ``PATH`` environment variable, if it is not already present. Unix-based Systems including Mac OS X ===================================== Download `ez_setup.py`_ and run it using the target Python version. The script will download the appropriate version and install it for you:: > wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python Note that you will may need to invoke the command with superuser privileges to install to the system Python:: > wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | sudo python Alternatively, on Python 2.6 and later, Setuptools may be installed to a user-local path:: > wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py > python ez_setup.py --user Python 2.4 and Python 2.5 support ================================= Setuptools 2.0 and later requires Python 2.6 or later. To install setuptools on Python 2.4 or Python 2.5, use the bootstrap script for Setuptools 1.x: https://bitbucket.org/pypa/setuptools/raw/bootstrap-py24/ez_setup.py. Advanced Installation ===================== For more advanced installation options, such as installing to custom locations or prefixes, download and extract the source tarball from `Setuptools on PyPI `_ and run setup.py with any supported distutils and Setuptools options. For example:: setuptools-x.x$ python setup.py --prefix=/opt/setuptools Use ``--help`` to get a full options list, but we recommend consulting the `EasyInstall manual`_ for detailed instructions, especially `the section on custom installation locations`_. .. _EasyInstall manual: https://pythonhosted.org/setuptools/EasyInstall .. _the section on custom installation locations: https://pythonhosted.org/setuptools/EasyInstall#custom-installation-locations Downloads ========= All setuptools downloads can be found at `the project's home page in the Python Package Index`_. Scroll to the very bottom of the page to find the links. .. _the project's home page in the Python Package Index: https://pypi.python.org/pypi/setuptools In addition to the PyPI downloads, the development version of ``setuptools`` is available from the `Bitbucket repo`_, and in-development versions of the `0.6 branch`_ are available as well. .. _Bitbucket repo: https://bitbucket.org/pypa/setuptools/get/default.tar.gz#egg=setuptools-dev .. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 Uninstalling ============ On Windows, if Setuptools was installed using an ``.exe`` or ``.msi`` installer, simply use the uninstall feature of "Add/Remove Programs" in the Control Panel. Otherwise, to uninstall Setuptools or Distribute, regardless of the Python version, delete all ``setuptools*`` and ``distribute*`` files and directories from your system's ``site-packages`` directory (and any other ``sys.path`` directories) FIRST. If you are upgrading or otherwise plan to re-install Setuptools or Distribute, nothing further needs to be done. If you want to completely remove Setuptools, you may also want to remove the 'easy_install' and 'easy_install-x.x' scripts and associated executables installed to the Python scripts directory. -------------------------------- Using Setuptools and EasyInstall -------------------------------- Here are some of the available manuals, tutorials, and other resources for learning about Setuptools, Python Eggs, and EasyInstall: * `The EasyInstall user's guide and reference manual`_ * `The setuptools Developer's Guide`_ * `The pkg_resources API reference`_ * `Package Compatibility Notes`_ (user-maintained) * `The Internal Structure of Python Eggs`_ Questions, comments, and bug reports should be directed to the `distutils-sig mailing list`_. If you have written (or know of) any tutorials, documentation, plug-ins, or other resources for setuptools users, please let us know about them there, so this reference list can be updated. If you have working, *tested* patches to correct problems or add features, you may submit them to the `setuptools bug tracker`_. .. _setuptools bug tracker: https://bitbucket.org/pypa/setuptools/issues .. _Package Compatibility Notes: https://pythonhosted.org/setuptools/PackageNotes .. _The Internal Structure of Python Eggs: https://pythonhosted.org/setuptools/formats.html .. _The setuptools Developer's Guide: https://pythonhosted.org/setuptools/setuptools.html .. _The pkg_resources API reference: https://pythonhosted.org/setuptools/pkg_resources.html .. _The EasyInstall user's guide and reference manual: https://pythonhosted.org/setuptools/easy_install.html .. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ ------- Credits ------- * The original design for the ``.egg`` format and the ``pkg_resources`` API was co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first version of ``pkg_resources``, and supplied the OS X operating system version compatibility algorithm. * Ian Bicking implemented many early "creature comfort" features of easy_install, including support for downloading via Sourceforge and Subversion repositories. Ian's comments on the Web-SIG about WSGI application deployment also inspired the concept of "entry points" in eggs, and he has given talks at PyCon and elsewhere to inform and educate the community about eggs and setuptools. * Jim Fulton contributed time and effort to build automated tests of various aspects of ``easy_install``, and supplied the doctests for the command-line ``.exe`` wrappers on Windows. * Phillip J. Eby is the seminal author of setuptools, and first proposed the idea of an importable binary distribution format for Python application plug-ins. * Significant parts of the implementation of setuptools were funded by the Open Source Applications Foundation, to provide a plug-in infrastructure for the Chandler PIM application. In addition, many OSAF staffers (such as Mike "Code Bear" Taylor) contributed their time and stress as guinea pigs for the use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) * Since the merge with Distribute, Jason R. Coombs is the maintainer of setuptools. The project is maintained in coordination with the Python Packaging Authority (PyPA) and the larger Python community. .. _files: share/doc/alt-python34-setuptools/psfl.txt000064400000027174152342604300014617 0ustar00Python Software Foundation License Python 2.1.1 license This is the official license for the Python 2.1.1 release: A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI) in the Netherlands as a successor of a language called ABC. Guido is Python's principal author, although it includes many contributions from others. The last version released from CWI was Python 1.2. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI) in Reston, Virginia where he released several versions of the software. Python 1.6 was the last of the versions released by CNRI. In 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. Python 2.0 was the first and only release from BeOpen.com. Following the release of Python 1.6, and after Guido van Rossum left CNRI to work with commercial software developers, it became clear that the ability to use Python with software available under the GNU Public License (GPL) was very desirable. CNRI and the Free Software Foundation (FSF) interacted to develop enabling wording changes to the Python license. Python 1.6.1 is essentially the same as Python 1.6, with a few minor bug fixes, and with a different license that enables later versions to be GPL-compatible. Python 2.1 is a derivative work of Python 1.6.1, as well as of Python 2.0. After Python 2.0 was released by BeOpen.com, Guido van Rossum and the other PythonLabs developers joined Digital Creations. All intellectual property added from this point on, starting with Python 2.1 and its alpha and beta releases, is owned by the Python Software Foundation (PSF), a non-profit modeled after the Apache Software Foundation. See http://www.python.org/psf/ for more information about the PSF. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PSF LICENSE AGREEMENT --------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.1.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.1.1 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved" are retained in Python 2.1.1 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.1.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.1.1. 4. PSF is making Python 2.1.1 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.1.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.1.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.1.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python 2.1.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM TERMS AND CONDITIONS FOR PYTHON 2.0 ---------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI OPEN SOURCE GPL-COMPATIBLE LICENSE AGREEMENT ------------------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI PERMISSIONS STATEMENT AND DISCLAIMER ---------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. share/doc/alt-python34/README000064400000016634152342604300011552 0ustar00This is Python version 3.4.10 ============================= Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation. All rights reserved. Python 3.4 Is No Longer Supported --------------------------------- Python 3.4.10 is the final release in the Python 3.4 series. As of this release, the 3.4 branch has been retired, no further changes to 3.4 will be accepted, and no new releases will be made. This is standard Python policy; Python releases get five years of support and are then retired. If you're still using Python 3.4, you should consider upgrading to the current version--3.7.2 as of this writing. Newer versions of Python have many new features, performance improvements, and bug fixes, which should all serve to enhance your Python programming experience. We in the Python core development community thank you for your interest in 3.4, and we wish you all the best! Python 3.x ---------- Python 3.x is a new version of the language, which is incompatible with the 2.x line of releases. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Build Instructions ------------------ On Unix, Linux, BSD, OSX, and Cygwin: New text ./configure make make test sudo make install This will install Python as python3. You can pass many options to the configure script; run "./configure --help" to find out more. On OSX and Cygwin, the executable is called python.exe; elsewhere it's just python. On Mac OS X, if you have configured Python with --enable-framework, you should use "make frameworkinstall" to do the installation. Note that this installs the Python executable in a place that is not normally on your PATH, you may want to set up a symlink in /usr/local/bin. On Windows, see PCbuild/readme.txt. If you wish, you can create a subdirectory and invoke configure from there. For example: mkdir debug cd debug ../configure --with-pydebug make make test (This will fail if you *also* built at the top-level directory. You should do a "make clean" at the toplevel first.) What's New ---------- We try to have a comprehensive overview of the changes in the "What's New in Python 3.4" document, found at http://docs.python.org/3.4/whatsnew/3.4.html For a more detailed change log, read Misc/NEWS (though this file, too, is incomplete, and also doesn't list anything merged in from the 2.7 release under development). If you want to install multiple versions of Python see the section below entitled "Installing multiple versions". Documentation ------------- Documentation for Python 3.4 is online, updated daily: http://docs.python.org/3.4/ It can also be downloaded in many formats for faster access. The documentation is downloadable in HTML, PDF, and reStructuredText formats; the latter version is primarily for documentation authors, translators, and people with special formatting requirements. If you would like to contribute to the development of Python, relevant documentation is available at: http://docs.python.org/devguide/ For information about building Python's documentation, refer to Doc/README.txt. Converting From Python 2.x to 3.x --------------------------------- Python starting with 2.6 contains features to help locating code that needs to be changed, such as optional warnings when deprecated features are used, and backported versions of certain key Python 3.x features. A source-to-source translation tool, "2to3", can take care of the mundane task of converting large amounts of source code. It is not a complete solution but is complemented by the deprecation warnings in 2.6. See http://docs.python.org/3.4/library/2to3.html for more information. Testing ------- To test the interpreter, type "make test" in the top-level directory. The test set produces some output. You can generally ignore the messages about skipped tests due to optional features which can't be imported. If a message is printed about a failed test or a traceback or core dump is produced, something is wrong. By default, tests are prevented from overusing resources like disk space and memory. To enable these tests, run "make testall". IMPORTANT: If the tests fail and you decide to mail a bug report, *don't* include the output of "make test". It is useless. Run the failing test manually, as follows: ./python -m test -v test_whatever (substituting the top of the source tree for '.' if you built in a different directory). This runs the test in verbose mode. Installing multiple versions ---------------------------- On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix (--prefix argument to the configure script) you must take care that your primary python executable is not overwritten by the installation of a different version. All files and directories installed using "make altinstall" contain the major and minor version and can thus live side-by-side. "make install" also creates ${prefix}/bin/python3 which refers to ${prefix}/bin/pythonX.Y. If you intend to install multiple versions using the same prefix you must decide which version (if any) is your "primary" version. Install that version using "make install". Install all other versions using "make altinstall". For example, if you want to install Python 2.6, 2.7 and 3.4 with 2.7 being the primary version, you would execute "make install" in your 2.7 build directory and "make altinstall" in the others. Issue Tracker and Mailing List ------------------------------ We're soliciting bug reports about all aspects of the language. Fixes are also welcome, preferable in unified diff format. Please use the issue tracker: http://bugs.python.org/ If you're not sure whether you're dealing with a bug or a feature, use the mailing list: python-dev@python.org To subscribe to the list, use the mailman form: http://mail.python.org/mailman/listinfo/python-dev/ Proposals for enhancement ------------------------- If you have a proposal to change Python, you may want to send an email to the comp.lang.python or python-ideas mailing lists for inital feedback. A Python Enhancement Proposal (PEP) may be submitted if your idea gains ground. All current PEPs, as well as guidelines for submitting a new PEP, are listed at http://www.python.org/dev/peps/. Release Schedule ---------------- See PEP 429 for release details: http://www.python.org/dev/peps/pep-0429/ Copyright and License Information --------------------------------- Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation. All rights reserved. Copyright (c) 2000 BeOpen.com. All rights reserved. Copyright (c) 1995-2001 Corporation for National Research Initiatives. All rights reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum. All rights reserved. See the file "LICENSE" for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES. This Python distribution contains *no* GNU General Public License (GPL) code, so it may be used in proprietary projects. There are interfaces to some GNU code but these are entirely optional. All trademarks referenced herein are property of their respective holders. share/doc/alt-python34/LICENSE000064400000030761152342604300011674 0ustar00A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation, see http://www.zope.com). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF. All Python releases are Open Source (see http://www.opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. Release Derived Year Owner GPL- from compatible? (1) 0.9.0 thru 1.2 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no 1.6.1 1.6 2001 CNRI yes (2) 2.1 2.0+1.6.1 2001 PSF no 2.0.1 2.0+1.6.1 2001 PSF yes 2.1.1 2.1+2.0.1 2001 PSF yes 2.1.2 2.1.1 2002 PSF yes 2.1.3 2.1.2 2002 PSF yes 2.2 and above 2.1.1 2001-now PSF yes Footnotes: (1) GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't. (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law clause. According to CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 is "not incompatible" with the GPL. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 --------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. share/doc/alt-python34-devel/valgrind-python.supp000064400000020254152342604300016016 0ustar00# # This is a valgrind suppression file that should be used when using valgrind. # # Here's an example of running valgrind: # # cd python/dist/src # valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \ # ./python -E ./Lib/test/regrtest.py -u gui,network # # You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER # to use the preferred suppressions with Py_ADDRESS_IN_RANGE. # # If you do not want to recompile Python, you can uncomment # suppressions for PyObject_Free and PyObject_Realloc. # # See Misc/README.valgrind for more information. # all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Addr4 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Value4 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64 aka amd64) Memcheck:Value8 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value Memcheck:Cond fun:Py_ADDRESS_IN_RANGE } # # Leaks (including possible leaks) # Hmmm, I wonder if this masks some real leaks. I think it does. # Will need to fix that. # { Suppress leaking the GIL. Happens once per process, see comment in ceval.c. Memcheck:Leak fun:malloc fun:PyThread_allocate_lock fun:PyEval_InitThreads } { Suppress leaking the GIL after a fork. Memcheck:Leak fun:malloc fun:PyThread_allocate_lock fun:PyEval_ReInitThreads } { Suppress leaking the autoTLSkey. This looks like it shouldn't leak though. Memcheck:Leak fun:malloc fun:PyThread_create_key fun:_PyGILState_Init fun:Py_InitializeEx fun:Py_Main } { Hmmm, is this a real leak or like the GIL? Memcheck:Leak fun:malloc fun:PyThread_ReInitTLS } { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:realloc fun:_PyObject_GC_Resize fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:malloc fun:_PyObject_GC_New fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:malloc fun:_PyObject_GC_NewVar fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } # # Non-python specific leaks # { Handle pthread issue (possibly leaked) Memcheck:Leak fun:calloc fun:allocate_dtv fun:_dl_allocate_tls_storage fun:_dl_allocate_tls } { Handle pthread issue (possibly leaked) Memcheck:Leak fun:memalign fun:_dl_allocate_tls_storage fun:_dl_allocate_tls } ###{ ### ADDRESS_IN_RANGE/Invalid read of size 4 ### Memcheck:Addr4 ### fun:PyObject_Free ###} ### ###{ ### ADDRESS_IN_RANGE/Invalid read of size 4 ### Memcheck:Value4 ### fun:PyObject_Free ###} ### ###{ ### ADDRESS_IN_RANGE/Use of uninitialised value of size 8 ### Memcheck:Addr8 ### fun:PyObject_Free ###} ### ###{ ### ADDRESS_IN_RANGE/Use of uninitialised value of size 8 ### Memcheck:Value8 ### fun:PyObject_Free ###} ### ###{ ### ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value ### Memcheck:Cond ### fun:PyObject_Free ###} ###{ ### ADDRESS_IN_RANGE/Invalid read of size 4 ### Memcheck:Addr4 ### fun:PyObject_Realloc ###} ### ###{ ### ADDRESS_IN_RANGE/Invalid read of size 4 ### Memcheck:Value4 ### fun:PyObject_Realloc ###} ### ###{ ### ADDRESS_IN_RANGE/Use of uninitialised value of size 8 ### Memcheck:Addr8 ### fun:PyObject_Realloc ###} ### ###{ ### ADDRESS_IN_RANGE/Use of uninitialised value of size 8 ### Memcheck:Value8 ### fun:PyObject_Realloc ###} ### ###{ ### ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value ### Memcheck:Cond ### fun:PyObject_Realloc ###} ### ### All the suppressions below are for errors that occur within libraries ### that Python uses. The problems to not appear to be related to Python's ### use of the libraries. ### { Generic ubuntu ld problems Memcheck:Addr8 obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so } { Generic gentoo ld problems Memcheck:Cond obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so } { DBM problems, see test_dbm Memcheck:Param write(buf) fun:write obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_close } { DBM problems, see test_dbm Memcheck:Value8 fun:memmove obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { DBM problems, see test_dbm Memcheck:Cond obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { DBM problems, see test_dbm Memcheck:Cond fun:memmove obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { GDBM problems, see test_gdbm Memcheck:Param write(buf) fun:write fun:gdbm_open } { ZLIB problems, see test_gzip Memcheck:Cond obj:/lib/libz.so.1.2.3 obj:/lib/libz.so.1.2.3 fun:deflate } { Avoid problems w/readline doing a putenv and leaking on exit Memcheck:Leak fun:malloc fun:xmalloc fun:sh_set_lines_and_columns fun:_rl_get_screen_size fun:_rl_init_terminal_io obj:/lib/libreadline.so.4.3 fun:rl_initialize } ### ### These occur from somewhere within the SSL, when running ### test_socket_sll. They are too general to leave on by default. ### ###{ ### somewhere in SSL stuff ### Memcheck:Cond ### fun:memset ###} ###{ ### somewhere in SSL stuff ### Memcheck:Value4 ### fun:memset ###} ### ###{ ### somewhere in SSL stuff ### Memcheck:Cond ### fun:MD5_Update ###} ### ###{ ### somewhere in SSL stuff ### Memcheck:Value4 ### fun:MD5_Update ###} # Fedora's package "openssl-1.0.1-0.1.beta2.fc17.x86_64" on x86_64 # See http://bugs.python.org/issue14171 { openssl 1.0.1 prng 1 Memcheck:Cond fun:bcmp fun:fips_get_entropy fun:FIPS_drbg_instantiate fun:RAND_init_fips fun:OPENSSL_init_library fun:SSL_library_init fun:init_hashlib } { openssl 1.0.1 prng 2 Memcheck:Cond fun:fips_get_entropy fun:FIPS_drbg_instantiate fun:RAND_init_fips fun:OPENSSL_init_library fun:SSL_library_init fun:init_hashlib } { openssl 1.0.1 prng 3 Memcheck:Value8 fun:_x86_64_AES_encrypt_compact fun:AES_encrypt } # # All of these problems come from using test_socket_ssl # { from test_socket_ssl Memcheck:Cond fun:BN_bin2bn } { from test_socket_ssl Memcheck:Cond fun:BN_num_bits_word } { from test_socket_ssl Memcheck:Value4 fun:BN_num_bits_word } { from test_socket_ssl Memcheck:Cond fun:BN_mod_exp_mont_word } { from test_socket_ssl Memcheck:Cond fun:BN_mod_exp_mont } { from test_socket_ssl Memcheck:Param write(buf) fun:write obj:/usr/lib/libcrypto.so.0.9.7 } { from test_socket_ssl Memcheck:Cond fun:RSA_verify } { from test_socket_ssl Memcheck:Value4 fun:RSA_verify } { from test_socket_ssl Memcheck:Value4 fun:DES_set_key_unchecked } { from test_socket_ssl Memcheck:Value4 fun:DES_encrypt2 } { from test_socket_ssl Memcheck:Cond obj:/usr/lib/libssl.so.0.9.7 } { from test_socket_ssl Memcheck:Value4 obj:/usr/lib/libssl.so.0.9.7 } { from test_socket_ssl Memcheck:Cond fun:BUF_MEM_grow_clean } { from test_socket_ssl Memcheck:Cond fun:memcpy fun:ssl3_read_bytes } { from test_socket_ssl Memcheck:Cond fun:SHA1_Update } { from test_socket_ssl Memcheck:Value4 fun:SHA1_Update } { test_buffer_non_debug Memcheck:Addr4 fun:PyUnicodeUCS2_FSConverter } { test_buffer_non_debug Memcheck:Addr4 fun:PyUnicode_FSConverter } { wcscmp_false_positive Memcheck:Addr8 fun:wcscmp fun:_PyOS_GetOpt fun:Py_Main fun:main } # Additional suppressions for the unified decimal tests: { test_decimal Memcheck:Addr4 fun:PyUnicodeUCS2_FSConverter } { test_decimal2 Memcheck:Addr4 fun:PyUnicode_FSConverter } share/doc/alt-python34-devel/gdbinit000064400000011263152342604300013323 0ustar00# If you use the GNU debugger gdb to debug the Python C runtime, you # might find some of the following commands useful. Copy this to your # ~/.gdbinit file and it'll get loaded into gdb automatically when you # start it up. Then, at the gdb prompt you can do things like: # # (gdb) pyo apyobjectptr # # refcounts: 1 # address : 84a7a2c # $1 = void # (gdb) # # NOTE: If you have gdb 7 or later, it supports debugging of Python directly # with embedded macros that you may find superior to what is in here. # See Tools/gdb/libpython.py and http://bugs.python.org/issue8032. # Prints a representation of the object to stderr, along with the # number of reference counts it current has and the hex address the # object is allocated at. The argument must be a PyObject* define pyo # side effect of calling _PyObject_Dump is to dump the object's # info - assigning just prevents gdb from printing the # NULL return value set $_unused_void = _PyObject_Dump($arg0) end # Prints a representation of the object to stderr, along with the # number of reference counts it current has and the hex address the # object is allocated at. The argument must be a PyGC_Head* define pyg print _PyGC_Dump($arg0) end # print the local variables of the current frame define pylocals set $_i = 0 while $_i < f->f_code->co_nlocals if f->f_localsplus + $_i != 0 set $_names = co->co_varnames set $_name = _PyUnicode_AsString(PyTuple_GetItem($_names, $_i)) printf "%s:\n", $_name pyo f->f_localsplus[$_i] end set $_i = $_i + 1 end end # A rewrite of the Python interpreter's line number calculator in GDB's # command language define lineno set $__continue = 1 set $__co = f->f_code set $__lasti = f->f_lasti set $__sz = ((PyVarObject *)$__co->co_lnotab)->ob_size/2 set $__p = (unsigned char *)((PyBytesObject *)$__co->co_lnotab)->ob_sval set $__li = $__co->co_firstlineno set $__ad = 0 while ($__sz-1 >= 0 && $__continue) set $__sz = $__sz - 1 set $__ad = $__ad + *$__p set $__p = $__p + 1 if ($__ad > $__lasti) set $__continue = 0 else set $__li = $__li + *$__p set $__p = $__p + 1 end end printf "%d", $__li end # print the current frame - verbose define pyframev pyframe pylocals end define pyframe set $__fn = _PyUnicode_AsString(co->co_filename) set $__n = _PyUnicode_AsString(co->co_name) printf "%s (", $__fn lineno printf "): %s\n", $__n ### Uncomment these lines when using from within Emacs/XEmacs so it will ### automatically track/display the current Python source line # printf "%c%c%s:", 032, 032, $__fn # lineno # printf ":1\n" end ### Use these at your own risk. It appears that a bug in gdb causes it ### to crash in certain circumstances. #define up # up-silently 1 # printframe #end #define down # down-silently 1 # printframe #end define printframe if $pc > PyEval_EvalFrameEx && $pc < PyEval_EvalCodeEx pyframe else frame end end # Here's a somewhat fragile way to print the entire Python stack from gdb. # It's fragile because the tests for the value of $pc depend on the layout # of specific functions in the C source code. # Explanation of while and if tests: We want to pop up the stack until we # land in Py_Main (this is probably an incorrect assumption in an embedded # interpreter, but the test can be extended by an interested party). If # Py_Main <= $pc <= Py_GetArgcArv is true, $pc is in Py_Main(), so the while # tests succeeds as long as it's not true. In a similar fashion the if # statement tests to see if we are in PyEval_EvalFrameEx(). # Note: The name of the main interpreter function and the function which # follow it has changed over time. This version of pystack works with this # version of Python. If you try using it with older or newer versions of # the interpreter you may will have to change the functions you compare with # $pc. # print the entire Python call stack define pystack while $pc < Py_Main || $pc > Py_GetArgcArgv if $pc > PyEval_EvalFrameEx && $pc < PyEval_EvalCodeEx pyframe end up-silently 1 end select-frame 0 end # print the entire Python call stack - verbose mode define pystackv while $pc < Py_Main || $pc > Py_GetArgcArgv if $pc > PyEval_EvalFrameEx && $pc < PyEval_EvalCodeEx pyframev end up-silently 1 end select-frame 0 end # generally useful macro to print a Unicode string def pu set $uni = $arg0 set $i = 0 while (*$uni && $i++<100) if (*$uni < 0x80) print *(char*)$uni++ else print /x *(short*)$uni++ end end end share/doc/alt-python34-devel/README.valgrind000064400000010462152342604300014445 0ustar00This document describes some caveats about the use of Valgrind with Python. Valgrind is used periodically by Python developers to try to ensure there are no memory leaks or invalid memory reads/writes. If you don't want to read about the details of using Valgrind, there are still two things you must do to suppress the warnings. First, you must use a suppressions file. One is supplied in Misc/valgrind-python.supp. Second, you must do one of the following: * Uncomment Py_USING_MEMORY_DEBUGGER in Objects/obmalloc.c, then rebuild Python * Uncomment the lines in Misc/valgrind-python.supp that suppress the warnings for PyObject_Free and PyObject_Realloc If you want to use Valgrind more effectively and catch even more memory leaks, you will need to configure python --without-pymalloc. PyMalloc allocates a few blocks in big chunks and most object allocations don't call malloc, they use chunks doled about by PyMalloc from the big blocks. This means Valgrind can't detect many allocations (and frees), except for those that are forwarded to the system malloc. Note: configuring python --without-pymalloc makes Python run much slower, especially when running under Valgrind. You may need to run the tests in batches under Valgrind to keep the memory usage down to allow the tests to complete. It seems to take about 5 times longer to run --without-pymalloc. Apr 15, 2006: test_ctypes causes Valgrind 3.1.1 to fail (crash). test_socket_ssl should be skipped when running valgrind. The reason is that it purposely uses uninitialized memory. This causes many spurious warnings, so it's easier to just skip it. Details: -------- Python uses its own small-object allocation scheme on top of malloc, called PyMalloc. Valgrind may show some unexpected results when PyMalloc is used. Starting with Python 2.3, PyMalloc is used by default. You can disable PyMalloc when configuring python by adding the --without-pymalloc option. If you disable PyMalloc, most of the information in this document and the supplied suppressions file will not be useful. As discussed above, disabling PyMalloc can catch more problems. If you use valgrind on a default build of Python, you will see many errors like: ==6399== Use of uninitialised value of size 4 ==6399== at 0x4A9BDE7E: PyObject_Free (obmalloc.c:711) ==6399== by 0x4A9B8198: dictresize (dictobject.c:477) These are expected and not a problem. Tim Peters explains the situation: PyMalloc needs to know whether an arbitrary address is one that's managed by it, or is managed by the system malloc. The current scheme allows this to be determined in constant time, regardless of how many memory areas are under pymalloc's control. The memory pymalloc manages itself is in one or more "arenas", each a large contiguous memory area obtained from malloc. The base address of each arena is saved by pymalloc in a vector. Each arena is carved into "pools", and a field at the start of each pool contains the index of that pool's arena's base address in that vector. Given an arbitrary address, pymalloc computes the pool base address corresponding to it, then looks at "the index" stored near there. If the index read up is out of bounds for the vector of arena base addresses pymalloc maintains, then pymalloc knows for certain that this address is not under pymalloc's control. Otherwise the index is in bounds, and pymalloc compares the arena base address stored at that index in the vector to the arbitrary address pymalloc is investigating pymalloc controls this arbitrary address if and only if it lies in the arena the address's pool's index claims it lies in. It doesn't matter whether the memory pymalloc reads up ("the index") is initialized. If it's not initialized, then whatever trash gets read up will lead pymalloc to conclude (correctly) that the address isn't controlled by it, either because the index is out of bounds, or the index is in bounds but the arena it represents doesn't contain the address. This determination has to be made on every call to one of pymalloc's free/realloc entry points, so its speed is critical (Python allocates and frees dynamic memory at a ferocious rate -- everything in Python, from integers to "stack frames", lives in the heap). etc/locked_extensions.ini000064400000000051152342604300011533 0ustar00[python3.4] pip = 1.5.6 setuptools = 2.0 bin/python3.4m-config000075500000000255152342604300010431 0ustar00#!/bin/sh exec `dirname $0`/python3.4m-`uname -m`-config "$@" [ $? -eq 127 ] && echo "Could not find python3.4m-`uname -m`-config. Look around to see available arches." >&2 bin/pyvenv-3.4000075500000000363152342604300007074 0ustar00#!/opt/alt/python34/bin/python3.4 if __name__ == '__main__': import sys rc = 1 try: import venv venv.main() rc = 0 except Exception as e: print('Error: %s' % e, file=sys.stderr) sys.exit(rc) bin/pydoc3.4000075500000000133152342604300006601 0ustar00#!/opt/alt/python34/bin/python3.4 import pydoc if __name__ == '__main__': pydoc.cli() bin/python3.4m-x86_64-config000075500000007337152342604300011375 0ustar00#!/bin/sh # Keep this script in sync with python-config.in exit_with_usage () { echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir" exit $1 } if [ "$1" = "" ] ; then exit_with_usage 1 fi # Returns the actual prefix where this script was installed to. installed_prefix () { RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) if which readlink >/dev/null 2>&1 ; then if readlink -f "$RESULT" >/dev/null 2>&1; then RESULT=$(readlink -f "$RESULT") fi fi echo $RESULT } prefix_build="/opt/alt/python34" prefix_real=$(installed_prefix "$0") # Use sed to fix paths from their built-to locations to their installed-to # locations. prefix=$(echo "$prefix_build" | sed "s#$prefix_build#$prefix_real#") exec_prefix_build="/opt/alt/python34" exec_prefix=$(echo "$exec_prefix_build" | sed "s#$exec_prefix_build#$prefix_real#") includedir=$(echo "/opt/alt/python34/include" | sed "s#$prefix_build#$prefix_real#") libdir=$(echo "/opt/alt/python34/lib64" | sed "s#$prefix_build#$prefix_real#") CFLAGS=$(echo "-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -I/usr/include/tirpc" | sed "s#$prefix_build#$prefix_real#") VERSION="3.4" LIBM="-lm" LIBC="" SYSLIBS="$LIBM $LIBC" ABIFLAGS="m" LIBS="-lpython${VERSION}${ABIFLAGS} -lpthread -ldl -lutil $SYSLIBS" BASECFLAGS=" -Wno-unused-result" LDLIBRARY="libpython${LDVERSION}.so" LINKFORSHARED="-Xlinker -export-dynamic" OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv" PY_ENABLE_SHARED="1" LDVERSION="${VERSION}${ABIFLAGS}" LIBDEST=${prefix}/lib/python${VERSION} LIBPL=$(echo "${prefix}/lib/python3.4/config-${VERSION}${ABIFLAGS}" | sed "s#$prefix_build#$prefix_real#") SO=".cpython-34m.so" PYTHONFRAMEWORK="" INCDIR="-I$includedir/python${VERSION}${ABIFLAGS}" PLATINCDIR="-I$includedir/python${VERSION}${ABIFLAGS}" # Scan for --help or unknown argument. for ARG in $* do case $ARG in --help) exit_with_usage 0 ;; --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir) ;; *) exit_with_usage 1 ;; esac done for ARG in "$@" do case "$ARG" in --prefix) echo "$prefix" ;; --exec-prefix) echo "$exec_prefix" ;; --includes) echo "$INCDIR $PLATINCDIR" ;; --cflags) echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" ;; --libs) echo "$LIBS" ;; --ldflags) LINKFORSHAREDUSED= if [ -z "$PYTHONFRAMEWORK" ] ; then LINKFORSHAREDUSED=$LINKFORSHARED fi LIBPLUSED= if [ "$PY_ENABLE_SHARED" = "0" ] ; then LIBPLUSED="-L$LIBPL" fi echo "$LIBPLUSED -L$libdir $LIBS $LINKFORSHAREDUSED" ;; --extension-suffix) echo "$SO" ;; --abiflags) echo "$ABIFLAGS" ;; --configdir) echo "$LIBPL" ;; esac done bin/pip3.4000075500000000332152342604300006254 0ustar00#!/opt/alt/python34/bin/python3 # -*- coding: utf-8 -*- import re import sys from pip import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(main()) bin/python3.4000075500000027420152342604300007014 0ustar00ELF> @P'@8 @@@@hh((        PP DDStd Ptd<<QtdRtd  /lib64/ld-linux-x86-64.so.2GNUGNUGNUz=1B!^jY &Q<Q! e(BEj Cֻ| : K2bqXk|  |l2 [A "$ L 7 N  Yhh eR /+  <Plibpython3.4m.so.1.0_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTable_PyMem_RawStrdupPyMem_RawMallocPy_Main_Py_char2wcharPyMem_RawFreelibpthread.so.0libdl.so.2libutil.so.1libm.so.6libc.so.6setlocale__fprintf_chkstderrfwrite__cxa_finalize__libc_start_main_edata__bss_start_end__libc_csu_fini__data_start_IO_stdin_used__libc_csu_initGLIBC_2.3.4GLIBC_2.2.5/opt/alt/python34/lib64:/opt/alt/sqlite/usr/lib64ti xui                            HH! HtH5 % hhhhhhhhqha%  D% D% D% D% D% D% D% D% DAWAVAAUATIUoSHcHHHVHHKHHH1ZHBH$HH54E"EnE1fJDIOM9IK<1AOJHuH<$L$AH! L$HH81HD[]A\A]A^A_úH H=QAHIcL<$IHHDLHL$XL0DHHL$ALlI<$IM9uHHJIcL<$HHDLLDHAf.f1I^HHPTLFH H= H= H H9tH Ht H= H5 H)HHH?HHtHm HtfD=i u+UH=J Ht H=f 9dA ]wAWIAVIAUAATL%  UH-  SL)HHt1LLDAHH9uH[]A\A]A^A_ff.HHout of memory Fatal Python error: unable to decode the command line argument #%i ;<p8(XHzRx /D$4FJ w?:*3$"\LtFBE B(D0D8NP 8D0A(B BBBA DeFEE E(H0H8G@n8A0A(B BBB 8   X  o0  p  ooooo   0 @ P ` GA$3a1  GA$3p1113 UGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW* GA$3a1 e GA*GOW* Upython3.4-3.4.10-11.el8.x86_64.debug7zXZִF!t/L]?Eh=ڊ2N #^_>i`Sժu;fihH~|aQqjGҌ%2dXYpS{t zSu̽e4lʆGLE}g1wX p?vP1JEAJKVYև軶b5ymմ:Pg2;ku.Rejr C,*\eA:2vWFHlkW7%6~4zV5O?J`eꘕ%k@ѕJ]Qr jOLf:|ܪXh:քٽD[wj#6͌U5/`9O‹UD<)Yy wwͷ"ѝ,[it1k"3P^dZ jՐ"qym[gy g)G߳iUb8m0i9ń&5]i,"#gs=ՒBywɼ%vW`Z}h;֜u5T}S+ zƳ QzwYCrF2]_I8zE=C^TRl ɰ3`d:JLMaT(zs<$/g rEhB:̻0G4~ך~sT*W04 +2m$j9f>O*ḯߛEtrwb-pV"cӌ OR#amXҙ!KC "<@7ye"$ɰD dsy8")LqEgYZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata  & 4$Go00LQ XYao2no0}B  p p  UXX hh`<      Pp p     ` P T",/" &>bin/easy_install-3.4000075500000000366152342604300010237 0ustar00#!/opt/alt/python34/bin/python3 # -*- coding: utf-8 -*- import re import sys from setuptools.command.easy_install import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(main()) bin/python3.4m000075500000027420152342604300007171 0ustar00ELF> @P'@8 @@@@hh((        PP DDStd Ptd<<QtdRtd  /lib64/ld-linux-x86-64.so.2GNUGNUGNUz=1B!^jY &Q<Q! e(BEj Cֻ| : K2bqXk|  |l2 [A "$ L 7 N  Yhh eR /+  <Plibpython3.4m.so.1.0_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTable_PyMem_RawStrdupPyMem_RawMallocPy_Main_Py_char2wcharPyMem_RawFreelibpthread.so.0libdl.so.2libutil.so.1libm.so.6libc.so.6setlocale__fprintf_chkstderrfwrite__cxa_finalize__libc_start_main_edata__bss_start_end__libc_csu_fini__data_start_IO_stdin_used__libc_csu_initGLIBC_2.3.4GLIBC_2.2.5/opt/alt/python34/lib64:/opt/alt/sqlite/usr/lib64ti xui                            HH! HtH5 % hhhhhhhhqha%  D% D% D% D% D% D% D% D% DAWAVAAUATIUoSHcHHHVHHKHHH1ZHBH$HH54E"EnE1fJDIOM9IK<1AOJHuH<$L$AH! L$HH81HD[]A\A]A^A_úH H=QAHIcL<$IHHDLHL$XL0DHHL$ALlI<$IM9uHHJIcL<$HHDLLDHAf.f1I^HHPTLFH H= H= H H9tH Ht H= H5 H)HHH?HHtHm HtfD=i u+UH=J Ht H=f 9dA ]wAWIAVIAUAATL%  UH-  SL)HHt1LLDAHH9uH[]A\A]A^A_ff.HHout of memory Fatal Python error: unable to decode the command line argument #%i ;<p8(XHzRx /D$4FJ w?:*3$"\LtFBE B(D0D8NP 8D0A(B BBBA DeFEE E(H0H8G@n8A0A(B BBB 8   X  o0  p  ooooo   0 @ P ` GA$3a1  GA$3p1113 UGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW* GA$3a1 e GA*GOW* Upython3.4-3.4.10-11.el8.x86_64.debug7zXZִF!t/L]?Eh=ڊ2N #^_>i`Sժu;fihH~|aQqjGҌ%2dXYpS{t zSu̽e4lʆGLE}g1wX p?vP1JEAJKVYև軶b5ymմ:Pg2;ku.Rejr C,*\eA:2vWFHlkW7%6~4zV5O?J`eꘕ%k@ѕJ]Qr jOLf:|ܪXh:քٽD[wj#6͌U5/`9O‹UD<)Yy wwͷ"ѝ,[it1k"3P^dZ jՐ"qym[gy g)G߳iUb8m0i9ń&5]i,"#gs=ՒBywɼ%vW`Z}h;֜u5T}S+ zƳ QzwYCrF2]_I8zE=C^TRl ɰ3`d:JLMaT(zs<$/g rEhB:̻0G4~ך~sT*W04 +2m$j9f>O*ḯߛEtrwb-pV"cӌ OR#amXҙ!KC "<@7ye"$ɰD dsy8")LqEgYZ.shstrtab.interp.note.gnu.property.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata  & 4$Go00LQ XYao2no0}B  p p  UXX hh`<      Pp p     ` P T",/" &>bin/lswsgi000075500000335660152342604300006566 0ustar00ELF>j@@8 @@@@hh00 hh!h!X" !!PP00DDStd00Ptd d d d,,QtdRtdhh!h!/lib64/ld-linux-x86-64.so.2 GNUGNUGNUfzݮq҈*@Ha !B  ЉAB@@ P&"I)@@  `  DEp@ H   !#$'()*+,ʼnSr|6řLw4I : ap~Ne+ qiCBe[n}QcU'J6ʞΓ"7Α~"mNUiY؏xݾ/y& W2:SѮCEunF!`aDK!\4$[i'߱R Oz' l2b0՜M&ejiq\KqXI =ջ|걄?кkѮl>p%h6ĴD%/=;#XSɶ7jp[ڽBy:Ί=\'3q1{k C6'rO`O#KWj|uIo=C19=3S=n  E 4` rO_ Auz  ``m&8 [ YNx2  0VZ(1 RQe  !H U |x h2 F  }R@]kmS{?kk fE=nEt!- > N G #}1  w @ VAA \ u, N "7/$  3! e .#W!A.)# ! _  I*kRm Gj)W#B 5a !V &(Ҏs Vj *| gCJ ! )e6  +H  2M mt  = I  ! (- ! pT4!|+JI  '  ~b [4q J#Ie@' &cF[ ' j/Pb @!r  #H F {- `J ! @0 ! D(- ! TH {X 1@} q f('A= G @_ 4P _! 2 ! q- q(-  s! !f y{('.  ! hI /r k )9A"4_{ ]   (* (libpython3.4m.so.1.0_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablePyImport_AddModulePyList_SizePyErr_RestorePyImport_ImportPyBytes_AsStringPy_BuildValuePyDict_DelItemStringPyDict_NewPyBytes_FromStringAndSizePyList_NewPyInterpreterState_ThreadHeadPyUnicode_DecodeLatin1PyThreadState_ClearPySys_SetArgvPyImport_ExecCodeModuleExPyParser_SimpleParseFileFlagsPyTuple_NewPyEval_RestoreThreadPy_SetPythonHomePy_FinalizePyGILState_EnsurePyErr_ClearPyCapsule_NewPyThreadState_DeletePyExc_IndexErrorPyExc_MemoryErrorPyUnicode_AsASCIIStringPyArg_ParseTuplePy_NewInterpreter_Py_FalseStructPyExc_RuntimeErrorPyType_ReadyPyErr_SetStringPyErr_OccurredPyModule_AddObjectPyList_TypePyBytes_SizePyErr_PrintPyObject_GetIterPyList_AppendPyThreadState_Swap_Py_TrueStructPyExc_ValueErrorPyEval_AcquireThreadPyCapsule_GetPointerPyDict_GetItemStringPyExc_IOErrorPySys_SetObjectPyCallable_CheckPyUnicode_FromStringPyObject_CallObjectPy_SetProgramNamePyBytes_FromStringPyImport_GetModuleDictPyCapsule_TypePyUnicode_DecodeFSDefaultPyExc_AssertionErrorPyObject_FreePyDict_SetItemString_PyBytes_ResizePyThreadState_GetPyObject_GetAttrStringPyEval_CallObjectWithKeywordsPyEval_ReleaseThreadPyCodec_EncoderPyEval_SaveThread_Py_NoneStructPy_InitializePyNode_FreePyEval_InitThreadsPyNode_CompilePyList_GetItemPyLong_AsLongPyImport_ImportModulePyMem_Free_PyObject_NewPyModule_Create2PyThreadState_NextPyErr_FetchPyModule_GetDictPyMem_MallocPyIter_NextPy_EndInterpreterPyObject_HasAttrStringPyGILState_Releaselibpthread.so.0acceptwaitpid__errno_locationsigactionlibdl.so.2dlsymdlopendlerrorlibutil.so.1libm.so.6libc.so.6setuidchrootsocket__xpg_basenameexithtonlhtonssetlocalestrncmpstrrchrgetpwuidsendfileinitgroupssignalstrncpymbstowcsforksigprocmasktimesetreuid__stack_chk_failunlinklistenselectreallocstrtollmemchrgetpidkillstrduplocaltime_rstrtolmmapsched_yieldmemccpygetpwnamgetppidstrlenprctlsigemptysetgetaddrinfomemsetwritevbindchdirmemcmptouppersetgroupsdup2sigaddsetstdoutinet_addrmemcpyfclosesetsockoptmallocstrcasecmprealpathsetpgidgetpeername__ctype_b_locgetenvstderralarmsystemgetuidsetrlimitusleepgetcwdfwritegettimeofdaygeteuidatoiatolstrchrqsort__cxa_finalizefreeaddrinfosetsidfcntlmemmovefopen64setgidstrcmpstrerror__libc_start_mainvfprintfsnprintfsysconffree__environ__fxstat__fxstat64_edata__bss_start_endLSAPI_ForeachEnv_r__libc_csu_finiLSAPI_Set_Slow_Req_MsecswsgiGetContentLengthLSAPI_IsRunningLSAPI_Set_Max_Process_TimewsgiSendHeadersLSAPI_Flush_rLSAPI_FinalizeRespHeaders_rInputStream_TypeLSAPI_ReqBodyGetLine_rFlush_RespBuf_rLSAPI_Register_Pgrp_Timer_CallbackunquoteURLwsgiSendBodyset_skip_writewsgiInitLSAPI_AppendRespHeader2_rLSAPI_Accept_rLSAPI_ReqBodyGetChar_rLSAPI_Postfork_Childlsapi_MD5UpdateLSAPI_Write_rLSAPI_CreateListenSockLSAPI_Set_Extra_ChildrenwsgiSendFilewsgiAppHandlerLSAPI_ReadReqBody_rLSAPI_Set_Max_Reqslsapi_MD5FinalFileWrapper_TypeLSAPI_Prefork_Accept_rLSAPI_Set_Max_IdleLSAPI_AppendRespHeader_rLSAPI_Set_Server_fdLSAPI_GetHeader_rwsgiPopulateEnvironlsapi_perrorLSAPI_Is_ListenLSAPI_InitwsgiUnquotewsgiHandlerLSAPI_No_Check_ppidLSAPI_Write_Stderr_rLSAPI_End_Response_rwsgiSetRequestData__data_startLSAPI_Finish_rpython_initLSAPI_ForeachOrgHeader_rwsgiScriptNameLenLSAPI_Accept_Before_ForkwsgiPyVersionLSAPI_Set_Max_Idle_Children_IO_stdin_usedLSAPI_Is_Listen_rLSAPI_Reset_rLSAPI_ErrResponse_rLSAPI_sendfile_rto_wcharwsgiScriptName__libc_csu_initg_reqLSAPI_Set_Restored_Parent_PidwsgiLoadModuleLSAPI_Set_Max_ChildrenLSAPI_ForeachSpecialEnv_rLSAPI_Inc_Req_ProcessedcompareValueLocationLSAPI_reset_server_stateLSAPI_Init_Env_ParametersLSAPI_ParseSockAddrwsgiStderrwsgiGetRequestDataLSAPI_StopLSAPI_Postfork_ParentRequest_TypewsgiSubInitLSAPI_CreateListenSock2LSAPI_Init_Prefork_ServerwsgiInitModuleLSAPI_is_suEXEC_DaemonLSAPI_Set_Server_Max_Idle_Secspreload_modulefixMainFileinit_wsgisupwsgiCleanupLSAPI_Release_rLSAPI_ForeachHeader_rmultiprocessLSAPI_Get_ppidLSAPI_GetEnv_rlsapi_MD5InitLSAPI_InitRequestwsgiImportLSAPI_Logis_enough_free_memLSAPI_Get_Slow_Req_MsecswsgiPutEnvGLIBC_2.2.5GLIBC_2.14GLIBC_2.3GLIBC_2.4/opt/alt/python34/lib64j ui 0 ui ii ii ui h!kp!pkx!x!8!KP!s!,L!2L!^Mȑ!ؑ!mM!M!ȅ!M8!MP!VВ!M!!H!lX!!K!`!0!|Q8!Q@!Q`!Rh!ix!R!R!!R!S!\!(S!JS!!aS!!,ȕ!`!!գ!!S!!Sؖ!S!p!S!!!!!!!ĥ!Ȣ!p!! T!,T!@T!UT!jT!}T!T!T !T(!T0!T8!T@!TH!TP!TX!U`!Uh!-Up!@Ux!NU!gU!wU!U!U!U!Uȣ!UУ!Uأ!U!U!U!V!V!"V!)V!1V!6V !=V(!EV0!PV8!^V@!pVH!yVP!VX!V`!Vh!Vp!Vx!V!V!V!V!V!V!VȤ!VФ!Vؤ!V!a!Oa!`a!pah!p!x!2!4!<!S!_!a!c!g!|!ȏ!Џ!؏!!!!!!u!!!!!!! !(! 0! 8! @! H! P!X!`!h!p!x!!!!!!!!!!Ȋ!Њ! ؊!!!"!#!$!%!&!'!(!) !*(!+0!,8!-@!.H!/P!0X!1`!3h!5p!6x!7!8!9!:!;!=!>!?!@!Aȋ!BЋ!C؋!D!E!F!G!H!I!J!K!L !M(!N0!O8!P@!QH!RP!TX!V`!Wh!Xp!Yx!Z![!\!]!^!`!b!d!e!fȌ!hЌ!i،!j!k!l!m!n!o!p!q!r !s(!t0!v8!w@!xH!yP!zX!{`!}h!~p!x!!!!!!!!!!ȍ!Ѝ!؍!!!!!!!!! !(!0!8!@!H!P!X!`!h!p!x!!!!!!!!!!Ȏ!Ў!؎!!!!!!!!! !(!0!8!@!H!P!X!`!HH:!HtH55!%5!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhh% *!D%*!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%})!D%u)!D%m)!D%e)!D%])!D%U)!D%M)!D%E)!D%=)!D%5)!D%-)!D%%)!D%)!D%)!D% )!D%)!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%}(!D%u(!D%m(!D%e(!D%](!D%U(!D%M(!D%E(!D%=(!D%5(!D%-(!D%%(!D%(!D%(!D% (!D%(!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%'!D%}'!D%u'!D%m'!D%e'!D%]'!D%U'!D%M'!D%E'!D%='!D%5'!D%-'!D%%'!D%'!D%'!D% '!D%'!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%&!D%}&!D%u&!D%m&!D%e&!D%]&!D%U&!D%M&!D%E&!D%=&!D%5&!D%-&!D%%&!D%&!D%&!D% &!D%&!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%%!D%}%!D%u%!D%m%!D%e%!D%]%!D%U%!D%M%!D%E%!D%=%!D%5%!D%-%!D%%%!D%%!D%%!D% %!D%%!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D%$!D1I^HHPTLH H=$!H=:!H :!H9tHN$!Ht H=9!H59!H)HHH?HHtH$!HtfD=9!u+UH=b$!Ht H=!d}9!]wUHH,!H'p]UHHP}HuEHyHEHEHgHEE}HEHHH5LHtHEHHH51Hu-H#!HHH=HEHHH5HftHEHHH5hHHu/H"!HHUH5THǸ_EHEHHHHEH}uETEHHHEHH<-t>EHHHEHHH"!HH5HǸEEHHHEHHHat mtUEHHHHEHH H街Ẽ}tE̾Ẻ ExEHHHHEHHHHEH}u_HEо:HHEH}tHEHPHUEEEă9EU#HEH}t*HUHMHEHH)HEH}tEhNH}tHEHH)!Ht0E!HMHUHEHHi)!H!*E}uHL)!H#yH}tTHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHЋEȉ/UHH}H}t HEH]UHHĀH}HEHEHEHEHEHEH= !'HEH}u HEH@(HEHzHHEHPHEHEH}u^H!HH5'HHEHEHEHHPHEHHEHHuHEH@H@0HUHи9HEHPHEHP HEH=iHEHUHEHHHEHH=HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHH=4HEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHH=SHEH}unHE{HEHEH5HtHEH}tTHEH5{H1lH=gpHEHEHHPHEHHEHHHEHHHHEH51HHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHUHP HEH.HEUHHHHDž(HDž0HDž8HDž@AH@HH@t!HH@ H(H(HH=ZH8H8uH8aHDžHHDžPH8HHHHHH5HHPHP HDžXHPHHPHPHHPHDHXHXu^HXH`H`tPH`HhHhHHPHhHHhHHuHhH@H@0HhHHPHpHpHHPHpHHpHHuHpH@H@0HpHH8HDžxHEH8H&HxHxH5H9HEH}HEHEHHPHEHHEHHEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHH8HEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHDž8H=H8H8t7HEH8HHEHEH5JHH0H0HEH0HHPH0HH= H0HXHEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHH0HEHEHHPHEHHEHHuHEH@H@0HUHH8HEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHH(HEHEH(H@HH(bH(HgHEH(H;Et7H(HH(HH(HHEH(H(uHEH(H(H`H(H1H@HBHH@H/HH@UHH0H}HuHEHEDEH,!HUHHKHEH}uQHEHaHEHEH}uE%H+!HUHMHHqHEHHPHEHHEEHEtHEH@ HEHEHf;HEH}t&HEuHEPHEHEUHH0H}HEHEH@t'HEHEH +EHEHEHEHHPHEHHEHHuHEH@H@0HUHЋEUH}}/~}9E0-}@~}FE7}`~}fEW]UHSH8H}HEHDE܋E܃HHHEH}u :HEHEHE<%HEHHEHHHUHHHH%tvHHUHHHH%tJHEHHEHHEHPHU ˉڈHEHEH@ HE@(HEH@0HEH@8HE@@HEUHH@H}HuHUdH%(HE1HUHEHH3!H5HǸ7u HEH5dHfHHEHPHEH@HsHEHH=9HEH}u|HEHH!H)HHEHP HEHEHEHHPHEHHEHHuHEH@H@0HUHHEH@ Hu HEHHMdH3 %(tUHH`H}HudH%(HE1HEHuHMHUHEIIH !H5AHǸu H5>.HEHHEHm !H9HE@@HEHuHMHUIH5HǸfu H5 -3HEHHHHEHHHHEHHHHUHMHEHHHEH@0Ht9H5$-H !HH5HHE H+HEP(HEH@0HEHEHHHHUHEHP0HEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEH5@HHMdH3 %(tUHHPH}dH%(HE1HEH@0HEHt -EԃHHHHEH}u EEEHcHEH@0HH|HEH}HMHUHEH5iHǸ-EЍPUHHHEHHEHEЍPUHHHEHHEHEE;E^HEp(HEH@HMUHuHEHHEHHudH34%(t2UHH H}HuU}t(EHcHEH@HMHH tUHH0H}HudH%(HE1HEH@0Hu#H !HH5HHMHUHEH5HǸumHE؋@@u"HEHtKHE@@UHMHEHHtH !HHPH !HH !HudH34%(tUHHPH}HuHEH@H5eH,u HEH@H5@HWHEH}u 8HEH}uEHEHEHEHHPHEHHEHHuHEH@H@0HUHиKHUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHH}u HEHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHtRHE@@u"HEH_t0HE@@HEH@UĉHhtUHHpH}HuHEH@H !H9u6HUHEHHE}y }u HEH1HEH}4HEH@H%HtSHEHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHE8HtDHEHEHEHHPHEHHEHHHEH@H@0HUH~}HEHHEH}uDHEHEHEHHPHEHHEHH6HEH@H@0HUHHE@@u_HEHZtDHEHEHEHHPHEHHEHHHEH@H@0HUHHE@@UHMHEHHzt=HEHEHEHHPHEHHEHHuxHEH@H@0HUHaHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHHEH} HEHEHEHHPHEHHEHHuHEH@H@0HUH'Ht2HE@@u"HEHtHE@@UHHpH}dH%(HE1HUHMHEHHHEH5HHEH5HHEH}HEH}HUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHHUHMHEHH=HEdH3%(tUHHHEHK!Hy H!Hvy H!HYy H=!HEH}u H!HHHHEH!H5ȽHHc!HHHHEHN!H5+HH!HHHHEH!H5 HHEUHHHk!HH!HHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUH>UHHPH}HuHEHEHEHEHEH5XHHEH}u'HEHH59 *HuHEйHHEHEHh#HtHUHEHHHEHtsHEHH}t,HUHMHEHH)HEHt$6HEHH5HEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEH}tHEHHPHEHHEUHH H}HEHzEEHHHHEH}tEHcHMHEHHoHEUHH H5غH=pHEH}tHEHcHaH=EHEH}tHEH8H,H=^HEH}t HEHUHKzHC!~H/!]UHH@H}ȉuHEH%HEH}u HEHTHEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHЃ}tQH}tJHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEUHH0H}dH%(HE1HEHHEHEHtHEHƿHEHH=HH=HEH}tqHEH5HHH !HHEHEHEHHPHEHHEHHuHEH@H@0HUHH!HHt HMdH3 %(tUHHH $H@HdH%(HE1HHHDžH/HHHt$HHHHHHHHHHH.H3HHt*HHH)HЉHƄHHHHHHHudH34%(tMUHH@H}H=¸OHEH}u HEHHPHEHHEHHEHEH5HHuiHEH4HEH}tHUHEH5QH"HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHиUHH`H}HuHUMHEHE/HHEH}tHEHEHHE/HUHEHHHEH}tp}tXHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHUHEHH2HEHHPHEHH}uHEHHEH}HUHMHEHHH}u HHEHUHEHHHEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHH}tHEHu}HUHEHHH5&H}tRHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEUHH0H}HuHUHEEHEH+tH5J8HEHaHp !Hi !HUHuHOHEEvHEUHHHXHPHHH@dH%(HE1HDžpDždHDžxHEHEDžlHEHXH5HUHEH}tHEH5ݴH`uH !HE|hXHdHEHHHxHxu"HEHH57HxH(HEHEHHu=H@HtH5HHEHHPuXHXHHPHXH5#HTHHHPuH56}duBHXH5HTHEH}t!HEH5Hu DžlHEHlHHHPHHEH}HXH5HhHEH}uH5wHEHH=HEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH5eEHEHH HHpHEHEHEHHPHEHHEHHuHEH@H@0HUHHpuH5HpHXHHCHpH5sH}HEH}uH5,sHpH@HUHH=۲HEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH5HUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHH}t3HpHUHP8HUHpHHpHEHH5αHt,HptHp@@uHXHHptaHXH@HpHHpHEHEHHPHEHHEHHuHEH@H@0HUHHxtHxH h[HMdH3 %(tBUHH`H}HuHEH}HEH5HaHEH}uH5p\HEHH=HEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH5~HEHH HHEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH5/lHUHEHHHHEH5{HHEH}uH54 HEH@HUHH=HEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH5HUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}t-HEHUHP8HUHEHHHEHH5)Ht#PH}t HE@@u HEHH}tXHEH誦HEH9HEHEHEHHPHEHHEHHuHEH@H@0HUHиUHH}H}tHEHHEHH)HH]UHH0H}HEH@HEHEH@HEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEH@H@HUHАUHH0H}HuHUHEH0HUHHEH}t HEH@HEUHH@H}HuHUdH%(HE1HMHUHEIHH H5HǸuHEHHHHUHEHPHudH34%(tIUHH@H}HudH%(HE1EHUHEH5 HǸAu HEH@H@HEԃ}H=ӭ E9E}EԉEЋEHHƿռHEHEHu HEH HEEHcHEH@H@HMHH>Eԃ}QHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHи!E9E}EHcHEHHHEHMdH3 %(tҼUHHPH}HudH%(HE1EHUHEH5HǸu HEH@H@H|Eԃ}H=\蓿E9E}EԉE̋EHHƿ^HEHEHu HEH+HEEHcHEH@H@HMHuH:Eԃ}QHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHи!E9E}EHcHEHH~HEHMdH3 %(tVUHHĀH}HudH%(HE1EEHEHEHUHEH5HǸ7u +HEH}u 耽HEH}PHUHEHHHEH}1HUHEHH觼EHEHEHEHHPHEHHEHHuHEH@H@0HUHЃ}EEE~E9E}9HUHEHH7HEH}HEH@E}YHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHиHMdH3 %(t誸UHH}HEHHPHEHHE]UHH0H}ؿ*HEH}u HUHEHHrHEHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uXHEH@HuGHEHEHEHHPHEHHEHHuHEH@H@0HUH踹HEUHH0H}HEH@HEHEH@HEHEH}t;HEHEHEHHPHEHHEHHuHEH@H@0HUHHEH@H@HUHАUHH0H}HuHUHEH0HUHHEH}t HEH@HEUHH@H}HuHUdH%(HE1EHMHUHEH5OHǸ貺u)HEHHHHUHEHPUHE؉PHudH34%(t*UHH}HEHHPHEHHE]UHH`H}HEH@H5H蝴HEH}u HE@H=θHEH}uEHEHEHEHHPHEHHEHHuHEH@H@0HUHиJHUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHH}u HEH贶E HtBHEHEHEHHPHEHHEHHuHEH@H@0HUHиQ}uGHEHEHEHHPHEHHEHHuHEH@H@0HUH/HEUHH@H}HuHEH@H5̤HW!HEH@H5H舲HEH}u iHEH}uEHEHEHEHHPHEHHEHHuHEH@H@0HUHиHUHEHHHEHEHEHEHHPHEHHEHHuHEH@H@0HUHHEHEHEHHPHEHHEHHuHEH@H@0HUHH}uH HHPH HH UHH}uH}uHEU4]UHSHHHHPHXL`Lht#)p)M)U)])e)m)u)}dH%(H81H0H% HH{HHHH¯%tuHADDPlHAQVQREEЉHHǸ譱H HHR%tCHAAȉHcHǸUHHtPGHHH HHHH dHǸHH%t;S ZHA؉HǤdHǸ裰HHH0H9v@H0HH)HЉH5 HH0HщH5wHǸZDžDž0HEH H@H(H HHHHH芵H8dH3%(tbH]UHHH}uE_HUHEIȉHH5ˣUH uW t8 u蕬u#$‹ 9]UH}]UH}/ ]UHH\HPdH%(HE1H`\جH`HuDH`HH蹰EHPH`H`\HΉ般HEdH3%(tӭUH3 Aƿ貰u H=V聳]UHH}UEHELHE@SHEUPHE@HEUP]UHH }uEǸ4E}t*E%uHE‹EǸ/E%tE‹EǸ٫UHH }EE}uYu < tՋEUHHH}HE@tPHE@HE@Hm Ht Ha (H HtH HUHH0}HuHUHUHMEHΉʭHEH}u蚩u } tHEUHH0}HuUM܋E܉EEE E*HEHUEHΉϩE}E)E}~ E+EHEHH@UH9w)UHEHH@)‰ЉEHEHHPHEHAHEHHEHcHEHHHHEHHHEHcHEHH)HHPH}w<}u6g uE+E~E+E2+BtE}~ E+EUHH H}uEHcHEH@HHHEH}t0HEHUHPHEUP HEHPHEHUHH H}uEHHHHEH@`HHnHEH}u|HEHPxHEH@`H)HHHEHHEHPxHEHPpHEH@`H)HHHEHHEHPpHEHUHP`EHHHHEHHEHPhUHH H}uEHcHEH@@HH貭HEH}uNHEHPPHEH@@H)HHHEHHEHPPHEHUHP@EHcHEHHEHPHUHSH}EHE E։> 2 H; HtUHHH Hu H H5H萧H H H5~HsH H H5mHVH H H5ZH9H | ~H H5<HH H[ Hu%Hg ЉEEHH谣H1 HB H# HЉE}t-H=ޔqH HH UHHHHdH%(HE1HHHǸ膤\\u*HHHH5nwH`\H։&u7HHHH5P1\x?t4HHHH5<\谟e\H5 H4HHHH5\]\IHMdH3 %(tНUH4 u t]UHAUATSHH $HHHHHdH%(HE1tIHt HHb肜A:HHATSIEH=HǸxH~ DžHt$HcHHHH%HcHHƿ͛H]dH3%(ttHe[A\A]]UHHH}HEA#H 8Hq HolUHH H}udH%(HE1H Hte}t_EH H=l HUuIйЉE}y+HEH5H HEH8HMdH3 %(t聛UHH@HHdH%(HE1DžHDžHDžH~HHH HHHHЉyRHIȉщH5QJHH5]HHudH34%(t~UHHH=6蔗HEH}tHEH蝟 HE1H=aHEH}tHEHj HE t p um tLUHH0H}uUHM؋EgHEH4 HUHEHeu H}teH5 HtYHUMHEHE}u m}u+ u  E EE˘HEE-E}u"HEH5ݏHIH}tMHEPE9u?UHEHH E}uTHEH5HHEHƿE}uHEH5qHH}t4HEH艖E}uHEH5PHFEE}uHEH5.HSY tUHHHxHplH`DhdH%(HE1l HpHHPHHEHUHpHHH H HHQHEHhHpHE HHhH`HEHHhHpHPHEHH jHpHHHEHHuHudH34%(t譖UHH@H}ȋ Eԋ EHE t HEH@(E܃}PHEHEHcHHHHHHEHEHHEHHH5FHNHEHP(P(HEHPHUHEHEHuRHEHHH5Hu4HEHP(P(HEH@EHEH@HEH5ÌHEH}t1HExHEHHHEPHEHpHEAHGtH5E}uk Eԋf E؋U؋uHMHEHuZEԉ0 HEȋtHEȋHEHEH5\H!HEH}t HEH_UHH H}HEHHEH}t$HE H藖HHEHUHH0H}؉udH%(HE1HEH@H,HEHEHPEHHHEHEH@E}t HEHHE؋HEH@(9}=HEH@(HUHHUHHAu sHE؋HEH@$9}=HEH@$HUHHUHHu HEHp(HEHHMHUHu HEHp$HEHHMHUHu HEH@HEH@9E~oHEH@x]HEH@9E~JHEH@x8HEH@9E~%HEH@xHEH@9E H5ZHEHPHEH@HHHEHHEHPHEH@HHHEHHEHPHEH@HHHEHHEHPHEH@HHHEHHEHPHMHEH@H)HHHHHEHUHEHHEHHEHUHEHHUHEH@ HHHHEHUHEHHUHEH@HHHEHEH9Et4HUHEH@H)‹EHщH5b~}t HEH3HEHiuH5^>HEH@ HcHEHHEHHu HEHjH}dH3<%(t躏UHH}HuHMEHΉӎHUHH}EH5B UHH}EH5, UH uj ]UHH} t EvUHSH8}dH%(HE1HEкH4HEHPHEHX HMЋE̺HΉ͍HHMdH3 %(tgH8[]UHH H}H}u wHE@ =oHE HuYIHE@ HcHEHHHE@HΉE} HE苐EHE艐HE苀~HEǀHEHHE}y H5܅}~%H5nEHE@ 9EHEHur0HE苀U)‰HcHEHHHE苀HHHE@HΉE} HE苐EHE艐HE苀9EUHEH^y H5HEǀ u-HEH}tUH=\ HEU u uHE@  UHH 跌  H5 H5 ɍ誋H HuP( 蛑! H=HEH}tHEH5H&H UH ]UHu ]UHH}HEH ]UHH H}uH}u jHE HoHEHnu 4 EHHEHP8HEHP8HEHP(HEH@(Hu HEH@(H HEHP0HEH@`HPHEHPxHEHPxHEHPpHEH(HEHHEHu }u5EBEH=2EE跉EtHEHEUP#HEUHE@EUHHھ H]UHH}HE]UHHHXdH%(HE1DžlHXu HXHu HXHX@;HX"DžhHpHHXHhHΉEHXPHX@u+赅襅 uH HtH HH Ht H HX@5Hpfu+HX@HlAHѺ t$HX@uNGHXHt.HXHwHXHY sHMdH3 %(t迆UHHH}H}u HEHE@HEt HEH>HEHP8HEH@(H9t HEH HEH@pH HHEH@pH@HEPHEHEH@pHPHEHPpHEHd HEHGUHHH}H}u HEt HEHE@HEt+HEHPPHEH@@H9w HEHHEHP8HEH@(H9t HEH HEH@pH HHEH@pH@HEPHEHEH@pHPHEHPpHEH= HEH/HEHEUHHH}HEHP(HEHP8HEH@`HPHEHPxHEHPxHEHPpHEHP@HEHPPHEHH UHHH}HEH@HtHEH@HpHEHHtHEHHMHEHHtHEHH*HEH@@HtHEH@@H UHH}uH}tEv HEHUHcH DE}u{HEHEHcHEHUHcPHHt2HEHEHcHEHUHcPHHHEHEHH]UHH H}HE苐HE苀)‰HHEH}~ HEHEHPHE艐HE苐HE艐HEHHEHH)HHEHEP HE苀)‰HHEH}ygHEH;E~HEHEHUHEHHHE苀HHHE@HΉHEH}~HE苀HUHE艐HEUHHH}H}t HE@usHEHE9|HEHDHEHHPHEHHEHpHEHHUHHUHHPH}HuHUHMHEHPHEHHEHEHEH}tHEȋ@tH}tH}u HHEHEȋHEȋ)‰HHEH}(HEHHHEH}HEHEH;E~HEHEHEHPHEȋHHHEHUHE H́HEH}tHEH+EHHEHUHMHEHHۄHEHEHEȋHUHEȉHEHHEHHEHH}t HEHEH+EHEH}HEHEH+EUHH0H}HuHUH}tHE@tH}t HEHy HdHEHHEHH)HHEH} 3HEH9E}HEHEHEHE苐HE苀)‰HHEH}HEH9E~HEHEHUHEHHHE苀HHHEHHjHE苀HUHE艐HEHEHEHEHEH)EUHE@HUHMHΉHEH}~HEHEHEHEHEH)EH}H}uH+H}uHEHHEHHEHHEUHH`H}HuHUEH}tH}u HHEt HEHE@u HHEt HEHHEHEHUEHHH)HEHP0HEH@8H)HH9}XEHHUH)‹EHcHEHHEH@8HH轁HEH@8UHcHMH)HHHEHP8HEHEHHEЋEHcHEHHEHUHEHHEHEHP8HEH@(H)HHEhHUHEHHEH}@~HE@HEH+EHEHEPHEоHaHEHUЍPHEHEH@pHUHHEH@pH@HEH@pHPHEHPpHEH}~OHEH@pHUHR(HHEH@pHUHPHEHP(HEHP8HEH@pHPHEHPpHEHEH@pHUHHEH@pHUHPHEH@pHPHEHPpHEHEHEHHH9Er(HEHiu HWHEHHEHEH+EHEH}HEHH9EtHEHu HHEH+EUHH0H}uHUHMHEHHEH}tHE@t}u HHE苀t HEHHE苀HE艐HEHrHEЃHEHIHE@HMHΉxHt HHE@HMHU؋u%~UHHH}HEHHEHEHP8HEH@(H)HЉEHE苀HE艐EPHEHHE苐EЍPHE艐HEH@pHUHHEH@pH@HEH@pHPHEHPpHE}~PHEH@pHUHR(HHEH@pUHcHPHEHP(HEHP8HEH@pHPHEHPpEUHH H}EH}u pHEHPpHEH@xH)HHE}uHEHP8HEH@(H9u .HE@uHHEHP(HEHP8HEǀHEHP`HEHPxHEHPxHEHPpHE苀t HEHHEHP8HEH@(H9t HEHHEHPpHEH@xH)HHE}~vHE苈HEHpxHE@U|EHE苀9E}HEHEHEǀHEHP`HEHPxHEHPxHEHPpEUHHH}HuHxdH%(HE1H}u HKHֹ HuHE@tHEPHE9uHxHEHƿuHEHP8HEH@(H9t HEHHEHEHUHxHHEH}@~HE@HEPHEȾHgHEHHEHEHEHEHEHEHEHEHEHEHEHEHEHE@HuѺEEHH9E~HEHEHEH+EHEH}CHEH+EHMdH3 %(tFuUHHPH}HuEHEHUHcH DEHHH HHEHH,wu~HEHHEHMHcH DHHHEHEHUHcPHEHt"HEHUHcPHEHHEgE}(HEH@ >HEHHEHEH@ HHHHEHHEHEHHEHHHEHE@E̋EHcHEHHEHEHHE;HErEHE8Eu0HE<_u}-uHEHEHEH;Es HEuHEH;EuXHEuMHEHHE@HHHEHE@ HcHEHtHE@ HcHEHHEHEHEH;EUHH H}HuHEHHEHEH@$HcHHHHHHEHHEH}tH}uiHEH56kHepu>HUHEHH8HEHHEHHtu HEH@HEHEH;Er͸UHH}HuHEHPHEH@H)H]UHL$HH $L9uHpHHHdH%(HE1DžĿDžHt Hu HHHu DžNHHHcH D HHHcPĿHHHHHcH DHHHؿĿHcHؿHHHH HHcHHH@HHHHݯ HcHHH@HHHHHؿHHHHHĿHH@ HHHпHH@ HHHHпHH#HHHпHHHHп@ȿȿHcHHHHHп@HHHؿHп@ HcHؿHHHHHHHHHHHȿHHHHHؿHHп@ HcHHH?tHпHпH;HcHH'HѺ HlDžHHHH-?HHHH-@HHHHH-@0HHHH-@H8LHЉ̿̿̿;bH}dH3<%(trmUHHHHHdH%(HE1DžDžHt Hu ZDžHHHcH DHHHcPHHHHHcH DHHHHcHHHHH; 4HHHa H<LHHЉ >HH@ HHHHH@ HHHHHHHHHHHHH@~ DžHcHHHHH5cHmHHHaHHPH-uHHPH_&iHHPHʈHH;rHHHH@HHHH@ HcHHHH LHHHЉ5HHH;MHHP HudH34%(tiUHH0H}uHUHMЋEHcHHHHHHEHHEH}tH}uAGHEHHEHPHEpHEH8LEHEЉE}EHEHEH;ErEUHH H}HuHUH}tH}uBHEH@$~+HEHp$HEHHMHUHUHH H}HuHUH}tH}uBHEH@(~+HEHp(HEHHMHUHUHHH}H}t HEH@`Hu IHEu .HEHEHEHPPHEH@@H9vlHEH@pHUHR@HHEHPPHEH@@H)HEH@pHPHEHEH@pH@ЉHEHEH@pHPHEHPpHE0HHPHEH@`HHPHEHEH@`H@ЉHEHEHUH(¾HEHEH@`HUH(HHEHP`HEHPxUHH@H}HuHUH}tH}tH}u EHE؋t *HE؋0=~ HEHeEHEHeE}u0EHHPHEHE} t} u m}ԃ}0EHHPHEHE} t} u m}ԋUEЃE}~ XHEH@PUHcHHHEH@HH9v\HEH@PUHcHHHEH@@H)HЉEE%))EUHE؉Hu EHcHEH@PHMHHiHEHPPEHHHEHPPHEH@PHHHUHJP:EHcHEH@PHMHHiHEHPPEHHHEHPPHEH@PHHHUHJPEHE؋0EHEHcH˜fLPHE؋0PHE؉0UHH0H}HuUH}tH}t}~ }~ ~HE苀t cHE苀0=~0HEHHPHEHE} t} u m}ԃ} HEH@PUHcHHHEH@HH9v\HEH@PUHcHHHEH@@H)HЉEE%))EUHEH۹u EHcHEH@PHMHHgHEHPPEHHHEHPPHEH@PHHHUHJPEHE苐0E܉HEHcH˜fLPHE苀0PHE艐0UHH0H}؉udH%(HE1EHEt tt+E,E#EnHEHH_ HEiE}u EǸ`HUEAHѺ9`u:UHM؋EHΉafE}uUԋE։eE}uE&_EEb^H‹EHMdH3 %(taUHHpHHdH%(HE1HHDžHusHzhHHHHH% uHHHHF^EH/t [t=HfHHHHlHH]Hf HH]HV`HHu HHPHH<*uHf::@HHDžHfH:H_HHu HHPHDžH<*u_HPfHH5WH\u_HP4HH`HPH@u DžH<:uHHHd~ ~ H0H$_HDžDžHHHHdt H@HHHHHH`HHeHfu]HfP]HfPHMdH3 %(t0]UHHHXTdH%(HE1DžhHpHXHHlluTHpHPhhHMdH3 %(t\UHH}HuUH[ Ht } p}'~E' uE @#`H H Hu Hߟ @H\H}t HEH3 Fb̞ [ɞ Þ  ։bUaH_ Hx UP Hk UP}uMVUUU)H> P}tEMVUUU)‰H BH @uH @H @,Hݞ @\UH}H Ht H U]UHH\dH%(HE1DždDžhHpHHh\HΉ`llt7Hpfu'HdlAHѺXlHudH34%(t ZUH}Eݝ ]UHH }H H@(HEH H@8HEgHE9EuW}u HE0HZHEHEHP0Hc H@0H9vHS HUH0HP0HEHE0HEH;ErUHH @ H H@(HEH H@8HEHEHE0HEH;ErH HtH H HtH ]UHH0}dH%(HE1H HHEHƿ]E}#E~:EEE%EMUEAȉщH5 Q軥5 9Eu Eʍ 9EuE EHEH}CHEHP tHޚ HtAHҚ (4HEHP tH Ht H (HEH? P P H' HP0H0HP0H HP0H H@(H9vH H@0H0tHEdH3%(tVUHHEH H@(Ht CH PH @ЉEEH‰ EEH EEHAA!HƿrVHEH}uH=TO+\EHcHEHWH HUHP(H HUHP0EHcHHHHHH HUHHP8H H@8H H HH H٘ HH H HH WUHAWAVAUATSH8HHdH%(HE1U tK _XHH@HH)IHH@(HH)IHH@ HH)IHD`H6[THAWAVAUEA؋H5MH 4\  ubHHHAȉHMHǸTHH^Tu H=2N ZZHEdH3%(tSHe[A\A]A^A_]UHH0H}EEEH H@(HEH H@0HEEHEHEEHE@HH @ +EH9 @9H+ @9E~HE@PHEfP<, ~2HEH@HUH)‹ HH9~HE@PHEfPHE@fEHEH@ HUH)H @HH9HEHigfff)‰Љ‰)fu tHUHEHHHE@f~'E HEH5`L%EHEH5qL蚟}tJHEU։"UuOuHEmHE@PHEfPEHE0HEH;EH @ +E1)Ѓ~3Hi @ uMUAAȉщH5KUH` ]UHHN HH H9w&H8 HHHHHHHƆ H9r]UHHHxHpdH%(HE1DžDžHDžHDžDžHH@H@HH SH`H@HƿNtH=K2VdDžHH@H@HHRHH@HƿNuaH H@HƿsNuBHH@Hƿ TNu#HH@Hƿ5NH=JqUHؒ HtH̒ H= пRHHH;txHH$HHHx@t;Hx@ #Hx@9~DžVTHHƎ HHHHʉHxP?HHcHHxЃ?)кHHH HHcHHDžHDžHk HxzHHIйЉuoDžH HtH Hx@ ~T~KkU4OPfYK\DHxP HxHHx@9|iHG Ht H; Hxp HxPHx@AAщH5G\THxHpPHp@RDžHH@HOH@HSHH@HƿIy H=GRSMHHƿOIy H=GQH ?RŎ KŽ Ȏ H HH H HtH H'H^ HH Ht Hx Hp@ u/HM Ht#HA Hx@9~  k t tu+HptHpLHpH`Hƿ7IHHƿIHHƿIH HƿHHHƿ HHp@/ =u.GH=E藚HtcHTHx@ PHxP Ht3HHHHPHHHPHp@JHp@HHƿFyDH=SE.O6Ft*F uFH=PE豙2 HHƿ yGHMdH3 %(tHUHH H}H @EG  HEH@XHEH@XHe JHE NV d H H^ HtHR HH HH. Ht H" HE@蔚} u(H HtH U9~ e}  tU} tNu"HEtHEHHEHE@l# UHH H}H P P HEH@XHt.JHEHEH@XHUHPHEH@XHUHPHE@HHHE@UHHpHdH%(HE1HDžHDžDžDžH` HEHH`H`HHHH`H HƿDtH=@LEHH`H`HHHH`Hщ HƿtDu]H`H HƿUDu>H`Hs Hƿ 6DuH`H HƿDtH=j@WK; HǀNH HtH H=z пHHHH;txHHԕHHH@t;H@ #H@9~+DžV~JHH HHHHʉHP?HHcHHЃ?)кHHH HHcHHDžHDžH1 HzHHIйЉuoDžH HtH H@ ~T~K1KDPC6@9!HP HHH@9|iH Ht H Hp HPH@AAщH5="hJHHPH@t.DžRHHHPXDžO?t/? u!?H=>>蟒Džх H5? e@H5 O@H53 9@H5 #@H5G @HMdH3 %(tSAUHSHH(dH%(HE1= t 5H(HKH Ht:HՄ HÄ H(HHunЃ ~Zjv ~PHσ HtDHà D>v 9D| H(@ H(Hݓl ‹P 9v `H+ H:H CHC H(@tH(@8!H(H(8Dž<vu u Ƃ t&H HtH @ft H`HHʉHL8P?HHcH`8Ѓ?)кHHH HHcH`HDžPHDžXH(98u5HՁ HtHɁ HH Ht H H 8zHPH`IйЉDH(98u5H Ht H (HE HtH9 HDH HH @H(98s tu s ucDž@ H HtH߀ @Hπ HtHÀ ӽ@<;@| <h} ~^} 9<| f*jJDu:s'D0 t&H HtH @ft H(98#H(H(PH(@Hq HtHe HH Ht H H(@88q uH(w=H( /H(@ά9t19 t%z9H=7NH(H$ujHi~ HtHH]~ f@HP~ @HE~ PPH5~ >HC(H ~ HB :~ 1~ 4H(H膎H(Hhp H]dH3%(t:H[]UH}Ez ]UH}Ez ]UH}Ha~ Ht HU~ UP]UH}H:~ Ht}x H(~ UP]UH}H ~ Ht}~ H} UP]UH}H} Ht}~ H} UP]UH}H} Ht H} UP]UH}E| ]UH| ]UH| ]UHp| ]UHHH_f HHEHEHH55H(7tHHEH H55H 7t)HEHH5w5H6u7d| u-HEHEHEHPHEHHEHPHUHHuHEH}tHEHHPUHH | { { H=45HEH}tHEH>E}~ E{ H=4a5HEH}tHEHZ>E}~ E{ H=4,5HEH}tHEH茘u H{ Htu H=V/.HEH}tHEH7EЋEЉ耨EH=!/.HEH}uH=/.HEH}tHEH7EЃ}~+}HMEHΉHf 2H=.@.HEH}tHEH97H=..HEH}tHEH7H=.-HEH}tHEH6H=.-HEH}tHEH65H=.-HtH=.-HEH}t#HEH{6EЋEЉe }xH=_.H-HEH}tHEHA6s VuinHMdH3 %(t/UHH H}uHUHMDEUHEH|H}t:,HEHHM/HEHHEHH=HEHEHHuH}t}~EHcHMHEHH花HEHeUHH}uHEHHEH HEHHE ЉEHEUHEm}u]UHH}HE#EgHE@HE@ܺHE@ vT2HE@HE@]UHSH8H}HuЉUHE؋XEHE؉PHE؋@9vHE؋@PHE؉PHE؋@UHE؉P?ÅHEHHHE@)؉9]sUHMHEHH2HMHEHH2HEHHcHEHPHEHHHE)]QHEHHHEк@HHP2HEHHHEHPHEHHHE@m@}?wUHEHHHEHH1H8[]UHH H}HuHE@?EHEHPEHHEHEHPHU?+EE}w\UHEHz-HEHHJHEHPHEHHHEH8H4-EHEH-HEHHHEHHP8HE@HEHHPH7I HH5HH1I HH5HkHNI HH5H|PHH HH5(Ha5HH HH5#HFHH HH5H+UHH@H}؉uԉUHMHEHEEe!HEUHEHE[EEEHHHHEHHEHH HEHHHEHH舴u E EE;E|HEHX}u IUHH0H}HuHUE HEHUHMHEHH EHEHHE9E} UHHH84dH%(HE1HDžHHDžPH`4H։t|HUHHH)HHPHXHPHH4H8HZDHXHHP9D} HMdH3 %(tUHHH}HuHUHEHHUHHH}HEHUHHH}HEH(f.AWIAVIAUAATL%= UH-= SL)H Ht1LLDAHH9uH[]A\A]A^A_Ðf.f.Hf.HHHapplication-h--helpUsage: ./lswsgi [-s ] [-m : ./lswsgi -h|-v example: lswsgi -a 127.0.0.1:8000 -m /home/test/mypython.py:testApp -v--version1.8.0lswsgi version %s Copyright (C) by LiteSpeed Tech inc. lswsgi: invalid parameter '%s', bypassed. lsapi_wsgi.InterpreterPy_NewInterpreter() failedlsapi_wsgiargvasciiapplication_groupthreadingcurrent_thread_shutdownatexit_run_exitfuncsexitfunc3.4.9O!Request(Oi)sO!|O:start_responseRequest_start_response() ParseTuple 'sO!|O:start_response' failed. OOORequest_start_response() ParseTuple 'OOO' failed. Request_start_response headers already set. headers already setwritesswrite() before start_response()s#:writefilenoclosestart_responseWSGI start_response callableWSGI write callablelsapi_wsgi.RequestWSGI Request classInputStreamFileWrapperrFail to open file %s. Fail to compile file %s. PYTHONHOMELS_PYTHONBINWSGI_ROOTsysstderr__main____file__applicationwsgiHandler getApp [%s] failed, pApp=%p. wsgiHandler wsgiSubInit ERROR. WSGIApplicationGroupglobalwsgi_acquire_interpreter ERROR for name %s. WSGICallableObjectwsgiLoadModule Error, moduleName is NULL.WSGIScriptReloadingONwsgiHandler failed to create Request object. (O)wsgiHandler failed to build args. wsgiHandler failed to create req_obj. wsgiHandler missing start_response. (OO)wsgiHandler failed to build start_resp args. wsgiHandler pApp->start_response() return NULL. wsgiAppHandler failed to create Request object. wsgiAppHandler failed to build args. wsgiAppHandler failed to create req_obj. wsgiAppHandler failed to build start_resp args. wsgiAppHandler pApp->start_response() return NULL. Content-Typetext/html; charset=iso-8859-1 500 Internal Error

    Internal Error

    The server encountered an unexpected condition which prevented it from fulfilling the request.

    O!i|i:read|i:readline|i:readlinesreadRead from this input streamreadlineRead a line from this input streamreadlinesRead lines from this input streamlsapi_wsgi.InputStreamwsgi.input implementationO|iread(i)closeCalls the file-like object's close methodlsapi_wsgi.FileWrapperwsgi.file_wrapper implementationHTTP_ACCEPTHTTP_ACCEPT_CHARSETHTTP_ACCEPT_ENCODINGHTTP_ACCEPT_LANGUAGEHTTP_AUTHORIZATIONHTTP_CONNECTIONCONTENT_TYPECONTENT_LENGTHHTTP_COOKIEHTTP_COOKIE2HTTP_HOSTHTTP_PRAGMAHTTP_REFERERHTTP_USER_AGENTHTTP_CACHE_CONTROLHTTP_IF_MODIFIED_SINCEHTTP_IF_MATCHHTTP_IF_NONE_MATCHHTTP_IF_RANGEHTTP_IF_UNMODIFIED_SINCEHTTP_KEEP_ALIVEHTTP_RANGEHTTP_X_FORWARDED_FORHTTP_VIAHTTP_TRANSFER_ENCODINGAcceptAccept-CharsetAccept-EncodingAccept-LanguageAuthorizationConnectionContent-TypeContent-LengthCookieCookie2HostPragmaRefererUser-AgentCache-ControlIf-Modified-SinceIf-MatchIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveRangeX-Forwarded-ForViaTransfer-EncodingDEBUGINFONOTICEWARNERRORCRITFATAL%04d-%02d-%02d %02d:%02d:%02d.%06d %02d:%02d:%02d [%s] [UID:%d][%d] %.*s%s, errno: %d (%s) prctl: Failed to set dumpable, core dump may not be available!liblve.so.0lve_is_availablelve_instance_initlve_destroylve_enterlve_leavejailLSAPI: Unable to initialize LVELSAPI: failed to open secret file: %s! LSAPI: failed to check state of file: %s! LSAPI: file permission check failure: %s LSAPI: failed to read secret from secret file: %s [UID:%d][%d] %s:%s: %s LSAPI: lve_enter() failure, reached resource limit.LSAPI: LVE jail(%d) ressult: %d, error: %s ! LSAPI: jail() failure.LSAPI_LVE_ENABLELVE_ENABLELSAPI: setgid()LSAPI: initgroups()LSAPI: setgroups()LSAPI: chroot()LSAPI: setuid()SUEXEC_AUTHSUEXEC_UGIDLSAPI: missing SUEXEC_UGID env, use default user! LSAPI: SUEXEC_AUTH authentication failed, use default user! LSAPI_STDERR_LOGBad request header - ERROR#1 Request header does match total size, total: %d, real: %ld Bad request header - ERROR#2 PIDpacketLen < 0 packetLen > %d ParseRequest error libpthread.sopthread_atfork/dev/nullHTTP_localhostChild process with pid: %d was killed by signal: %d, core dump: %d Anonymous mmap() failedPossible runaway process, UID: %d, PPID: %d, PID: %d, reqCount: %d, process time: %ld, checkpoint time: %ld, start time: %ld gdb --batch -ex "attach %d" -ex "set height 0" -ex "bt" >&2;PATH=$PATH:/usr/sbin lsof -p %d >&2system()Force killing runaway process PID: %d with SIGKILL Killing runaway process PID: %d with SIGTERM Children tracking is wrong: Cur Children: %d, count: %d, idle: %d, dying: %d Can't set signal handler for SIGCHILDCan't set signalsReached max children process limit: %d, extra: %d, current: %d, busy: %d, please increase LSAPI_CHILDREN. sigprocmask(SIG_BLOCK) to block SIGCHLDsigprocmask( SIG_SETMASK ) to restore SIGMASK in childfork() failed, please increase process limitsigprocmask( SIG_SETMASK ) to restore SIGMASKaccept() failedlsapi_accept() errorLSAPI_PHP_LSAPI_PHPRC=LSAPI_DEFAULT_UIDLSAPI_DEFAULT_GIDLSAPI_SECRETnobody/etc/Failed to open custom stderr logInvalid custom stderr log pathPHP_LSAPI_MAX_REQUESTSLSAPI_MAX_REQSLSAPI_KEEP_LISTENLSAPI_AVOID_FORKLSAPI_ACCEPT_NOTIFYLSAPI_SLOW_REQ_MSECSLSAPI_ALLOW_CORE_DUMPLSAPI_MAX_IDLEPHP_LSAPI_CHILDRENLSAPI_CHILDRENLSAPI_EXTRA_CHILDRENLSAPI_MAX_IDLE_CHILDRENLSAPI_PGRP_MAX_IDLELSAPI_MAX_PROCESS_TIMELSAPI_PPID_NO_CHECKLSAPI_MAX_BUSY_WORKERLSAPI_DUMP_DEBUG_INFOCache-Control: private, no-cache, no-store, must-revalidate, max-age=0Pragma: no-cacheRetry-After: 60Content-Type: text/html 508 Resource Limit Is Reached

    Resource Limit Is Reached

    The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.
    SCRIPT_FILENAMEHTTPShttpswsgi.url_schemehttpPATH_INFO(ii)wsgi.versionwsgi.inputwsgi.errorswsgi.multithreadwsgi.multiprocesswsgi.run_oncewsgi.file_wrapperLSAPI: Out of memoryLSAPI: Socket read/write errorLSAPI: Buffer overrun (protocol error)LSAPI: Protocol errorLSAPI: File errorLSAPI: Unknown erroroT6;,`H   @`?6$mDLd`!!" $$ (D )d * %+ , '- - -$ .D 0d E1 [2 4 5 P; >( >H g?h ? I@ A  XDEC ; x+EC  HAC C EC   EC  TEC K EC  8. EC  X&!sEC j xy!EC  "]EC T ;#EC  #2EC i #EC  $EC  8%BEC 9 X&EC   x'-EC $ )EC  4*0EC '  D0TEC K t36AC q 3EC  <3NEC E \%4EC  |4wEC n 5|EC s L7EC  9$EC [ 9EC  :EC  <;NEC E \@;EC  |;$EC [ ;EC  =uEC l >-AC h  >EC H  AHEC  @BrEC i `ZBEC E HBEC O @BEC  BCEC z B?AC z  CEC   |C?EC v @CoEC f `CQAC L DgEC ^ bEjAC e EEC  NFEC   FAC A $ )GEC  D G}AC x d GEC   IXAC AR  IAC   JBEC E4  KZEC Q  LEC  , M?EC 6 L NEC  l "P+EC b $ -P:EC U  ?Q<EC s  [QEC   QEC   REC  4 MSEC  T /U.EC % t =VBEC 9  _XWEC N  XZEC Q  \9AC t  \AC Y  \AC Y 4 \'AC b T \)AC d  t \AC E  d]EC   _EC   `EC L  `EC G  `EC Q 8 {`EC  X aEC P x aEC T  a&EC   cEC   d@EC 7  esEC j 'fEC  8fEC  XLgEC  xHhEC  hEC  SjEC  k#EC  nEC  oEC   8pEC  XrEC  xsSEC J uEC  v(EC _ vEC  zEC  ~EC  8#qEC h XtqEC h xyEC p ~EC u |EC  [EC R UEC  EC  8EC  X&EC ] x EC  EC N EC  9EC } EC  RrEC i (8EC Px d EC  ~EC L sREC I 5EC , mEC d {EC r $bEC |  DǣEC H| h0EC Q *EC N !'EC ^ (-EC d 5-EC d B-EC d (O'EC ^ HVEC N hMEC G =EC L 2EC G "EC  ԪEC  PEC  (խEC  HEC  h #EC  EC  vEC m PEC G  qEC Ec  laEC X $, EC G T "EC Y t"EC V !-AC h .0AC k >#AC ^ A#AC ^ D%AC ` 4IEC  TEC  t9EC  EC  jEC a EC  *EC a EC U 4EC U DTeFEE E(H0H8G@n8A0A(B BBBkpkx!0j T DJh!p!o@`#  Љ! D`7 oo6oon4ot!TTTUU U0U@UPU`UpUUUUUUUUUVV V0V@VPV`VpVVVVVVVVVWW W0W@WPW`WpWWWWWWWWWXX X0X@XPX`XpXXXXXXXXXYY Y0Y@YPY`YpYYYYYYYYYZZ Z0Z@ZPZ`ZpZZZZZZZZZ[[ [0[@[P[`[p[[[[[[[[[\\ \0\@\P\`\p\\\\\\\\\]] ]0]@]P]`]p]]]]]]]]]^^ ^0^@^P^`^p^^^^^^^^^__ _0_@_P_`_p______K0s,L2L^MmMMȅMMHVM!lK`!|QQQRiRRRS\(SJSaS,`!գSSS S!          LSLSLSLS,ĥ!p! T,T@TUTjT}TTTTTTTTTTUU-U@UNUgUwUUUUUUUUUUVV"V)V1V6V=VEVPV^VpVyVVVVVVVVVVVVVVVVaOa`apaGA$3a1TjGA$3a1kQJ GA$3p923kCJGA*GA$annobin gcc 8.3.1 20191121GA$running gcc 8.3.1 20191121 GA* GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*cf_protectionGA+stack_clashGA!stack_realign GA*GOW:kIGA!omit_frame_pointer GA*GOW*EICJGA+omit_frame_pointerlswsgi-1.9-1.el8.x86_64.debug#S7zXZִF!t/( ]?Eh=ڊ2Nau. ұvqoX!LƄ>;bW aq̄h( ShlmA[C2`\2݁ԌFG/2ETN򛃧Tz/"LWa_hFŖ/ڴiFg각Jn٭T6S V8w~Md2]Bg"Ȼs᱉7.ǒȫuxl/5u_ay^@yS){O;D1N3$ $G L ch@ 2IcQd<Vp@E:[ơn$|d&pק+ %jiѬ?ǺUy݆ t./Jg-Ԋ};Lޜ"NgiD.s> [RF?!` bAMcR]LABΕ#K(#njm...ZR 00xAw:~#H&  _ ޛSeMsIfk}_'U$k$HZ25:T',($^dfm}(O~H#'pT>xHVO*17 qʵ6|8ta<$ǯ ܷv+MBtS&N48IvXǗ#Js:zRL6}^CW[~\KBѢS-NSp8M#䨞K51똟X9Wr Dʭn>g\zÿt"svY%0JбʲZ15 gWJm!=σ[K$NUܖiDl,Þwܒ jGo[{L)=8b qr`S_5/o2&&i‡&̛I&? jMǮ vzFM? ^r~c-æ涶G S"$B7zPFSe>\ϋ?5 EU~Pq7޽0EHD'v;VF- ʘ HX L6>ON IЛŤ[YA*{lܵ1ɼ学5E?:.ʚKaFF WMiE{C>]\?Cu ![#;H,~u~e/4AG]f`.$~뙢j˚1`wS Oq1*_Sk/c r? MElz^QMD -!< V+ithyEq"I#eTj?=aCgf(`'qR u45[-$ І.<i/wmM1c dudB{/H=UyQ٭v-˵'C{{m0 W2ilq`HT:d6i,M+1CrΐGn\`YX9䴻Ya*໏tgwQ㴄cmt@Jenq,exk'@Y  h` AHR S*x_Z ?ʒlQL_7I# V#HHK0>>Jުչyͩd Lճ:%lk"u *, APQKGSG>鏮@t=ff^jC[2TsV|,Y:`ᡧ?ꍏ@`(9O@@THHX~*;1ƭjW1~-p}7y2}Gfڟv=sp*IތWx0ṇ/;>x.sX阽7!Vv%)T6!)aZRn/k+P/Ɛòbin/pip000075500000000332152342604300006027 0ustar00#!/opt/alt/python34/bin/python3 # -*- coding: utf-8 -*- import re import sys from pip import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(main()) bin/pip3000075500000000332152342604300006112 0ustar00#!/opt/alt/python34/bin/python3 # -*- coding: utf-8 -*- import re import sys from pip import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(main()) lib64/libpython3.so000075500000015350152342604300010130 0ustar00ELF>@@h@8@44  x   $$ Std QtdRtd xxGNUwdixug66f!ķy@ BE|qX  , F"   __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizelibpython3.4m.so.1.0libpthread.so.0libc.so.6_edata__bss_start_endlibpython3.soGLIBC_2.2.5/opt/alt/python34/lib64:/opt/alt/sqlite/usr/lib64zui          HH HtH5 % h% DH= H H9tH Ht H= H5 H)HHH?HHtHU HtfD=E u+UH=2 Ht H= Yd ]wHHGNU Ujz    o(X  0 ooooo GA$3a1GA$3a1 libpython3.so-3.4.10-11.el8.x86_64.debugЌ7zXZִF!t/ ]?Eh=ڊ2NU1͞Jep+-g P#]Hn7:>t\`gRr B( ^ 6=N{;@:F9 q+2:"8fDEyXaR M̸A5cTM|Z'PspȈ őtPJ|Y(?ӓ=;qsPncwg¿^ghM7b;hzzw}@BPnY.D*6-4=Q=cXdkpױ\T@ECB⊤P84;y Y  K# .vML.'"o~U[%.E ,s4U,pH*J=Z \#Lql )gηUO2CG!gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.note.gnu.property.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((0( XX08oEo T00^Bhc n00w@@}  00     @ `HH0x\ lib64/libpython3.4m.so.1.0000075500012042540152342604300010750 0ustar00ELF>@`=(@8 @ @!@! !AAX~ !AA@@888$$ ! ! ! Std ! ! ! Ptd܀܀܀||QtdRtd!AABBGNUXn; [ZY,Bn`J܈ MPF@%!"PB @@"SAA!*QQ   @ BB@8XX CH [  $B( @@pA  @   Z@`$@"@,*#j@  @HHP  h @0"By ! @T D $x$0Df BXA3@ @@P0B C# PR.@#( @&2(A@ @P@`0H   LBQ PB  "(P B@@ @H `"BK@0 A@A8 $@#PP @( 50`@ S(H( *M( A $@AA$JTq -B@%@HxB0P A  h0@(&< !!01T@@  @!@ B@"b bD@&`("@"( QPH2   !( :X  Ĉ@BP0)%HAC  hfb8D@b @@F @@@ D!2`"'RLH &!@B$  PE(E$r8U#lP( D 0I'eba8 0F"`'!d0K$ @@D 0AHt "%(H0 H8$K` &BP !@ AJ,@@!@BA    @0RC aB R0N@   2** %T BH!DB@DCH@@ D@U  CAh $Zb (Hh(FX !H4@* @ @ ` h PBF"A@B Q@HH  YB @ @ @  L`@@H@C $ 0X4( p )9(*@ @B$( 2$& #ÊЈB@"(D#HDI@@,#D P @ B, @ 6  :Dp+@ ! @Ht Jp!@) 8 a@¢AnJKNRSUXYZ\abfijmpqrtwy}    #$%*+,-/134579:;=>ACEFGHLNOPQSXY[^`abdeghjlopqrvwxz{|}   "$%'(*-.01347:;<?@CDEFGHIKMNPSTVYZ\^acdhijnqtvwxyz|}  "$&'(*,.013678:;=>?BCEFIJMNPSVWXZ]^_abcehjlotwy{   "#&()+,.12479:;=@ABCDFIJLOPQTV[\_`bcdehilprsvwx|~ !%&'(*.0247;<>@ACEHJMOSTVXYZ]_bdfijkoqsux}   #$&'*-013679<>?@BDEHJLMOSTWXY[\`bfjmostxy{|8(.}WFZfuI)D[țWoP"vyPk; cPС ms%8?bD$rfڭ=TXْ_kם@=0c ]ifS.VKxld}b2b`5N ѕdyBSUڸo(8W;ôhIdCdwWSGD0g4״L'e;fVYEk21HoY=FӁKVxD(ھ>oƠ#w}+LC ,U>wjXn nIhK-i2O @R06 ϛh&zW?RƒΏDgsI!m`,PV5 %zBڌr BaH7#q=Gdnh)`t1"Giy"~[Pb8vv.'V2/ qNئmsIh6txB^V{͜P5bKmFrao,SBƩfL)!} x12ͱ;1ʵr*R r^m<*p˚d@9z꒑s/w<X%k@R4?өApZ-[C W% h}dtEr/y"#/9 ߤGBEτV^9a8~j7B@ DVG`%ziߤbߺQLz ,yeUpo, ^y(U Z}$J5R䎣E}G3UI}rFEdQ~׻ 3~Eӧk@r mk|7;#޻dWquG4k֜7s9]LǺ^D/c7Lf'#5?ߗ~93pƒkq'hU_PpȻ uĿ*h*ma 8n*]-π0-ewm>l+Hu #[vFaTqb$ aPcxFoƑ1Ԉ+|ʭBFU,U2(qWX?(,ɋ謡*ꞋA1rpF#bᅠ}=,vE3!Hnu FI8 eq2)'t]6`TU2@VH3ԥ:o”Hr`5ڬprWȁ<՟ܚ^C=^i,B# ]W쯺ɺ̰ɗ//~o_6͏y#6mZӒ9%N(9)2 R[:Mk5y_W,dc`;pVNβ2 TGt!^dáZ\ЩF^}`Jj'vg^&i77(}f#lX!fV;I ֌fh?` 1'VF>0xϿtNB|nQ(v63Jڵ>Ϝ}+3j&U{ xP%%XUfU&6e5sI{}FмR RK$ =>F7/ pk{]?YWD"8'Y~*č־UF<@cKNՍNcuuaoӃF]\aDÉyn tȼe&S򄲾5e#[GmN6i@SxzmW zdA1eby_Ien39 I Ng"cӪDs=vtKpղ.1tKusW(8fr ;zjmOЊͫɳ)M'ظ@GqXH'" b?Q_P{LҔF@M sN%,S7NDNSH-$@Ff!h U=D$]U˭9s 3LRha\Fm~I)8WXBꀃ27XyOk%d񚧽*S 3MP:66ZMeխڀY[N-ѬSQ1mmOpgС]<'o- xR*u?^(=g5s[dq<1"&CR+6B[~{dHG| r6*q^~Mv螮Dt5{r`X')W7\Fc뤻|8u\ /pIjLW*@]q" jǗ.*Er]Kv$FeC[$:|)FHKv.?RL[ì clź:ey(߲Y?"@"kJYGc1ؑ~Z-8!/.EuUR1Z d"9ƨdqwˎ TG;<4\P.w{Q;[_ҀdȄj^n86]eaѳ& Bp!'Vm {LCijg CKj]Rb{Oȧ(N]U.HYWwm;2V)Q 8fK92mvn&ns y`W_b UڔFI$ll[Z zԘ*!jFy5=T ,\4`-Gq>iw oPIf2 ,ˋב[(Rt9 G;bSYWU>@&bmDO1^#n$pz{c`T8V~ܪz)V]gaۘ dtt$('+pjq&h0T>d ]#楖jb]7Y%hȊKz?NN@$0fɍI)9pNq)b?)ıuY?0n&e 5"*V tM+_%K ,apPZeذa-բː`Ə5ИBmM3r3`NGD[oEC$`d]bd!Q\h)LIImX{)-oj"Kl74[ `+wg+>"=1#g8n^1:@_vZVqoR{=LEv!c{k[8x[%6^HwK}Efp^r_!6mP4jr2l 8[B>շa 'hzxbct& 9/nu46׳=10!hKwehsZvK 1Tt~ulI®!ۣ)XO K\4yDr }_oUG/ר D)+x}l*ģC3,qS>6$cxlX59= 4G1yGCkhYX&2V?{-^VyAC^\}WF dB5Mяtc63*QAC[owF9B]̒,Z[(!#*WHSr~Lϲcs+([Ȃr@I(Cwy8P#C٢i7xU3z3>r@푡? hrP[:iZm }ۮ3 Dz zV[vԶ 뱢nMs6O H'ץ/KTt ԷWs1^`XD[B\ AI,`qIsK 3oQ^zQ1#2&TV )(`dQHQ*>d?;39 +"sŮԘ5Yf"V&P,~GE#)_:ݪaanHF׿W&m3"]p\:OtLH |yak~] ̴}y\߸Õ:s2 p#V+-O8#v e.wYPװN cSY4AW[ۯZ0,^d<7/zPT$Er1nkXDYpvWWA)3Ӎ_:N]aE*ked&Ȭ%d#SqE7'LWg*"@fT v2M szN~|])VJ|n8kH4XЊqjn͒cBEc,n{rDdυ'ԂQZE7ZF罏 wjGFrPHlw#%%lXS/ogm+-P- CXeW:SSje΍/O.\ul3sΗ X.Yl0r?+Zd޻ dqޤsarxٝy*똁z=g3n>G锛e*M1Jǝ@KmZx : sG[HzOtvằu$ %EOsȷ;hx'8h^hra?ml=$U{8qhFB>+& `Qݴz|T0w*#fQa/d5_BN>0wG1&B>]!xqF1/}9 KfwuD'&xo!5ajsJ.WIàϙKfw*BV<vIE.vgF-lW ~k;.NVO2ݗ. w@_qy1yqszC+t3x.Ot{FlKzm/y 0P&|RP ht} P||z&z|yEe=vzme_zPo/rz||Mqwwg}CxzxWp1z\y/qC Uz6y+sxV|zZ}c}n'zyr}Oz)||}z`MyxePmuGXy/wPy8 ${ApD+{t|y{| s s ww(A|sxx.{/yK|>{@En!ttW7q/yxf@P?vyQ}ty[yN6}emyzzzy |sUokƁ?}RyKxxxv|kt'}z {yzw3Wsz}%@0uWPxostv2||q{{Ll&yH}izxz.} ufyvKz}ytz{f^tB|g|t|Q{gQr< wGyy@`eyotm|3wn|zsrxT2z7|zzxxtJ{GY}|tt {{w}X ||^|f|(qt,wzw|wT|x}zUw:twlM7{}{|Lz|{xxm u#qwxt{J`zzx, j{yx{ytсuMsw?{|Np WXF"{E>zhwyZ{|Wsz`b{f  B S GI r0  #< 0 O  ZغG5s e`Z p,Md p[XR C?G M% V% V  ^i4 [ 7*B, 0= ` P p  [t v 0?GXg rA p PrXOEU p] M 8] @`  J ke l= G ` 6A D> po>o l .)7 -r s"Wu s . p Sw 0 @2v\J i @t"B*PC}T PU \ i +C\G e-+p CHjIa t[L 8!  6 v0  @Q]j `  0R Ea P 7M Zd$ @ Yi_ [l /bD(  Lc8  G @u @ 9 < C pwG  F  bK $ @ A: = U  Z9b p:CA \%7 *a9 @O v G ` x  PBn%1 @ IX`Eo~ l3 4Z ʀjI 3vA& X C >r fV Pd _n Lm# 8C /v `p Q  4 @] ?8  GZ @_ P ]q < K i  `Z p?h[ M Pr%] P' Y Z  Q / P p# ? X$` fOX  !I }U@ hO +Y 7 j6I  a( Z(   S Gr܀8kIxV 0B$  \Vx w PB#CcB N v ohwl P-6K 0)4 [ ,  /]v Y6H݁ `|g ; ` | %:3F +V bX  Jc Hj 0!GDwԹG_W P: > =U Zz5 P^ oY0 H2' `Y Y .h r 9n 9 0l :g >*  0\  & }b Jf> @c o9$A ` D  @U\ O vTpjIL4 ZA| nr @Wxa ;Nj Y P ~D , J HS K- Sl -K $.  c% VL 04 \ "T Qr  0G3XkI);CB,  P *BGi r +U X /g ` L H v PkI@U Rh^ E @T9 ) , :  p %h `  a `>@D^q - k~k `%56  zT Va OR @I p v ; ?1CJ k[ 8 ! ,. :)B  y ] XmjIA P @@^ F Hnu sW D @Bu w- UkI0  ~]G2 <Q =  S NI7 _ f Rs eB pV J*[ 9< P yBJ  o LX2NC"@BHh CJ m T PQZHO F `~hjIl @l6 @ fN pGj ` XbOE L eZ 0YI(B ! `p Stj P 7K ~b; L x  pb PtK `B> uY q-*CNA Dg E pMq P U `sC!$ ` r7 wjIfnjIb Ky` z  @( @8 kb `J]/~ M~(pB( pZ3 ^ ?og S~ BQ !\  P  VC A._ P~M `m TXyi md Pa I 0 a B] `' Y }R B&F ce j$V p 0)BDD p BK   6 M 0QQ 0K7D `{vc Tc@ P YwB P Wc. B@ p AU^ i0 p a .jI V@Dqb uK/  {=  ~ 5HJ p  s\  0u  p"i PrT@C(CP  v @ z  Y^Bf ph 09- ? n pL W   bh $ C> QDV 6i # ' Y7 4$ LE  Pc9 ?s< 9 zY#`B W#X6 и _ p^r  #M` PuX/ PB # p  ]c  8`CmB `P E&S Hjl r p,pljI  }[G 9 0!  sp pS> 0 ` '  J 0 [ 6  / `o PM l] c? y 0 cA P uPv zh@  6 @ @ NcS JZ Ёt! 7I  X % TJ+ CbI OC l WS 0e0BVS I6O < @ ~ԹGS L v M*PB pu  k !kE 0 )CSN  5 oE `[ # iX A?Go6Hu 0F p S GIY `QG ` 43`JCg: PC U   `+ ?@Cea p9( z! @6 A#Z Ьl  %B L   Z ! 6~Z5H$pB r 054 J #& Wy : 5IF H0 p;   c V`>s peu ДR~h P= " %j  @^ G ` q gjIwv йWk #. #c Os p ] `,': > (z 0:L h ~ PxVDn L  P{ #2 ` <0 p'u `|DC p 4@aChO 0c/B 0M [ P!C- `B lb& X DE$ п p8 0#5 4F P  8.  -m Aiw2 <  ~d \T XJ m B! VhkIS M C pl nR PO J? > ` 8 P ^ `%D ` sb C  ]2oT To M d WS K3g  4c 0F p7 _  PdQ K  \g -9 P$ L% U-*0BR FrZ  : 0 c @( $  >  P\B i +pB1 kL P:[  ljI1 0D 5 |< @ Xa`kI= @ ~, ` sh PY q ?x8   B M bCJm `H\ PJ 0y  Zm D^2 0  \U Gq V0HF  QM#P + p / b LQ>] n LzsOE  p^i `B^  "B}WG 3  kL hQU  p\7C m@B\ @ @  ~`|G  p|fs e>A[ `pQ `kbG A z>C: (f   U = % ] ?-l X `d  PH  `QY o7! =" WP Q: p@ D 2` 0_e tGQ C (] u#} 0swk & @ jIn1 j  [f 72 {I kG" 0;c MY~@FGS PpE1 )4  P_i;xjI+3 w,hGlS J3!s dQ 0'ej U5 p Eb Pm D` f<S M1 N .k &I p Q- ` ^Z   Za Q : # ` s _H, 0l  \5 h @ rw M @r #B?C= @ { E @Hi ~ `  e `uO:B M B 0rA3 @ < JH  @g3@RCu 0 _ `  FB M qa B  W ?jIkIS OjD ВJ AT `Wsso `M  ? Sl 0'-kI V$ W g C D p<- (C J 0 X7L 'LV 8/.C? ;E Hq @x U PZR(8Ck~`%GG T Q6\ ,BN p g:  $ `&NL UC  Zl 5#B= P l @;!  Ф N p:@C `h LI kv vD 6 j 9` 00 x   `hjI& @Y  P  0 & 0X O p `=;  6~Q NRP0kIn L $n Э3^ pcU L  &?C< 7T RZ- 06' PY %k p!2 v 7D T uq 0Rc -*0B C- p2]B3 ` % v m*BT V Ph[ m p@Tp NpH  If L(Cy Q #jI?q hJ P f 0 )B|B!B,`GG & 0N5% Um wK @'e n$j p? `h-jI ?C6C l \F HY Po'"g P@rK ) s nD6 _ ?[ nZ A5 v | 0 #0^  Q1 mM1 VT@RD @j7 ' m/ >C} yGa CQT SZ *U 0;a <S= Ie s >  V4 f o[ @ w 9 4 $w ZP p,% Va< yk6 ]2 N' pY Q ]>ODo 9K, `> :9 @& 5! +R 9\ 5X  )pB_ @ -KS I6T Y^R B8 @ < B i o6Hr|HR pD6m IL P7\6 p u `, o pMD ` 5 ] <5 < QVDL. EW @ePEg  - `DB 0T K. p jId p12 p < P%1 @9 ((kI#` <`5 IHf  H p /oD  TV H  U " P%  PTc: P tZ p8 o  ^ m14 Y"\ pKBC B". `V9 9 o! ` 0kY @U) @G 0 tS Pj\ Cf M   n SzI z:0C_7 YZj @i -E e Txx H Pp0q af Q ; G  P }/o M :a CBR @BJ  g(0 Y `R3  ?5 W'X >R '8Z  l3 P <] p rJ G*BY Фm"  V=8CF~GhK  k  ?|6 @ 9 p= 1Uw 7d @YXA@C< d  .5 ,@ X[ im E p Pbq pk  9> `1 YI @  l@BbT @T3yO jl @- s$6  !# %UB `N WT YMt 0p:  ex 8   yG sF j  u =N p ^H UX  ? ` X B( Z.rEEH  \7 Nor G @ 9  \ !"C5P d  Y D& VC P d ^ B8C܂ H ?`DgPjIU ;- 0 4  jQ  T~ % T-So @M )0B+Q P]:; И u3 0 %Ag r x[ Pj hB L /O 0  0 ,, p i4 [   S 0Hc?T SZV= ;    p gb @M~\ 0 l f 0 br SZ  U H!  q. qX- GT SZF# 6`d [n 0=4 0J GY8 L P   Y> 9 " V 4H$ _ )PBy~#G  . z& X 2 0 <Du sG/ g+0 C*BL IX 2" xjIt nK0 cEE}@ZGj P$  ^i/ GuS J3@B#- p9 k `}5 m S Ojr9 -  ( Y @jI31 Pa=2 @ X\  / pe = SG!  Hh K ` LwjIc U+Cs> Xo Lo MQ je pt)/ @O . @8Z b а .R)BBv Put[3  E ~XGlP F]M `_}? t]Q @< 0   @ @# `]b  P h p ',0Br\OEfCC uQ+C`! Ѓ <q \ .. `r0 x 0J  C B@ X_ Z `N+PCO 0a1@C0 d Wq >Ci H DV rW 0z" @ B @o M m' Y yX `:  P5> wX НV C 8)PBz  ExL7 nC6 p v` 0bO. # $ Tc  EX_  0 -M0Hh Pv*, @~OK 0 U L}3SC:, О U8 `<9 / K 0N`|jI #B  ' P. @ Mq D\  @9tjIn @L$|E PHH @ i R EZ ` ~zGn L < 95 ` jIi `^0 @4A Y , 0" yĂ t { .F UT D" 0i  )Br ; ` #Xl , Ь 8  bz 0= о K P  Av. NM b%V @qd ^,2   Pm  PB T !@o 0M ~ ik $= p Ej 6BwC __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Py_hgversion_Py_hgidentifierPy_GetBuildInfoPyOS_snprintfPyGrammar_AddAcceleratorsPyObject_MallocPyGrammar_FindDFAPyObject_FreestderrfwritePyGrammar_RemoveAcceleratorsPyGrammar_LabelRepr_PyParser_TokenNamesPy_FatalErrorfputcfputs__fprintf_chkPyNode_ListTreestdoutPyNode_NewPyNode_AddChildPyObject_ReallocPyNode_Free_PyNode_SizeOfPyParser_NewPyMem_MallocPyMem_FreePyParser_DeletePyParser_AddToken_Py_newbitset_Py_delbitset_Py_addbit_Py_samebitset_Py_mergebitset_Py_meta_grammarPy_DebugFlag_Py_findlabel__printf_chk_Py_addfirstsets_Py_newgrammar_Py_adddfastrdup_Py_addstate_Py_addarc_Py_addlabel_Py_translatelabels__ctype_b_locPyToken_OneCharPyToken_ThreeCharsPyToken_TwoChars__stack_chk_fail_Py_pgenputchar__errno_locationPyOS_InputHookclearerrfgetsfeof_PyOS_ReadlineTStatePyEval_RestoreThreadPyErr_CheckSignalsPyEval_SaveThreadPyOS_InterruptOccurredPyOS_StdioReadlinePyMem_RawMallocfflushPyMem_RawReallocPyMem_RawFreePyErr_NoMemoryPyExc_OverflowErrorPyErr_SetStringPyOS_ReadlineAnnotateIgnoreReadsBegin_PyThreadState_CurrentAnnotateIgnoreReadsEndPyOS_ReadlineFunctionPointerPyThread_acquire_lockPyThread_release_lockmemcpyPyThread_allocate_lockPyExc_RuntimeErrorPyTokenizer_GetPyTokenizer_FreePyParser_ParseStringObjectPyTokenizer_FromStringPyTokenizer_FromUTF8PyUnicode_FromStringPyErr_OccurredPyParser_ParseStringFlagsFilenameExPyUnicode_DecodeFSDefaultPyParser_ParseStringFlagsFilenamePyParser_ParseStringPyParser_ParseStringFlagsPyParser_ParseFileObjectPyTokenizer_FromFilePyParser_ParseFileFlagsExPyParser_ParseFileFlagsPyParser_ParseFilePyUnicode_DecodePyImport_ImportModuleNoBlockftelllseek64_Py_NoneStruct_Py_FalseStruct_PyObject_CallMethodId_PyObject_GetAttrIdPyExc_OSErrorPyErr_SetFromErrnoWithFilenamePyObject_CallObjectungetcPyMem_Realloc_Py_ctype_table__ctype_tolower_locPyExc_SyntaxErrorPyErr_FormatPyUnicode_TypePyByteArray_AsStringPy_UniversalNewlineFgetsPyUnicode_AsUTF8AndSizePyByteArray_FromStringAndSizestdinPySys_WriteStderrPyObject_SizePyBytes_AsStringPyUnicode_DecodeUTF8_PyUnicode_ReadyPyUnicode_IsIdentifierPySys_FormatStderrPyExc_UnicodeDecodeErrorPyErr_ExceptionMatchesPyErr_ClearPyTokenizer_FindEncodingFilename_Py_dupfdopenfclosePyTokenizer_FindEncoding_Py_add_one_to_index_F_Py_add_one_to_index_CPyType_IsSubtype_Py_NotImplementedStructPyExc_SystemErrorPyExc_TypeErrorPyTuple_NewPyExc_AttributeErrorPyObject_Type_PyObject_HasLenPyObject_GetBufferPyBuffer_IsContiguousPyBuffer_GetPointerPyBuffer_FromContiguousPyBuffer_FillContiguousStridesPyBuffer_FillInfoPyExc_BufferErrorPyBuffer_ReleasePyObject_CheckReadBufferPyObject_AsReadBufferPyObject_AsCharBufferPyObject_AsWriteBufferPyObject_CopyDataPyNumber_CheckPyNumber_OrPyNumber_XorPyNumber_AndPyNumber_LshiftPyNumber_RshiftPyNumber_SubtractPyNumber_DivmodPyNumber_AddPyNumber_FloorDividePyNumber_TrueDividePyNumber_RemainderPyNumber_PowerPyNumber_InPlaceOrPyNumber_InPlaceXorPyNumber_InPlaceAndPyNumber_InPlaceLshiftPyNumber_InPlaceRshiftPyNumber_InPlaceSubtractPyNumber_InPlaceFloorDividePyNumber_InPlaceTrueDividePyNumber_InPlaceAddPyNumber_InPlaceRemainderPyNumber_InPlacePowerPyNumber_NegativePyNumber_PositivePyNumber_InvertPyNumber_AbsolutePyNumber_IndexPyLong_TypePyExc_DeprecationWarningPyErr_WarnFormatPyNumber_AsSsize_tPyLong_AsSsize_tPyErr_GivenExceptionMatches_PyLong_SignPyNumber_MultiplyPyNumber_InPlaceMultiplyPyNumber_Long_PyObject_LookupSpecialPyEval_CallObjectWithKeywords_PyLong_FromNbIntPyByteArray_TypePyBytes_FromStringAndSize_PyLong_FromBytes_PyByteArray_empty_stringPyLong_FromUnicodeObjectPyNumber_FloatPyFloat_TypePyFloat_FromDoublePyFloat_FromStringPyNumber_ToBasePyExc_ValueError_PyLong_FormatPySequence_CheckPySequence_SizePySequence_LengthPySequence_ConcatPySequence_RepeatPyLong_FromSsize_tPySequence_InPlaceConcatPySequence_InPlaceRepeatPySequence_GetItemPyObject_GetItemPyExc_IndexErrorPySequence_GetSlice_PySlice_FromIndicesPySequence_SetItemPyObject_SetItemPySequence_DelItemPyObject_DelItemPyObject_DelItemStringPySequence_SetSlicePySequence_DelSlicePySequence_ListPyList_New_PyList_ExtendPyMapping_CheckPyMapping_SizePyObject_LengthPyMapping_LengthPyMapping_GetItemStringPyMapping_SetItemStringPyMapping_HasKeyStringPyMapping_HasKeyPyObject_Call_Py_CheckRecursionLimit_Py_CheckRecursiveCallPyCallable_Check_Py_VaBuildValue_SizeTPy_VaBuildValuePyObject_CallFunction_PyObject_CallFunction_SizeTPyObject_CallMethodPyObject_GetAttrString_PyObject_CallMethod_SizeT_PyObject_CallMethodId_SizeTPyObject_CallMethodObjArgsPyObject_GetAttr_PyObject_CallMethodIdObjArgsPyObject_CallFunctionObjArgsPyObject_LengthHintPyObject_FormatPyUnicode_NewPyObject_IsInstancePyObject_IsTruePyObject_IsSubclass_PyObject_RealIsInstance_PyObject_RealIsSubclassPyObject_GetIter_PyObject_NextNotImplementedPySeqIter_NewPySequence_FastPyTuple_TypePyList_TypePyMapping_KeysPyDict_TypePyDict_KeysPyMapping_ItemsPyDict_ItemsPyMapping_ValuesPyDict_ValuesPyIter_NextPyExc_StopIterationPySequence_Tuple_PyTuple_ResizePyList_AsTuple_PySequence_IterSearchPyObject_RichCompareBoolPySequence_CountPySequence_ContainsPySequence_InPySequence_Index_Py_FreeCharPArray_PySequence_BytesToCharpArrayPyBytes_AsStringAndSizePyUnicode_FromStringAndSizePyUnicode_JoinPyList_SetSlicePyList_Append_PyAccu_Init_PyAccu_Accumulate_PyAccu_FinishAsList_PyAccu_Finish_PyAccu_Destroy_Py_TrueStructPyUnicode_InternFromStringPyBool_FromLongPyArg_ParseTupleAndKeywordsPyBool_TypePyType_Type_Py_bytes_isspace_Py_bytes_isalpha_Py_bytes_isalnum_Py_bytes_isdigit_Py_bytes_islower_Py_bytes_isupper_Py_bytes_istitle_Py_bytes_lower_Py_ctype_tolower_Py_bytes_upper_Py_ctype_toupper_Py_bytes_title_Py_bytes_capitalize_Py_bytes_swapcase_Py_bytes_maketransPyArg_ParseTuple_Py_maketrans__doc___Py_swapcase__doc___Py_capitalize__doc___Py_title__doc___Py_upper__doc___Py_lower__doc___Py_istitle__doc___Py_isupper__doc___Py_islower__doc___Py_isdigit__doc___Py_isalnum__doc___Py_isalpha__doc___Py_isspace__doc__PyLong_FromLong_PyArg_ParseTupleAndKeywords_SizeTPyUnicode_FromEncodedObjectPyUnicode_GetDefaultEncoding_Py_BuildValue_SizeTPyUnicode_DecodeLatin1_PyArg_ParseTuple_SizeTPyByteArrayIter_Type_PyObject_GC_New_PyGC_generation0_PyErr_BadInternalCallPyUnicode_DecodeASCIIPy_hexdigitsPy_BytesWarningFlagPyExc_BytesWarningPyErr_WarnExPyErr_PrintPyObject_GC_DelPyLong_AsLong_PyObject_GetBuiltinPyUnicode_FromUnicode_PyEval_SliceIndexmemchrmemrchrPyByteArray_FiniPyByteArray_InitPyByteArray_FromObject_PyObject_NewPyByteArray_ConcatmemsetPyBytes_TypePySlice_TypePySlice_GetIndicesExPyList_ReversePyByteArray_SizePyByteArray_ResizePyUnicode_AsEncodedStringPyBuffer_ToContiguousPyArg_UnpackTuplememmovePyObject_GenericGetAttrPyObject_SelfIterPyType_GenericAllocPyType_GenericNewPyErr_BadArgument_Py_HashBytesPyBytesIter_TypePyBytes_FromStringPyBytes_SizePyBytes_Repr_PyBytes_JoinPyBytes_ConcatPyBytes_ConcatAndDel_PyBytes_ResizePyBytes_FromFormatV__sprintf_chkstpcpyPyBytes_FromFormatPyBytes_DecodeEscapePyBytes_FromObjectPyBytes_FiniPyBaseObject_TypePyCell_TypePyObject_RichComparePyUnicode_FromFormatPyCell_NewPyCell_GetPyCell_SetPyEval_GetBuiltins_PyDict_GetItemIdPy_BuildValuePyTuple_SizePyObject_HashPyObject_ClearWeakRefsPyMethod_TypePyInstanceMethod_Type_PyType_LookupPyType_ReadyPyMethod_FunctionPyMethod_SelfPyMethod_New_PyArg_NoKeywordsPyMethod_ClearFreeListPyMethod_Fini_PyMethod_DebugMallocStats_PyDebugAllocatorStatsPyInstanceMethod_NewPyInstanceMethod_FunctionPyObject_GenericSetAttrPyUnicode_InternInPlace_PyUnicode_CopyPyCode_TypePyCode_NewPyTuple_GetItemPyUnicode_ComparePyObject_InitPyCode_NewEmptyPyCode_Addr2Line_PyCode_CheckLineNumberPyComplex_Type_PyUnicode_TransformDecimalAndSpaceToASCIIPyOS_string_to_doublePyFloat_AsDouble_PyUnicodeWriter_Init_PyComplex_FormatAdvancedWriter_PyUnicodeWriter_Finish_PyUnicodeWriter_Dealloc_Py_HashDoublePyOS_double_to_stringPyLong_AsDouble_Py_c_sum_Py_c_diff_Py_c_neg_Py_c_prod_Py_c_quot_Py_c_powhypotatan2sincoslog_Py_c_absPyComplex_FromCComplexPyExc_ZeroDivisionErrorPyComplex_FromDoublesPyComplex_RealAsDoublePyComplex_ImagAsDoublePyComplex_AsCComplexPyCFunction_NewEx_PyType_GetTextSignatureFromInternalDoc_PyType_GetDocFromInternalDocPyTuple_GetSlicePyObject_StrPyDict_Size_Py_HashPointerPyProperty_Type_PyObject_SetAttrIdPyExc_ExceptionPyMember_GetOnePyDictProxy_Type_PyMethodWrapper_Type_PyObject_IsAbstractPyObject_GC_UnTrack_PyTrash_thread_deposit_object_PyTrash_thread_destroy_chainPyMember_SetOnePyDescr_NewMethodPyMethodDescr_TypePyDescr_NewClassMethodPyClassMethodDescr_TypePyDescr_NewMemberPyMemberDescr_TypePyDescr_NewGetSetPyGetSetDescr_TypePyDescr_NewWrapperPyWrapperDescr_TypePyDictProxy_NewPyWrapper_NewPyTuple_PackPyReversed_TypePyEnum_TypePyDict_GetItemStringPyDict_DelItemStringPyExc_BlockingIOErrorPyLong_AsLongAndOverflowPyUnicode_SubstringPyUnicode_ReadCharPyTraceBack_TypePyObject_SetAttrPyObject_ReprPyDict_GetItem_Py_ascii_whitespace_PyUnicode_IsWhitespacePyUnicode_TailmatchPyUnicode_FindCharPyExc_MemoryErrorPyException_GetTracebackPyException_SetTracebackPyException_GetCausePyException_SetCausePyException_GetContextPyException_SetContextPyUnicodeEncodeError_GetEncodingPyUnicodeDecodeError_GetEncodingPyUnicodeEncodeError_GetObjectPyUnicodeDecodeError_GetObjectPyUnicodeTranslateError_GetObjectPyUnicodeEncodeError_GetStartPyUnicodeDecodeError_GetStartPyUnicodeTranslateError_GetStartPyUnicodeEncodeError_SetStartPyUnicodeDecodeError_SetStartPyUnicodeTranslateError_SetStartPyUnicodeEncodeError_GetEndPyUnicodeDecodeError_GetEndPyUnicodeTranslateError_GetEndPyUnicodeEncodeError_SetEndPyUnicodeDecodeError_SetEndPyUnicodeTranslateError_SetEndPyUnicodeEncodeError_GetReasonPyUnicodeDecodeError_GetReasonPyUnicodeTranslateError_GetReasonPyUnicodeEncodeError_SetReasonPyUnicodeDecodeError_SetReasonPyUnicodeTranslateError_SetReasonPyUnicodeEncodeError_CreatePyExc_UnicodeEncodeErrorPyUnicodeDecodeError_CreatePyExc_UnicodeTranslateError_PyUnicodeTranslateError_Create_PyExc_InitPyExc_BaseExceptionPyExc_GeneratorExitPyExc_SystemExitPyExc_KeyboardInterruptPyExc_ImportErrorPyExc_EOFErrorPyExc_NotImplementedErrorPyExc_NameErrorPyExc_UnboundLocalErrorPyExc_IndentationErrorPyExc_TabErrorPyExc_LookupErrorPyExc_KeyErrorPyExc_UnicodeErrorPyExc_AssertionErrorPyExc_ArithmeticErrorPyExc_FloatingPointErrorPyExc_ReferenceErrorPyExc_WarningPyExc_UserWarningPyExc_PendingDeprecationWarningPyExc_SyntaxWarningPyExc_RuntimeWarningPyExc_FutureWarningPyExc_ImportWarningPyExc_UnicodeWarningPyExc_ResourceWarningPyExc_ConnectionErrorPyExc_BrokenPipeErrorPyExc_ChildProcessErrorPyExc_ConnectionAbortedErrorPyExc_ConnectionRefusedErrorPyExc_ConnectionResetErrorPyExc_FileExistsErrorPyExc_FileNotFoundErrorPyExc_IsADirectoryErrorPyExc_NotADirectoryErrorPyExc_InterruptedErrorPyExc_PermissionErrorPyExc_ProcessLookupErrorPyExc_TimeoutErrorPyModule_GetDictPyDict_SetItemStringPyExc_EnvironmentErrorPyExc_IOErrorPyDict_SetItemPyExc_RecursionErrorInstPyDict_New_PyExc_Fini_PyErr_TrySetFromCausePyErr_FetchPyErr_RestorePyErr_NormalizeException_PyObject_GetDictPtrPyUnicode_FromFormatVPyObject_GenericGetDictPyObject_GenericSetDictPyObject_CallFinalizerFromDeallocPyEval_EvalFrameExPyErr_SetObjectPyErr_SetNone_PyGen_FinalizePyErr_WriteUnraisablePyGen_Type_PyGen_Send_PyGen_FetchStopIterationValuePyGen_NewPyGen_NeedsFinalizingPyErr_SetFromErrno_PyUnicode_AsUTF8StringPyFile_FromFdPyImport_ImportModulePyFile_GetLinePyFile_WriteObjectPyFile_WriteStringPyObject_AsFileDescriptor_PyLong_AsIntflockfilefunlockfile__uflowPyFile_NewStdPrinterPyStdPrinter_Type_PyFloat_FormatAdvancedWriterPyUnicode_AsUTF8_Py_parse_inf_or_nanldexp_PyLong_NumBits_Py_SwappedOpfrexpmodfPyLong_FromDouble_PyUnicode_FromASCIIfmodPyFloat_GetMaxPyFloat_GetMinPyFloat_GetInfoPyStructSequence_Newround_Py_get_387controlword_Py_set_387controlword_Py_dg_dtoa_Py_dg_strtod_Py_dg_freedtoa_PyFloat_InitPyStructSequence_InitType2PyFloat_ClearFreeListPyFloat_Fini_PyFloat_DebugMallocStats_PyFloat_Pack4_PyFloat_Pack8_PyFloat_Unpack4_PyFloat_Unpack8PyFrame_GetLineNumber_PyFrame_InitPyFrame_NewPyModule_Type_PyObject_GC_ResizePyFrame_Type_PyObject_GC_NewVarPyFrame_BlockSetupPyFrame_BlockPopPyFrame_FastToLocalsWithErrorPyFrame_FastToLocalsPyFrame_LocalsToFastPyFrame_ClearFreeListPyFrame_Fini_PyFrame_DebugMallocStatsPyEval_EvalCodeExPyFunction_NewWithQualNamePyFunction_TypePyFunction_NewPyFunction_GetCodePyFunction_GetGlobalsPyFunction_GetModulePyFunction_GetDefaultsPyFunction_SetDefaultsPyFunction_GetKwDefaultsPyFunction_SetKwDefaultsPyFunction_GetClosurePyFunction_SetClosurePyFunction_GetAnnotationsPyFunction_SetAnnotationsPyClassMethod_NewPyClassMethod_TypePyStaticMethod_NewPyStaticMethod_TypePySeqIter_TypePyCallIter_NewPyCallIter_TypePyListRevIter_TypePyObject_GC_TrackPyListIter_TypePy_ReprEnter_PyUnicodeWriter_WriteChar_PyUnicodeWriter_WriteStr_PyUnicodeWriter_WriteASCIIStringPy_ReprLeavePyList_ClearFreeListPyList_Fini_PyList_DebugMallocStatsPyList_SizePyList_GetItemPyList_SetItemPyList_InsertPyList_GetSlicePyList_SortPyObject_HashNotImplemented_PyUnicodeWriter_PrepareInternal_PyLong_FormatAdvancedWriter_PyLong_New_PyLong_CopyPyTuple_SetItemPyLong_FromUnsignedLongPyLong_AsUnsignedLongPyLong_AsSize_tPyLong_AsUnsignedLongMask_PyLong_FromByteArrayPyUnicode_CompareWithASCIIStringPyObject_Bytes_PyLong_AsByteArrayPyLong_FromVoidPtrPyLong_AsVoidPtrPyLong_FromLongLongPyLong_FromUnsignedLongLongPyLong_FromSize_tPyLong_AsLongLongPyLong_AsUnsignedLongLongPyLong_AsUnsignedLongLongMaskPyLong_AsLongLongAndOverflow_PyLong_FormatWriterPyLong_FromString_PyLong_DigitValuePyLong_FromUnicode_PyLong_Frexp_PyLong_DivmodNearPyLong_GetInfo_PyLong_InitPyLong_FiniPyDictValues_TypePyDictItems_TypePyDictKeys_Type_PyErr_SetKeyErrorPyDictIterItem_TypePyDictIterKey_TypePyDictIterValue_TypePySet_TypePyFrozenSet_TypePySet_NewPyDict_ClearFreeList_PyDict_DebugMallocStatsPyDict_Fini_PyDict_MaybeUntrack_PyDict_NewPresizedPyDict_GetItemWithError_PyDict_GetItemIdWithError_PyUnicode_FromId_PyDict_LoadGlobalPyDict_DelItemPyDict_Clear_PyDict_HasOnlyStringKeys_PyDict_Next_PySet_NextEntryPyDict_MergeFromSeq2PyDict_MergePyDict_Update_PyObject_HasAttrIdPyArg_ValidateKeywordArgumentsPyDict_CopyPyDict_SetDefault_PyDict_KeysSize_PyDict_Contains_PyDict_SetItemId_PyDict_DelItemId_PyDict_NewKeysForClass_PyObjectDict_SetItem_PyDictKeys_DecRef_Py_EllipsisObjectPyMemoryView_Type_PyManagedBuffer_TypePyMemoryView_FromMemoryPyMemoryView_FromBufferPyMemoryView_FromObjectPyMemoryView_GetContiguousPyCFunction_CallPyCFunction_TypePyCFunction_NewPyCFunction_GetFunctionPyCFunction_GetSelfPyCFunction_GetFlagsPyCFunction_ClearFreeListPyCFunction_Fini_PyCFunction_DebugMallocStatsPy_VerboseFlagPyModule_NewObjectPyModule_NewPyModule_Create2PyThreadState_Get_Py_PackageContextPyModule_GetNameObjectPyModule_GetNamePyModule_GetFilenameObjectPyModule_GetFilenamePyModule_GetDefPyModule_GetState_PyModule_ClearDict_PyModule_Clear_PyNamespace_Type_PyNamespace_NewPy_IncRefPy_DecRefPyObject_InitVar_PyObject_NewVarPyObject_CallFinalizer_Py_BreakPointPyObject_Printferror_PyObject_DumpPyGILState_EnsurePyGILState_ReleasePyObject_ASCII_PyUnicode_AsASCIIStringPyObject_HasAttrStringPyObject_HasAttrPyObject_SetAttrStringPyImport_Import_PyObject_GenericGetAttrWithDict_PyObject_GenericSetAttrWithDictPyObject_NotPyObject_DirPyEval_GetLocals_Py_ReadyTypes_PyWeakref_RefType_PyWeakref_CallableProxyType_PyWeakref_ProxyType_PyNone_Type_PyNotImplemented_TypePySuper_TypePyRange_TypePyEllipsis_TypePyCapsule_TypePyLongRangeIter_Type_PyObject_DebugTypeStats_PyTuple_DebugMallocStatsPyThreadState_GetDict_PyTrash_deposit_object_PyTrash_delete_later_PyTrash_destroy_chain_PyTrash_delete_nesting_Py_Dealloc_Py_abstract_hack_PyCapsule_hackmunmapmmap64PyMem_SetupDebugHooksPyMem_GetAllocatorPyMem_SetAllocatorPyObject_GetArenaAllocatorPyObject_SetArenaAllocator_PyMem_RawStrdup_PyMem_Strdup_Py_GetAllocatedBlocks_PyObject_DebugMallocStatsPyCapsule_NewPyCapsule_IsValidPyCapsule_GetPointerPyCapsule_GetNamePyCapsule_GetDestructorPyCapsule_GetContextPyCapsule_SetPointerPyCapsule_SetNamePyCapsule_SetDestructorPyCapsule_SetContextPyCapsule_ImportPyRangeIter_Type_PySlice_GetLongIndicesPySetIter_TypePySet_ClearFreeListPySet_FiniPyFrozenSet_NewPySet_SizePySet_ClearPySet_ContainsPySet_DiscardPySet_AddPySet_Pop_PySet_Update_PySet_DummyPySlice_FiniPySlice_NewPySlice_GetIndices__strncpy_chkPyStructSequence_SetItemPyStructSequence_GetItemPyStructSequence_UnnamedFieldPyStructSequence_InitTypePyStructSequence_NewType_PyStructSequence_InitPyTupleIter_Type_PyTuple_MaybeUntrackPyTuple_ClearFreeListPyTuple_Fini_PyObject_GC_Malloc_PyUnicode_CompareWithIdPyUnicode_ContainsPyWeakref_NewRef_PyWeakref_ClearRefPyType_ModifiedPyType_ClearCache_PyType_FiniPyType_GetFlags_PyType_CalculateMetaclassPyType_GetSlot_PyType_LookupIdPyEval_CallMethodPyType_FromSpecWithBasesPyType_FromSpecPyEval_GetGlobals_Py_Mangle_PyUnicode_ToDecimalDigitwmemcmp_PyUnicode_ToLowerFull_PyUnicode_IsCaseIgnorable_PyUnicode_IsCased_PyUnicode_ToUpperFull_PyUnicode_IsUppercase_PyUnicode_IsLowercase_PyUnicode_ToTitleFull_PyUnicode_ToFoldedFullPyCodec_StrictErrorsPyUnicode_GetMax_PyUnicode_FastCopyCharactersPyUnicode_CopyCharactersPyCodec_LookupErrorPyUnicode_RichCompare_PyUnicode_IsPrintable_PyUnicode_IsAlpha_PyUnicode_IsDecimalDigit_PyUnicode_IsDigit_PyUnicode_IsNumeric_PyUnicode_IsTitlecasePyUnicodeIter_TypePyUnicode_Resize_PyUnicode_ClearStaticStringsPyUnicode_FromKindAndData_PyUnicode_FindMaxChar_PyUnicode_AsKindPyUnicode_AsUCS4PyUnicode_AsUCS4CopyPyUnicode_FromWideCharwcslenPyUnicode_FromOrdinalPyUnicode_FromObjectPyUnicode_Concat_Py_normalize_encoding_PyUnicode_HasNULCharsPyUnicode_AsUnicodeAndSizePyUnicode_AsWideCharPyUnicode_AsWideCharStringPyUnicode_AsUnicodePyUnicode_GetSizePyUnicode_GetLengthPyUnicode_WriteCharPyUnicode_AsDecodedObjectPyCodec_DecodePyUnicode_AsDecodedUnicodePyUnicode_AsEncodedObjectPyCodec_EncodePyUnicode_AsEncodedUnicode_PyUnicode_EncodeUTF7PyUnicode_EncodeUTF8_PyUnicode_EncodeUTF32PyUnicode_AsUTF32String_PyUnicode_EncodeUTF16PyUnicode_AsUTF16StringPyUnicode_AsUnicodeEscapeStringPyUnicode_EncodeUnicodeEscapePyUnicode_AsRawUnicodeEscapeStringPyUnicode_EncodeRawUnicodeEscapePyUnicode_EncodeLatin1_PyUnicode_AsLatin1StringPyUnicode_EncodeASCII_PyCodec_EncodeTextPyUnicode_EncodePyUnicode_BuildEncodingMap_PyUnicode_EncodeCharmapPyUnicode_AsCharmapString_PyUnicode_TranslateCharmapPyUnicode_TranslatePyUnicode_TransformDecimalToASCIIPyUnicode_EncodeDecimal_PyUnicode_InsertThousandsGroupingPyUnicode_CountPyUnicode_Find_PyUnicode_FastFillPyUnicode_FillPyUnicode_Splitlines_PyUnicode_IsLinebreakPyUnicode_AppendPyUnicode_AppendAndDel_PyUnicode_IsXidStart_PyUnicode_IsXidContinue_PyUnicode_XStripPyUnicode_ReplacePyUnicode_SplitPyUnicode_PartitionPyUnicode_RPartitionPyUnicode_RSplit_PyUnicodeWriter_WriteSubstring_PyUnicodeWriter_WriteLatin1StringPyUnicode_DecodeUTF7StatefulPyUnicode_DecodeUTF7PyUnicode_DecodeUTF8StatefulPyUnicode_EncodeLocale_Py_wchar2char_Py_char2wcharwcstombsstrerrorPyUnicode_EncodeFSDefaultPy_FileSystemDefaultEncodingPyUnicode_FSConverterPyUnicode_DecodeLocaleAndSizembstowcsmbrtowcPyUnicode_DecodeLocale__memmove_chkPyUnicode_DecodeUTF32StatefulPyUnicode_DecodeUTF32PyUnicode_DecodeUTF16StatefulPyUnicode_DecodeUTF16PyUnicode_DecodeUnicodeEscapePyUnicode_DecodeRawUnicodeEscape_PyUnicode_DecodeUnicodeInternal_PyCodec_DecodeTextPyUnicode_DecodeFSDefaultAndSizePyUnicode_FSDecoderPyUnicode_DecodeCharmap_PyUnicode_FormatAdvancedWriterPyUnicode_Format_PyUnicode_InitPyUnicode_ClearFreeList_PyUnicode_FiniPyUnicode_InternImmortal_Py_ReleaseInternedUnicodeStringsPy_UNICODE_strlenPy_UNICODE_strcpyPy_UNICODE_strncpyPy_UNICODE_strcatPy_UNICODE_strcmpPy_UNICODE_strncmpPy_UNICODE_strchrPy_UNICODE_strrchrPyUnicode_AsUnicodeCopyPyInit__string_PyUnicode_ToNumeric_PyUnicode_ToTitlecase_PyUnicode_TypeRecords_PyUnicode_ExtendedCase_PyUnicode_ToDigit_PyUnicode_ToUppercase_PyUnicode_ToLowercase_PyWeakref_GetWeakrefCountPyWeakref_NewProxyPyWeakref_GetObject_PyErr_ChainExceptionsPyImport_GetModuleDict_PySys_GetObjectId_Py_DisplaySourceLinePyErr_WarnPyErr_WarnExplicitObjectPyErr_WarnExplicitPyErr_WarnExplicitFormat_PyWarnings_InitPyModule_AddObjectPyArena_AddPyObject_Py_ModulePyArena_Malloc_Py_Interactive_Py_Expression_Py_Suite_Py_FunctionDef_Py_ClassDef_Py_Return_Py_Delete_Py_Assign_Py_AugAssign_Py_For_Py_While_Py_If_Py_With_Py_Raise_Py_Try_Py_Assert_Py_Import_Py_ImportFrom_Py_Global_Py_Nonlocal_Py_Expr_Py_Pass_Py_Break_Py_Continue_Py_BoolOp_Py_BinOp_Py_UnaryOp_Py_Lambda_Py_IfExp_Py_Dict_Py_Set_Py_ListComp_Py_SetComp_Py_DictComp_Py_GeneratorExp_Py_Yield_Py_YieldFrom_Py_Compare_Py_Call_Py_Num_Py_Str_Py_Bytes_Py_NameConstant_Py_Ellipsis_Py_Attribute_Py_Subscript_Py_Starred_Py_Name_Py_List_Py_Tuple_Py_Slice_Py_ExtSlice_Py_Index_Py_comprehension_Py_ExceptHandler_Py_arguments_Py_arg_Py_keyword_Py_asdl_seq_new_Py_asdl_int_seq_new_Py_alias_Py_withitemPyInit__astPyModule_AddIntConstantPyAST_mod2objPyAST_obj2modPyAST_CheckPyErr_ProgramTextObjectPyOS_strtolPyOS_strtoulPyAST_ValidatePyAST_FromNodeObjectPyAST_FromNodePyFilter_TypePyMap_TypePyZip_TypePyImport_ImportModuleLevelObjectPyEval_MergeCompilerFlagsPyRun_StringFlagsPyEval_EvalCodePyArena_NewPyArena_FreePy_CompileStringObjectPyAST_CompileObject_PyBuiltin_InitPy_OptimizeFlagPy_HasFileSystemDefaultEncodingAnnotateCondVarWaitpthread_mutex_initpthread_cond_initAnnotateIgnoreWritesBeginAnnotateIgnoreWritesEndAnnotateRWLockCreateAnnotateCondVarSignalpthread_mutex_lockAnnotateRWLockReleasedpthread_cond_signalpthread_mutex_unlockpthread_cond_waitPyEval_GetCallStats_PyEval_SetSwitchInterval_PyEval_GetSwitchIntervalPyEval_ThreadsInitialized_PyEval_FiniThreadspthread_cond_destroypthread_mutex_destroyAnnotateRWLockDestroyPyEval_ReleaseLockPyEval_ReleaseThreadPyThreadState_Swap_PyEval_SignalAsyncExcpthread_cond_timedwaitAnnotateRWLockAcquiredPyEval_InitThreadsPyThread_get_thread_identPyEval_AcquireLockPyEval_AcquireThreadPyEval_ReInitThreads_PyThreadState_DeleteExcept_Py_FinalizingPyThread_exit_threadPy_AddPendingCallPy_MakePendingCallsPy_GetRecursionLimitPy_SetRecursionLimit_PyEval_CallTracingPyEval_SetProfilePyEval_SetTracePyEval_GetFrame_PyThreadState_GetFramePyEval_GetFuncNamePyEval_GetFuncDescPyTraceBack_HerePyEval_EvalFramePyST_GetScopePySymtable_LookupPyCompile_OpcodeStackEffectPyCode_OptimizePyFuture_FromASTObjectPySymtable_BuildObjectPySymtable_FreePyAST_CompileExPyNode_CompilePyAST_Compile_PyCodec_Forget_PyCodecInfo_GetIncrementalDecoder_PyCodecInfo_GetIncrementalEncoderPyCodec_RegisterErrorPyCodec_Register_PyCodec_LookupPyCodec_KnownEncodingPyCodec_EncoderPyCodec_DecoderPyCodec_IncrementalEncoderPyCodec_IncrementalDecoderPyCodec_StreamReaderPyCodec_StreamWriter_PyCodec_LookupTextEncodingPyCodec_IgnoreErrorsPyCodec_ReplaceErrorsPyCodec_XMLCharRefReplaceErrorsPyCodec_BackslashReplaceErrorsAnnotateBarrierInitAnnotateBarrierWaitBeforeAnnotateBarrierWaitAfterAnnotateBarrierDestroyAnnotateCondVarSignalAllAnnotatePublishMemoryRangeAnnotateUnpublishMemoryRangeAnnotatePCQCreateAnnotatePCQDestroyAnnotatePCQPutAnnotatePCQGetAnnotateNewMemoryAnnotateExpectRaceAnnotateBenignRaceAnnotateBenignRaceSizedAnnotateMutexIsUsedAsCondVarAnnotateTraceMemoryAnnotateThreadNameAnnotateIgnoreSyncBeginAnnotateIgnoreSyncEndAnnotateEnableRaceDetectionAnnotateNoOpAnnotateFlushStateRunningOnValgrindgetenvPyErr_GetExcInfoPyErr_SetExcInfoPyErr_SetFromErrnoWithFilenameObjectsPyErr_SetFromErrnoWithFilenameObjectPyErr_SetImportErrorPyErr_NewExceptionPyErr_NewExceptionWithDocPyTraceBack_PrintPyErr_ProgramText_Py_fopen_Py_fopen_objPyErr_SyntaxLocationObjectPyErr_SyntaxLocationExPyErr_SyntaxLocationPy_FrozenMainPy_FrozenFlagPy_IgnoreEnvironmentFlagsetlocalesetbufPy_SetProgramNamePy_InitializePySys_SetArgvPyImport_ImportFrozenModulePy_FinalizePyRun_AnyFileExFlagsPy_GetCopyrightPy_GetVersionPyFuture_FromASTPyArg_Parse_PyArg_Parse_SizeTPyArg_VaParse_PyArg_VaParse_SizeTPyArg_VaParseTupleAndKeywords_PyArg_VaParseTupleAndKeywords_SizeT_PyArg_NoPositionalPy_GetCompilerPy_GetPlatform_PyParser_GrammarPyImport_FrozenModulesPyMarshal_ReadObjectFromString_PyImport_DynLoadFiletab_PyImport_LoadDynamicModule_PyImport_Init_PyImportHooks_InitPySys_SetObject_PyImport_AcquireLock_PyImport_ReleaseLock_PyImport_ReInitLock_PyImport_FiniPyThread_free_lockPyImport_Cleanup_PyState_ClearModules_PyGC_CollectNoFail_PyGC_DumpShutdownStatsPyImport_GetMagicNumberPyImport_GetMagicTag_PySys_ImplCacheTag_PyImport_FixupExtensionObject_PyState_AddModule_PyImport_FixupBuiltinPyImport_AddModuleObject_PyImport_FindExtensionObject_PyImport_FindBuiltinPyImport_AddModulePyImport_ExecCodeModuleObjectPyImport_ExecCodeModuleWithPathnamesPyImport_ExecCodeModulePyImport_ExecCodeModuleExPyImport_GetImporterPySys_GetObjectPyImport_ImportFrozenModuleObjectPyImport_ImportModuleLevel_PyImportZip_InitPyImport_ReloadModulePyInit_impPyImport_ExtendInittabPyImport_AppendInittab_PyImport_Inittab_PyImport_GetDynLoadFuncfread__memcpy_chkPyMarshal_WriteLongToFilePyMarshal_WriteObjectToFilePyMarshal_ReadShortFromFilePyMarshal_ReadLongFromFilePyMarshal_ReadObjectFromFilePyMarshal_ReadLastObjectFromFile__fxstat64PyMarshal_WriteObjectToStringPyMarshal_InitPyEval_CallFunctionPyModule_AddStringConstantPyOS_vsnprintf__vsnprintf_chkPyFPE_dummy_Py_HashSecret_PyHash_FiniPyHash_GetFuncDefPyThread_get_key_valuePyThread_set_key_valuePyInterpreterState_New_PyThreadState_InitPyThreadState_New_PyThreadState_PreallocPyState_FindModulePyState_RemoveModulePyThreadState_ClearPyInterpreterState_ClearPyThreadState_DeletePyThread_delete_key_valuePyInterpreterState_DeletePyThreadState_DeleteCurrentPyThreadState_SetAsyncExcPyInterpreterState_HeadPyInterpreterState_NextPyInterpreterState_ThreadHeadPyThreadState_Next_PyThread_CurrentFrames_PyGILState_InitPyThread_create_key_PyGILState_FiniPyThread_delete_keyPyGILState_GetThisThreadState_PyGILState_ReinitPyGILState_CheckPy_UnbufferedStdioFlag_PySys_SetObjectIdPyModule_GetWarningsModulePy_IsInitializedPy_SetStandardStreamEncodingPyOS_FiniInterruptsPyGC_Collect_PyTraceMalloc_Fini_PyFaulthandler_Fini_PyGC_Fini_PyRandom_FiniPy_GetProgramNamePy_SetPythonHomePy_GetPythonHomePyErr_DisplayPyParser_ASTFromStringObjectPy_CompileStringExFlagsPyCompileStringPy_SymtableStringObjectPy_SymtableStringPyParser_ASTFromStringPyParser_ASTFromFileObjectPyRun_FileExFlagsPyParser_ASTFromFilePyParser_SimpleParseFileFlagsPyParser_SimpleParseStringFlagsPyParser_SimpleParseStringFlagsFilenamePyParser_SimpleParseStringFilenamePyParser_ClearErrorPyParser_SetError_Py_DumpTracebackThreadsabortnl_langinfoPy_EndInterpreter_Py_PyAtExitPy_AtExitPy_ExitPyErr_PrintExPy_InspectFlagPyRun_InteractiveOneObjectPyRun_InteractiveLoopFlagsPyRun_InteractiveOneFlagsPyRun_SimpleFileExFlagsrewindPyRun_SimpleStringFlagsPy_NewInterpreterPy_GetPathPySys_SetPathPy_NoSiteFlagPy_FdIsInteractivePy_InteractiveFlagPyOS_getsigsigactionPyOS_setsigsigemptyset_Py_InitializeEx_Private_PyRandom_Init_PySys_Init_PyFaulthandler_Init_PyTime_Init_PyTraceMalloc_InitPySys_HasWarnOptionsPyOS_InitInterruptsPy_HashRandomizationFlagPy_DontWriteBytecodeFlagPy_InitializeEx_Py_RestoreSignalsPyParser_SimpleParseFilePyParser_SimpleParseStringPyRun_AnyFilePyRun_AnyFileExPyRun_AnyFileFlagsPyRun_FilePyRun_FileExPyRun_FileFlagsPyRun_SimpleFilePyRun_SimpleFileExPyRun_StringPyRun_SimpleStringPy_CompileStringPy_CompileStringFlagsPyRun_InteractiveOnePyRun_InteractiveLoop_PyOS_mystrnicmp_hackPyOS_mystrnicmpPy_IsolatedFlagPy_NoUserSiteDirectoryPy_UseClassExceptionsFlagPy_QuietFlag_PyTime_gettimeofdayftime_PyTime_gettimeofday_info_PyLong_AsTime_t_PyLong_FromTime_t_PyTime_ObjectToTime_t_PyTime_ObjectToTimespec_PyTime_ObjectToTimeval_PyOS_URandomgetentropyPySTEntry_TypePySymtable_Buildwcscmp_Py_wreadlinkwcschrwcsrchrwcsncpy_Py_wrealpath_PySys_GetSizeOfPySys_ResetWarnOptionsPySys_AddWarnOptionUnicodePySys_AddWarnOptionPySys_AddXOptionPySys_GetXOptionsPySys_SetArgvExPySys_WriteStdoutPy_GetProgramFullPathPy_GetPrefixPy_GetExecPrefix_PySys_ImplNamePyThread_GetInfoPySys_FormatStdout__strcpy_chk_PyTraceback_Add_Py_DumpTraceback_PyOS_ResetGetOpt_PyOS_opterr_PyOS_optind_PyOS_optarg_PyOS_GetOptPyOS_mystricmp_Py_dg_infinity_Py_dg_stdnanlocaleconvfcntl64ioctl_Py_device_encoding_Py_wstat__xstat64_Py_stat_Py_get_inheritable_Py_set_inheritable_Py_open__open64_2_Py_open_cloexec_works_Py_wfopenfopen64__realpath_chk_Py_wgetcwddlsymdlopendlerrorPyThread_init_threadPyThread_start_new_threadpthread_attr_initpthread_attr_setscopepthread_createpthread_attr_destroypthread_detachpthread_attr_setstacksizepthread_selfpthread_exitsem_initperrorsem_destroyPyThread_acquire_lock_timedsem_trywaitsem_timedwaitsem_waitsem_postpthread_key_createpthread_key_deletepthread_setspecificpthread_getspecificPyThread_ReInitTLSPyThread_get_stacksizePyThread_set_stacksizeconfstrPyInit__threadPyInit_signalPyInit_posixPyInit_errnoPyInit_pwdPyInit__srePyInit__codecsPyInit__weakrefPyInit__functoolsPyInit__operatorPyInit__collectionsPyInit_itertoolsPyInit_atexitPyInit__statPyInit__localePyInit__ioPyInit_zipimportPyInit_faulthandlerPyInit__tracemallocPyInit__symtablePyInit_xxsubtypePyInit_gcwcscpy__wcscat_chk__wcscpy_chkfseekwcstokwcscatwcsncatPy_SetPathPy_MainstrtoksetvbufPy_GetArgcArgv_PyGC_DumpPyErr_SetInterruptsigaddset_PyLong_FromUidsigtimedwaitsigwaitsigismemberalarmgetpidsigwaitinfosigpendingsiginterruptgetitimerfloorsetitimerPySignal_SetWakeupFd__libc_current_sigrtmin__libc_current_sigrtmaxpthread_sigmaskpthread_killpausePyOS_AfterFork_PyOS_IsMainThread_Py_Uid_Converter_Py_Gid_Converterunsetenvputenvpipe2pipesendfile64pread64dup2dup3wait4wait3setgroupsgetlogingetppidopenpty__sched_cpuallocsched_getaffinity__sched_cpufree__sched_cpucount__xmknodat__xmknodfpathconfftruncate64mkfifoatmkfifoopenat64sched_setaffinitysched_getparamfexecveexecvunlinkatunlinkunamesystemsymlinkatsymlinkrmdirreadlinkatmkdiratmkdirlchownfchdirqsortllistxattrflistxattrfremovexattrlremovexattrfgetxattrlgetxattrfsetxattrlsetxattrutimensatfutimenssysconffstatvfs64setresgidsetresuidgetloadavgfdatasyncfsyncposix_fadvise64posix_fallocate64pwrite64readvlockf64tcsetpgrptcgetpgrpsetpgidsetsidgetsidsetprioritygetpgidinitgroupssetgidsetregidsetegidseteuidsetuidkillpgforkptysched_yieldsched_setschedulersched_setparamsched_rr_get_intervalsched_getschedulersched_get_priority_minsched_get_priority_maxforktimesumaskrenamerenameatgetprioritynicereaddir64rewinddirclosedirfdopendirctermidfchownfchmodttynamefaccessataccesschrootfchmodatsetreuidwaitpidwritevfchownatgetresuidwaitidgetuidgeteuid_PyLong_FromGidgetresgid__fxstatat64__lxstat64getgroupsgetgrouplistgetgidgetegidsetpwentgetpwentendpwentgetpwnamgetpwuidbindtextdomaindcgettextwcsxfrmwcscollbind_textdomain_codesetPyFileIO_TypePyBufferedReader_TypePyTextIOWrapper_TypePyBufferedWriter_TypePyBufferedRandom_TypePyNumber_AsOff_t_PyIO_ConvertSsize_t_PyIO_get_module_state_PyIO_Module_PyIO_get_locale_modulePyIOBase_TypePyRawIOBase_TypePyBufferedIOBase_TypePyTextIOBase_TypePyBytesIO_Type_PyBytesIOBuffer_TypePyStringIO_TypePyBufferedRWPair_TypePyIncrementalNewlineDecoder_Type_PyIO_str_close_PyIO_str_closed_PyIO_str_decode_PyIO_str_encode_PyIO_str_fileno_PyIO_str_flush_PyIO_str_getstate_PyIO_str_isatty_PyIO_str_newlines_PyIO_str_read_PyIO_str_read1_PyIO_str_readable_PyIO_str_readall_PyIO_str_readinto_PyIO_str_readline_PyIO_str_reset_PyIO_str_seek_PyIO_str_seekable_PyIO_str_setstate_PyIO_str_tell_PyIO_str_truncate_PyIO_str_write_PyIO_str_writable_PyIO_str_nl_PyIO_empty_str_PyIO_empty_bytes_PyIO_zero_PyIO_trap_eintr_PyIOBase_check_closed_PyIOBase_check_seekable_PyIOBase_check_readable_PyIOBase_check_writable_PyIOBase_finalize_PyFileIO_closed_PyIncrementalNewlineDecoder_decode_PyIO_find_line_endingmktimeraisesigfillsetsigaltstack_Py_hashtable_size_Py_hashtable_clear_Py_hashtable_foreach_Py_hashtable_pop_Py_hashtable_get_Py_hashtable_set_Py_hashtable_destroy_Py_hashtable_compare_direct_Py_hashtable_hash_ptr_Py_hashtable_new_full_Py_hashtable_copy_Py_hashtable_get_entry_Py_hashtable_hash_int_Py_hashtable_new_Py_hashtable_deleteclock_Py_M__importliblibpthread.so.0libdl.so.2libutil.so.1libm.so.6libc.so.6__environ_edata__bss_start_endlibpython3.4m.so.1.0GLIBC_2.2.5GLIBC_2.3.2GLIBC_2.28GLIBC_2.7GLIBC_2.14GLIBC_2.3.4GLIBC_2.25GLIBC_2.9GLIBC_2.3GLIBC_2.6GLIBC_2.4/opt/alt/python34/lib64:/opt/alt/sqlite/usr/lib64                  A ui L ui Y ui 10ri ui  cii ǃ уti ܃ ii ii ii ii ui AAP A A@AHAPAXAX`A5`hApAxAfAOAl AA?AA+AAl Al Al AAAAAl Al Ax Al (Al 0Al 8A@AHAl PAXAE`AhADpAxAyAAAl Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al  Al (Al 0Al 8Al @Al HAl PAXA^`A9hApAl xAsAEA*AAAA]AAAAl A;A3AAl Al AAAAAI A0(AC0Al 8A@AEHAl PAXA`AthA8pAxA*AA-AAAAAxAl A]AgA)A AAA*AAAAA> A?(A0Az8A?@AHAl PAl XA`AS*hA/*pAxAl AhAAAl Al Al A,AA&AEA,A&A6AzAAl AS-A-A,A A(A0AX8A@AUHAl PAl XAl `Al hAl pAl xAl Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al  Al (Al 0Al 8Al @Al HAl PAl XAl `Al hAl pAl xAl Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al  Al (Al 0Al 8Al @Al HAl PAl XAl `Al hAl pAl xAl Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al  Al (Al 0Al 8Al @Al HAl PAl XAl `Al hAl pAl xAl Al Al Al Al A_9ASAbOAʿAAAȿA*A*A!*A+* A8*0AB*@AM*PAX*`Aa*A`GAhGApGAxGAGAGAGA^GAfGAnG AvG0A~G@AGPAG`AGpAGAGAGAGAGAGAGAGAGAGAG AG0AG@AGPAG`AGpAGAGAGAGAGAGAGAGAHA HAGH A=H0ASH@AHPAH`A"HpA*HA5HA9HACHAOHAYHAdHAlHAsH A@8AHo@A GPARoXA GhA]opA G0B 2B0B0B0BX(2B!82B@6B@2BCP2B(`2B`5Bh2BGx2B-2B5B2B12B52B4B2B12B92B3B2B12B>3B 3B3BK(3B0BP3B0Bx3B0B3B0B3B80B3B40B4B(0B@4B 0Bh4B0B4BH0B4B@0B5BX0B05BP0Bh5Bl0B5Bh0B5Bd0B5B`0B6B\0BH6Bx0Bp6Bp0B6B6B 6B 6B6B`6B7B#7B+7B27B9 7B>(7BC07BH87BM@7BSH7BYP7B^X7Bc`7Bh7Bjp7Bix7Bn7Bt7By7B{7B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8BZ8Bv 8B(8B08B88B%@8B5H8BDP8BTX8Bd`8Bph8Bp8Bx8B8B>8B8B8B8B8B9B(9BnH9Bnh9B09B9Be.9B:B(H;BP;BX;BPXB`\B4h\B0x\B AB\B\B\B=B\B \B\B \BP\B-]B0]B]B]Bp]B@\B^B^BP^B_BfB_B\B(_B@_B\BP_B`>Bh_Bx_BP_B@`B_B @`BH`B@X`BCB``B4h`B@x`B AB`B^`BЪ`B@B`B(`B `B@B`B3`B -`BIB`B:`BaB6aBaBXB aB C(aB,8aBUB@aBEHaBXaBUB`aBlhaBxaBVBaB-aBPaB@DBaBJaBaB@QBaBaBpaBZBaBSaB@*aB IBbBbBbBVB bB(bB@#8bB`AB@bBhbHbBXbBUB`bBhbB!xbBIBbBZbB bBbbBbBjbBbBrbBcBzcB` cB(cB0@cBHcB`cBhcB`xcB CBcBcBcBZBcBtcBcBcB@cBFBcBcBdBdB`dBMB dB(dB 8dBHB@dBHdBXdB@HB`dBhdBxdB@OBdBdB0dB@JBdBdB`dBTBdBdBdBSBdB dBpdB@YBeBeBeBLB eB$(eBP8eBJB@eBiHeB@XeBFB`eB)heBxeBNBeB[eBeB`BBeBeBeB`RBeBReBeBGBeBeB0fBfB fBr(fB8fB PB@fBHfBP`fBBhfBxfBWBfB fB`fBPfBp)fBfBfBp2BBkBB7FBB7FB0BHB#`B4_hBpBkBB@7BgBB4B=B@gBBȀB;؀BgBB;Bp3B@Bp3HBPB3XB=xBPWB#ЁBP<XB3Bp;BBXBqpB`3BpB@BBBB@;ȃBBBBgBB9B<(BBxB B#B8B:BP B6(B8B|B@BlHB0SXB qB`B-hBP8xB kBBJB`>BlBBB@BBBȅB@B؅BuBBBBiBBhbBFB`uB BZ(B08@BbHB8`BjhB7BrB7BzB7BȆB7BBp7BB_BvB B(B8B@~B@BtHB`BhBxBrBBB`7BBBzBBȇB@z؇B oBBBKB`tBBBOBsB B (B8B}B@BHB@wXByB`B$hBmxBwBBiB0BrBB)BcBzBB[ȈBb؈B`jBBBP@BnBBRBpB@sB B(Ba@BHBa`BrhB`xBpBBBPaBBB`B |BBB`8BBB B؊BBB'BB(BI(BpB( BH)`BI(hB0B(BH)B(B)@B4HBB(B(ЎBB0 B0BPBBXBhBBBBBB؏B@XBpBBBB АBB BBB(B@B0BB8B`BPBxBؒBP)B@B8BpBBBB`BBBB`B(hBB)ȔB)B)B *@B*hB *B(*B2*B;*BG*0BS*XBUB_*Bg*ЖBv*B.ȘB.B.BBBB BP(B0B8B@BHBB BBB` B.@B-HB.hB-B.B@B@BB#ȚBBe.B`BB8B[.PBxBBBB BЛB BB@BBB BXBBI(B,0B<B10B60ؠB(B-0B08BnXBnxBEB KB(ȡB:0BG0B@B?8HBXB@B`B\0hBxBBBc0BBBB,0B<B108BI(Bz0BȣB(УBP B:0B`BI( B@B0HB`B(B4Bp@B-0HB` XBX5`B0hB@ xB0BnB B5BnB B5BEȥB إB68BPPB@XB0BI(BB:0BPЦB0ئB@ BI((BHB:0PBPBI(B0ȧB:0ЧBP BI((BHB:0PBPpB0xB Bz0B(@B4HB0B/B0BB8BhB@BpBBxBBBBB8Bk0PB`xBB@BثBB BBBBBBجB/B B(BB0BPBHB xBpBBB@BB xB0B` BB!BPHB@BPBBXBBpB@!B00B` XBBPBBB BBBB0бB` BXBPB@BBBBBB0B`XB0pB` BB` BP(B@B0BB8B BPBB0B` 8B`BBPȵB@BеBBصB BBHBl6`BbhB<BB*BBB4B(BBBȹB 'عBBB4B(BBXBF6pBp%BBB`# B'(BBxB%B<6B$B`BB@(B )ȼBBB#BBB:0B+BHEB@BB+B@B(B28B1BBB:пB+PBxEXB@B`B+B@BB2B10B@BXB:pB+BEB@BB+@B@BhB2xB1BBB9B+BXFB@BB+B@BB2B1pBBB9B+0BF8B@B@B+B@BB2B1B B8B9PB+BFB@BB+ B@BHB2XB1BBB9B+pB0GxB@BB+B@BB2B1PB`BxB9B+B`GB@B B+`B@BB2B1BBB90B+BGB@BB+B@B(B28B1BBB9B+PBGXB@B`B+B@BB2B10B@BXB$:pB+BHB@BB+@B#ChB2xB1BBB9B+B_;B@BB+B#CB2B1pBBB9BpE0Bm;8B@B@B+B#CB2BPRB B8Bz9PB+B@HB@BB+ B#CHB2XB1BBBn9B+pBpHxB@BB+B#CB2B1PB`BxB\9B+B IB@B B+`B@BB2B1BBBN90B+B`IB@BB+B@B(B28B1BBB;9B+PBIXB@B`B+B@BB2B10B@BXB+9pB+BIB@BB+@B#ChB2xB1BBB9B+B|;B@BB+B#CB2B1pBBB9B01B?0B;8BE@B0pB`BB`BB=B1B B8B8PB01B4B;BEB0B`B B`BHB@XB1BBB8B01HB=pB;xBEB0B`BB`BB;B1`BB;BNB;B<B;B<B <B%< B<PB`BxB8B+B,<B@B B+`BBB2B1BBB80B+BIB@BB+B#C(B28B1BBB8B+(BHPBC<XB@B`B+BBB20B@BXB8pB+BZ<B@BB+@BBhB2xB1BBB:;B+Bw<B@BB+B#CB2B1pBBB8BP00BJ8B`D@B@/B BB PB B8B8PBP0B<B`DB@/ BBHB PBBB8BP0HB`9pB<xB`DB@/B`BB#CB P`B<B<B>B>B<B<B<B<B< B<(B=HB<xBBB8B+0B=8B@B@B+B#CB2B1B B8Bm8PB+B0JB@BB+ BBHB2XB1BBBc8B+pB-=xB@BB+B#CB2B1PB`BxBO8B+B`JB@B B+`BBB2B1BBBB80B+BF=B@BB+B#C(B28B1BBB98B+PBb=XB@B`B+B#CB2B10B@BXBF;pB.B{=BCB0.@BChBLBBB3;B.B=BCB0.BCBLpBBB#;B.0C=8CC@C0.CCCLC C8C;PC.C=CCC0. CCHCLCCC:C.pCJxCCC0.CCCLPC`CxC:C.CJCC C0.`CCCLCCC:0C.C=CCC0.CC(CLCCC:C.PC=XCC`C0.CCCL0 C@ CX C:p C. C= CC C0.@ C`Ch CL C C C: C. C> CC C0. C`C CLp C C C: C.0 C>8 CC@ C0. C`C CLC C8Cf:PC.C->CCC0. C`CHCLCCCv:C.pC:>xCCC0.CCCLPC`CxC,:C.CO>CC C0.`CCCLCCC<:0C.Ca>CCC0.CC(CLCCCR7C.(CIPCJXCC`C0.CCCCC@CC#CCLCpJ@CZ7HCMPC7C4C 3CC|>C>(C>0C>PC>XC>xC>CCC`C-HCHpCKxCpCCP-CGC`CC#CC5`C<C>CCC>C>C C8C8PC+C>C@BC+ C%CHC2XC1CCC 8C-pC@KxCCC,C`CC%CCF`CP)C>CCC7C+pChKxC@BC+C%CC2C1PC`CxC7Cp, CK CB C0,P C!C` C#C Cp2!C? !C?P!C`!Cx!C7!C+"C?"C@B "C+`"C#C"C2"C1"C#C#C70#C+#CK#C@B#C+$C%C($C28$C1$C%C$C7?%C4%C2 %C(%CG@%C?H%CPTX%CB%C7%C+%C4&C`H0&CK8&C@B@&C+h&C%Cp&C$Cx&C 'C&C2&C1 'C?H'C_P'CSX'CGp'CL?x'C@C'CE'CZ?'CU'CV'Cf?'Cx?'CT'CU'C?)CEL)C=)CZL)CcL*CnL`*C(h*Cx*C (C*CKL*C+Cx+C0+C+C`,C+C)C+C`*C`,CULx,C )C,CEL,C`,C`(C,C=,CБ,C(C,CO-C](-CH-C `-COh-Cx-CO-C-C-CO-CO-CP-CO.C=.C.C4 .CO(.C8.C4@.COH.C`X.C4`.Ch.C@x.C4.C].C.C4.CO/Cp/C.C/C`-C/C /C8C(8C8C 8C08C8CP8C8C8C 8Cp8C` 9C09C 9C9CP9C.9C 9C-9C.9C:C-@:C.H:C X:CU`:Ch:Cx:CU:CP:CP:CV:CP:C0:C4C:C:C:C 6C:C:C:C6C;CP;C ;CV ;C#(;C@;CPH;CЪX;C@3C`;COh;C x;C@1C;Ce.;C;C0C;CQ;C7C;C;C;C;CV;CQ;CVCHZ>C C>C>C>C?C(?C?C@>C@?CUZH?Ch?C^Zp?C x?C?CgZ?C?C?CoZ@CvZ0@C}ZX@CZ@CZ@CACACPACAC>CAC?CAC@?CHCP)HCHCHC_HC_HC( IC(IC`ICI(IC#`IC/`xJCi_JCPKCBCKC KC0PKCHCXKCLCpKC KC LCG0LC (LC?LC]_LC0MCDC8MC@MCpMC ICxMC NCMC MC NCG0(NCp HNC?NC~dNCNC` OCPOC@GCXOC` OCICOC@PCOC@OC @PC_HPCPPChPC_pPC xPC@ PC_PC0 PC PC`PCpPC@ PC?QC(QCQC 0QC:08QC@QC` XRC[`pRC RC SC (SCUCSCTC0 TC TCp TCUCUC4UC@ UCQCUCUC UCRCUC4UC` UCQCVCVC VCQC\CH\C q\C@\CH\C X\CVC`\C4h\C[ x\CVC\C\C" \C@VC\C\C# \CVC\C4\C`[ \CVC]C]C " ]C@VC@]C  H]CpW P]CR `]C  h]CZ p]CY x]C$ ]CPR ]C ]CP' ]Cp ]Cic]CpW ]C[C]Cl6]C! ]C[C^C(^C ^C`[C ^C C(^CP 8^C [C@^CEH^CR X^CZC`^C3h^C@, x^CZC^C^C( ^CZC^CS^C$ ^C@ZC^C^CQ ^C`YC^C^CP ^CXC_Chb_C _C`XC _Cl(_CP 8_CXC@_CH_C0 X_CWC`_Cbh_CP? x_C`WC_CFc_C! X`C` `C `C@\CXaC[cpaC aC bC (bC\CbC{bcC + 8cCp, HcC`]CPcC@]CcCWCcC cC cCp) cC0# cC]CdC' oCl(oCCl0oCMl@oCqHoCClPoCMl`oC(hoCTloCYloCdCoCoCoCfloCuloCloCioC oC` oC0 oC pC0 pC` pC pC pC (pCa 0pC 8pC @pC HpC PpC XpC@ `pC ppC pC pC@| pC qC.qC qC-(qC.0qCЌ @qC-PqClXqC hqCjxqClqC qC8jqC.qC qCpjrClrC rCmC rCl(rC 8rCjC@rCkHrC XrCgC`rChrC xrCjrClrC rCjrClrC rCjrCPrC rCkrC#rC sCe.sC@h sC((sC 8sCxkxsC%{sCa sCPt sCoCsCh sCPt tC eC(tCj HtCqCXtCqCtC@ |Cin|CKn|C_n}Cn(}C{nH}C0`}C }Cn}C }CuC~C 8~C `~Cnh~C x~CuC~C C C C C C C(C 8CuC@C4HC XC`uCCnC C{CCicC C{CC(ȀC ؀C`{CC-0C C {CC$nC`< CzC C(Cp 8C zC@CoHC XCyC`C0hC xCwCCnC CwCCnC C`wCCnȁC@4 ؁CxCCnC* C |CC CC0% C@xC CE(C06 8C xC`C hC pC0$ C ȂCCCnC0 8C CnC ؄C C`}C8Cp XC hCG8CnPC xC C~CC~C؆Cp C` C  C}C؇CnC C C~C(CCxCp C` C C`~CxCnC C @C HC CCn0C C C C CCnЌC XC C C CXCopCP C& CCC`CCuCC CP% C C (CChC04 xC C CqCN C^(CE 8C`C@CqHCb XCC`CqhC} xCCCqCn C@CCqCS CqȖCE CqCR C@C(Cq0CX @CCPCqXCV hCCxCqCPX C`CC CX CCȗCqЗCX CCCqC X C@CCq CW 0CC@CqHCW XCChCqpCV C@CCqCV CCCqC`V ИCC C0T 8Cpv pC0T xCy C@Y CPF CC C|qЙCN CY C CCpCC`l @CCPCCXCC `CF hCЃ C CCCؚC XCrpC0D CpC CD C(C:0 C/`CI(C C(C НC:0؝C C(C0 C0(C C4C` ؞C݇C C 8C0 xC C` CCC CCCC?CC60 C(C 8C`C?ءCڪCК Cp pC`CxC0 C C CC`CC xCC:Cp إCp 0CC8CP @Cp HC0 hC CpC`CC C C4(C 8C@C`C?C0C@ XC` C@C8CЯ CЩC0 CP CCتCp @C4HC0 ȫC CZCG0جCC#C@C0CHC0CPC@CXC@C`CPChCPCpC`CxC`CCpCCpCCCCCCCCCCCCCCCȭCCЭCCحCCCЭCCЭCCCCCCCCCCCCC CC(CC0C C8C C@C0CHC0CPC@CXC@C`CPChCPCpC`CxC`CCpCCpCCCCCCCCCCCCCCCȮCCЮCCخCCCЮCCЮCCCCCCCCCCCCC CC(CC0C C8C C@C0CHC0CPC@CXC@C`CPChCPCpC`CxC`CCpCCpCCCCCCCCCCCCCCCȯCCЯCCدCCCЯCCЯCCCCCCCCCCCCC CC(CC0C C8C C@C0CHC0CPC@CXC@C`CPChCPCpC`CxC`CCpCCpCCCCCCCCCCCCCCCȰCCаCCذCCCаCCаCCCCCCCCCCCCC CC(CC0C C8C CHC PC hC pCp xC` C` C@ C0 C` C@ C0 CC سCP 0CCCךиC C  CCXCۚ C@ (CCxC C7CC0 8C HCCPCCXC CCCP C@ ȼC CмCCC CC CCC4C0 C`CCȽC ؽC CCC CC C4(C 8C`C@CHC XC CC<CоC Cl6(C 8CC@C4HC `ClhC xC`CChbC  CCC ȿC C C C C?C CC7 hC@4 pC/ xC@= Cn(CD 8CpC@CEHC`0 XCC`ChC0D xC`CCwCPB CCCnC0 C CCC@8 C@CCCP? CCC4Cp CC C((C 8C`C@CHC / XCC`ChC< xCCC7 C@4 C/ C@= @CG pCp3 xC. CA C7C0# CCC CC % C`CCnCD CpC CE(CP0 8CC@CHC; XCC`ChC0D xC`CCinCG CCCwCPB CCCKnCC C`CCnC0 C CCC@8 C@C C(CP? 8CC@CHC@ XCC`C4hCp xCCCC; CCC(C C`CCC / CCC_nC+ CCCC< CC Cn(C`A 8CC`C C`C CC C@CC4C CC(C@CXCnpC Cp CmCPF 8CD @CCHC`CXC` C@CC C`# C@ C C CC9 C7CPF CD CCC`C0CC8C @C`# HC@ XC hCCC@> C@+ 8CPC Cp C CCCs@C Q CQ PC ChCR CCC@CCT XCHCQ (CCxCQ C@C_ CCC4CQ CC@C<hCCC4CS CHCoC4C` CѝC(C8CpCe Cb (CCxCf CH@CHC@o XC`C`C4hCt xC CCCpq CCC@m C } C#C{ ChbC`o CC Cl(Cn 8CC`C@m hC pC~ xCt Cn C{C0n xCm Cm C@CxC\Cw Ct C`CCCCp CCCPm (Cr 8Cq HCCC| C C4CC(CnHC#hC.C<C#CIC[C(CiHCbhCICmC CvC~C(C]HChCCCCC1C(CHCǣhCУCأCCCC(CHChCC"CC+C3C;(CCHCLhCWCbCnCyCC(CHChCCCCCȤCѤ(CڤHChCCCC CC(C'HC4hCBCNC[CiCvCic(CnHC:0hCCCCoCCC(CCCе@Cȥ`C4xC~C4CC4C]C4 Cm0Cp 8C @CXC٥hC0 pCp xC8C C C@ ChCvCP C CCȥC CP Cض8C~HC XC4pCC C C C]C C CpCC C@ CC(C 0C0 8CPC `C hC pCCC C C@CC C CpCC C C0C@C HC PCиhCxC C0 CCC` C C0CC0 C CC C0 (CP 0CHC1XC `CP hC(CCГ CCC C C4CC0 C C(Cǣ8C0 @C HC0`CУpC xC ChCأC C CCC0 C CлCC0 C (C@CPC XC `C8xCC C ChCC0 C CCC0 C C C0C 8C @C XC"hC pC xChC+C C C C3C C C)C;C C C8CCHCp PC XCнpCLC C CCWC C CCbC C CPCn(C 0C 8CPCy`C hC pCCC C CCC C C(CC C C`0C@C HC PChCxC C CȿCC C CCC C C(D Dp (D 0DHHDȤXDP `DP hDpDѤD0 DP DDڤD DP DDD DP D(D8D @DP HDP`DpD xDP DDD DP DD Dp DP DDDP DP (D0@DPD0 XDP `DhxD'D D DD4D D DDBD D D DN0D 8D @DHXD[hD pDP xDDiD DP DDvD D DDED0 DУ Dh8DicHD PDP XDpDMD DP DDYD D DDED0 DУ DhD0DP 8DPDhD pD@DD DxDicD0 D DDMD DP D0DY@D HD@ PDhDnxD D@ DDȤDP DDڤD D hDDD DDDDD DX@D^HD XDe`D4hDp xDeDwD0 DCDe.D` DD(D DDD0 D  D( D 0 D 8 D Di DO DP D D@ D Dæ D D D D D D D  DP D( DК 8 D@ D(H D X D DТ D D D? D DP DP@ D?H D P DP X DPh DТp D D D( D D D:0 D D`  D D DJ 8 D/`@ DP H Dp ` DϦh D p D D? D DI( D D D0 D` @ Dh D D D DD#0D2DZDMDD(D/`(DEHD٥hDicDȥDI(D?DYD(DϦXDnpD D D DCD 0DCPD hD DND 8D hD DDP D@DD DD D` DnD D D DO D 0D C8D` @D hD DpD@ DxD DD D 6 D` ;D;Dk ;D7F(;D@;D7FH;D`;Dp;D;DN;D;Dk;D];De;D D-H>D X>D 6D`>Dh>D@ x>D(D>D)>D9>D %D>D$>DV>D"D>D>D>D,D>D:>D >D9D?D?DP ?D`9D ?D(?D 8?D`:D@?D6H?D0 X?D8D`?Dlh?D x?D7D?D?D ?D`5D?D?D ?D`4D?D?DpI?D@$D?Dhb?D@ ?D3D@D@D0 @D+D @Dt(@D 8@D+D@@DH@D.X@D *D`@Dh@D x@D'D@D@D @D 'D@D @D @D`&D@Di@D.@D)D@D@DU@D@#DAD[ADAD !D ADR(AD`.8AD*D@ADHADp XAD D`ADrhAD xADDADAD ADDADAD ADDADJAD0 ADDADrAD AD@3DBDBD@ BD2D BD(BD 8BD1D@BDzHBD XBD1D`BDhBD xBD`/DBDjBD` BD.DBDBD BD.DBDbBD BD`0DBDZBD@ BD/DCDCD@&CD-D CD(CD 8CD@-D@CDBHCD XCDD`CD hCDxCDDCDCD CD@DCDe.CD CDDCDCD x CD`DCD(CDv CDDDD#DD XDDpDDpb (EDEDED_^EDf EDP8FDPFD@ FD S GD GDDHD`ID pID` xID0 IDIDb JD4JD#HxKDKDb @LD2HLD#HMD#(MD(@MDHMDPMD`MDMDMDMDMDMDMDMDMDMDNDND0NDND ND(ND0ND8ND@ND0PNDXND`NDhNDpNDxNDNDNDNDNDNDNDNDNDNDNDpND#NDP ODLOD0OD@ODODMDOD`MDOD@MDPDPD0PD0PD8PD@PDHPD@XPDP`PD8QDBPQD@xQDQDMDQD`MDQD@MDQD0QD0QDQDQDQD@QDPRDRDNDRDRDSD8SD@SDxSDSDSD0SD ODSDЙSDP`UD>hUD pUDUD[UD0_UD>UD UD>UD<UDڪUDUDVD((VD)HVDwVD,VDTDVDVDVDVDVDTDWDWDWD`TD WD6(WD@hWD"jWDWDWD?WDڝ(XDXD4XDXD` XDm XDm XD` YDYD{ (YD{ @YD1 HYD?PYD1 XYD hYD YD1 YD<YD YD_YD YD YD YD YD YD ZD 8ZD XZD xZD ZDnZDZD# ZDnZD<ZD ZD ZDoZD [D [D? [D 8[D P[DtX[D`[Dx[D[D[Dt[D [D [D [D [D[D \D \D?(\D 0\D?8\Ds@@\D X\Ds@p\D?x\DJ\D \D \DJ\D?\D\D\D\D]D ]D (]D_0]D 8]D @]D X]D p]D;x]D ]D+8]D+8]D ]D?]D?]D ]D ]D q]D?^D ^D q0^D 8^D @^D H^D X^D x^D ^D ^D ^D0^Dn^D0^D^D# ^D _D__D# _D_D (_D @_D;H_DP_Dh_D_D;_D_Dn_Dn_D<_D _D?_D`_D``Dڪ`D``DA(`DAH`DڪX`D`h`D``D`D<`D<`D# `D `D `D `D aD  aD( (aD?8aD?XaD( paDnxaD# aDnaDaD# aD aDaD# aD aDbD bDobD# bD (bD HbDo`bD hbDpbD?bDbD bD, bD?bD, bD, bD?cD? cD(cD0cD 8cD @cD HcD# PcD4 hcD cD cD cDcDcD_cD# cD4 dDC dDC 8dD4 XdD_xdDdD<dD dD dD<dD# dD# dD# dD# eD#  eD?eDK eD8fD0@fDPhfDXDxfD eDfD gD((gD0gDDDDWZD DA@D4_HD>PDOXD=K`DcKhDpKD qD'nD7FD<D}ODOАD1ؐDyKDbD qDHDZPD@gD`DDDKDwDDDJȑDwؑD DD DvDDD DdD@D DK(Dc8DD@DBHDvXDD`DKhD`cxD DDADjD`DDJDvD@DDKȒDؒD@DDJD}DxDDDvDD DJ(Du8D`D@DJHDXD~D`DJhDxD}DD D0uDDD(D0tD|DDȓDuؓD|DDJD@sD{DDKDsDwD D(D@c8D@wD@DHDsXD{D`DhDkxDnDD-JD`kDjDD"JDjDiDDoȔDP~ؔD@vDD2;DjDuDDWZDUD`uD D(Dpj8DrD@DxHDPjXD tD`DrhDexDyDDKD cD`rDDDaDrDD6ȕDaؕD`qDDID]DoDDBD]DmD DI(Dp\8DlD@DJHD0}XDyD`DIhD[xDlDDIDUD`kDDv D|D lDD4DND D D4(DQ8D D`D4hD`NxD DD"jȗDbJDJJDb(DKHDOhDODkDȘDPDæD?(DHZXD_KpD@PDgDD M D0R(DDxDSDDOD@zDDLD0SțD DDPDIDO0D@D8DL`DNhD`DDpM8D?XDTxDqDqDJ؞DKDULDR8DTXDxD"eDȟDHkDh#DZkDDmDo#DhkD(D@n0D8Dk@DPDnXD`DvkhDPxDoD2ODkDDoDkDkDРDؠDD DkD=8D<XD<xD>D<D<ءD/`D"jDZȬDDجDDDXHDذD20DkXDOhDUxDʿD^DuqȱDr(D HDdXDkhDtȲDزD{D D@DyDS@(D:HD;XDNDDO9DL 8DHD6DD(ȶDضD(DxDODD@DDзDDDDDD`DDփ D0D@D8DHDXDD`DpDD`DDDɀD DDDRиDDظDDрDDD2D߀ DD(DI8DHD DPD2`DpDDxDIDD`DD`DDDȹDwعDD`DDwDD`DD(D8DD@DPD-`DDhDxD7DDDD@DDDӄȺDJغD@DDDTDDDD_(DD0D@DmPDDXD/hDyxDDDFDDDD]DȻD`DлDtDDDDDDD D0D@DDHDIXDhD`DpDIDсDDDIDDDDIмDD DDIDDDD D 0D D8DЅHDXD@D`DpD#DDDD1DDDD9нD`DؽD,DDDDDCDM DD(DZ8DVHDDPDq`D`pD DxDփDjD@DDDxD`DȾDؾDD`DDփD~DDDփ(D8D D@DPD`D@DhDxDDDD͆DDDD͆ȿDؿDDD͆DDDDD(DD0D@D#PDDXDhDxD DDDÂDDDD̂D`DDDՂDDDDDD D0D@D@DHDXDhDDpDDD DD)DDDD)DDDDDDDD@ D0D D8DWHD&XD@D`DWpD0DDDnD8D@DDDADDDփDJDDDփDY DD(D8DbHDDPD`D:lpDDxDփDjDDDʇDtDDDCD}DDDDDDDI(D8DD@DFPD`DDhDDHDDDDD@DD`D0DXDXDPDDhDDdDD|DDxD8DpD`DlDDDDDDDDD(DDPDDDDDDDĢDDD8DD`DDDDDDDDDD(DDPDآDxDТDDȢDD4DD0DD(D@D DhDDDDDDD DDD0DDXDtDDpDDhDDXDDPD DHDHDDDpD@DD8DDDDDDDHDȣDpDDDDDDDأDDУDHDDpDDDDDDDD(D DPDDxDDD@DD8DD4D D0DHD,DpD(DD$DDxDDhDDdD@DXDhDPDDDDDDD DDHDDpDDDDDDDD(DDPDDxDDDDDDDDDDHD4DpD DDDDD8DDTD0DHDhD`DDXDDpDDhD(DDPDxDDDDDDDDD0DDXDDDDDХDDȥDDD0DإDXDԥDDDDDDDDDHDDpDDD DDDDD(D0DPD(DxD$DD DDDD8D0D4DhDXDDPDDLDDHDDDD0D@DhDxDDpDDlDDhDD`DHDDpDDDDDDDD(DDPDDxDDDDD̦DDȦDDD@DDhDDD DDDDD DDHD DpDDDDDDDDDD8DܦD`DئDDЦDDLDDHDDDD@D@DhDH EP EX E` EËh E͋p E؋x Eq E E| E E=K EQHE]hETESEE EE E E(EP8E E@EHE`XE`E`EhExE EEpEE`EE0E`E<E<(E<HE>hE<E/`E=EP)EE(EgHEOhEWEEqE EE^E"j(EbJHEJJhEEEE͋EËE؋(EOHEuhEZEZE^Ep^pE E EHEpEiE>*EEqE{8En`E<`DEpDENxDE'nDEDE`EDEHEEEѿEEܿ EE(EEE0EE@EE@EE:HEEPEE1XEE `EEhEE%pEE:xEEpEEGEENEEdEEEEEEEEEIEEnEEqEEyEE|EEyEEpKEEFEFEFEFE FE(FE0FE8FE@FEHFEPFEXFE`FEhFEpFExFEFEFE FEFE9EFEFEFEFEFEFEFE$FEFE(FEPGE.GExGERGE GE,(GE0GE68GE@@GE\HGE hGE]GE"jGEbJGE>GEHEZ(HEEzHHE(hHE֣HE HE@-EHEHE HE ,EHE)HEHE@1EHERHEHEDEIE9IEIEBE IEu(IE8IECE@IEwHIEXIEAE`IEBhIExIEAEIEUIEIE`5EIEdIEИIE3EIEwIEIE@EIEIEIE 4EJEJEJE7E JE@(JE08JE5E@JEHJE0XJE2E`JEOhJExJE`?EJEJEJEEKEKEKE@>EKE@KE0KE@0EKEKEKE,E8LE?PLELEpLEMENEMEMEMEoMEwNEf8NE\NENE NE>OE (OE=HOEW`OEpOEmxOEqOEOE$OE(OEOE@}HOEOEOE@PE.HPEOEPPE`PE`PEhPE@pPE2SxPEhPEwPEPEPEPEPEPEPEQEQE QE0QE@QEPQE`QEpQEQEQEQEQEQE!QE.QE8QERE_RE REZ0RE@REBPRE,`RE]H^E`^E^EB^ERE^E_E_Eqj_E_E^E _E3(_E08_E]E@_E;H_E@X_E`]E`_Eh_Ex_E@ZE_EE_E_EYE_EO_E_E`XE_E_E_E@YE_EY_E_EXE`Eg`Eв`E@\E `Eo(`E8`E WE@`E{H`E@X`EVE``Eh`Ex`E VE`E`E`EXE`E`E`EWE`EaEaEaEaEaE aE aE(aE aE@aE@aEHaE@aExExE(yE0yE`cE@yEyEyEyEyE@nEyEyEyE@nEyEyEpyE`lEyE$yEpyE`lEzEzEzEmE zEw(zE8zEmE@zEHzEXzEmE`zEhzE0xzEjEzERzEкzEiEzEzE@zEdEzEzEzE hE{E0{E{Ep{E{E{Ep{E@8|Ep|E|E P}E$@~E9H~EX~EsE`~E^h~Ex~E@qE~EE~Ep~E@pE~E~E ~EpE~EO~E~EpE~Eq~E~EsEEqEE@qE@EHE@XE wE`E9hE@xE wEEEE vEE^EE vEEjEмEuEEREмEuEEqE@E wE Eq(E8E vEhE"jE7EP؀EhE@~EE8E]PEE@E(E0EE@EEE.E E EEEE`EE{ȔEPؔE EEEE`EEQEpE E E6(E8EE@ElHEXE`E`EEhE`xEEEEEEE8EEEE%ȕEpؕEEEKEE`EEE E E E](E 8E`E@EHEXEEEVE EEEElEuEEEȖEЖEؖEEEEEEEF>FJFIF>FOFJF8FIF>F>FOFJFI@F>HFPFUXFJ`FIFFFFFQFIF>F>FJF>FOFJF>FJ F(F0FF8FQPF>XFJFFF\FJF>FJF>FFFp F>(F=K0FO8FJ`FLhF~pFFFeJFS@F<FlF>FOFJF>FOFFJF>Fl0F>@F>HF`F>hF"0pF?xF=KFIF>F"0FIF>F"0FIF>FIF F(F0F8F@FHFPFXF`FhFpFxF-F<FJFWFfFrF~FFFFFFFFFFHFPFF`FFFsFFFFFP}FFFF|FFFFP<FF F(F08FE@FHF0|XFE`FEhF0xF@EFF`{FEFF ;FEFF FEFFzFFFF;F`E F#(F;8FE@FHF7XF`E`FhF0wxFEFeFFFFF6F`EFFvFEF+FvFEF7FeF@E F(F48FE@FHFuXFE`FhFuxFEFF3F`EFFprF FFF@1F`EFF0FEFFqFE FC(Fp/8FE@FHF@.XF@E`FhF@.xFEFcFHFEFFppF`EFvFP-FEFnF,FEFcF&F@E F"T(Fp8FE@F~HFoXF`E`FehF0oxFEFOF&F@EFPFnF@EF8F nF@EF'FmFEFFlFE FI(Fl8FE@FHFP#XFE`FhFxFEFUFFEF]FkFEFeFF EFmFFEFuFFE F|(F8FE@F|HFXF E`FhFxF@EFFFEFFpFEFFF EFFF`EFFPkFE F(Fj8FE@FHFPjXF`E`FhFixF EFFPiFEFFFEFFhF EFF0hFE F F FE F( F`g8 F@E@ FH FfX FE` Fsh Ffx FE F F f F`E F F` F@E F| F FE FO F@ F E!F'!F !FE !F(!Fe8!F E@!FH!FdX!FE`!Fh!FPdx!FE!F}!Fc!F@E!Fq!F`c!FE!F !F!F`E!F=!Fp]!F E"F "F"FE "F\("F08"F`E@"FVH"FX"FE`"FOh"Fpx"F@E"Fh"Fb"F@E"FD"F"FE"FT"F "F`E"FS"F`"FE#F2#Fp #F E #F](#Fa8#FE@#F2H#FX#FE`#FIh#F^x#FE#F$#F` #FE#FX#F#F`E#F#F#FE#F#F#FE$F$F\$FE $F($F8$FE@$FH$FX$FE`$F:h$Fx$FE$F1$Fp$F E$F$FP$FE$F1$F\$F`E$F$Fp$FE%F%FP[%FE %F (%FZ8%F@E@%FH%FX%FE`%Fh%Fx%FE%F>%FY%F`E%F%FY%FF%F%FY%FE%F%Fp%F@E&F&FY&FE &F(&F8&FE@&FH&F X&F`E`&Fnh&Fx&FE&F`&F@&FE&FT&F&FE&F&F&FE&F&F &F E'F'F'FE 'Fk('F P8'F E@'FwH'FPX'F E`'Fh'F0x'FE'F'FR'FE'F'F0V'FE'F'F 'F`E'F'F'FE(F(FU(FE (F((FT8(FE@(FH(F@TX(FE`(Fh(FSx(FE(F(F(F E(F(F (FE(F@(F F(FE(F,(FC(F@E)F)F`A)FE )F()F>8)FE@)F H)FX)F`E`)Fh)FNx)FE)FB)F`)FE)F)FpR)F E)F&)F@E)F*F*F7*F*FL*F@*F?P*FN`*FZp*Fe*Ft*F*F*F*F*F*F*F+F+F +F0+F@+F P+F0`+F?p+FM+F]+Fn+F+F+F+F+F+F,F,F ,F0,F @,F P,F' `,F; p,FF ,FQ ,F\ ,Fk ,Fw ,F ,F ,F ,F -F -F  -F 0-F @-F P-F `-F$ p-F1 -F? -FL -FW -Fd -Fr -F -F -F .F .F  .F 0.F @.F P.F `.F p.F .F& .F1 .FA .FQ .F^ .Fl .Fw .F /F /F  /F 0/F @/F P/F `/F p/F /F /F /F' /F8 /FQ /F] /Fi /Fy 0F 0F  0F 00F @0F P0F`0F p0F 0F 0F, 0FC 0F\ 0Fu 0F 0F 0F 1F 1F  1F 01F @1F P1F `1Fp1F1F"1F-1F91FM1Fb1Fu1F1F2F2F 2F02F@2FP2F`2Fp2F(2F62FD2FR2Ff2F2F2F2F3F3F 3F03F@3FP3F`3Fp3F;3FT3Fr3F3F3F03F3F3F4F4F/ 4FK04Fh@4FP`4Fp4F4F4F4F4F4F4F4F4F5F5F 5F"05F-@5F9P5FK`5Fap5Fv5F5F5F5F@E5F5F5F5F5F5F5F5F5F5F6F6Fp 6F(6FE06F@6F@6FH6F`6Fh6FEp6F6F6F&6F.6FD6F6F^6FM6Fw6Ff6F6F6F6F F6F7F7F7F 7Fl07F@7F`7Fh7F Fp7F7F7F7F7F7F7F7F7F7F8F8F@8FH8FFP8F`8F`8Fh8Fp8Fx8F8F8F8F8F%8F:8FA8FR8FY8Fk8Fs8F8F8F9F9F9F9F 9F(9F09F89F@9FH9F0P9F X9F``9Fh9F$p9FAx9FK9Ff9Fn;F;F9F;FfIhAFpAF>FAFAFAFKAFAF=FAF?AFгAF+gF gF*+(gF@gF+HgF`gF(.hgFxgF@[FgF+gF0gFZFgF.gFgF\FiFiF.iFiFiF.iF iFiFjF.jFjFhF jF<(jF8jFgF mFq0mF/hmFpmF`jFmFmFmF.mFmFjFmF.mFPmF`lF nFq@nF(0nF4nFnFnFnF oFP0oF_(oF00oF PoF0oF/oFpFл8pF@pFHpF`ppF nF qF?qF//qF@qFrF 0rFlF8rFhrFnFprFnFxrF qFrF0h{Fp{FyF{F{F{FF8{F{F1{F7{F{F02|F7|F|Fp2 |F7(|F`8|F2@|F6H|FX|FL8`|F6h|Fx|F2|Fhb|FP|F3|F7|F|Fi8|F)|Fp|F8|F7|F|F8}F7}F}F83 }F7(}F 8}F`3@}F7H}FX}F8`}F8h}Fx}F8}Fm*}F}F8}F }F}F 9}F#9}Fp}F'9}F=9}F}FD9~F7~F~F3 ~F7(~F8~F3@~F]9H~F`X~Fb9`~F7h~Fx~F|9~F7~F~F9~F|7~F~F9~Ft7~F~F3~Fl7~F0~F3Fd7FF4 FW7(FP8F84@FK7HFXF`4`FC7hFpxF4F87FF4F-7FF4F%7F F5F7FF(5F7F@FP5 F 7(F8Fx5@F7HF`XF5`F6hFxF5F8FPF6F7FF86F6ȀF؀F9F6F`F`6F6FF9 F(Fp8F:@F6HFXF!:`F6hFpxF;:F6FFU:F6FpFn:F:ȁF؁FvFF6FpFxF8F8PF0FЂF sF؂FpXF؃F8F@FpF@tFxFPFxF28FFFuFF0F0FMȏF-0F?FnHFPFF`FFF:FFFFt;F<@F{nHF XFF`FEhFxFFF*FFFF4F FFFFFFF4FFF@F3HFXFF`F;hF`xFFF CFF`FF*FF FFlȒFؒFFFSFF@FF;F FF F(F 8F`F@F;HFXF F`F4hF`xFFFFFFFl6FF`FFȓFؓF@FF(;F0FFF(FFF@FPXF@hFFF/;F@F=F;0F XFpF FF`FF@FFF(FF<ЖFXFFpFFؗFXF;pFF F (FFxF F;F8F`HF@FFFF`F FF`ȚF@FؚFFF`F@FbF FbF_>FbȴF_>Fj_Fy?F<F Fb(F_>@FNHF`FbhF qF*ȵFеFFF F F@(F`)8FF`F4hF+xF@FFF`FFFȶFdضFFF4FdF@F F4(F@d8F@F`F4hFp,xF@FF4F,F@FF4F`-F@FFFFF@F4HFPfXF@F`FhF0FxFFF(FAFFF4ȸFhظF@FFFjFFF(FBFF@F4HFiXF@F`FhFJxFFF(F BFFF4ȹFPeعF@FFF@BFFF(FAFF@F8@HFaXF@F`F4hFdxF@FFFFFF4ȺF,غF@FF4FgF@F F(F0J8FF`F4hF,xF@FFFp\FFF4ȻF-ػF@FFF]FF F4(F0-8F@F@FHFXFFF*F&FFF4Fp+F@FFȼFؼFFF4F*F@F@F4HF+XF@FF4FcF@FFFFFF?F/F`FFbF HȾF`FFKF?F.ؿF e0F`F8F`F0hFFFp98F?PF/xFkF@FFFlF FXF@OF?F/pF@FxFpFZF`FFpRxF?FP0FFF @F[HFFF6F?0F2FFF bFQFF8F7F?F=PF`FXFpF` F@FFCXFBpF?F@FF  F"(FFxF>F@FPAF`FFF$F@FF?F&@F0=0F F8F`FPhFFF`:8FF@PF0FFF0F NF@FXFaFV@F1pFFxFF^FFFpSxFh@Fp1FFF@FHFFFpTFy@0F1FFFPF\F`F8FWF@F2PF FXFF]FFFXXF@pFp2FFF F`_(F FxFYF@F3FFFF3FbFFFP3F@F-0F@F8F`@FhFFF'8F@PF-F0F4F@FXFmF@F.pFFxF0`F7FFF 5FdjF0pFFF CF@tFF FSj(Ft8FF@FCHF uXF`F`FChFpxFFFF`FFFFoF tFptFF F F`F`FEhFpzxFFF EF0zF@FFEFyFFFEFyFFF#EFpyF FF,EF0yFF F4E(Fx8FF@F=EHFxXF@F`FFEhFxxFFFOEFxFFFWEFPxF@FF_EFxFFFfEF vFFFF0FFFFEFFFFGFFF FE(F@8F F@FxEHFXFF`FEhFxF@FF/GFFFF$GF FFF-GFF@FF;GFFFF7GFPFF FFG(F8F F(G=HGOhGOGGG@GG GGGGp G (GБ8G`F"GwI"GS"GnT"GS#G M #GT(#G@#GwIH#G`X#G`G#GT#GjM#GMp$GG$G #Gx%G$M%G&GG&G0 &GP8&G0@&GH&G'GX&G'G&G'G?('GO0'G0'GS'G'GG'GI'GP'GG'G'G'G@G'GO'GP'GG(G=(G(G`G (GI((G8(GG@(GXH(G@X(G G`(GUXh(G0x(GG(G0M(G=M(GLM(G[M)GO)G)G G )G()G8)GG@)GqH)Gб`)Gqh)G)G)G0)GG)GL)G)GG)GL)G`6G= 6G}O(6GO06GH86G1O`6G M6GO6G6GO6GH6G7GpP7GO7G(7GO`7GTh7Gмx7G1G7GwI7G7G0G7GS7G07G+G7G]7G7G/G7GS7GP7G`-G8GI8G8G,G 8G(8G88G`,G@8G=H8GX8G +G`8GIh8Gx8G*G8GX8GP8G@*G8GUX8G 8G*G8GO8G8G`/G8G8G8G*G9GuO9G 9G<(9Gph9G9GO9G9Gp0:G2G8:G@:Gh:G`7Gp:G`6Gx:G6G:G:G`XFG]QpFGFGGGFGGGpGGGGXGGGGFGHGIHGHG@EG HGUX(HG8HGEG@HG=HHG XHG;G`HGOhHGPxHG EGHGHG HGCGHGIHGHGCGHG]HGHGG JG<(JGp@JGHJG`JG(hJGJGOJGJGQKGpQ0KGKG ;GKG`KGKGKGGGKGJG(LG8LG0WGT0WGpXWGWGLGWG`WGWG`WG@`GWG_GWG _G(XGXGTXGpPYGMGXYG `YG@YG@cGYGbGYGXZGTpZGpZGZGOGZG`[G([GeG0[G`eG8[GdGh[G@[G U\Gp8\G\GOG\G`\G\G`\GiG\GhG\GgG]G]GU0^GUGh^GkG _GO(_GH_GP_Gp_GOx_G_Gq_G M@`G=H`G``G Sh`G`GI`Gp`GX`G@`GUX`G`GO`GaGaG aGuO(aG@aG<HaG0`aGOhaG0aGSaG0aGIaG@aGaGaGTaGpbGuTbG  bGS(bGP@bGHbG`bGnThbG`bG]bGbG(bG`bGObG@@cGTHcG`cGnThcGcGuTcGcGScGcG]cG`cGOcG@dGXdG  dGUX(dG@dG=HdG `dGhdGdG<dG0dGOdGdGdGeGOeG`eGqeG MeG=eGfG SfG fGI(fGp@fGXHfG@`fGUXhfGfGOfGfGfGfGuOfGfG<fG0gG]gG gG(gG@gGOHgG0`gGShgG0gGIgG@gG(gG`gGOgGhGhG0hGO8hGhGqhG MiG SiG iGO(iG@iG=HiG`iGIhiGpiGXiG@iGUXiGiGOiGiGiGjGuOjG jG<(jG0@jGTHjGp`jGnThjG`jGuTjG jGSjGPjGjGjGSjG0kGIkG@ kG(kG@kG(HkG`kG SkG kG`TGkGTkGkGRGkGuTkGkG@QGkGSkGlG]lGlG@PGHlG]hlGUXlGSlGXlGuTlGTmGnT(mGHmGOhmGmGOmGuOmG=8yGWPyG^xyG@:yGmGyGP<yG'zGzzGGzGGzG~GHzG+zGXzGp%p{G@sG{GG{GG{G(x|GX}G@xGH}G GX}GG~G~GB(~GO0~GEP~GnIX~GDx~Gk~G?~GX~GD~GCG(GEzPGWxG MG SGP>G]G@Y GT(Gk@GHGz`GOhGGG=GEGOGBGIȀG0BGXGAGUXGpA G(GA@G<HG`(`GShGpQGIG IGG7GBG7GGp7GGP7GG07 G(G70G8GC@GHG6PGXG6`GhGPCGnIG)G-G`gG{nG* Gln(G?@GIHG`=GG`%GuGGnIGp_G`uGЃGk؃G`_GuG G S(GP(8GwG@GTHG@(XGwG`GhG0(xGvGG]G (G vGȄGUXGIGln(GIHGShGIGGXȅGuTGTGq(GHGOhGGXGOȆGOG-GuO(G=G;^G0GG8G0|@GP|`GhGGxG GGG| GO(GpHGnIPGpGWxGG=ȏG ؏G@GGQG@GGGTGGG G(G8G`G@GIHGXG`G`GhGxGGGSGP}GGG]G0GGGIȐGؐG@GGXGGGGUXGPGG G<(G@GHGG aȝGНGG GAaHG7pGG`ȞG؞GGGIaGGGG_GGG G^(G`8G@G@G_HGXGG`G0_hGxG GG_GpGGG_G@GGG+aG`8GGGG`ȠGGРG GGG}OȡGjG}OGjG-G?G}OGw@GjHG}OPGjXGP@GGGGGТGpGqjGGd G3(G8Gd@GjHG0XGe`G|jhG`xGHeGjG`GeGjG0GfGdjȣGأGgGSjGGgGjGGHh Gk(G8Gh@GkHGXGh`G!khG@xGiG)kGG0iG1kGGXiG9kȤGpؤGiGFkGGi(GVkإG`kGtk8GkGkG"jGOبGOGqjG!G GGGGkG0GG Gk(G`8GG@GkHG0XGG`GkhGxGGG<GpGGGG GGGlȰGذGGG&lGPGGG=lGG`GG.GGGdGG(nG8G GGGGnG08GnG GGGHG GnGo G{n(GP8Gn@GlnHGXGnGnhGGxG GG Gn(G8GoG{nGGnGlnGPGnGnȸGظGnGnGGoȹG A(A'B'B'B'B'B'Be'B'B'B'Bj'B{'B-'BH(B;(B(B(Bf (B\((B0(B8(B@(B4H(BAP(BX(B`(Bh(Bjp(BDx(B(B(B)(Bp(B(B1(B(B(B+(BX(BT(B(B(BK(B*(B(B)B)BS)B%)B )BR()B0)BtBtBt BtKCtMCt dCtCtCtCt CtCtCtDtDtTDtfDtDt DtDtrFt@Ft Ft FtFt`FtFtFt@FtFtFt FtFt`FtFtFt@FtFtFt FtFt`FtFt:Gt Gt8)B@)B#H)B9P)BEX)Bt`)B~h)Bp)B6x)B|)B)Bq)B)B")B)B)B)B*)B\)B3)B)B)Bm)B%)B)BE*B*BXcCCCCXF*Bc*BL *B(*B0*B8*B@*BOH*BjP*BtX*B`*Bh*Bp*Bx*B*B:*B5*B>*B.*B*B*B8*Bf*B*B*BACA*B*BW*B*Bb_BbBb`Bb0CbtCbpCb DbIDb*B+B+B+BC+BY +B (+B+0+B8+Bn@+BH+BP+BX+B`+Bh+Bp+Bx+BT+B+B+B+B+B+B+B+B+B]B0_B0BЃBpBPBBBBPBBB0BгBpBкBpB&CP+CP/C0=CpACRCpTC0`CaCpcCsCCCPCCC0CЎC0CЛCPCPCC0CкCpCpCCC0CCPCCpDFDPHDPJDKDfDЙDpDDELEpFrFFPFFF0FИFpFpFFFPFFF0FFpFFFPFFF0FFFFPF:GpG+B+Bl+B+BHA AAAA A5(A70A@8A@AHAPAXAx`AhA4pA xAAAAAxAAAA_AAAAlAAAATBBBIBV Bo(Bx0B8B@BHBPBXBm`B]hBpBxBB BBBBJBBBBBBBBBBBBBBB BU(B0B 8B$@B&HB!PBXB`BhB"pBxB~BBBB BB#B$BBHB%B&BByBBBB'BBB B(B0B(8B^@B0HBPBXB>`B)hBpBxBBBB}BBBB=BVB*BJBB,BBnBBbBTBB@B B(B0B8Bm@BHBrPBAXBk`BhBKpBxBBB-BBBBB4BEBBZB.BBBBEBsBCB/B0BBV B1(B0B28B@BUHBPBXB`B3hBpBtxBBBBB4BBBB1BmB BBB5BB6B7BB3B_BI B (BB0B8B8@BHBPB9XBi`B:hBepB xBBjB;B<BBBBB B=B0BBBgB>BrB}BtBB;B B`(B0B?8B@B?HB{PB@XB`BAhB@pBxBBB=BBBCBDBBBhBEBBFBBBGBiBABBHBIB< B5(B0B8B@B[HB-PBXBt`B"hB+pBxBDBJBBBB BBBKBBBBLBBBlBBwB$BB B(B0B8B@BHBdPBXB^`BhBpBMxBNBB2BLBOBOBPBQBIBBBRBB'B%BcB Bz BS BT B B(( B0 BU8 B@ BH BP BX B\` BVh BPp Bax B BA BW Bw B( B B Bj B BX BY B BZ B B7 B B B B[ B4 B4 B2( B\0 B8 B@ BH BP B]X B^` B!h Bp Bx B_ Bp B B B` B B Ba Bo B B B Bb B# Bc B B B B7 B Bd B( B0 B8 B@ BH BP BX Bd` Bh BWp Bex Bf B& B B B B Bf BM B. B BZ Bg Bh Bt B B Bi B] Bh B B; B( BM0 BV8 B@ BH BjP BlX Bk` Byh Bp Blx Bm B  Bc B Bn B BV BW B8 Bo B. Bn B' Bp Bq Br Bs B Bt B6 BE BP( B0 B8 B@ BgH BP B?X B` Bch Bp BJx Bu Bv Bw B Bx B By Bz B B B B B B B B BJB{BbBB~ B(B0Bv8B/@B+HBPBXB`BhBpBxBhB|BBBBB}B~BBBBBBBBoBBgBBBk B(BY0B8B@BHB*PBtXB`BhBpBxBBB'BBBXBBBB1BqBJBBBBmBUBxBQBB B(B0B>8B@BeHBPBXB`BQhB'pBxBBFBBBmBBBBBBBBBBBBrBhBBBB B(Br0BZ8B@BHBPBXBF`B hBpBxBoBBBBBFBBBBBpBBBBBGBBBB Bd Bh(B0B8B@BHB!PBXB`B1hBXpBlxBBFBBcBBSBuBIBBBBB.BBBqBBQBBB B,(B0B38B@BDHBiPBXB!`B#hBpB3xBByBB BBBBB`ByBBBBBBoBiBBBuBm B!(B0B8B@BaHBMPBXXB`BhBpBxBBBBBBB$BBBBBBBBBBBBBB B(B(0B8Bf@BHBPBPXB`BhB>pB(xB1BBBBB BBB6B\BBBBBdBaBB]BVBB B(B*0B8B@BHBPB\XB`BhB:pBxBBBB:BB2BB]BBBzB8BLBBB"B!BBBB B(B0B8B@BHBPBXB`BhB.pBxBBBB|BBTBBBbBBBBzBBBBjBBB/B B#(B0B8BR@BHBPB3XB`B#hBpB;xBBBBBBVB2BBBBBBBBBBOBBBB B(B/0B8B`@BHB PBXB`BhBpBxBB~BBQBB*BBBBBB_BBeBBBBBBB  B[(B0B8B@BHBNPBXBx`BhBpBxBBBMBBBB#BBBBBBBBBwB~BBBB B(B00Bn8B@BWHBPBXB=`BNhBpBxB)BMBB_BBBB BCBBBBBB`BBzBB8BB B(B0B&8BI@BHBPBXB`B:hBRpBkxB BBBBBBzBRBBBBrBBkB1BPBB_BBB B(B0B8B@BHBPBRXB`BhBpBxBBaBBBBBB6BBBBAB"BB'BBBBTBB B;(B0B8B@B HBPBXB`BChB^pBxBpBBBnBBBYBBBBBB9BYBBBBBB7B B(B0B8B@B[HB/PBXB`BhB pBxBBB B BaB BZBB B?B2BBBBBXBR B B B B B ( B0 Bq8 Bu@ BH BP BzX B` Bh Bp BDx Bi B B  B B B B B B B B B B B B B B!B!B!B!B{ !B(!B0!Bk8!B@!B}H!BP!BX!B`!BNh!Bvp!BKx!Bq!B!B!B!B!B!B!B!B!B)!B!Bn!B!B!B!B!Bp"B"B"B"B "B("B0"B8"B @"BH"BP"BX"B!`"Bh"B"p"BXx"B "B"B"B#"B"B~"B$"B"Bs"B"B"BH"B"BP"B]"B"BG#B?#B%#B-#B& #B'(#B0#B8#B@#BH#B?P#BX#B"`#B_h#BSp#B)x#B#B#B#B*#B #B#B$#B+#BB#Bs#B#Bv#B#B#Bl#B)#Bh$B$B=$B$Bq $B($B0$B,8$B@$B-H$BP$BX$BS`$B.h$B/p$Bx$B0$B$B1$B^$B2$B$B$B=$BL$B$B$B3$B4$B$B$B$Bs%Ba%BB%B5%B %B$(%BU0%B+8%B@%BH%B6P%BX%B`%BGh%BDp%B8x%B%B%B%B7%B%B%BH%BO%B8%B9%BP%B:%B;%B<%B=%B>%B?&B&Bu&B&B &B(&B0&B@8&B@&BAH&BYP&BvX&B|`&Bh&Brp&Bx&BQ&B&B&B&B &B&B&B&BB&B/&B&B&B &B&BC&B&BD'B'BE'Bd'B 'B('B0'BF8'Be@'BH'B|P'BX'BH`'B<h'B`p'BIx'B,'B'B'BHH<HtH5<%<hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhѿhh鱿h顿h鑿h避hqhah Qh Ah 1h !h hhhhѾhh鱾h顾h鑾h遾hqhahQhAh1h!hhhh h!ѽh"h#鱽h$顽h%鑽h&遽h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1Ѽh2h3鱼h4顼h5鑼h6遼h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAѻhBhC鱻hD须hE鑻hF遻hGqhHahIQhJAhK1hL!hMhNhOhPhQѺhRhS鱺hT顺hU鑺hV遺hWqhXahYQhZAh[1h\!h]h^h_h`haѹhbhc鱹hd项he鑹hf遹hgqhhahiQhjAhk1hl!hmhnhohphqѸhrhs鱸ht顸hu鑸hv選hwqhxahyQhzAh{1h|!h}h~hhhѷhh鱷h顷h鑷h遷hqhahQhAh1h!hhhhhѶhh鱶h顶h鑶h遶hqhahQhAh1h!hhhhhѵhh鱵h页h鑵h遵hqhahQhAh1h!hhhhhѴhh鱴h顴h鑴h遴hqhahQhAh1h!hhhhhѳhh鱳h顳h鑳h遳hqhahQhAh1h!hhhhhѲhh鱲h顲h鑲h遲hqhahQhAh1h!hhhhhѱhh鱱h顱h鑱h遱hqhahQhAh1h!hhhhhѰhh鱰h顰h鑰h遰hqhahQhAh1h!hhhhhѯhh鱯h顯h鑯h遯hqhah Qh Ah 1h !h hhhhѮhh鱮h顮h鑮h遮hqhahQhAh1h!hhhh h!ѭh"h#鱭h$顭h%鑭h&遭h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1Ѭh2h3鱬h4顬h5鑬h6遬h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAѫhBhC鱫hD顫hE鑫hF遫hGqhHahIQhJAhK1hL!hMhNhOhPhQѪhRhS鱪hT顪%uv<D%mv<D%ev<D%]v<D%Uv<D%Mv<D%Ev<D%=v<D%5v<D%-v<D%%v<D%v<D%v<D% v<D%v<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%u<D%}u<D%uu<D%mu<D%eu<D%]u<D%Uu<D%Mu<D%Eu<D%=u<D%5u<D%-u<D%%u<D%u<D%u<D% u<D%u<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%t<D%}t<D%ut<D%mt<D%et<D%]t<D%Ut<D%Mt<D%Et<D%=t<D%5t<D%-t<D%%t<D%t<D%t<D% t<D%t<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%s<D%}s<D%us<D%ms<D%es<D%]s<D%Us<D%Ms<D%Es<D%=s<D%5s<D%-s<D%%s<D%s<D%s<D% s<D%s<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%r<D%}r<D%ur<D%mr<D%er<D%]r<D%Ur<D%Mr<D%Er<D%=r<D%5r<D%-r<D%%r<D%r<D%r<D% r<D%r<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%q<D%}q<D%uq<D%mq<D%eq<D%]q<D%Uq<D%Mq<D%Eq<D%=q<D%5q<D%-q<D%%q<D%q<D%q<D% q<D%q<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%p<D%}p<D%up<D%mp<D%ep<D%]p<D%Up<D%Mp<D%Ep<D%=p<D%5p<D%-p<D%%p<D%p<D%p<D% p<D%p<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%o<D%}o<D%uo<D%mo<D%eo<D%]o<D%Uo<D%Mo<D%Eo<D%=o<D%5o<D%-o<D%%o<D%o<D%o<D% o<D%o<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%n<D%}n<D%un<D%mn<D%en<D%]n<D%Un<D%Mn<D%En<D%=n<D%5n<D%-n<D%%n<D%n<D%n<D% n<D%n<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%m<D%}m<D%um<D%mm<D%em<D%]m<D%Um<D%Mm<D%Em<D%=m<D%5m<D%-m<D%%m<D%m<D%m<D% m<D%m<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%l<D%}l<D%ul<D%ml<D%el<D%]l<D%Ul<D%Ml<D%El<D%=l<D%5l<D%-l<D%%l<D%l<D%l<D% l<D%l<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%k<D%}k<D%uk<D%mk<D%ek<D%]k<D%Uk<D%Mk<D%Ek<D%=k<D%5k<D%-k<D%%k<D%k<D%k<D% k<D%k<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%j<D%}j<D%uj<D%mj<D%ej<D%]j<D%Uj<D%Mj<D%Ej<D%=j<D%5j<D%-j<D%%j<D%j<D%j<D% j<D%j<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%i<D%}i<D%ui<D%mi<D%ei<D%]i<D%Ui<D%Mi<D%Ei<D%=i<D%5i<D%-i<D%%i<D%i<D%i<D% i<D%i<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%h<D%}h<D%uh<D%mh<D%eh<D%]h<D%Uh<D%Mh<D%Eh<D%=h<D%5h<D%-h<D%%h<D%h<D%h<D% h<D%h<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%g<D%}g<D%ug<D%mg<D%eg<D%]g<D%Ug<D%Mg<D%Eg<D%=g<D%5g<D%-g<D%%g<D%g<D%g<D% g<D%g<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%f<D%}f<D%uf<D%mf<D%ef<D%]f<D%Uf<D%Mf<D%Ef<D%=f<D%5f<D%-f<D%%f<D%f<D%f<D% f<D%f<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%e<D%}e<D%ue<D%me<D%ee<D%]e<D%Ue<D%Me<D%Ee<D%=e<D%5e<D%-e<D%%e<D%e<D%e<D% e<D%e<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%d<D%}d<D%ud<D%md<D%ed<D%]d<D%Ud<D%Md<D%Ed<D%=d<D%5d<D%-d<D%%d<D%d<D%d<D% d<D%d<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%c<D%}c<D%uc<D%mc<D%ec<D%]c<D%Uc<D%Mc<D%Ec<D%=c<D%5c<D%-c<D%%c<D%c<D%c<D% c<D%c<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%b<D%}b<D%ub<D%mb<D%eb<D%]b<D%Ub<D%Mb<D%Eb<D%=b<D%5b<D%-b<D%%b<D%b<D%b<D% b<D%b<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%a<D%}a<D%ua<D%ma<D%ea<D%]a<D%Ua<D%Ma<D%Ea<D%=a<D%5a<D%-a<D%%a<D%a<D%a<D% a<D%a<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%`<D%}`<D%u`<D%m`<D%e`<D%]`<D%U`<D%M`<D%E`<D%=`<D%5`<D%-`<D%%`<D%`<D%`<D% `<D%`<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%_<D%}_<D%u_<D%m_<D%e_<D%]_<D%U_<D%M_<D%E_<D%=_<D%5_<D%-_<D%%_<D%_<D%_<D% _<D%_<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%^<D%}^<D%u^<D%m^<D%e^<D%]^<D%U^<D%M^<D%E^<D%=^<D%5^<D%-^<D%%^<D%^<D%^<D% ^<D%^<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%]<D%}]<D%u]<D%m]<D%e]<D%]]<D%U]<D%M]<D%E]<D%=]<D%5]<D%-]<D%%]<D%]<D%]<D% ]<D%]<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%\<D%}\<D%u\<D%m\<D%e\<D%]\<D%U\<D%M\<D%E\<D%=\<D%5\<D%-\<D%%\<D%\<D%\<D% \<D%\<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%[<D%}[<D%u[<D%m[<D%e[<D%][<D%U[<D%M[<D%E[<D%=[<D%5[<D%-[<D%%[<D%[<D%[<D% [<D%[<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%Z<D%}Z<D%uZ<D%mZ<D%eZ<D%]Z<D%UZ<D%MZ<D%EZ<D%=Z<D%5Z<D%-Z<D%%Z<D%Z<D%Z<D% Z<D%Z<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%Y<D%}Y<D%uY<D%mY<D%eY<D%]Y<D%UY<D%MY<D%EY<D%=Y<D%5Y<D%-Y<D%%Y<D%Y<D%Y<D% Y<D%Y<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%X<D%}X<D%uX<D%mX<D%eX<D%]X<D%UX<D%MX<D%EX<D%=X<D%5X<D%-X<D%%X<D%X<D%X<D% X<D%X<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%W<D%}W<D%uW<D%mW<D%eW<D%]W<D%UW<D%MW<D%EW<D%=W<D%5W<D%-W<D%%W<D%W<D%W<D% W<D%W<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%V<D%}V<D%uV<D%mV<D%eV<D%]V<D%UV<D%MV<D%EV<D%=V<D%5V<D%-V<D%%V<D%V<D%V<D% V<D%V<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%U<D%}U<D%uU<D%mU<D%eU<D%]U<D%UU<D%MU<D%EU<D%=U<D%5U<D%-U<D%%U<D%U<D%U<D% U<D%U<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%T<D%}T<D%uT<D%mT<D%eT<D%]T<D%UT<D%MT<D%ET<D%=T<D%5T<D%-T<D%%T<D%T<D%T<D% T<D%T<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%S<D%}S<D%uS<D%mS<D%eS<D%]S<D%US<D%MS<D%ES<D%=S<D%5S<D%-S<D%%S<D%S<D%S<D% S<D%S<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%R<D%}R<D%uR<D%mR<D%eR<D%]R<D%UR<D%MR<D%ER<D%=R<D%5R<D%-R<D%%R<D%R<D%R<D% R<D%R<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%Q<D%}Q<D%uQ<D%mQ<D%eQ<D%]Q<D%UQ<D%MQ<D%EQ<D%=Q<D%5Q<D%-Q<D%%Q<D%Q<D%Q<D% Q<D%Q<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%P<D%}P<D%uP<D%mP<D%eP<D%]P<D%UP<D%MP<D%EP<D%=P<D%5P<D%-P<D%%P<D%P<D%P<D% P<D%P<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%O<D%}O<D%uO<D%mO<D%eO<D%]O<D%UO<D%MO<D%EO<D%=O<D%5O<D%-O<D%%O<D%O<D%O<D% O<D%O<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%N<D%}N<D%uN<D%mN<D%eN<D%]N<D%UN<D%MN<D%EN<D%=N<D%5N<D%-N<D%%N<D%N<D%N<D% N<D%N<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%M<D%}M<D%uM<D%mM<D%eM<D%]M<D%UM<D%MM<D%EM<D%=M<D%5M<D%-M<D%%M<D%M<D%M<D% M<D%M<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%L<D%}L<D%uL<D%mL<D%eL<D%]L<D%UL<D%ML<D%EL<D%=L<D%5L<D%-L<D%%L<D%L<D%L<D% L<D%L<D%K<D%K<D%K<D%K<D%K<D%K<DkPXP_PXPSH=AHAH9tH6L<Ht H=AH5AH)HHH?HHtHR<HtfD=Au+UH=2S<Ht H=<d]A]wH@Hy@USH3HjLW8HIDH4H I8H5QIHDV4HH=AH1HHA[]DAWIAVAUATUSH8HGHD$ 4HT$ HDHHD$(fHD$ D$ PL`@IcAD$ HHIHMt$nsHHItHH9uA4$t$y+.AD$ l$D$II6AVHHIOf)tx9~AT뱉LpH<AG1҅~Ld$MMAՉl$H͉\$LIcLE HHE8DAs$M4A>t H=C D$AAE;l$|MIM\$Ld$H=İC~5HcA|HcILDHurÅuLI(0Ht$ D$ D$ ;FHD$ (HD$ H;D$(AG$H8[]A\A]A^A_@H=H1A}IEu9yHxt)HcHKID$HtqAl$1A\$DHcՃAtHcу49'A$D$HO<$H=HHaO<"H=HVfDAUATUSHG$LgxMHDM,DAD$I\$~&1H{HtHCH(A9l$I(M9uH[]A\A]HGHcHHfDH4tgH~HGHtZHD5sHH[eDff.@HtHHH(D1f.AUAATUHSHG$HHt`HDHǀIHHtVHDHHHHKH9tEHJH HBLbBHH[]A\A]ÐkufDH1薧@HG<H=Hff.SHH謟H[CAWIAVAUATAUHSH8HL$XLhDD$ LL$tl~P @It?E;euI}u)H|$t @9HD$H8[]A\A]A^A_@AM~Ll$IfDA>fI~HYAE8LLT<MD)xHMLLyHHIGHHcP99XHx)HcLc,AAŀXEHLT$ AADD\$ԠD\$L$1HD$(HEDD$ DLxLLLT$ AHuAWD.HcH IW H uKLKuйEu5H)HrH9vHu8H[]A\A]ÐA A Et΄t HEuHH[]A\A]҆AEAUIATAUHHSHHǃt==uLH=u`H=t|HAH޿AH޿AHD[]A\A]HމAHD[]A\A]f.HAH޿AHD[]A\A]HHtWqHS(H=E1HHAfff.AWAVIAUATLfUHSHhHt$(HL$8dH %(HL$X1M37@#t|@  HHs1HL9tT#tU v8H|$(HL$XdH3 %(Hh[]A\A]A^A_fHr1fDL|HE1Hl$0H)Ld$ LMHD$"<=tDHD$ILH9D$ eIuH=JÀۅuAEL<:ufH< t< tPӀ<_Hb <utHHHӀA<_AuuH9ZMf(H)LIH1Hl$K\$ Lt$HMMI"DHHAHH t&AHcÉՅ_uA-HH uL\$ MMLt$ DKHH= HH=H=HGHS HHtr H=CHtXH=EHt> H=Ht$ H= HfDHI9LmHLzHLHNHH&DH-~IHl$0MIAdžHtPL1vuoLgmfL\$ MMLt$cfH- ?@H=Lu6MnDLH5H <H81襭qLLHD$8ЉÅMAdžH|$( u@#wL@H$@H@ w*HHsHUHl$(H9<#vAdžH< wHHrfDLLH5 yff.AWAVAUAATIUH-:SHHdH%(HD$1#GHHH=uuHAHHEHR <H9EH@IHHEH$HHt H/uHGP0L4$McM9 HǃMLLL׍C,HEMHAHEuMHEHMP0>fDH@H5D@H <H81cHIHL$dH3 %(LH[]A\A]A^A_fHS0L1D?IMtHuA4$L@t@ymfD@N@@@0fD€?HuHcH1@.@xf.HHUIHMHmHI"fDyfǃD1HHEHEHP0LK LrHt:HH{ tSLHCID$HCA$H[]A\A]A^A_L4oLI9uC( DL#H;bHHbC(C(C(IUSHHHHH;r9t@(H[]HH=Hff.SHHHtaHHtH/tuHHtH/tSHHtH/t1H{0t H;HtaHHtaH[aHGP0HGP0HGP0AUATAUHSH(dH%(HD$1'HHHP(DHH$HD$HH[HǃHH5H=HLHMt"LH IHH HUH1Ʉu-HǃX@HcHԃt Ht tHuHǃL,$Mtt>ǃLHkHkHkH+HL$dH3 %(HugH([]A\A]LH HHH)t$HHt9H IHh Hu@HHHuH1k/m^Ht$HP8L)I}H (H tHHtATAUHS HHtxHHP(DHHHtgǃǃHǃHGHHt+8utf-fPHkHkHkH+H[]A\DH1jH[]A\ff.AVIAUIATIUHSCHHtm HHtiHCHCH HCLs0LLHt2HhjHxHHt#HH\ǃH[]A\A]A^fH1i@%4Yw HH8![`HIHcH>=*4D=4D=(4D=)4D#*=4&Ef=$4D<4HH@=4D=tk>4"ED1=D+%=t;1>D2f//t=4'ED4f.*wH =HcH>.u.tF4Ã=u>u-Ã=u*u.Ã=uՃ/uи0Ã=uŃHcDWuQt LLLLID$ HL$A$IEID$H f.LH4$TH4$HcHHDPuЃ߃Ju L.ÃuDn5AD$(A$1AA$5AD$(ID$ID$tL߉A nŃ4/ID$ HL$A$IEID$H-@ID$A$5AD$(ID$A$A$A$AD$<@A$L9It$LIt$LoLH4$HcHDz[AD$( ƒZLL5A$+I$1H=yAD$H_;LHAH9uHHPHHu(HCHP0HHH!;HHHH[]A\A]A^H+t"MtLHAH9t[]A\A]A^fDHCHP0H;ff.ATAUHSHGHHp`Ht6HcHHt*HH;;t []A\H(u HPHR0DHH[]A\ff.H;H5H8*Wf.UHSHHH=;H/uHGHT$P0HT$HEHKH5L@H;HIH81.H1[]DATIUHSH~H;;t[]A\LHH[]A\nff.ATMUHSHH;w;t[]A\LHH[]A\.ff.AWLcAVAUIATUHSHHHwH}HF`HW`HIcL4H9taHt\L$ M9tSMMtNLHHAH ;H9uNH)u*HAHHL$E1P0HL$MRH ;E1HL$LHHAHL$H9tH[]A\A]A^A_H)u HAHP0Mt%LHHAH;H;uH(u HPHR0IEH@`HtIJ8L9L9u5Ht0LHHH;;vH(uHPHR0HEL;-;HHHCHPH;H8tuIEH5L@1H1[]A\A]A^A_fDH9t3Ht.IcE1L$M8fDH a;@E1E1DH5I1芅1UHS1HHOHwfЃHH8t/vHHH8uHcfHtP~L1(΃HuMHHLHH9~ M/vHuHNHMf.H[]fH'iHtHHfD HHff.@HhHt 1H1Hff.AUU ATUSHH=HBhH-K;U H=wLe@U H=bEd$%hLmU H=G@HH5 ;AE%|W H="HgHmW H= ]@De%HtDHCtHH[]A\A]fH+uHP0H1H[]A\A]@HA;H8Wt_fDUHSHHt=HHHPHHtH[]DHGP0H[][g1HuH];HH8QH9AUIATUSHHH_HHL`Mt;Itd1M~H|Lu HI9u1HmtH[]A\A]HHP1HUHuHUD$ HR0D$ H[]A\A]H(HXtI9ffDH@HP0I9FcfHyff.fHFt HGuFUHSHH57H^t2H5KHKtHHH[]fD+H[]ff.AUATIUSHHHFt+HH9t ŅtwH[]A\A]DH5HLH5G;yIHtzHHI,$uID$LP0H[]A\A]fDH5;LYyIHt1I9D$t H@uMImXIELP0IHA;H8Tt-\1H[]A\A]fHL~뤐fDHtHGHfDH_dHt1HHD$IHD$fHOHQhHtH:tHQp1Ht1H:ff.HOHHt HHtHH;HQH5H81bH1H@tf@Ct:@Ft<@AuI¸uLSf.3W$H~>LO8DBH@1fHI H HHtH HxHHHJI9uAWAAVAUATUHSHHH9WHNWIBHc{$AH)IHS$~HTfDHHH9uAFtrL=#;LHH{LhHt>fLHI1bHSHH_HkHS0L{$AIuL=HD[]A\A]A^A_ÐL=;H;LHE1_DAHcAFtCx3LcljJI)I HH H HxL9uf.~DG1@HH H HxI9uf.HAuAuzHwHtHHHl1AHDAHODG HG(HGHDAHGAG$HG0HGHEHG@HGHHG81@1HH;H5PH8JHfUSHH_Ht2HCHHHtH@HtHHHEH+t H[]@HCHH@0H[]ff.fSH`dH%(HD$X1HGHHt?HHt7H1HЃt0H<HL$XdH3 %(uH`[D1@W1BHfAUATUHSHhdH%(HD$X1HHuWHtRII1LzoÅuTH$LI$HD$HE;HL$XdH3 %(u0Hh[]A\A]fD#_HufG@;AUATUHSHhdH%(HD$X1HHHHGHHtZHHtRIILЉÅuCf1HtHWHR`HtHt 1HfH x[ff.H tp;ff.H hff.H 6Xff.H `ff.H ff.H m ff.AT1UHSH H;D;t []A\DH(HSLbht"Mt-ID$Ht#HH[]A\HPHR0@HEHSH5L@H;HJHH81u1DH ff.H ff.H ߴff.(fLxfDLpfDLwhffDLZXFfDL>`&fDL"fDLfDLfDAT1ɺUHSHvH;/;t []A\H(HSLbht"Mt7ID$@Ht#HH[]A\HPHR0@ID$HuHEHSH5L@H|;HJH5H81r1sLfDHGH@`HtHt (ff.HHtKHWHB`HtH@0Ht HH;HRH5FH81Dr1HDVHuHHtKHWHB`HtH@8Ht HHY;HRH5H81q1HD#VHuHHtKHWHB`HtH@PHt HH;HRH5H81dq1HDUHuHHtKHWHB`HtH@@Ht HHy;HRH5nH81p1HDCUHu9SHHGHP`HHHtxHHtVH@H;;t.HHttH;HfH81wu H[fDH+u HCHP01H[ÐHHH[@HPH;H51H81pHi;HH5H81oH+t13THHu&nAUIATIUSHrHHHIHHt:H+tHH[]A\A]fDHCHP0HH[]A\A]SHtH;HH2=tkKMt&ID$H5ʩLHP1 o}HH>7HHIOHIff.fUSHHJHA`Ht=Ht3H;HHHH0+HHt:HHH[]@H;HQH5>H81TnH1[]HD$RHt$HuHHH[]fDAUATUHSHHrH;;tH[]A\A]fDHSH(LbhHULjhtBMtI|$HHHuMt8I}Ht/HHH[]A\A]f.HPHR0@HEHSH5L@H;HJH H81QmH1[]A\A]@AUATUHSHH H;;tH[]A\A]fHSH(LbhHULjht*MI|$HHt'HHH[]A\A]fHPHR0@I|$HuHEHSH5L@H;HJHH81wlH1[]A\A]f.MtI}HtHHvATUSH`dH%(HD$X1H HGH;;HH@`HtHH5;H=HH11HI.HmHHHCHu:HP`HtYHtOH',H+HuHCHP0 f ,HHL$XdH3 %(HH`[]A\HPH;H5FH81$kH+uHCHP0@1@HEHP0>fKOHHuH{HH5;H9t~aiuuI1HL _Ht$H<$'/HHt%HpHx `H+Hu HCHP0LR+DHH@HsHu?H=; ~`HfDkNHHZDH{(f. HiHcHsH{ `HFHCH5HPH;H81i!t6@SHHHHG`HtBHHt6HHHHxH5;H9t gtHHtdHHHmt]H;ƾ;t H[]DH(uHPHR0HCH5HPHJ;H81eH1[]HUHD$HR0HD$f.IHuHD$HD$nfUSHHHHHGHH@hHt)HP@HtH[]H@HtH[]HtHt4HE;H0HHu FHu5HHH[]8H ;HzH9uHPH51bH1[]@HV1H5aH1[]DKFHuAHA;H:ff.ATUHSHHHGL`pMt[I|$tSHHDHHt\HHAT$H+tH[]A\fDHSHD$HR0HD$H[]A\HPH;H5H81$aH1[]A\fkEHuHD$\HD$DUSHH}HOHHihHtEHE(Ht_H[]CHuH;H:USHHtyHWHHjhHtAHE(Ht8Hy!HUHtHt$Hx:Ht$HHE(HH1[]DH;HRH5ޛH81^H[]BHu@USHHHHHHCHPpHtHJHtHH1[]HHhHHwHV`Ht>Ht4Hպ;H05HHu GBHu5HHH[]!,H9;Hy(H:uHPH5$1]H[]ÐHV1H5#]H[]AHuH׶;H:fUSHHtQHtLHHAVHHtIHH^,H+tH[]ÐHSD$ HR0D$ H[][AHuQfAUATUHSHHHGL`pMtaI|$tYHHI#?HHt_LHHAT$H+tH[]A\A]@HSD$ HR0D$ H[]A\A]HPH;H5H81<\@Hu뚐ATUHSHHHGL`pMt[I|$tSHHh>HHt\1HHAT$H+t H[]A\@HSD$ HR0D$ H[]A\DHPH;H5fH81[?HufHtwUSH1H'HHtPHH4Ht/H(tHH[]HPHR0HH[]@Hmu HEHP01HH[]Kff.1HtHWHRpHt 1Hzff.fHtCHWHBpHt HHtHH;HRH5RH81`ZHHff.@HtHGH@hHt HHtRFfD'CwRHtgUHHSHRHHt>HH)H+t H[]fDHSHD$HR0HD$H[]DH1[]ff.ATUSHHtRHHIQRHHtQLHHH+t H[]A\@HSD$ HR0D$ H[]A\h=Hu ^fD뼐S(Ht1HHHPHHt [fDHGP0[D41ۉ[DS(Ht1HHHPHHt [fDHGP0[D41ۉ[D1DAWAVAUATUSHHGHH:IIH=UI־fHYv;H5kH81fDHv;HHy;HHD$DLiT@USHH_Ht-HoH=!HHH=fHH[1]11HHt/H=sHHH=mfH[1]YfH1[]AWAVAUATUHHSHxfomHyw;dH%(HD$h1Ht$0HL$ HHD$HT$HO|OO:LD$(HD$01D$5fHF%F-FHD$H\$ H\$(D$aLH|$ H9tHt$ tyH|$(H9tHt$ taL|$Ld$Ll$IGtpI1AHI9_~nItELLHu1HL$hdH3 %(Hx[]A\A]A^A_fDALLLHqt)HcfH9u;HHv;HHs;H;TyIGH;H5NhHP1[fAV1fHendswithAUATIHUSHpHu;dH%(HD$h1Ht$0HL$=HHD$HL$ HO|OO:LD$(HD$01HT$5HT$HF%F-FHD$H\$ H\$(D$aUH|$ H9tHt$tuH|$(H9tHt$t]Hl$Ll$Lt$HEtiH}1fHH9]~nHtLLLAu1HL$hdH3 %(Hp[]A\A]A^DALLHLt)HcfHIs;HHt;HHq;H;d|HEH;H5fHP1^fH/rindexAW1AVAUATIHUSHfoiHs;dH%(H$1Hl$0Lt$(HH$HD$ HO|OO:IH$1$HVHT$HNLHF%F-HD$H\$(H\$0Ƅ$HhH|$(H9tHt$LH|$0H9tHt$ 0Ll$H\$L|$ L1t]Hr;LH0HH=D$(ID$E1LHuN@L%o;L9}HITfM1HL H|$0Ht$@ID$HtMd$(L9|My IǺLHHy HøHHLH)HHH)H$IHL4>L^HE1INDL7HVIHL$OAIM MI)D8IDHH9D$uM1#ALMIH 0AHDHH9$|fE: uL\$1M4DD<E8<HL9uL|$M9ALMIH 0HAHDHH9$}DMtHHfMtH1HtHH$dH3%(H[]A\A]A^A_f.L;IM9RHHMu뎐bH ~,I 7I9LHLH8L)H'A8$t1fA8tHH9u@SHtH5'o;HH6l]Hm;H5]H8^fD1H<@H/rindexAW1AVAUATIHUSHfoQeH:o;dH%(H$1Hl$0Lt$(HH$HD$ HO|OO:IH$1$HVHT$HNLHF%F-HD$H\$(H\$0Ƅ$PH|$(H9tHt$4H|$0H9tHt$ Ll$H\$L|$ Lt]Hm;LH0HH=D$(ID$E1LHuN@L%j;L9}HITbfM1HLzH|$0Ht$@ID$HtMd$(L9|My IǺLHHy HøHHLH)H5HH)H$IHL4>L^HE1INDL7HVIHL$OAIM MI)D8IDHH9D$uM1#ALMIH 0AHDHH9$|fE: uL\$1M4DD<E8<HL9uL|$M9ALMIH 0HAHDHH9$}DMtHHi;H5 [H8%D1%@MtHkHtHtHH$dH3%(H[]A\A]A^A_fDL#IM9:HHMufBH ~,I 7I9,HLHL)HA8$t1fA8tHH9u@HtH5j;HH6=Hh;H5YH812H:f.H/rindexAW1AVAUIHATUSHfo`Hj;dH%(H$1Ht$pLt$ HHD$Ld$MHO|OO:HD$p1D$uHVHHNLHF%F-HD$H\$H\$ Ƅ$CH|$H9tHt$7'H|$ H9tHt$ L<$Hl$H\$L} tYHRi;LH0GHH=D$IEE1HuM@L-af;H9}FHRfM1LLzLd$ Ht$0IEHtMm(H9|Hy HúHHHy HŸHHHH)HHH)IHVE $LVH~LADHDA MHIL A8HDHuILD: utLDED8HuHMtL1HuPVfALHHHHH)HDHxILD: tHuMtLbHHH$dH3<%(1Hĸ[]A\A]A^A_f.HtALHHu H)fDH)tNfDkH ~,A4$LGHHLL)DHZHt}A$A8DuDA8DHHufDHtH5f;HH6}Hd;H5mUH8fD1MLfDH/rindexAW1AVAUIHATUSHfo\Hf;dH%(H$1Ht$pLt$ HHD$Ld$MHO|OO:HD$p1D$uHVHHNLHF%F-HD$H\$H\$ Ƅ$c[H|$H9tHt$?H|$ H9tHt$#L<$Hl$H\$LMtYH"e;LH0HH=D$IEE1HuM@L-1b;H9}FHRfM1LLLd$ Ht$0IEHtMm(H9|Hy HúHHHy HŸHHHH)HHH)IHnE $LVH~LADHDA MHIL A8HDHuILD: @LDED8HuHMtLHHtuH+H$dH3<%(uHĸ[]A\A]A^A_fALHHHHH)HDHxILD: `HuMtLHGa;H5mRH81nfHtALHHu H)fDH)6fDuH ~0A4$LHHlL)fHZHGA$A:DuA8DHHufD{HtH5Ob;HH6eHE`;H5%QH81tf.AWAVAUIHATUSHdH%(H$1I}IE(H$H1H$HcountHD$ H5b;fHO|OO:H$Hl$0Lt$(1H$IHT$H$LHF%F-FHD$H\$(H\$0Ƅ$=H|$(H9tHt$!H|$0H9tHt$ H\$L|$Ld$ H.H`;HH0HH=D$(IE1ALL9IMy IǸLHLL)2MHH9HHt[HH$H$IKHtH`;HH2dt`H^;H5NH8Zf.1H$dH3%(H[]A\A]A^A_DH ];H$HO1HHuHT$0LD$@IEL9MIľLHDHL)HD$H$LH$IH$N$MX1FLMt$IpANIH@MIL MI)D8IDHL9uL1Ll$I1)@ALMIJ AHDHI9PE: uL4$1M<D4 E84u HI9uI9ALMIJ HAHDfDALf1fuHH H81 HH98uHH9uHHH9L!|ff.AWAVIAUILATUSHxH[;dH%(HD$h1H3膿IHt]H=IUHu@H=Z;D1gHHL$hdH3 %(GHx[]A\A]A^A_@I}(f;HR Hl$1LH+Å@IULD$ H?L%(Z;MoIM)3LT$ItK MXC|1LqHIPLLD$O IfAIL MI)@8IDHI9uLD$H1\$/f.ALIIJ AHDHI9A:<uM1M4@A A8HL9uM9ALIIJ HAHDf.H;H5JVMe(fDHH2H~A A8 $t1fHH9tA8 ufIXuH ~IA2I9sL3HtL)HHH?|HHH?m\$dff.@ff.fDHH=W;119fAUATUSHHHHH9IH=qW;HHt%Hu7H@ E11HkLcHC(C0HH[]A\A]fLeLHC HtMuV(HC @H+u HCHP0H[]A\A]fHU;H5RM1H8|HLHrHC ff.AT1IUSHHdH%(H$1HHHHD$HD$`z1Ht$PLcHt$`Ht$1HHt*Hx HT$H4$HT$`Ht$PH|$H{ H|$tH蒾H|$`t H|$P耾H$dH3 %(HuNHİ[]A\fDID$H5GHHHC1HPHV;H81-s1zATUHHH5GSHdH%(HD$1HHuH$H9|JHu5H=NU;HHL$dH3 %(HKH[]A\fDH}(f.II)xhH1NHHtFHxH=T;L0LPfHH}(HHuTfD1cfHQT;H9Et1H1HtHUHtiHu(H{tNH{(HH{t+HC(IA$JՁA$0@H)T;H=T;H5 T;Hx(H=S;!?ff.@UHSHHw1HHt HUHu'H{H5S;t$H{(PHH[]fDH{Hu(uH=nS;ff.UHSHHw1HHt HUHu'H{H5+S;t$H{(HH[]fDH{Hu(uH=R;ff.UHSHHw1(HHt HUHu'H{H5R;t$H{(@HH[]fDH{Hu(uH=R;ff.AWAVAUATUHHH5DSHdH%(HD$x1HU;HT$HD$1>H|$H;=bU;H|$1Ht$ HD$H]Ld$ Ll$0HD$HHm(HE1 II9Bt=LLNt=mHuHfHCHHtLL?HuL)HHD$H;T;t H|$ ˹HLHL$xdH3 %(HĈ[]A\A]A^A_f.H]Ht7L%8CA#DLt11@L)mL5P;y@L5P;QHIHAHE1ff.fAWH s;AVAUATUHHHSHBHdH%(HD$1LD$D$H]Dl$H1Le(pHHH1fHDA4< < LvLL9H)LIHtGHH)Iu"HIu IGLP0L9~0LDHIu IGLP0Hmu HEHP01HL$dH3 %(HubH[]A\A]A^A_1艭HHtH9~3Lv< tEIE8L9~A|4 uLvPIAWAVAUIHH5AATUSHxdH%(HD$h1HQ;HT$HD$1)Ld$L;%Q;1Ht$LPImLt$L|$ Ld$H]HMm(Hy-DHHAtLLHuHkL;%IQ;t H|$mHLBHL$hdH3 %(unHx[]A\A]A^A_ImH]Ht3Mm(HxAL5?~1@1@L-M;L-yM;dff.@AWAVAUATUSHHH蓱HL`HL{MNHp(MiL5M;Ht$Ht$HILL)I|DML$I|$LADHf. MHIL A8HDHuI D:u}f.LDDD8HuHLLLI<IEH)HEIm T@ALHHHHL)HDHxI D:tHu11O11IEBLLIE 3IE(HuUHmu HEHP0HL[]A\A]A^A_fHtALHHu L)wH)lImu IELP0E1f.RI ~,6LL6HH2L)$@LHC:D>HHA8HHuHK;H5=E1H8f.Ls(E1AWfAVAUE1ATUSHHH5<HdH%(H$1HD$`H$)D$`HD$HLD$X1)D$p)$)$)$)$)$)$)$)$HD$XHL$kHCLL$XL$Hl$pH$MP"HTLH H$HD$HH4$I9HFLOHH)HII9 L1LL$ IH4$LL$ HI>H{H[(I}M}(Ht$LLLL$ MwLL$ IAHD$ HLL$(H,Mt$Ll$0IH\$MGIAELLHA@%IMI9uL$LL$(Lt$ Ll$0IM)L$MH$HL-LH uhH<$H=FH;H4$IH|$蠰H|$薰H$dH34%(L<H[]A\A]A^A_f.H$IHD$HQH<$Lt$`LC(MCHH$HII)HMH}L}1ҾH|$(K>O$8HHD$0D1fA IIL II)D8IDHI9H11L.ALHHHH(HDHI9E:u1I DE,D8,u HI9I9KALHHHH(H؃HD@H4$LIR@H<$0H{(.@I9HH$HxII)xH~H}L}1AH|$(K>K8IHD$H1HT$ H@A LHH HH)8LDHI9HHT$ E11H-f.LHHH (HDHI9[:uHD$ 1I4DA8u HI9HD$ L9j LHHH (LHD@H$AL1MMM4HI9 HxLH)HuMHiIHH+$IL$HIH9IH4$1LD$(LL$ HHHxLL$ LD$( HD$(Hh(M͉\$ LMII)Itct$ LH1HtOH9IHHH$I)ILLMHt$HLLH $HYI)IuLHHLl$(HF;H56H8E1H=C;1"If.H$E6LLMI,fII9 HxHDH)AHuMMMDH4$1LD$L $L)IHVHxL $LD$ L`(Ll$IYMD4$,ILLHM)MnLMyHI4$LM)LIHuMLl$LLL=~IFH$HII)HMH}L}1AH|$(K>K8IHD$81fDA MIL II)8MDHI9HE1+@BL"HHHI,LDIM9YB:"u1K DA<@8<u HI9I9BL"HHHI,MLD@Ht$HLLH@L=A;m@HqA;NHHHH4$1LT$ HLD$H)IH@HxLD$LT$ LH(H$L[IH$HELl$ LMMHD$0LD$(E10L1A HI LH)@8HDHI9ڸ1HI /fLLHHH+HDHL9@:4uHT$1ILA8u HI9HT$I9t#LLHHH+HHDDHtjHLLIxH$IIHIL)ItHxII)xKT=MLl$ LL-nH$MLl$ L)IMDHL9LeA.H$LLL$(LD$ LD$ LL$(HHHD$H4$1LD$(LL$ D `IHHxLL$ LD$(Lp(L<$LLLL$L$LPL$LL$L)ILMD HxHunD HxHULH)BHu>HA;H50E1H8gMH<$LLD$ HH)H)HIH9ILT$0H1VIH HxLT$0LD$ H@(HD$ H$Ld$0MLl$@MLHD$8L\$8M)M7M.MI)"HD$HHL$(K4<1H4$A8I1HDA LHH HH)@8LDHI9H4$H1&LHHHH+HDHI9@:<u1I fDED8u HI9L9tLHHHH+LÃHD몐HtRL9tmLLd$ HH $LL+Ld$0Ht$HLLH $H\$ L$)IDH|$ LLLl$@$fDH\$ Ht$IHT$0HHt$0HHD$ L !<;@MMIM9L>INH4$1LD$0LL$ )IHHxLL$ LD$0uHX(H$LHLL$0 N#Ht$HL LL$0IH$IHIHD$ L $-L)H!H)Ll$0MDHT$8LL$(E11KD=MfDA >IIM MI)8MDHI9H߉E1HI %DBL LHI ,LDII9{B: u1K|%ED8u HI9I9tBL LHI ,MԃLDIt-Ht$IHMH,$tHt$ L)x H) Ll$0 H<:;H0:;HD$ JL%:;MILl$M)<\$ H-9;LMHD$(\HlHL59;+ff.AWAVAUATIHUSHHHXHMl$HLx(MhL5q9;GIHLH)H$HLCH{ET1K M >LHL$N?DHH Ht$H)D8LDHI9uL1.f.AL1HHHHHDHH94$|dE:1uH|$1I 6ED8HH9uL\$L9AL1HHHHLƃHDHH94$}LL11ID$11ID$ b@uI K.A7I9sLL̸HtL)HƐHxHI)L,$L9H4$I<ID$HEIl$ ID$(HtI,$u ID$LP0E1Hmu HEHP0HL[]A\A]A^A_fDIH)8;H5)E1H8gDMAA:tV1f.A8Dt)HHsL9uMt$(fDHI)L,$E1P1AWAVAUATUHHH5j)SHdH%(HD$x1H9;HT$HD$1&H|$H;=9;H|$1Ht$ KHD$H]Ld$ Ll$0HD$HLu(HE1 II9C4>LLK,>϶HuL)HD$H;;9;t H|$ _HH4HL$xdH3 %(uhHĈ[]A\A]A^A_fH]Ht/L%'AcDI,11@H-5;H-q5;eǩLXff.@UHSHHw1HHt HUHu'H{H55;t$H{( HH[]fDH{Hu(uH=4;ff.AWHAVAUATUSHhLgdH4%(H$X1MHw(Ht$ H5J'H$IHXLPMI HD$0HD$(HD$M"HL$E11IIFJH4;H9C1HHLT$HL$HL$LT$LHAI_H)H9|}HMtLH)I9jLM9V;HPII9IFjK\Hn3;H9CmHC HLHHCH)HYI_HAH9}H6;H5(&1H8fI.uIFLP0Ht&Ll$E1fLIIP萛I9|HD$Ht$(H9t~H贙tfH52;Ht$ LHI9K;AH{LNH\$dH3%(HH([]A\A]@H1NHHu1fH=;H5;s@H}(f.HtH{(H|f.H=;fAWAVAUATUSHHH5 H(dH%(HD$1HL$HT$D$ ݧHsHD$H9H ;H9K$I1l$I)ILL!H?LHHLII)LHLL 1E1E1(IH|HSH,I}Hs(/I}(L$Mt#I}4H=;LsLL蜐H\$dH3%(L!H([]A\A]A^A_fDE1I1l$I)ILL!H?LHHLII)LHLL u/H;H9CHH{(HO(MI)x}HHL)H9mJ4HeOHSHH c;L)H4)JH 5;MI)yC0Mu}L)C(I4HL$ eL$Hs1Ht2HK(@1M~J<1LLRH[]A\A]A^A_ÐH ;HK(DH)H4)JIE(HD$HIEDE1H@(HD$=fH):HD$?I/u IGLP0I,$u ID$LP0ImuIELE1P0cDI,$u ID$LP0HL_xeH|$LHwHIE3HIEIELP0fI,$ID$LE1P0ImIELP0pH1!_xHV:HHD1HÐUSHHHHkdH%(HD$1Ht$BHH9t[HuH^xaH{T$u0H:(H:HHL$dH3 %(u5H[]@HC(f.H :H5H8Zq1oAWAVAUIATIUSHHHHwdH%(HD$81HxHo(IUHB`HHL=&:LI7_IH&ID$M'I9'H>Ht$0H ¸tD$0BD51Ht$8dH34%(HH[]A\A]A^A_DH;Q:-HL$ HT$LLL$0LD$(/kHI9tH{H5:H9 u|HĝHCH#^HHNHLLyH+/HSD$ HR0D$ H-:@LkM[Hl:HD$(HXLt$L;t$ }Lt$ H MRAD$0HD$0HoHT$(H\$Hy!HKHL$ HHHHHT$(HH\$HH~QID$H HH9rHPH)HHtL)IH0HL$(HD$0HHL9H\$HIt$HH9AH+t$0Lt[@IFLt$E1HD$ HD$(HD$0L9}Lt$ E1HT$ MHLLBDHD$(H[(HLt$L;t$ HL$0L9HT$M~ 1fD HLHT$(H9D$01)fkHuID$II?H5Cm~.fE1H)HHtH)H|訓It$H:H5`H8m~H:H5hH8l^H:LH5H8139k@AVAUIATUSHoHHIHHH9HLHHgYxgI}tlMu(HtoI .I~ HHLHHHI9u[L]A\IEA]A^f1LE1HYy[1]A\A]A^ÐL5:HuA6HLpf[]A\A]A^dHG@fHGHHHtH1DAVAUATUSHHHOHHtK!mIHt`H:IFIIFIFAF HL[]A\A]A^fH-:H9oX!%mIHhH[]A\A]A^cHHHH9|ILI9Ht$Iv1HJ:H5E1H8jHL[]A\A]A^I|$!lHt$HIlL`H:IIFIFCD& HSHu HMMn Hs L}H[L9LI|LH)H9HOHHP}L9|HL[]A\A]A^H:H9GHIyC HI~ n_IFInIIFAF :ff.AVfAUIHATUHSHHpMedH%(HD$h1HF)D$)D$ )D$0)D$@)D$PHWHv Lt$I9LHy LHHAHH)H9|,L9'HH)H9HLH)H9|I| sLZ1HL$hdH3 %(Hp[]A\A]A^HzLHHifDHL9~DLt$1DD$ L¸uHt$HT$ DD$ DL`ZeAfHW1HtHBH+GHqHTg@HwH nff.@HwH 鏑ff.@HwH /Uff.@HwH ORff.@HwH Off.@HwH wff.@HwH ff.@SH dG;HHHHH dH%(HD$1LL$LD$HD$HD$1tHT$Ht$H腜HL$dH3 %(uH [df.HWHw 1H=fDAUATUHSHHGt HFuSH:uH:HH[]A\A]ÃwHQ:H f1K1H9tkBLoLfM9LINHG N )tx?~U$uIt-HO:[f.w*H&uרtH:.Dtx1DH Hv os1M9O^fD1M9u!N 8O uH Hv Lo1҃9BjHHdH:H5H8[W1[fDHHOAHHW AH}pff.fHGHtÐSHwHH iHC[fHGHtcSHHWH;P|5H(tHC1[HPHR0HC1f.| 6nHtHC[f.ff.@SHHnHt*HSHtHx2H9BHNBHCH8:H[fxH1HuH{t1fDSHGHHWHHGHGHHWHBHGHHtH/tH[[fDHGP0H[[SHHGHH=:cHtRHPH@HHHXHXHHu>HHPH:H HHH HIHHHHHZH[f.H=%HD$OHD$HP@ H=l߉H1[HxH9w~|7 glHH:H5H8va1Hff.@USHH_Ht-HoH=E zHHH=HH[1]11mHHt/H=GEyHHH=H[1]鹓fH1[]AV1fHendswithAUATIHUSHpH:dH%(HD$h1Ht$0HL$=HHD$HL$ HO|OO:LD$(HD$01HT$5HT$HF%F-FHD$H\$ H\$(D$a{H|$ H9tHt$ItuH|$(H9tHt$1t]Hl$Ll$Lt$HEtiH}1fHH9]~nHtLLLA5u1HL$hdH3 %(Hp[]A\A]A^DALLHLt)HcTmfH:HH):HH:H;d|HEH;H5HP1S^9]fAWAVAUATUHHSHxfoH:dH%(HD$h1Ht$0HL$ HHD$HT$HO|OO:LD$(HD$01D$5fHF%F-FHD$H\$ H\$(D$ayH|$ H9tHt$`~tyH|$(H9tHt$H~taL|$Ld$Ll$IGtpI1AHI9_~nItELLHHu1HL$hdH3 %(Hx[]A\A]A^A_fDALLLHt)HcdkfH:HH9:HH:H;byIGH;H5HP1c[I[fH/rindexAW1AVAUIHATUSHfoH:dH%(H$1Hl$0Lt$(HH$HD$ HO|OO:IH$1$HVHT$HNLHF%F-HD$H\$(H\$0Ƅ$whH|$(H9tHt$L|LH|$0H9tHt$ 0|0Ld$H\$L|$ L葉tUHf:LH0[JHH=D$(IEE1LL9}FDIMifDM1HL2H|$0Ht$@IEL9|My IǺLHHy HøHHLH)H HH)H$Ml HL4>L^HE1INDL7HVIHL$OTAIM MI)D8IDHH9D$uM1#ALMIH 0AHDHH9$|fE: uL\$1Mt@D<E8<HL9uL|$M9ALMIH 0HAHDHH9$}DMtH[LHfMtHCL1HtHcH$dH3%( H[]A\A]A^A_f.LCIM9RHHMu뎐bH ~4ID 7I9KHLcH7L)f.HA8Ut1f.A8TtHH9unHtH5:HH6XQH}:H5]H8XfD1VH,@H/rindexAW1AVAUIHATUSHfoH:dH%(H$1Hl$0Lt$(HH$HD$ HO|OO:IH$1$HVHT$HNLHF%F-HD$H\$(H\$0Ƅ$Xs@H|$(H9tHt$w$H|$0H9tHt$ wLd$H\$L|$ LAtUH:LH0 FHH=D$(IEE1LL9}FDIMdfDM1HL|zH|$0Ht$@IEL9|My IǺLHHy HøHHLH)H8HH)H$Ml HL4>L^HE1INDL7HVIHL$OTAIM MI)D8IDHH9D$uM1#ALMIH 0AHDHH9$|fE: uL\$1Mt@D<E8<HL9uL|$M9ALMIH 0HAHDHH9$}DMtH HHT:H5H8UD1%@MtHGHtHtH_H$dH3%( H[]A\A]A^A_fDL+IM9:HHMufBH ~4ID 7I9+HL_HL)f.HA8Ut1f.A8TtHH9uCjHtH5:HH6\T1H :H5H8NT1RH*f.H/rindexAW1AVIHAUATUSHfoAH*:dH%(H$1Ht$pLl$ HHD$Ld$MHO|OO:HD$p1D$uHVHHNLHF%F-HD$H\$H\$ Ƅ$n#H|$H9tHt$sH|$ H9tHt${sL<$Hl$H\$L݀tQH:LH0AHuH=D$IFE1H9}E@HMn`fDM1LLxbLd$ Ht$0IFH9|Hy HúHHHy HŸHHHH)HHH)Mt. HEE $LVH~LADH@A MHIL A8HDHuI D: utfLDED8HuHMtL#D1HuOUfALHHHHH)HDHxI D: tHuMtLCHH[H$dH3<%("Hĸ[]A\A]A^A_HtALHHu H)fDH)|ffDzH ~,A4$LxHH[L)DHZHt}A$A8DuDA8HHuCfHtH5:HH6\PH :H5H8NPfD1MLBvNfDH/rindexAW1AVIHAUATUSHfo1H:dH%(H$1Ht$pLl$ HHD$Ld$MHO|OO:HD$p1D$uHVHHNLHF%F-HD$H\$H\$ Ƅ$jKH|$H9tHt$o/H|$ H9tHt$koL<$Hl$H\$L|tQH:LH0=HH=D$IFE1H9}E@HM^\fDM1LLrtLd$ Ht$0IFH9|Hy HúHHHy HŸHHHH)HHH)Mt. HmE $LVH~LADH@A MHIL A8HDHuI D: DLDED8HuHMtL@HHttHWH$dH3<%(uHĸ[]A\A]A^A_fALHHHHH)HDHxI D: aHuMtL?H:H5H8Mf1nfHtALHHu H)fDH)>fDuH ~0A4$LtHHkL)fHZHFA$A:DuA8HHu bHtH5:HH6$LiH:H5H8L1tZJf.AW1fHcountAVAUATIHUSHH:dH%(H$1Hl$0Lt$(HH$HD$ IHO|OO:H$1H$HT$H$LHF%F-FHD$H\$(H\$0Ƅ$f@H|$(H9tHt$\k$H|$0H9tHt$ @kH\$Ll$L|$ HxHr:HH0g9HH=D$(ID$1LAL9IMy IŸLHLL)MHH9HpTHt]HH$M`=ATUSHHH5+HdH%(HD$1HZt[HsH$H9|VH:H9Ct1H{ 4HHL$dH3 %(HH[]A\DHH1@II)x`H14HHtHH L0HzCJ< IHSHs QA$PՁmE A$0`DH:H9Ct#14HHpHx IHNd# H=H[]A\A]A^A_f.ImuIELP0Hmu HEHP01H|$@ *fHD$HP:I9D$5HD$H)I|Hp-HHtA1HUHLefHI6HD$(9-IHeI OHEN,HT$(IHT$L9<$HD$ HT$LT$0HHI)H\$L<$HH-EImuIELP0fSLIM9~7H:CL5tfDCL4 IM9HM9}H:I9D$LL8,HHH VHEH HH9$xLL9~!HI:CD4 IL9uL<$fDLH)HHHD$ DHL$HhHHHAHP0v@AD$HHHWH<$SE1L1ILIfIDD$C:D> tTIM9LILIMH$HϾ:I9D$yH9H$HE9fDLH)L*HHH (HEH IHI9H9$ULHHHD$BHL$H-HHuHAHP0Ll$ HD$H\$LH+\$HHF*HHrH<$ HHBHQL$$HHIHHCHP0ffDH)LH)HHH<$ :HEH$HH$DH$HLb+HEI$H$L wfH:H51H8X3HEI$L AfHEII$IL L9 L)K|5H(HHH$H 5HEHL<$Ix@HHHCHP0HHAHHHuHCHP0HH@HuHHHCHP0HH~HAHP0oH$IL@L4$1Hɻ:I9D$sHL'HHH$HHHCHP0 0fAWH c;AVAUATUHHHSH{HL%:LmdH%(H$1LL$0LD$8HD$0Ld$8RqH|$0H] H|$8L9HD$@1HHD$(V7HD$0Ld$PL|$@H$MH$ H HNHIIHCH<$LL)IHID$E1LHl$HD$ID$ILHD$ LMMIfDDUH|$ HD$DHfDLAHIL A8HDHuG:T%@HL$HD$LD\D8\ ?HuK<'H)L%HHI LHCJIL94$&LLL)I7HH|$8HD$0L9PHD$0 H HD$HNHIHt{IE1H|$ML,$MfDMx5H d:B#u@BD% IIuMM~LHyI.E1H$dH3%(LHĨ[]A\A]A^A_ÐH*IuHBHP0DI.u IFLP0E1H|$( fCL%HHHLL)LDIxG:T%#MuMHl$IHLIMt L $@H:H9E'HL#HHX1IVHInLGH0MtkCL%HHu[M)OMLILjHHHT$;HT$H*HBHP0fI)ID$Ht.Bt#t@t HHuL9$$It$HI"IHI gIFNff.USHHHw1HHtHSHs Hx ?HH[]DATUSHHH0dH%(HD$(1HFHP`HtQHtGL%:I4$HH HCHH9|+ DH; :HsHL$HT$LL$ LD$ Ht$ HHD$HT$HH1HtSH|$ HL$~HH 1@4 @t HHL$H9T$ #DHPHE:H5H81?1H\$(dH3%(H0[]A\D#H1HuHCH@I<$H5e1@H;H;suH :H9Ku HHfH| o1H=j[ AU1ATUHSHHdH%(H$1IHLHD$HD$`83Ll$P1HL3Ht$HuH:H9CHD$`HuH ږ:H9MH1HHt+Hl$HH H4$HHP HT$`Ht$PH<(= H|$u=H|$`uEH$dH3 %(HHĸ[]A\A]DH@LH|$`tLl$PLfHCH5G1HHHEHPH:H81=d1W@HEHHt[ ff.AWAVAUATUSHHdH%(HD$x1H~uqLCH L@L H:t HHHyI9uHV:H9CHL$xdH3 %(:HĈ[]A\A]A^A_ÐH1HT$HD$H5|&H|$HC H;=Y:H$HktHuZHDL HL:t HHHyH9u H:H9CtH<$KHH=@HD$ 1HHD$|0uhLl$ Ld$0I"fBt3 LL/Ht MMIyH|$I9u H:H9CtH<$LF1@AWAVAUATUSHHdH%(H$1H~HsH H)H*:S HHS!L 7H)DHRBt LHI9uL)H$dH3 %(HĘ[]A\A]A^A_@H1HT$(HD$(H5$9H|$(Lc H;=i:LL{t HMH_:S HHS!MH)fDMHRt H<HI9uI)LH&Hy:H9C HHHD$01HHD$\.uxHD$0HD$HD$@HD$MME1IIM9tSAuHT$H|$HuH|$MuRH:H9CGfD1lfH|$K,HtHCH1[H;Cu'1[HPH:H5H81-/[H:H5H8[þH=E%[ÐAUATUSHHHoHHW E1E1ۿIL*II(ILɸH9|AHHI9< tXvN<'tb<\tN<"tʃ L<_IBHHHH9}H:H5HH81H[]A\A]HwLѸfDILɸkMMHL)H9zLA'5HvH 'Hp0HPH@HEbHJDbHH Ht   r@^\xH=ċ:HfqփL@@A40@qH7QfHH9t D8t\uH\HQH9uD!H[]A\A]fA\tHfDIA\nHfDA\rHfy끐HuDHPHMA'@A"A'vff.ffH:SHtH:H5~H8uH߾[fD1[@駶USHHH?HtHt.H;HH/t H+H[]HGP0HH/uHGH@0H[]ff.SH3HtH+t[fDHCH[H@0fATIUSH/HUHEtIHuCHHx;Hv!HI$HtVHHXD H@1[]A\HI$HEuHR0 H=}?!H@AWAVAUATIUHSH8oHVdH%(HD$(1D$HT$ IE1IHCH{t}H<%uAHY<%t2f.t$L:AHAHY<%uƒHUELcIAF1HUHBHEHUHBHEHUHBHEAFxL/w\ƒHUEDH l/w1ƒHUEDH uHL1-WHUHBHEHUHBHEHUHBHEHUHBHETHUHBHEHUHBHE"E1Zf.HHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$H$HD$HD$ D$0HD$sHT$dH3%(uHfDAWAVIAUATULSHHH|$HT$dH%(HD$81MtHH96HN<MD1LL|$ HD$0HtHH\$HD$(IL9T IL%Sv%DHtxOAHIL9h \uHsI9SLCBfDIL9r9A}IM9uLMH)HT$HV HHHT$HHjH+HuHD$HCHP0HL$Ht`HYHq LHL$HILHL$H)HAHP0H5y:HH5[tH+T$H81@H|$0H/uHGP01HT$8dH3%(HH[]A\A]A^A_ÐLH)DLƒ0M9vSJЀoALIbfDA\LILALIfDuHh:H@u@Hf:tf.tfufufH1HHOHt#HAHH=bHP1zf.H1H=bb_ff.@SHHH=]c:HtOHXHtHHPHXHHHu:HHPHf:H HHH HIHHHHHZH[fDH=THD$HD$HPff.Hb:H9GuHGHtHÐHH=a1Hff.HHqb:H9Gu;HGHtHHwHtH(t1HHPHR0@$H=daATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.HHHtH1DH5?SHHt H{[ fH=`HH?Hu1[ÐH5?SHHt H{[B fH=`HHZ?Hu1[ÐUH5:SHHoHrHt=HH5:HHHHH[H=R`1]fH1[]AWAVAUATUSHLLgMHIIOHxHHHILxH~(11fDIDHtHHcHDH9|LHLH+ItHL[]A\A]A^A_fHCHP0@IH=__E1H3UHSHHHt2uHHt@HL$ H$HR|$ AADAHσAAEEIcIHD$(HD$HHLMHL$H|$ Hl$8H$D$ HDd$4Ld$(H|$LpDl$(IL$I@I.M~.1 @HI9tItHuA]D$ IIL;l$uD$ LDd$4Dl$(Hl$8L$t7L5 K:I~ LHvHuNH|$H$3H$eH|$ L5J:I~ LH5HHD$ $D`DhHL$0HL$ H H$HEHh(ILx0HHH8H$HHX@HHHHH$HHHPHL$HHXH$H$HH`H$HHHhH$PpHHHxHǀHǀk1dfAVHAUATUSHpdH%(HD$h1HD$HHL$ HD$@HD$HHT$PHdG:PHt$PVPH$VHt$DVH$VH$VHt$xVPH$VPH$VH5HPH$PH$P1L$L$H쀅4L$T$ D$@H|$0IHH|$8IHH|$@H&HHuH|$HHWHE1HtEHt$hD$,Pt$pt$pSUATAVt$pLL$pDD$hL$dT$`t$\|$X虹HPII.I,$u ID$LP0HtHmu HEHP0Ht.H+u(HCHP0fI.u IFLP0E1H\$hdH3%(LHp[]A\A]A^fHF:H5IH8:1HHF:H5zHH8 HF:H5HH8eD1H1E1IFLP0fH=?ATAUHSHH=y?HHHHHHHD?H1E1L :H5&BH8ƳI/uIGLP0fD1 fI9HHHffXD$H>:H5*AH8ZI.IFLP0HtHDH=:HWH5.AH81lESH|$(H/DHG1P0FfDH=:H5b@1H8Ȳ#{HHD$(E1DH|$0HHHQH+HCD$HP0D$y@AD$f(IfH|$(IEtH|$(H/uHGP0McIH5 ;:H9t LI/D$u IGLP0HD$0Hjf|$UHEHtHEuD$~DD$/L$H <:HH<:H8ݾH ~<:L$TAuA<+u@AD$I1H8Ȱ#Ht$1LL$kf.@L$H ;:{=HD$8I9߀JL`@f.f}uD$L$L$D$HH v;:tH::H8轵谽H Q;:D$L$dA<$+t?ID$Y? ATIHH5>U1SHPdH%(HD$H1HT$t3H\$H蚷HT$H1LLBtH߃t,HHL$HdH3 %(HuHP[]A\苫脭@GOH=V>USHHGIHt3CH6Ht HiCBHHHHDH[]HATUSGHf.x>z uf(fT >fV >f. `>{~111rHHC11ɿrbHL1H5v=HHtyHH=f=1蘕IH譞H襞L[]A\DuG111rHHtL 1LLk11E1f[E1fDATIUHSHHH{Hu0H56:H9t wtSH+E1[]A\H`f.(=EzuHtI$fDH7:HI$f.ATUSHPH|$Ht$dH%(HD$H1BHH-7:HH9tHHD$oP)T$ H|$HGff.D$(E11D9(H8:HHL$HdH3 %(HP[]A\HD$HxH9=HfDH6:H54:H9tHAątH|$L$ L$L$f.C=ff.D$(-'AD$ 蟵H1HHt$HҧHmHUHD$HR0HD$fDH!9:@Ht$ H|$HVesHD$HD$HxH9tHtNHD$oX)\$0D$ f.D$0TNE1D$(f.D$8ADE-fDHt$0H|$HVyHD$"貨fXX\\~T:fWfWff.f(f(YYYY\Xff.AUATUSH(H-9L-9HIfofo/Df(f(f(Hf(蠯f(f(H~SI9|NItHl$f(f(D$Ll$L$fd$fl$Z~d$~l$fH~fI~fHl$D$Ll$L$H([]A\A]ff.@ffD(f(f(f(fW5 9fW=9fTfUfVf(fTfUfVf/r[f.z%u#Hʔff!Hf(^Yf(YXAXDY^A\^f/r2f(^Yf(AYXXY^A\^ 8f(ff.ff.E„tf.DЄ HHf.̺f($f(f(E„tCf.E„t5f.zuf/ff讓ff!HHf(f(\$ T$l$ $D$(9l$T$D$f(f(\$ f $Yf.zIuGf(H|$8Ht$0<t$D$0YYt$8f(HHDf6YL$$ę|$^D$(|$)$L$YXrH~%6f(d6fTf.rf(fTf.s\f.w6fT26f.L$vIT$f(H@T$%T$Hf(+D$T$"5f.f(CщHfDHGO D$讑D$8"tH骯f.H 2:H54H8Z1HS fH~HfL$R~L$Ht'H80:HHXHPfHH[fDH[馝fDOGfW 4DSH@H/:H|$H4$dH%(HD$81HHH9tHHD$o`)d$H$HxH9tHwH$oh)l$ lT$ \$(D$HL$;!tqfH~H:H@H~H:HyfHyfHvHHG1HSHtFHHt[11dHHtCH1HPHHt [HGP0[DH Ht211H븻H5H :H8ǂH5zff.Ht'H;5:tHGHt%H11鹛fHHHH:H5EHD$H:QHD$HSHH?stRtH:H[fH{st*uH{ stuHE:H[1[@UHSHH= H :H=Ho1gH}Ht H/uHGP0H}Ht H/uHGP0HzHt~H[]fDHH[]鲞fH[]DHG(Hx HtJf.H :H@ATIUHSHHH~HudH%(HD$1H9t 詰t-Hu(LHFHL$dH3 %(u)H[]A\DHT$HsHwtD$~SHHHH=:fHtHX([ff.SHHHH=:6HtHX([ff.SHHHH= :HtHX([ff.SHHHH= :HtHX([ff.UHSHHHHH=3 :HtHX(Hh0H[]f.SHHH=:jHtuHPHHXHXHHHu9HHPH :H HHH HIHHHHHZH[DH=HD$HD$HP@H1[UHSHHH= :HtSHPHEHhHHHHXHXHu:HHPH :H HHH HIHHHHHZH[]DH=EHD$oHD$HP@UHSHHdH%(HD$1Ht$H$HL$dH3 %(uH[]fHHEu{ff.AVAUATUHSLfHHwMLuII~MztiHLtHHRHL•HH&LHHpHmIH+[L]A\A]A^@IFHSLHHCL@HtHBHDH|:E1H H5H81[L]A\A]A^DHWLFHtHBHDH(:E1H 3H5H81蝭[L]A\A]A^ÐHCHP0[L]A\A]A^f.HEHP0H+ f.H+u HCHP0E1[]LA\A]A^ÐHHHtH1DSH ԕ:HHHHH dH%(HD$1LL$LD$HD$HD$gH10HHH|$HtFHD$HH諆HCHH|$HC(H/uHGP0H@H@(H|$HCHt=H5:1H觴HC HtHL$dH3 %(HuRH [DH+u HCHP01@3H]HHCHD$HC(ix@SHsH{HtH/tTH{ HtH/t5H{(HtH/tHCH[H@DHGP0HGP0HGP0SHH{HtH/tHCH[H@HGP0ATIUSHHdH%(HD$1H;=w:1IH5QHSH<$H50:|HHtC1H17HmHfHL$dH3 %(HH[]A\苎HHusH<$aH<$艅HHtP1LA$0HHtHHhH$HHCDHH=葭f1YfHEHP0AH:H5rH8x%`vUHHSH苃HHtBH}Ht'ĄHx9HH9| HHH9HNHUH:HH[]kHtH1[]ff.fSHwHHHy3HCHtHCH/t1[@HGP01D~HtHk[Ha:H8|uH^:H8|t襄H{ff.@ATIUHSHHHt HՅu-H{ Ht LՅuH{(1Ht[LH]A\@[]A\ff.HO(HWHwHtH=1DHO1H= fDHWHwHtHO1H=b ݊DH=W 1ʊf.AUATUHSHH_ HHGHH}IHH9t^IHHEH;u|H{HH/uHGP0H{ H/uHGP0LkLc HH[]A\A]H}(H] H5j?HLm(LuhHt`H;HE(tHHuImu IELP0I,$u,ID$LP0{@I,$uID$LP0fD1HH[]A\A]ÿHH̙?Hb1~HE(H51fSHHHt/ZHt4H{[HH9HLz~f.[f.1[f.fSHHHtHCH/H{HtHCH/t~H{ HtHC H/tWH{0HtHC0H/t0H{(HtHC(H/t 1[DHGP01[DHGP0HGP0HGP0v@HGP0Off.SHGHHWHHGHGHHWHBHGHCH[H@SHH@HtHC@H/tH[HGP0H[SHGHHWHHGHGHHWHBHGHCH[H@SHH@HtHC@H/tH[HGP0H[SHGHHWHHGHGHHWHBHGHCH[H@SHH@HtHC@H/taH{HHtHCHH/t:H{PHtHCPH/tH[Zf.HGP0H[@HGP0HGP0SHGHHWHHGHGHHWHBHG9HCH[H@SHH@HtHC@H/H{HHtHCHH/tfH{PHtHCPH/t?H{XHtHCXH/tH[_HGP0H[HHGP0HGP0HGP0g@SHGHHWHHGHGHHWHBHG HCH[H@SHH@HtHC@H/H{HHtHCHH/H{PHtHCPH/H{XHtHCXH/t`H{`HtHC`H/t9H{hHtHChH/tH[fHGP0H[HGP0HGP0HGP0m@HGP0B@HGP0@SHGHHWHHGHGHHWHBHGHCH[H@SHH@HtHC@H/taH{HHtHCHH/t:H{`HtHC`H/tH[ f.HGP0H[HGP0HGP0SHGHHWHHGHGHHWHBHG9HCH[H@UH1SH0HtfHH@H@(H@0H@ @8HtHhHEHH[]1HCHuH+u HCHP01HH[]@UHHSHHHGHx0t4H{HkHEHtH/t 1H[]HGP0ߐATLfUHSHt*H{@HtHC@H/tM~$HEHHC@1[]A\DHGP0MH9ff.HWHwHtHOHt1f.1@UHSHH_H{tXHHMHuHH1ĥH+tH[]HSHD$HR0HD$H[]DHPtHXHHHT~HHt|HUHBHHCHB HHC HEPHHC(HEXHSHp9HuHS0HHHHC8HMH<@131+fUSHHH?Ht3H;HHt HH/tH+1H[]fDHGP0U.HSHHGHXH~lH=HPHHEHUH1H[]QHHATUSHH`eHHH{@leIHtdHCHHSPHKXH;P} HrH9tyHIL1H= aQHHmu HEHP0I,$u ID$LP0H[]A\Hmu HEHP01H[]A\DH=@D HILH= 1PH|f.AUATIUHSHH(dH%(HD$1HD$HH5H蘂IHt>H{HHtHCHH/uHGP0LkHH5ZHIE蚜"H5lHCHt:H{PHtHCPH/HCPH59HHLHLHF1I|$t#HL$dH3 %(H([]A\A]@LD$LH5)2|tnH{@HtHC@H/t7HD$HC@H1fDHWHD$R0HD$7f.HGP0HD$HC@H1RDCeUHHSHH)9H0VHHtH]`1H[]}Htf.AWAVIAUATIUHSHH(L.MtHL=G9M9tMgDLLL$HT$LD$LD$HT$LL$H9LH0THC`H{H>@UHSH(H_HdH%(HD$1Ht HCuMH}PHtH9H9G H}@H`HL$dH3 %(H([]fDC @ LCHHSH~K11 A@HXHH@1 H59H59aff.@UHSHH+H{@HtHC@H/H{HHtHCHH/H{`HtHC`H/teHn9HC`HK@HPHCXLKHRIH5vPHCPP1B~H tjH{H yPHC@HHC`HH1H[]HGP0HGP0h@HGP0=@J|%H{HHC`HCHHC@HC@fUHSHHtpH{HHtHCHH/twH{`HtHC`H/tPHQ9HC`HKHHPLKXLCP1RH5\.}ZYt@HCHHHC`H1H[]HGP0HGP0HC`HCH뻐HHATUSHH`\HHH{@l\IHtdH{HHSPHKXH;W} HBH9tyHIL1H=aHHHmu HEHP0I,$u ID$LP0H[]A\Hmu HEHP01H[]A\DH=@H[H=Y=w"HKPIL1GHq=H=dHHCff.@HHUSHHH`O[HHH{HHsPHSXH;w} HFH9tHHHH=Z1CGHmt H[]DHUHD$HR0HD$H[]DZH=l=w5HSPH1FH=e鼉@H1[]=H=\HHCff.@ATUHSHH`dH%(HD$X1H{@HtHC@H/H{HHtHCHH/H{`HtHC`H/HHC`HK@HH 9PHCXLKPLCHH5%RP1yH @HC@H{H1HHC`HHHGtYHL$XdH3 %(%H`[]A\f.HGP0e@HGP0:@HGP0@I1L裃ŅuCH{HHtHCHH/uHGP0Ht$H<$SLHCHOH{HQH{@HtHC@H/uHGP0H{HHtHCHH/uHGP0H{`HtHC`H/uHGP0fDHC`HCHHC@I[fATIUHSHHHt HՅuMH{Ht LՅu;H{ Ht LՅu)H{0Ht LՅuH{(1Ht [LH]A\[]A\ff.ATIUHSHH@Ht HՅuLHH[]A\K[]A\ATIUHSHH@Ht HՅuLHH[]A\ []A\HG Ht HfDH9Hff.ATIUHSHH@Ht HՅu=H{HHt LՅu+H{PHt LՅuLHH[]A\w[]A\ff.ATIUHSHH@Ht HՅuMH{HHt LՅu;H{PHt LՅu)H{XHt LՅuLHH[]A\D[]A\ff.ATIUHSHH@Ht HՅumH{HHt LՅu[H{PHt LՅuIH{XHt LՅu7H{`Ht LՅu%H{hHt LՅuLHH[]A\Q[]A\ff.ATIUHSHH@Ht HՅu=H{HHt LՅu+H{`Ht LՅuLHH[]A\[]A\ff.SHGHHWHHGHGHHWHBHGY~?~HCH[H@DH~?H~?~?HS[ff.USHHtgH;5Z9HHt HS9H9Fu.H} HHtH/tH] 1H[]DHGP0H9H5H8XH9H5H8Xff.fATLfUHSHit51Mt.H}@HtHE@H/uHGP0ItH]@1H[]A\f.H[f.USHHtQHH覄HHt7H{HtHCH/tHk1H[]f.HGP0H9H5zH8WAWAVAUATUSH(L=9dH%(HD$1HD$L9tSHFH tqHLt$Ld$IHT$H4$Hkx;LLLHJ}uILHL$dH3 %(u1H([]A\A]A^A_1@H9H5H8V1)UfHHGHtHtR@H=@HQHG@Ht H9H9Pt@Hff.HGHxt |@Hx鿃ff.@HOPHw@HtOLGXHWHMt"HHH=1r=fHt[HtFH=1X=Ht HWHHu DH=1*=f.H59H9H59H=\1<H9Sff.HdH%(HD$1HGH$LP1IvHT$dH3%(uGHHIѺAPIH5HD$P1QhH SATL%3UHSH@Ht$dH%(HD$81HD$HD$ HD$(HD$0HL9(tHH98H}Htu@H|$Ht H/uHGP01HL$8dH3 %(HmH@[]A\H|$HL$(HT$ Ht$LD$0uHt$Ht,HFtH=Py?HtH9H9(1H0HHQH@H@(H@0H@ H@`L9(tHH98tPLL$0LD$(Ht$HHL$ HT$u;H|$HH/HGP01eHCHuH|$HuHH+HCHP0D^HtHqhHhPH/uHGP0ff.@SH H@Ht$dH%(HD$81HGHD$HD$ HD$(HD$0H9(tH cH98t"1Ht$8dH34%(H@[fDHHxHt[H|$HL$(HT$ Ht$LD$0Hsu%LL$0LD$(Ht$HHL$ HT$^tH|$HtH/t hHGP0OfH`Ht }[DHH9H5pH8>Q1HAWAVAUIATIUSHHHP Lx@ Lp0HH@LDI95A<w*H9<8u&HI9tuuA<vftH5u?HI<$ALH_HudH5u?HI<$ALH_H1H[]A\A]A^A_DA<^KfDLpH"I}HtIEH/uHGP0H=>zIEH[]A\A]A^A_tH5 u?H.H=zHHt?HOI}HtIEH/uHGP0H=yIEH[]A\A]A^A_fDH=}tzHHrt?Hff.@AUATUHSHHLfM~0H{@HtHC@H/uHGP0HEHC@HIt1H[]A\A]H} '{HHHxgH{HHtHCHH/uHGP0HEH{PHCHHHtHCPH/uHGP0HE H{XHCPHHtHCXH/uHGP0HE(H{`HCXHHtHC`H/uHGP0H}0H{`HHmuHEHP0H{`HHGHo1A(H`HLc@Lk`1LL;xuH{`1AH:H|PHH9{HPLLfHJ9H5UH8MHmu HEHP05H-9H98USHHr?H1_HCHHC-q?HkHCHq?HCHHHHtH=jHCHHCH9HHSHHRHSH*HHhHH[]DH[]eD[1@HHJH5QHt'HGt HHHHH52H9H81}1Hf.HGHt HfDH9Hff.HHtGHGtHHHfDHH5H9H81|1HfDHH5y@HG HtHff.SH6uHH[fD1[ff.HG0HtHff.H?Hu H9HHff.HG0G8Hw0HtH(t@HPHHR0HHtLH;5L9t"HF@tHTs1HD1H9H5H8IH9H5EH8If.HG(HtHff.HcvHu H9HHff.HG(Hw(HtH(t HPHHR0HHtLH;5L9t"HF@tH}1HD1H9H5H8HH9H5H8Hf.H@H5yw,ff.f.HHH5ff.HHSf.UHH5SHHHHHtUHSPHHHUH@HHH9~+HUH1HPHHuHGP0H[]fDHHEϻff.@UHSHHHHHtTHSPHH@HHUHHH9~*HUH1HPHHuHGP0H[]DHHEлHwP1DHwP1DHwP1DUHH56SHHHH`HtSHSXHǸHHUHNH9WHNW1HUHHPHHtH[]DHGP0H[]ûېUHSHHHHWHtRH{XHǺH@HOSXH9HO1HUHHPHHtH[]HGP0H[]ûfkHwX1DHwX1DHwX1DH`H5,ff.f.f.H`sH`cH`SHH9AQIHH5APIHH81>Hff.HH9AQIHH5APIHH81P>Hff.HHI9IHAPIHH56H81>Hff.fH 9IHIHH5DpH81=AWAVAUATUSHHXdH%(H$H1:8'H9H${:&H9H$0:&H9H$(:T&H9H$:&H99H$8:%H9H$x:p%H9H$:$%HU9HD$pZ:$L%t9F:$H9H$:K$HT9H$Λ:#H9H$:#H9H$V:g#HH9H$:#H9HD$x:"H9H$H:"H9HD$`L:="Hn9H$@:!HB9H$Ԍ:!HF9H$:Y!H"9H$\: !H9H$: H9H$h:u H.9H$(:) H9H$l:H9H$:H9H$}:EHF9H$8|:H9H$X|z:H9H$x:aH9H$w: H>9H$`Hu:yH9H$q:L=69xs:IH9H$ p:H9H$dn:H9H$l:H9H$j:Hf9H$0i:HB9H$tg:H.9H$ e:.HB9H$pc:IH^9HD$hCb:dH 9H$`:H9H$^:He9H$:H9H$P:H-=9:L59+:HM9HD$0Ҭ:"H9HD$:=H9HD$X`:XH29HD$ :sHi9HD$@:H89HD$H5:HO9HD$P|:H9HD$à:H9HD$( :L-9V:H`9HD$8:1HW9HHD$*qHHLH$H5VHH&H$0H58HH&H$(H5 HH&XH$H5HH~&NH$8H5HH\&H$xH5HH:&H$H5HH&HD$pH5HH%iI$H5H%6H 9I$H9HHtH/uHGP0I$H 9H5XHH%H 9I$H9HHtH/uHGP0I$H n9H5+HHL%H$H5HH*%H$H5HH%hH$H5HH$.H$H5HH$H$H5HH$HD$xH5HH$H$HH5HHa$IHD$`H5wHHB$RH$@H5fHH $H$H5HH#H$H5+HH#H$H5HH#jH$H5HH#0H$hH5HHv#H$H5HHT#H$H5HH2#H$H5HH#HH$H5HH"H$H5HH"H$XH5HH"H$H5qHH"`H$H5]HHf"&H$`H5MHHD"H$H57HH""2IH5)H"H$H5HH!IH5H!H$H5mHH!^H$H5HH!$H$H5HHj!H$H5HHH!H$H5HH&!vH$ H5tHH!<H$pH5aHH HD$hH5PHH H$H5<HH H$H5)HH WH$H5HH] H=\?H$PH5HH- HUH5H : AIHtHUH==\?Hbt H=UI,$u ID$LP0rIAIHtHUH=[?H>bt H=oTI,$u ID$LP0sAIHtHUH=[?Hat H=(wTI,$u ID$LP0 @IHtHUH=h[?Hat H=0TI,$u ID$LP0IH5H< Z@HHtIH=[?HPat H=SHmu HEHP0l@HHtIH=Z?H at H=<SHmu HEHP0HD$0H5DHH3{ ?HHtHD$0H=]Z?HH`t H="SHmu HEHP0HD$H5HH gH?HHtHD$H=Y?HH9`t H=jRHmu HEHP0HD$XH5HHay o>HHtHD$XH=Y?HH_t H=PRHmu HEHP0HD$ H5IHH hv>HHtHD$ H="Y?HHg_t H=QHmu HEHP0HD$@H5HHw  >HHtHD$@H=X?HH^t H=/~QHmu HEHP0HD$HH5HH& =HHtHD$HH=PX?HH^t H=QHmu HEHP0HD$PH5EHHu ;=HHtHD$PH=W?HH,^t H=]PHmu HEHP0HD$H5HHTH=0Z:8kH 9H$HHY:#H=YX:8LHu9H$HH8W:H=V:8-H69H$HHaU:H=T:V8.H9H$ HHS:H=R:8H9H$pHHQ:H=P:7H9HD$hHHO:H=)O:7H9H$HHN:H=RM:}7uH9H$HH1L:fH={K:F7VH9H$HHZ:KH=:77H9H$PHHà:0H= :6H-Y9HEH:H=:6L59IH$:H=n:y61H29HD$0HH:H=:E6Hn9HD$HHܗ:H=&:6H9HD$XHH:H=R:5Hƶ9HD$ HH4:H=~:5H9HD$@HH`:rH=:u5H9HD$HHH:WH=֏:A5H9HD$PHH:HH/u1HGP0H=:?Ht*fHGH:?HG@H=:?HuH=:?HtH/H:?t HDHGH@0Hf.AUATUHSHHt$XHT$`HL$hLD$pLL$xt@)$)$)$)$)$)$)$)$dH%(HD$H1Ll$Ld$HLHL>H<$Hɚ:HW H9tPH~ HH9t=HT$Ht$1LHL$HdH3 %(H H[]A\A]H٦H9(uH9H98uHQ:H9G(uHLL5 H|$HGHx9uH@H $9H9H"1H1]'IHtI>HI,$HmHEHP0fDH-9@HAH91H8MHQ9H51H8 )ID$LP0p^fDATUSHGHHHPHHHH @xHI(H| HHjHEGH{CHmAEtd@H-9HsH{HHHulH 9H8]uHJ9H8Jt AHEHH[]A\ÐH!9H8HEHP0EuH(u H@HP0H91H5H88 H[]A\SH dH%(HD$1HGHtNHxHtGHHt$HT$H51HHtCH(u HPHR0HT$Ht$H<$HD$dH3%(uH [f.H(G UHSHH9H9GH5ߕ:z5HHtRHH5\h1QH+Hu HCHP0HtkHE1HPHUHu HEHP0H[]HA9H8t%1H[]D1H@H`FѻH1HwHjf.Hw1H1Kff.AVAUATUHSH H9dH%(HD$1H;Lt$Ll$ILLL3HD$HHxH4$H9te:uWH<$H;;LLL\HD$H3HxH9t09u"HT$Ht$H<$Kf.HD$HX@HH(H<$HtH/tjH|$HtH/tJHt7H]1HL$dH3 %(H []A\A]A^fDHuNHg9H뼐HGP0HGP0HPHR0hH<$1`DwfDH\$A!AWAVAUATUHSHHHdH%(HD$81HGHD$ HD$(HHPHHHH @xHI(H| HLbL|$(Ll$1HHMMLt$(I$AVH5<B^_(H9H|$H0LH9I9D$H53:L1HRCHHHD$^HT$CH*uHJHD$HQ0HD$I,$uIT$HD$LR0HD$HHCHPHHzHJHHHH/X@xH|$0-H{HsHT$01H|$0H/u5HWHD$R0HD$"Hّ9H5ڴH8f.1H\$8dH3%()HH[]A\A]A^A_L|$(Ll$H1Lt$(MMAVH5HZYtHT$ H-9H9HH9H9BMHt$HD$(HHtHHH~Ht @J@Ht(H9HmuHEHP0Ht$HT$ H~Ht$(H|$HHHsH{HxHD$ Ht$HD$(HHtH1GfH9H8 yI,$ID$LP0fH 9H5BH8*H|$H/uHGP0H|$(Ht H/uHGP0H|$ HH/HGP01LLL:HT$ Ht$(H|$fDCLCI,$u ID$LP0H9HsH{+xfDH)9HWH5H815CHLYCHI9f.HGP0HCI,$ID$LP01HHHt$(H|$HHD$ ff.SHHH=9HHS HXHCpHXHHP HP@HH@(HHu;HHPHя9H HHH HIHHHHHZH[H=E~HD$o!HD$HP@H+uHSHD$HR0HD$@HGHt=HxHt6~,xu)HRH@H xu H9u1f.H10Ht@Hff.@He9HH9HHE9HHHь9H5H8HH=0,Hc wH1H=m(AUATUHSH(dH%(HD$1GH1H5HLl$H<$L1HHD$Ha,IIHT$Ht$}H.L+HD$?H|$HyM u0H9HHL$dH3 %(HH([]A\A]H 9+H81 HfD3H<$H5IHtHt$LH;5xW+IzHT$Ht$}H_L+HD$pI,$&ID$LP0DI,$VID$LP0@Gx5USHH+{H,HHHc[] @H 9H@AWMAVMAUAATIUH=_2SHdHtHËD$XHtH5h:EMHP1t$XAWAVH3H HVHHtH[]A\A]A^A_DHSHD$HR0HD$H[]A\A]A^A_DH1[]A\A]A^A_ff.@ATUSHdH%(HD$1HAH5:(HHEDH=1F1HH 1HH=H$Hmu HEHP0H+u HCHP0H$HHSHu,H+ Hو9H5*H$H8H$HtYEyTHKHHsHH+H9H5ȭH$H8H$HuFHL$dH3 %(HH[]A\19HHHmuvHEHP0HKHt5HSHH+*H9H5+H$H8H$cHR0D1IfH{ |7 uHH;/H<$HH/uHGP0H$D7H=l1$C ƃ t}@Hs,@HKDHHD< /HH17H<$HH/|HGP0pHQ0>DHQ0D@tdHs/@HKGHHD< 뎐@tNHs.@HKFHHDf

    LAI)LLD$AELGAHLIIL9~b˨~LVLYHf(LH)H)L9HL 06wfA *HXI9uYLHHL)HM9HLD0<6fD)!*XȅtrLT$DuI7LHxELVLHLH)H)L9HL 065A< 'HHuCDHu%LfH /<D!Hv9H5H881fHxc(|HNH=ݥDYIf(HI)H)L9IL06wf*HXHuD %HL)H@AWAVAUATUHSHcH8OH~dH%(HD$(1H5t9H9tL$hL$At+E/HHcH>f.HEf({fT8{H%f.rVHt^ff.#HL$L$A9AffA**afHMHt9HIHL$(dH3 %(LEH8[]A\A]A^A_1f/@fDHD$(dH3%( H8[]A\A]A^A_11f/@@1f/@@1f.ȸ@HE1f/@@1f.ȸ@HExfE1f.AGl-HL$L$HIH0AuH(x9fW yH|$f(L$HcD$dL9[AL$HEH|$ f(D$D$ IHl$ff.zqE1IHHHIHHmu HEHP0LLIHiImu IELP0LLIH3I,$Lu ID$LP0HLE12x Hc6IImu IELP0Hmu HEHP0MsI.iIFLP0Z w}~L$H:JfA*f(XNHL$ L$5[w { E1H6L$HH,E1HmuHEHP0tMLE1L1GBfU11SHGrHt1HHHHHHHHH[]fDH[]=ff.fUSHHH?HWtGH f.GvE{1H[]uHtHfDH)p9HHff.AWAVAUATUSH8H5n9H|$dH%(HD$(1H3t9Hh`HHH9tHD$@D$ ~uf(fTf. uYf.sH|$T$1%v~u-6ufDX9tIf(f(fTf.v+H,fH*f(fT\f(fUfVf.zutT$HHHc|$IHIH?H1H){IHHLUXI/Iu IGLP0MELHUH+HHHLH10HI.u IFLP0MtI,$uIHID$LHLP0HtHmu HEHP0HH\$(dH3%(H8[]A\A]A^A_fDHt$ H|$9D$ H\$HCHP0H?@MtRI,$uKE1Y@I,$u ID$LP01LH޿<I.MI!HL,H1"Ho9H5q1H81Hm9H5}1H81SH0Hk9H|$H4$dH%(HD$(1HHH9tHHD$@D$H$HxH9tHH$HL$ ff.D$\$ff(D$ f(f.\^~f(fT *rf.z%&rf(-f(fTf.\f/f(wnH=peHL$(dH3 %(H0[f/f/8xX\^qg^fTqf(fDX8qfDH,f-qH*f(fT\f(fUfV8Ht$H|$nHD$:Ht$ H[L$ nH$@iHm9H5H81SHt1H;j9Ht5HXHH(tH[fH@P0H[@1H[fHH[USHHH57i9H|$dH%(HD$81HHH9t HD$HL$f.Of(fTof.o5ff.zSuQfT ofV of. o#H= HL$8dH3 %(eHH[]fDH|$l$)H)fɍLHo9,L$Ht$ LLN*HcAD$!.T$ HV\YfH,Hc*A<8@z\I9uD$/+ff/d$wqH=1 fDH|$fH={Ht$H|$L$ZHD$H=D1Dٺ-L$[SHGH; g9t@fB?c%4?H%?H=?HGfff.mHH?Ht4HP-?H?Hkf9H@HPHfDD$HD$HuH@SH=?oHlHHC4HC HC(HHC0yHHC8iHC@[5HCHMHCPHCX.HC` HChHu H[DH+u HCHP01H[ÐfCHe9H9GtG%DHHSH0Hd9H|$H4$dH%(HD$(1HHH9tH toHD$@D$H$HxH9tH tfH$HL$ f. ?k{mD$^D$xHT$(dH3%(udH0[fHt$H|$yHD$fDHt$ HL$ yH$uHh9H5H81ff.@GfTjf.GfWjf.USHHH|$Ht$dH%(HD$81H;g9HD$H[c9HxH9tHB HD$@D$(HD$HxH9tH HD$HL$0ff.>T$(f.>f.$~%if(5if(fTfTf.vN%~il$(f.f/f/8tfHL$8dH3 %(HH[]f.w:f.f/%if.TNf( L$0ff/of.h~%iD$(zafTXHc9H5jH818zhHt$(H|$OHD$Ht$0H|$L$0OHD$ 2ff/\$0rf.gD$(~fD\f( i@1T$ $T$ $Hf(fۅf.ÑE„f.D„fWpg"Ha9H81f(=,f(fTf.v3H,f=ffUH*f(fT\f(fVf.zt{Ha9Hc9Ht$H|$H@`P(<f.fztf(f(ff.`fD$(fT~fffWhf PT$(T$(%ff.zQuOf.eff.ùEф"sD1f.ĸL$0@E"HCb9H8nHb9H5H81fSH0Hx^9H|$H4$dH%(HD$(1HHH9tHCHD$@D$H$HxH9tHH$HL$ ff.D$fff.z4u2D$ fTdHL$(dH3 %(H0[DL$ fff/f/8tXfHt$H|$>HD$fHt$ HL$ FH$u@AHSa9H5QH8 1NPSH0H]9H|$H4$dH%(HD$(1HHH9tHt_HD$@D$H$HxH9tHtVH$@D$ YD$D$HT$(dH3%(uCH0[Ht$H|$yHD$fDHt$ HD$ yH$nff.SH0H\9H|$H4$dH%(HD$(1HHH9tHtgHD$@D$H$HxH9tHt^H$HL$ D$\D$HT$(dH3%(uGH0[@Ht$H|$yHD$fDHt$ HL$ yH$vfDSH0H([9H|$H4$dH%(HD$(1HHH9tHt_HD$@D$H$HxH9tHtVH$@D$ XD$D$HT$(dH3%(uCH0[Ht$H|$yHD$fDHt$ HD$ yH$ff.AVIfAUATUSHĀHdH%(HD$x1)D$ H)D$0)D$@)D$P)D$`tSInI^ E1Ll$ Hl$HH9H[9fHH9uDH5!Z9H9{Ll$ 1LL!Ht$0H|$ Ht$5Hl$IHX HbLx1w@MHM[9t HHEH9w1Ht$HH9l$HZ9LH581H81LMtI,$u ID$LP0Ht$xdH34%(HH[]A\A]A^fInHHLY9Hl$E1Ll$ f.f.(_z&u$D$D$Ht1[;HGHLIHHt$HLl$ Hl$HHI,$1 I^(;IFH51HPHOY9H81ff.UHIHSH(H=^W9dH%(HD$1HZ9HD$H9teLHH1H0H}C@H+uHD$HSHR0HD$HL$dH3 %(uhH([]f1LD$LH f:H~ct/H|$H]9H9Gt%HfDH+HD$tD1@ ff.USHHHH-KV9HH9H.uzHCH@`HHHHHHHxH9tOHuCH+HW9H5SH8\fCH[]@H+CuHCD$HP0D$H[]H)W9H5}H8J2\H[]#\H[]@HCHP0HHf.[~ \f([fTf.rWD$D$~ [%΅f(f(fTf.w^f.HW9HH@HW9HHu%H1HuvHIY9H,f%[fUH*f(fT\f(fVjfHX9aff.AVAUATUSHHdH%(H$1HD$0y1HT$0HH5D$H|$0Htk1HH~ZD$ QZfT)\$f.>H=C2H=D$YYCHD$腶d$f(\fT Zf.zuYf(RX虹H$dH3 %(OHİ[]A\A]A^MD1@KHu~5YD$ pYfT)t$f.]ljfff9Q9D$޿HL$,HT$(LD$8H HbLl$8I)IuHd>Ld$@AdLD$,DL$(LHH e+IH'zH%HDE)1IĴIAfff9v1H|AD$]D$A}"uf(l$fTf/-&XcL9tHHD$HD$HHD$HD$<DD$%'D$HL$,HT$(LD$8H1HZHILd$@HH?1lHT9H52}H8j10ff.HdH%(HD$1H$f/fv df/wHD$dH3%(u,HŶDHD$dH3%(uH,Hff.fHdH%(HD$1HH$H?CH9$u}7>$K<$KuF>H=?> >>tDHL$dH3 %(uNH>1f.>1fH5b:H=>1USHH=/>-1>Ht@H_'HHuH>>H[]Ðw>H5vDATUSHHdH%(HD$1>At HIf1f/H|$df/ff.D$1Y0X~H,R|$111 1@+L@;B #Bcq@fZL$T ~. ~vfTTf.JTdt HD$HL$HPHH9u1HL$dH3 %(7H[]A\fD Sf/|$XWT$׃}}x}Y~X}H,t)111fWS`fD1fHHff.EфuAx~\|$1fHyK9H5utH8HyO9H5xH8 ff.ATUSHH D$dH%(HD$1A>t HHD$fE1f/H|$f/`|r Rf/ff.D$1Yn|fH,ȉH*\YZ|X|H,t|$!1E111E1E1E1ۉAA D H+D#@:HDHD H H@2D*j1fDfWpQAD$|$GD$=X=TD$1Dt HD$HL$HPHH9u1HL$dH3 %(H []A\H)M9H5vH8zHH9H5qH8ZAE11AAA1FHH;ff.Eu\|$fDAAAIAIff.@SHdH%(HD$19>AL7%J =f BG *YyuJUu1HD$dH3%(H[fDHIefWNfDXNxtf.u+u'HOHD$HWHPH9uD$$uuЋ$fZ$T@HH9H5ztH8:"N-xSH dH%(HD$1>HH׉Ɓ@%@ 27L ffMI< A0D WAA D *AYw *XYwuI蔩u0HD$dH3%(H [fDHH$fW(MfDXL=tu;u7HOHD$fDHWHPH9uHD$HD$uuHHD$D$D@H)G9H5rH8jRL診HGPHt HfDHaI9Hff.AUIATUSHƇLgHHGHHXHtIEXH/!I}`HtIE`H/I}hHtIEhH/I}PHtIEPH/IU IxHJPHcBHRHHAHRHlHx1H;HtHH/uHGP0HHHuMt6I]@I9v-H;HtHH/uHGP0HI9wH[]A\A]HGP0T@HGP0)@HGP0@HGP0@HW HBPHJHHIHHBBHHDH<ŀff.AVEAUAIATIUHSHDHxaHTItHt EtHRLHtt[]A\A]A^蛺tH0F9H8蘿tHy[1]A\A]A^ff.AWIAVEAUIATIUHSHDL$ fDIxUKtL%HHt}J|EtKH9_tHU}DHtH+uHCHP0IyH[]A\A]A^A_fDH9tHtHHt H/uHGP0J\멐D$ rRf.~fDAVAUATIUHSHHHt HՅ+H{ Ht LՅH{(Ht LՅH{0Ht LՅH{8Ht LՅH{PHt LՅH{XHt LՅH{`Ht LՅH{hHt LՅuHS LxHJPHcBHRHHAHRLlMxI>Ht LՅuEIIIuHCHHt,Lk@L9v#I}Ht LՅu IL;kHr1[]A\A]A^ÐAWAVAUATUSHdH%(H$1HE9HD$0HD$8HD$@H9FHPH<HHt$,IŋD$,D$ LH9kLK DE9ip>IyxHT$@Ht$HLK LD$@H|$HAQpM~:OD'A9 1 HA‰9~8pHcL9|DH5;rH A9H81D$ CDAtMcIy(Ht$0HT$8LD$0DEDSxC(E9ANEM<<Ll$8f)D$P)D$`)D$p)$)$)$)$)$)$)$MH$E11HL$D$D$1fA9A @A9 ǀzxWqXEAALcNc|PG<8AzpAf@iHcL9L$9L$11D9|"H9H[@H;9H5mH821[ff.AUATIUSHJH=mYHb<9H=mL(ޞA1Il$@I$xAH9v'fH;HtHH/uHGP0HH9wID$HHt*H9v%@H}Ht H/uHGP0HI9l$HwI|$Ht H/uHGP0I|$(H/1I|$0H/8I|$8HtID$8H/uHGP0I|$PHtID$PH/uHGP0I|$XHtID$XH/uHGP0I|$`HtID$`H/uHGP0I|$hHtID$hH/uHGP0I\$ H>=>H>L%>ID$H+u HCHP0AIAt~{H[]A\A]HGP0I|$0H/HGP0I|$8HLHL[]A\A]NfDLYH[]A\A]fHPtG|ÐwxH 鄟@UHSHH蛟H{PC|HtHEHkPHtH/t H1[]fHGP0H1[]HSHHcǸfDAWIAVIAUATUHSHLoMt I9U0RH5;M:LIHGHxH5D69H9I$HHAHDžHK@HHKHLc(MtIEU LkHEIHIL{0t MIHILs8EpCxHkǃC|HCƃHHCpHHtH='HCHHCH199HHSHHRHSH*HHhHH[]A\A]A^A_LIH@+IHtHl99H55Hm1뤐MuHEPHUHH>HRHcHPIHHHC-T>HU>H9sHHcHk 1LHxHK@H~HDŽxHH9uHC8HCPHChHC`HCXfDMe(+HtlHC8HDHHT$+H~MHLD$?fMH=y99HT$OHHt(MLD$H+HCH1P0BI,$ID$LP0'HI,$lID$L1P0ff.@AUAATAUSHHHc3PH@HDDH[]A\A]H=d|HcSH~HH@H[DH=d4ff.AVAUATUSHLg8HMHk H}@HGHcEHxusH}PHEHLoLpLL u 1[]A\A]A^HcEALLH uTE tHcEH}HLLAIJ []A\A]A^ÐHwHLH9HNE1gl|DIHC8H HPH19H5eH81뼾jH=7e'SHxHC8H[D1[ff.HxHf.H鷵AWAVAUATUSH(dH%(HD$1Ht!Lg8HMtHo Lm@IEu(HD$dH3%(H([]A\A]A^A_DAHT$Ht$H+HcEHxu4H}PHEHLoLxLL uDHT$Ht$H<$qIuH}@EHLH9HNE1XfDHcEEALLH 4E tHcEH}HELALIJ r!H==>S.>Ht,fHGH>H=>->Hu݉[f駛>H5_aխDHGHHG@HHGhHSHGHHWHHGHGHHWHBHGHHtH/t7H{HtH/tHCH[H@HGP0HGP0ff.@ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.SHHHtHCH/t1H{HtHCH/t 1[fDHGP01[DHGP0SHGHHWHHGHGHHWHBHGHHtH/t7H{HtH/tHCH[H@HGP0HGP0ff.@ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.SHHHtHCH/t1H{HtHCH/t 1[fDHGP01[DHGP0SHtfH.9H9FuYHFH1L@HG0HtHHL9uZHOH1HwHHPHHt[@HAHP0[f.H-9H5B`H8H-9HW@H5D`H81RHtH;509tfHHHG`Ht HfDSHHC`HtH[AWAVAUIATUHSH8L Ht$dH%(HD$(1HD$MtIGIGIHD$Ht HE uiHD$HAu0E1IuAu(1ҋ\$ HHI}D@SAWjH0H\$(dH3%(H8[]A\A]A^A_fDE1H`H<wI1MtHD$ ID$1HD$IHD$ H$!f.IHIHIFHH4$INLHfuHD$HAu0HIuAu(T$ HHI}D@R1AWSLL$H I$H0HSI$HIT$H$LR0H$$@HwhH1H=`7SHGHHWHHPHGHGHHWHBHGtH{H/uHGP0H{H/uHGP0H{XHt H/ H{@H/uHGP0H{ Ht H/H{(Ht H/H{8Ht H/H{HHtH/ttH{0HtH/tUH{`HtH/t6H{hHtH/tH[fDHGP0H[HGP0HGP0HGP0HGP0a@HGP0>@HGP0@HGP0@UHHSH55_HӺHdH%(HD$1It@HH=_t-H$HHE1HL$dH3 %(uH[]@UHHSH5^HӺHdH%(HD$1Itt@HH=^qt-H$HHE1HL$dH3 %(uH[]T@HG(Ht HfDH+9Hff.ATIUHSHHHt HՅH{Ht LՅH{XHt LՅH{ Ht LՅH{(Ht LՅuuH{8Ht LՅucH{@Ht LՅuQH{HHt LՅu?H{0Ht LՅu-H{`Ht LՅuH{h1Ht[LH]A\@[]A\ff.SHtFHFt9HOhH1HwhHHPHHt [HAHP0[fHI'9H5YH8eSHtFHFt9HO@H1Hw@HHPHHt [HAHP0[fH&9H5YH8HH;5)9t?Ht:HF t5HG`HHw`HtH(u HPHR01HDHG`1Ha&9H5bYH8肛ff.HH;5(9t?Ht:HF t5HG(HHw(HtH(u HPHR01HDHG(1H%9H5YH8ff.HH;5(9t?Ht:HFt5HG HHw HtH(u HPHR01HDHG 1Ha%9H5XH8肚ff.HGHt HfDHH$9H5XHD$H:9HD$Hff.@HHt#HtHFfDHVH4@HH5$9H5nXH8֙1Hff.@HH迊t*uH%9HHfDH'9HH1ff.HHot*uH%9HHfDH9'9HH1ff.HG Ht HfDH1&9Hff.AUIATIUHSHH=Q>KH=&9HHOH@PHEHhIELhHEhHm0HC@HHHC HC(HC0HH%9HH5ο>LHC8HCHHCXHC`:HtHHCXMHCLchHkI$HHHu?HHCH}$9HHSHHRHSH*HHhHH[]A\A]H=HCfD1H&HP%'H=(!H>HH1H[]A\A]@Lc@31镂DSHH q@:HH]WHHH<$9LU"9dH%(HD$@1HD$8H\$(H\$0H\$8PHD$8PHD$8PHD$8P15%9LL$@|H0fHD$ H9tH@5HD$(H9tH@H|$HT$0HGHHHHBt[H9 LBL9 M~RHBH59HHH9X1@HLHIH9>HI9uHH9WHt$tHHT$ H9t(Hx@HH/uHWHD$R0HT$ HD$HP@HT$(H9tHHP HT$0H9t HHP0DH|$8dH3<%(H@[fDH) 9H5 TH8J1HOE1H9HWhH5XTH81~@H9H8H9tZH5 T1vfDH9H5SH8ڔ1SH9HQH5TH81/H5U裔1H`9H8ff.H"9H9GuHGf.HNH=Sk1H@HM"9H9GuHGf.HXH=S+1H@H "9H9GuHGXf.HbH=XS1H@H!9H9GuHG f.HlH=S諻1H@USHH!9H9GuaH;5 9HHtJHteHFtXHH} HtH/tH] 1H[]HGP01@vH=RHi9H5XSH8ڒH 9H9GuHG(f.HH=(R軺1H@USHH 9H9GuaH;59HHtJHteHF tXHH}(HtH/tH](1H[]HGP01@H=Q'Hy9H5QH8H9H9GuHG0f.HH=8Q˹1H@USHH9H9GuYH;59HHtBHFtUHH}0HtH/tH]01H[]DHGP01@H=P?HPH9H5PH81\DH9H9GuHG`f.HH=HP۸1H@USHH9H9GuaH;59HHtJHteHF tXHH}`HtH/tH]`1H[]HGP01@H=OGH9H5PH8 SHH= 91芮HtHHX[ff.SHH=a91ZHtHHX[f.HHHtH1DATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.UHHSH諚HHt2H}tH۸HHH]H$9HH[]f蛤H1Htff.@ATUSHoHtMHwHHH9t!HAIHt9HCL[]A\@H9H5tOH8bE1[]LA\H9H8uH~9H8ΓtśHmu HEHP0HCL[]A\@SHGHHWHHGHGHHWHBHGHHtH/tH[fDHGP0H[SHGHHWHHGHGHHWHBHGHHtH/t/H{HtH/tH[駆HGP0H[鐆HGP0ATUSHH1ӟIHH{1HI,$HtHH{HŘAątPHmE~>H{HtHCH/uHGP0H{HtHCH/u HGP0f1H[]A\fDID$LP0HvH9H8ݑtԙH{HtHCH/t=H{HtHCH/uHGP0DHEHP06fHGP0USHH_Ht-HoH=o}HHH=qHH[1]@H=oTHH=LH[1]ff.fSHHHt4uHO9H[fH{Ht!H+Cy 1[H['1[ff.USHH_Ht5HoHt,H= o蘣HHHH[H=K1][H=nlHH=KH[1]5DSHHOsH=9請HtRHPH@HHHXHXHHu:HHPH9H HHH HIHHHHHZH[fDH=-HD$WHD$HP@H= KH1[ff.@UHSHHH=9HtSHPHEHhHHHHXHXHu:HHPH9H HHH HIHHHHHZH[]DH=eHD$菧HD$HP@HGHWH~-HGHTH9s@HH2HHHpHJH9rH9HfAUIATIUHSHH_DHx*IEHL|$H@I9ufDI]L9bM1LI)IILL)HtzHH/tMH$LL9LNK7HD$LHL)IH$H9HNH)HfLQM1Tff.AWAVIAUATIUH,HSHH}HT$1ՍHH$HxzHD$L)H$HvA?1AfDLH9$~*IJ|1L}HHx&KD?AuK >LiL|$IHL[]A\A]A^A_IFHD$HA?H$H9D$~3HHH1LH)H9LcMxu]HDAuMI)M9yfLkM9jL1LL)HLHL)H|蒌HH7uIHD$ML+<$H9HNH)IDH$I L9LNK7HD$E1MlLATIUHS1H9]~*HELH4Ht[]A\[1]A\fAUATUSHH~IIH1E1fDIHH9]~+HELH<蕋tH1[]A\A]E1HL[]A\A]鍉ff.fHG H<(kff.HW1HtHGHH9BHLH4@UHHH5/BSH(H 9dH%(HD$1HEHT$H$HIHD$HD$P1LD$ZYtpH$HHD$HxvH9|15HEHt$HHHPH49H HHH HIHHHHHZH[f.H=HD$ϙHD$HP@ H=<_H1[HxH9wAHH>HuH=Z>eH>HtHH' 9H8s1HHGHHHATUSH_H9t(IHsHtHEI$L$1[]A\H*9H5C<H8{z@AVAUATUHSHFHH; 9H;y9u H9HH5=誶HHSL`Mu%H({H49H[]A\A]A^LkHK4,LEHMAAHCM~J41fHHHHI9uHmuHAP0}H舤IHH@HLtmHtqHkH4(H9DLAHHt(HCH;C }`HSLH,HHCAHHu轎HH59H8~I,$u ID$LP0[1]A\A]A^HHHmAu HEHP0E`fDH@HP0vHMHtHk"f.HsH;s |AI,$+ID$LP0fDHmJHEHP01@Hyff.@SHcHt H(tHH[HPHR0HHDSH d4:HHHH;HdH%(HD$1IH$ ct\H{tHH4$HtHHt7H(t!1HL$dH3 %(u&H[fHPHR0@Du@AUIATUHSH HHMIHHۃH9tUgH1IL9rIHcHIH<躮HHEHt&1H}LmtJHUH[]A\A]fDoff.SHHH5H dH%(HD$1HL$HT$;t'HT$Ht$HuH9H@1H\$dH3%(uH [tHGHFHGHNH9tDBAAVAUAATIUHSH~qH~l1HEIL$tUHH9}TH9}OID$L4H4HEH<$y[1]A\A]A^DH8H@H9|AwH539JcH>H9}AtUAt3ID$[DJ40HE]A\J<0A]A^.qH9DtH9H[]A\A]A^H9tCHd9HH9H9H9H9H9H9ff.@ATUHS@>H=t5OHX8>H=\5L aA$1HUA$Ht5H]Hx HHUO~:H@A$I$A$t~?[]A\f.H;9uP>Hǚ>H,밐[H]A\餐@[]A\H1҅u H9HHHf.AWAVAUATUSHXdH%(HD$H1HIHcHt;H\$HdH3%(HHX[]A\A]A^A_DL|$LL<$GzID$[LD$DH@HD$8w'I|$L-l8H-u3DqHCMuqH_H8AF AF ;~H=30ID$H<tHIMutHy_H8AF AF q΃d4I9MtbH<$LnIHIu IGLP0HI;\$HH<$H54sH<$/mLǣ1`tH#IEtHHD$^HD$@$PH=u1H=4ԚH<$]D$D赕eL5H<$ܦHI;IGLP0,_nff.@AWHvAVHAUHT(IATUSHhL2LRHHD@Lb8HH@HD$HDvH Hi8I,HB8G PHcH9uHTRHT oBA(HRHQ8H;1LAE LLT$xHLT$HI MLELT$I)uHhL[]A\A]A^A_IHMHHN4HD$0J|0IHGM9IELT$=I9lNIMLLL$HH)HD$PHt$H0Ht$0YLL$HHLH)HD$'HL)HIHAHIH|$tHD$HD$IyIt$HL$(LL$ L,LFHLL$ HL$(3HD$H{LLL$(HL$ HpHL$ LL$(HCIIFMQIIHUL[IHHLMOIHt$@I<$IOLL\$8LT$(LL$ 9LL$ LT$(HIL\$8~LH):L)L HIIIzIvMILHHLT$8HEHL$(L\$ LL$X3vL\$ HL$(LT$8Mt$LL$XI{HuL vLT$8HL$(L\$ IMHIMJ1IMtHt$I[HIHFHD$IH|$HHD$H|$PMLLl$8HHD$(HWDIIFMQIHiILE1pMXIH|$HD$IyIt$HL$(LL$ H LL$ HL$(fHIMQIILE1IL\$ HtnLLT$8HHL$(tHL$(LT$8L\$ DILLd$8ULLIIM@Hl$MLIISfLLT$(HL$ NtIHL$ LT$(A@MMN4MbMLILLMIMLMHD$MMN4H\$MLM&MLMAN,Ht$@M)LN4E1J|5s}@MLE11-Lt$HE1nff.AWAVAUATUSHH $HH|$0HdH%(H$1D$dHD$hHtQHLL$dLD$hHH W:H#+KH{H|$hH;=|8HD$hHD$0HHLxH@H@HL$HH H@ HL$HDŽ$Ll$pHD$pI HD$xHD$HDŽ$HDŽ$H t$dHHD$XL|$PH1HD$(HL$PHHH9v DH H0HHHrHHH9rHL$1HH?~DHHH H?HHD$HD$H$DH$MgM4M9II71jHHx`IWI9 HL)IIIHL9ItI<1iHHyE1H|$(Hl$(Lt$1H|H/uHGP0HL9|H|$~ H|$(MHD$0Hx tMtH8H5 H8,]E1D$dtHD$H*H|$xI L9tMHD$0HL$HXLhHHHL$PHHHL$HHH Mt2HxI|HtH/uHGP0HyL=MMt!I$HY8H5H8z\E1H$dH3 %(LHĨ[]A\A]A^A_H;\$M$H$H\$H9HNIHD$ L9Hl$Ll$8H\$@LL#IM fLuM9s1L1LL)HI,HugHHtIM9rHI9sfDHPHHPI9rH|$M&HHH9\$ |Hl$H\$@Ll$8f.Hc$HHRHIt(L>HnH$JDLLM9~AtWM L9LxL1I9H)LHL$~)DHIcHvHHHEuH9}HIHHHEH)$n~B1tHcHvHH9Đ}HLdH$H|$(L%l8I9HL)IIIHL9ItI<1eHHyE1H|$(@HD$0Hx HM$LM9s!@H I4$HIHrIL$L9rH2HH9&HH H0HHHrHHH9rHT$L)HIHL9vfHPHHPI9rIL|$P1HD$(HHD$XHL$PHD$XHDH9H@H H0HHHrHHH9rHD$0HHHhH@H@HL$HH H@ HL$HHHL$HLl$pHAM(H1Ld$fHI9H|$hHt11@qIHuI@HHtIt*H|>o|>HH<,N^|>uH[]fb.|>(H5@\DATUSHHHH9{>H{>{>HHHHHCHCHkHk HkHHHtH=6erHCHHCHw8HHSHHRHSH*HHhH[]A\H=Y8THHtHvL$L軋HCHtL1HXSH+u HCHP0[]A\LH=1]{uATE1USHx H9wHNwII9~[1]A\H;H9WHHN_HL)H&;Ht.HUHxH~!J41fDH HH HH9u[]A\ff.AWAVIAUIATIUHSHdH%(H$1HGH9H5HώIH3L@H@IotIoIF1Mx L9LHNL9L9MLNM)ItHH4$LM^H)H<HD$(H|$H@L\$ LD$LD$L\$ IHD$@MHD$HHT$LLD$ IL\$HHD$0dH<$L\$LD$ L1M~@HTHtHHHI9uH\$(Hx#fI|Ht H/uHGP0HHu1L;l$tL $A $MtI/fH$dH3 %(HĘ[]A\A]A^A_DHQ1HbHHvHLLHH+uHS$HR0 $LtCLl$@M^L$IHD$HD$(Ll$E1E1DMtI/u IGLP0L@IW $LR0 $IVH$LLD$H4HT$M^HT$K4L)L$$L$KKff.SHxVH9w~PHt;HGH1HH8HHHPHHt[@HGP0[DHV1[@H8H5H8eLHW1!AUATIHUSHH8HVdH%(HD$(1HB`HtlHtbHC8H0:HHH&HHLAHL$(dH3 %(DH8[]A\A]f.H;8cIt$HL$HT$LL$ LD$uF]HD$H.HutHT$H;T$~HT$HI90H5 H豇HHHUHL$ H9HH<-IHHEIT$LMtLMLD$ HD$M~]Ht$H 1H<DHIDI4HHH1HL9u1I|H/uHGP0HH9\$ L;Hmu HEHP0E1nf.H 8HRH5 H81{@A9DIT$1LHfHT$H;T$_AHIl$DH|$ HXHy&HL$HQHT$HWHHHD$HHT$H要HHHT$H\$E1HH;\$seIL$H<H4HHJDID$H9rHPH)HHHt1L)IHH<$--fND\$ A0HfDEH@HGxu uWHD$H@HH4h tH|$@HO0HWHHHDHHD$HpH(H|$@HO0HWHHHDAxfDF H=H_XH8H5yH878ff.ATIHH5U1SHPdH%(HD$H1HT$Tt3H\$H>HT$H1LLBRH߃t,'mHHL$HdH3 %(HuHP[]A\24@HGHHHtAHHHH1IfDHHHH!H ЋTHHH)L9HGHHuIHHHDHDGtHG@HIifHtcHGtVHW1Ht;Ht=HxcH1DLHHH HuHfDG@HH=h#]HHHH@HtcHGtVHW1Ht;Ht=HxcH1DLHHH HuHfDG@H H=\HHHH@HGt?HFt2HAH9tnAw{H DHcH>H8H@t#H18HHx@H8wH dHcH>{G1uf.ufuf.pfDUSHHGH-8H9HP`HHHHHt[H@H9t2HHH8HH81dkuHH[]fDH+u HCHP01HH[]@HHHH[]HPH=8H51H81cH8HH5H81cH+t1ff.HUSHH9?HH<4HHtOHhHL8HHCHH[]Ha8H5;1H81HH[]fDK*fAWAVAUATUSH8Ht$ HT$HDHGI0H_HH\$H?H1II)HDDDDDDDI9&H&^B{ LHL)HHH?HH)HzR%HHHhE1ISZ/DHl$IGDM~=HJ|@HHL HH HIH Aiʚ;)щNH9uEt7KADDI iʚ;)B|Aɚ;w`fH+u HCHP0H8[]A\A]A^A_MLt$MGBTKI?AMcIƸ vI9vH|$H8pHGH+G L9_HD$@HD$HP H@HH|$E1HW LLM~|JI{IAIL|f.A Hw$fHA)0H9uIH~M9uLLHHl$HL)MHD$̋DщȉI)lj0A wH|$yAC-H+u HCHP0HD$HLp H81[]A\A]A^A_Lt$CE1I?AMcxMH|$9LLD$(KLD$(sH+D$HSHR0D$@HH0HH@HEmHD$ L H81[]A\A]A^A_HD$HP HH0LPH@LEH|$E1HG LIM~iJIzIAIL|A Hw HA)0H9uIH~M9uLLHHl$MM)HD$̋щȉI)lj0A wH|$LAB-B9LLD$(fLD$(HI~@ 8 MT$HMHD$HP H@HH|$E1HW LLPM~oJIzIAIL|@A HwHA)0fH9uIH~M9uLLHHl$HL)MBHD$̋@щȉI)lj0fA wH|$-fABLPHHH0HH@HE IT$0MT$H@LEu t^IL$0@IT$HHHDNp tIL$0@IT$HHHDNID$H=H=:SID$HH8H5dH8*fH1dH%(HD$1H.tH$HL$dH3 %(u H1(AWAVAUIATUSHHHHGLwHnHT$(H?I1I)HFH?H1H)IFHHD$HHI~IHHEHD$8D61f.w)H7ML$11)L$$L$$H~)DHH ЉH?ATHH9uIW11L$$MnDADHH ƉH%?ADHI9uڅ;CtH\$HT$0LL$H)HLL$HT$0HHD$LHH|$CDGlLtD$HHXH9L)L|$0MHHHLHD$X2B;Bt;D1F\;DT$IHH HHA)‰D=?wIHL H9wH1f.At HcHH)H?4HH9uDEIA>HL;t$7L|$0H~AD$$H|$81҉DATHH Љ!HADHHuI/It$HH?HH1H)H~DE\HAEt4HPETEHHuHHHHHID$H\$HD$(HsL HH?HH1H)HDLHAH|$EtfHPDDEHHuHH\$HHHHHC11@ATЉ?HH9u߃EzrH\$L|$0HHD$HHu HCHP0I,$u ID$LP0I/u IGLP0HD$HD$(HHD$HH[]A\A]A^A_HD$8ADC9Dr1Lt$IGLP0EDHAEt.HPA|uKHHuHHHHHID$H$L 1H[]A\A]A^A_fH9zdfH9tH+u HCHP0fAWAVAUATUSHHdH%(HD$81HGHFLWHnHMII?I?HRMLH?I1I)HH?H1H)II1H~ HHCDDDDDDLH)H9PHH9EH1HH)BDH< vwL=6A DHcH :1҃vDwAHcH)HHHHHHLHBH$H7H)HHHHH?L II)HL)I9OHt$(IxHL$ L\$LT$LD$ZLD$LT$HIL\$HL$ Ht$(#1H~DADHI9HE11HHH HH?HH)HHH)HH)KM~+@TEHI DI?THI9uGL1I|$HH?II1I)M~GG\IAEt7HPETEHHuHHHHHID$HHIDVM\$Ig1CH1H HICIIH)IuHH?II1I)ISGLM~MHEtCfDLPGDELHuHHHHHHID$H1H)ELHPH1HH)HAvAAwC HHHH+$H9HLA l$HʸtLEf!AD$ADH*H~'YHfADH*XuI,$uID$L$LP0L$H$HH=~1L$H=e~ L$f.;<$f(b DH8HHL$8dH3 %(HH[]A\A]A^A_f.8E8t#'@H~6]ff.VC;BDfIRH*H~(DYHfɋDH*XuDfHUH*H~*YHfҋDH*Xu^E8-fW DHq8H5H81GYHCf H*CYfH*X8DH$Ht$HHH$L H?LII)L)LL$HHT$IHaLL$HT$H $Ht$LHHHzL)HH)HJA~LLA1ADHDH D!HADHHuڹK1H<$=uIBDM1ɅH1H?II1I)ISGLMHi8H5VH8"1HT$0LL$wI,$L$uIT$HD$LR0HD$L$HH|$0HDH/uHWHD$R0HD$HPHHIH?H1H)HQDLhfDI9tL9u6HӉE11HH)HQH8H5H8>1:Hӽ1HH)HifAWAAVIAUATUHSH(HGHHIH?I1AI)HHIFHIHI?H1EH)HII9|8A^tPA|A&^y-H(1[]A\A]A^A_LIEAHHLIA^uEDD$E1IcL DD$HI1HTA3TATHH9uEI9~D5?ADHI9uEtMIEI\$CD?H~6IT$KtfD H?ȉ?JH9uHmu HEHP0I.u IFLP0It$HH?HH1H)H~?EDHAEt/@HPA|HHuHHHHHID$H(L[]A\A]A^A_LHt$; HYMHt$~,1Ґ|??|HI9uH@HLL$Ht$DL$ DD$Ht$HLL$TH~11DA|??|HH9uIEE!ELDIcLh IHtxH1DTA#TATHH9uI9LH4H)I<4HH2*DEE ELEIcL IHu(HmtaI.IFLP01H~EfTA TATHH9u[@H9" fHEHP014HmHEHP0z1ff.HGt HFuH۟8HfDH|HGt HFuH8HfDH^cHGt HFuH[8HfDH&#UHSHH_Hx*HBHHC>HHH[]ÐHHHtEH؃=v|H Ht5HUH{HPHtTTHHuH[]H1[]EfDHtHUHHHPHHEff.H8H9Gtf.HHHH=ՏHH1(ff.HGH=ATAUSHHxZH1HHtd@HuHcHt'AHPHcHhH?HJu[]A\fDH1IHHHuHtL`XŃHB>HcHHHHGHPHw.HxtGHHHcGH@SHHt HSHHP[DHx%H8H9GtHHkff.2f1%DAWIAVAUATUSHHhHoLndH%(HD$X1HGHD$8HD$@HD$HH?HD$PH1H)HFH?I1I)L9~HHLIIL9FHEH9:H!1zHH\$XdH3%(HHh[]A\A]A^A_ÐHD-L9MHL$@HT$8HILgL9HL$PHT$HLLAJ|-oHH+Ht$HH|$8IHJ LmHpHL$ID INHHt$HHD$0$LHUIFHHL$HrH)Ht$PH|$@AIHuLXH@LLT$ LL\$H#LT$ K$L\$IJH)5LmHD$LLT$M)IN$LLLT$I*INHT$LL\I.rHt$@H|$8#IHH|$8H/H|$@H/iHD$@H|$HHD$8L9yHt$PH|$HHHnH/uHGP0H|$PH/uHGP0HD$PHLHD$HI.Iu IFLP0H+u HCHP0MIOIWLLI/u IGLP0HuHH?HH1H)H/DDHAEtHP|HHuHHHHHHEfHCLcMoH?I1I)IGH?I1I)K<,HHLpHH1HJMHL91MMwKIHD$L)E1HHHHD$DBDHD$=ML1L;t$sIfIAPDHHT$LHЉH?VL9D$wHt$IT5Ht%?IIM9LuLH?HL1H)H\HAt$f.HPD\EFHHuHHMHHHEiI.u IFLP0HmuHEHP0H|$8Ht H/uHGP0H|$@Ht H/uHGP0H|$HHt H/uHGP0H|$PHt H/uHGP01DHCLsMgH?I1I)IGLt$H?I1I)K<&HHtHxH@1H|$H:LrHD$H IOHE1HL$(HD$ MF DHHHPHuHD$L)J<8I*u IBLP0M)MMHD$H|$ N<L9IHD$(MOJ48JHD$HLhHIHrHm'H\$HHD$HHHCH1P0@HT$8HD$@HT$HHD$PHHMNlL}H1IEHD$SH|$IHT$:HT$H|$IAGLLLAHA?EGLI9vCDIAVD HILHЉH?QM9wHT$H)HILHtHЉ?HtAHIHI98HmqHEH1P0E@H\$HHD$HHtrHuHH?HH1H)HDTHAEtfHPDLEHHuIFLP0IBLP0QH|$HGP0fHGP0@HGP0l@HEHP0IL@I|H1LT$ L\$IJDH98f.H9 fH1xH$ff.UHSH1HH?vMDHuHcHHt$HhHPH?HJuH[]@HH[]f.AUf(ATUSH(fT &dH%(HD$1f. ދf.!f1f/v fWڋH|$ D$DhD$DzHcIHtMkD$A)A}fDH,HcfɃADH*\u҅u&HL$dH3 %(LH([]A\A]@I\$fHD$dH3%(uQH(1[]A\A]Ha8H5E1H8HV8H5E1H8if.USHHpHGHH_Ht~H1HAHH1HTHH HHH9HHHuHIcHڅt H/uHGP0HH[]fHHHXHtHtpH]_Hc_HHcH[]fD_HH[]HA%f.DEHS_OEyHH9u H'@DEH=KH Hff.H(dH%(HD$1Ht$. T$uHL$dH3 %(u(H(ÐH8H5HD$H:eHD$fHdH%(HD$1Ht$ T$u.HH9wHL$dH3 %(u)HH8H5H8&fDHHHGHGHteHtwHtaAHxnH1H΋THH HHH9uVHHHuHylEy?HH9u0HGHH@GHHADH8H5ڽH8HHfDIcHH8H5QrH8H뀾H=HcHGt HFuH8HfDAWAVAUATUSHHHIHjHkHHkHLH?N4:II)LLHH)HCM,H?H1H)IM$.IL;H:H{Hx1I~DHI91H~7DN 11DDDIL AHA?EDHH9uMulHH?HH1H)H~>DLHVEt.HJDDEuJHHuHHHHHHPHH[]A\A]A^A_鋵BT덐HHx!@H9tf Hu.H8H5dH81H[]A\A]A^A_1@HG+HFAWAVIAUATUSHHHKHIHHHI^HLH?N<II)IFH?H1H)L)HLHHL)HI)L)LD$ÃAA?HI~HxLD$yHHxO 1fDATD!THH9ETDADD! ʉTfHi}8H@ HuH}8H5ԿH801HH[]A\A]A^A_阳HHtHHXHmHu HEHP0HtHWH+uHSHD$HR0HD$HH?HH1H)HqDLHVEt^@HJDDEu:HHuHHHHHHP.@H1[]A\A]A^A_H9 DHHHGtzHWHt Hu%GHHƋLHH HHH9uHHHuHY~8H5H8HHfDHa|8H5 mH8HHfDH ~8H5jH8ZHYfD8H=WH6ff.HHHGtzHWHt Hu%GHHƋLHH HHH9uHHHuHI}8H5:H8HHfDHQ{8H5kH8rHHfDH|8H5·H8JHYfDdH=GH6ff.SHHtjHGuMHHHtHYH+t H[DHSHD$HR0HD$H[fDH[fDH=Hff.HWHH?HҺDfHGHWH?H1H)1H~cHHBH9"HTHH)HD DtHcHHH1iHtH@f.ATUSHGHFtzHGHPHwHVHJHvvIHcHHEI3D$yPHtKH;H{Hx}t{HcNH+Hu HCHP0HfDHin8HH[]A\DHxSu!HxHIHD$HH%H+uHCHP0L|$HI?IHD$H`H?t AGHc'I/Hu IGLP0H[HCD$4 Hg8H54E1H8Ld$L|$ID$HHD$ HD$HHl$8HD$Ld$(MHD$(Ht$ ADD$Dl$DAALLIHD$HHMMtI,$uID$LP0L|$HHD$HHHL$1HL(MtI/u IGLP0Ld$HHD$HHoEu:IIHHl$ HD$ HMHl$8Ld$(MMcLJtPIHD$HHt|MtI,$uID$LP0Ll$HHD$HHtdHL$1HLMtImu IELP0Ld$HHD$HHcHHH1HtH@f.HGHWH?H1H)H<Mff.fHGHHH1H)HTAUHq1ATUSHDvHwH=%,HDDDDDDDHH9HHHmIH1HHI,$IHHPMt|HHH(HHHLH+uHSHD$HR0HD$IuHVHtIUHu5IUHD$LR0HD$LHHu HCHP01H[]A\A]ÐHHH[H)H|E]A\A]f1yfID$LP0HCHP0HNHH&IELHPrfHHPHHo`UHSH1HH?vMDHuHcH\Ht$HhHPH?HJuH[]@HH[]f.SH dH%(HD$1HHGtqHGHHHHt$Av&fDHD$HL$dH3 %(0H [fHHH@HHH~Ht$AHߺH+qHSD$ HR0D$ ZGHHD$WGHD$CHD$2f.CHHD$H+HCHP0CHD$fDHD$DHH=p+HJf.HdH%(HD$1HHGtZHW1Ht'Ht9E1Hx(H$@HL$dH3 %(uZHGH@H1_8H5OH8RHfH=OHqSHHtjHGuMHHHtH H+t H[DHSHD$HR0HD$H[fDH[ΞfD&H=Hff.USHHpHGHH_Ht~H1HAHH1HTHHHHH9HHHuHIcHڅt H/uHGP0HH[]fHHHXHtHtpH]_Hc_HHcH[]fD_HH[]HA%f.DEHS_OEyHH9u H'@DENH=KHHff.HdH%(HD$1 t3HE1t.H$HT$dH3%(uHDH1֟@1IH։ʃ t 1馓fDL1閟fDAWAAVAUATUSHhAH|$Ht$-A$#IlH \8u IAuD$ED$H=ff.A L-_8ALADD9}*fHADD9|HfL)H*YDD$ HL$0H,HHHD$8[IHLcd$ HL$0LLt$@H@H=FH=Dd$LIJEHD$ ACHHD$(L9MQIqHL$(AJ|$uIYElH Y8HEKuHD$HtH(I)uIADD$LP0DD$H\$DD$HQHH=HCH7HHt3HHX8DD$H5H8D1\H+u HCHP0E1=IA@DH-=McfBDf.D$H6<+D$AFIVE<0uABATHAt/DHPA|HHuHHHHHIALVIHHD$HH( <-IVAFD$HD$8LL$XHt$PHHHD$0ƽHt$PLL$XH*HxHD$PHD$8LL$XHLL$XLD$PI)uIALP0LD$PHD$8MA\HD$0HD$8VH9! IcEtkLALrIcBvLH9ABM~)1 DHE HHHL$(dH3 %(uRH0[@1@HVH=DH|$HD$)HD$fHHZ[苡ff.SHHH54H dH%(HD$1H)08LL$IHD$1}H4$HR28H9FtTH4HHt[H4$HCHL$HPHtCHD$HHt.HH\$dH3%(u&H [@HVHu@HD$ː1觠HWH (HJtH(H:u HTIHD8H8UHSHHdH%(HD$1Hi18H9FtSHKHHtRHEHHHPHt=H$1H8@躯Ht$dH34%(uH[]HVHu@1ǟATIUHHS订HHEHL;%&+8HhHEHC HCHC0ttHC(HCHkHHHu@HHCH-8HHSHHRHSH*HHhH[]A\f.H=4HCfDH5-81HHC(HqH+uHCHP0D1ff.H5.8AVAUATUH1SH@dH%(HD$81vHIIoEoMoU HU0HE)$)L$)T$ HT$0HtHL-)8ILH;-8H;.8uRLHHtBHLHHHHEL9uLHHufDH|$HtH/HGP0H|$H=LH=H1ULHYHHu HCHP0I,$u ID$LP0H|$Ht H/uHGP01HL$8dH3 %(uAH@[]A\A]A^DI,$uID$LP01f.HCHP0ܜff.HWH1Ht HJH9Ht ߘHx0Ϙff.@AUATUSHHH9FIH~H5.8H9tH;=.8t HC1HtHhLfHH9HIHu9fDHLH+u HCHP0L"HHuIm*HuvH^+8HH[]A\A]I|$H54-8G2ID$H;[)8 H;&-8LIH/fImu IELP0H1[]A\A]fHGHnHxcH!)8HH[]A\A]fIELP0aH3fDImuIELP0ff.fAUIATUSHnH}IĽ$HL荠H+u HCHP0~ L迕HHuұHEI,$tH[]A\A]ID$LP0H[]A\A]ýѐAUIATAUSHHH~H;=+8tH5,8H9t twLHHx'HHxAw4H5lDHcH>1H[]A\A]H9H'8HH[]A\A]f.H{H5 +8 qHCH;5'8`H;+8SH$8H|f.H9|LHP:fDH9tcAiH(8dDH9OHL4Hm(8/H9DHLAuxUHSHHtYH1HH1H5w9Ht+H(t HH[]HPHR0HH[]@H+u HCHP01HH[]@UHSH~HtYH1HH1H55w9`Ht+H(t HH[]HPHR0HH[]@H+u HCHP01HH[]@UHSHHtYH1HH1H5v9Ht+H(t HH[]HPHR0HH[]@H+u HCHP01HH[]@UHSH~HtYH1HH1H5u9`Ht+H(t HH[]HPHR0HH[]@H+u HCHP01HH[]@UHSH~HtIHHEH=fHHp1}H+tH[]HSHD$HR0HD$H[]DH1[]HGH;5'8LW LHt HHGLH!HRIHxt%HD HHLH!H@IHxuH6HHHtL!H Iff.@AWAVAUIATIUHSHH(dH%(HD$1HHGHH t-H |&8H9Nt H@HWHH4PRHELt$LHHLPIHHEHHHtfHD$H8HL H/ttH LHHK IHLHI9uH[]Hr0A@USHHtAHGH t1HkHOHt2H;kt9H(uHPHR0ZH=D71H[]fDHSHK ALJHt9M~11HLHtL@HIHHI9uH[]DHJ0A@AUATUSHHHGI Ml$LNHHt;1MGHSHHI9t/UyHuH+HD$t51H[]A\A]M;l$tYH+uHCHP0{HSHR0HD$H[]A\A]fDdH=5/H1[]A\A]fIL$IT$ ALQHtVM~IH(E11fHLHtLKH9O HIIyHIA HHI9uHHQ0ADAWAVAUATUSHdH%(HD$1HG -HHIH7H9FtgH蟄IHHCILHLHPIHH$HHt4HL$dH3 %(H[]A\A]A^A_ÐLfIu@HCHxHCIEHEHHHt'H$IoM'L(HCHhLHCfDHU@HHHOHхHk7H9EHCLsHHHtH=R聂HCHHCH7HHSHHRHSL2HLpCf.H@HSHHH4P)HUH{Hs MLIHEHHPIE@HHHtL҅IEH;{7IEHH1- H=2/1H;)7LsHUHHY$a@SHHH51H dH%(HD$1H7LL$LD$HD$1v1tHT$Ht$HHtHHL$dH3 %(uH [`DHGHD@H8f.HdH%(HD$1HGHPHt H$1H8HL$dH3 %(uH`ff.SHH gHtHH[m3o1[ff.@UHHSHˋHt>HHHhmH+t H[]HSHD$HR0HD$H[]Dn1ff.@UHSHHHhfHtHHHH[]鿌H[]UHSHHH(dH%(HD$1HD$HtOH|$jHt$HHdH|$H/tHL$dH3 %(u!H([]fHWD$ R0D$ ָ^SHHeHt HH[os[UHHSH[Ht7HHH8sH+t H[]HSD$ HR0D$ H[]øH螪HtHHPHfHD$mHD$Hff.UHSH^HtaHHHtHH[]HEt+H0HtHHHuH[]ӃHfDH7H5-H8^1ff.AWAVAUATIHUSHI$t{L0HMtlHHHHOLcAM9t/IEH5HDž0HIEH0HD[]A\A]A^A_fHt;HtHHH[]A\A]A^A_݉DHH[]A\A]A^A_2qfHL$H4$貂HHHL$H4$I$HpAL9kgHDž0ImQL荬DIELHL$H$*H4$HL$HHtI$rHAHa7H9Cu3H{ tAI$IEHL0IELHDž0IEID$HH9tHcIt$H9HH9wmL<H4$L貔HtTH4$I0HI<Ht'fI $HIHJID$H9uLcHIT$HC Hz7H5C-H8\IEE1HouLcIt$Hff.fH/tD۪f.H(HHtH1DHHHtH1DHo0fDGt HWH GHG؃HHGHGHHWHBHGMH1Hff.SHCu H[DT@H{HwKH[.Tff.ATUHSG\t'u8HGhH8tHGpHOPH9EH}xt]([]A\ÐLg8CLOFLøEOڃEf.O(ȃHHW0Ht=~cHHݺH HEH7H5,H81EHO(HHot1HÉD$ GD$ ѐH=,xHf.1ff.fHCxH7HH1HÐHxHh7HH1HÐSHH{HtHCH/t 1[HGP01[DHO(HG@oG8oOHNoWXV o_h^0ogxHFf@t DGXEOAA8A8AAXAXAAAAAAt ZAAAt t`HF8uH~(F$HF0H~HHG0HDAHF(A8A8S JHO7H5@+H8Wf ,H 7H5I+H8aWf.H7H5Q+H81WUH7H5*H8W5H7H52*H8VH7H5R+H81(Hg7H5*H8Vff.SHHVHH{iHsH;11oHtHxt[fDHXHH(uHPHR0H[H[H17SH8[u$Hm7H8[Åuc[fDATIUHHSNHt|HLH;HHtVHHaH+At*Hmt D[]A\HEHP0D[]A\fDHCHP0HmuH+u HCHP0ADAUATUSHH?<2=H1HHcH>fDH蠉IH4H謃I,$Iu ID$LP0I Lm1H[]A\A]@HrHH6E1DH0IH$H|zI,$I^IHIOByIx@HȈIH4HjI,$IIH[GIHGP0AWIAVAUMATUSHH(HHD$`Hl$pH $LD$HD$HD$hHD$HIIE1HfHD$LHtHHxIEHLHIbIHD$IL(I$I9|H~CE1fDHD$LHtHHxIHHHHIcbH$L8M;4$|H([]A\A]A^A_HLLII9w II9vH([]A\A]A^A_bH([]A\A]A^A_tff.fAWAVMAUATIUSHHXH$HT$LD$H$HD$H$L$HD$ H;H?HD$E1HHD$(HD$HHD$0HFHD$8HGHD$@IGHD$HHLMIMIUHHxH HL1MtIHx~Ht$HIMMt$ HVt$8RLD$PHT$8Ht$XH|$`HD$(HHD$0H L0I9,$HX[]A\A]A^A_fMtCIHx#IHt$HHE1Ht$HL}Ht$HLHE1kDL1HE1VHD$ HL$IML$Ht$HH$HD$H$HX[]A\A]A^A_HtKSHH?Ht H/uHGP0H{Ht H/uHGP0H{=H[@HYuM9t,H7H5H8FJH1[]A\A]fE$;C$u̅~>H}0Hs0HH9uHt)H1H@HTH;TuHHtH9uH[]A\A]fDATUHSH!Hcs$LK@H{LS0FHMt_I<xXI<辁IHHSHcs$PH{0LK@u@LC8u8H uH L91[]A\fHU@HtH<yLC8I;fDHH9SHD$I+IHHD$L; |0fD8f9f.9@HL$(HT$ LL$8DT$0L\$E1L\$DT$0LL$8ff.~1f.AEBfD8ˆD$gT$f!Dfn1.AEH7H5H8:97{7ff.HcV$tPLF8toH~ZLN0Hw01I H HH9uHw81Mtt@I H HH9ufDHG0HG8Mt.f.HF0HtgHHW0HMtRIHG8HHw8fG$HOPHcHH HxHO0HTHTHHHuHVHFHH~@AVHG HAUATUHHDSLce$A@|G4$IH=7C4&HcBaHH-D`\McHH@H@@H@JLcHChJHCxHCHSpHǃHHHH{8HHHCH7HHSHHRHSL"HHXL`HEHC@HEHC8HEHCHHEHCPE CXHE(HHDHC`HEHHHM@HHcu$H~H{x1DHHHH9uHLkIEIEH[]A\A]A^DH=ͱTHCH)71H50 H8h6H[]A\A]A^@HCxff.AWIAVAUATMUHSHH(H>H4$HT$dH%(HD$1EHI?I~vE1L=ifHHtHEHxHHA$?<2w IcL>Hi7LH5 H81fImbIELE1P0HL$dH3 %(LFH([]A\A]A^A_H?xiHtIUJHD$IHH$L90:H?(?fDH??fDHc?H?ffZ?두f.*qH?f.H?x&SH?8ACH?.3H?([#?@????@|$CBfDE1k2ff.AWAVIAUATIULSHH8LL$HH:Ht$Ht$HII<$LmHIEE1HD$IFHD$ ID$HD$HFHD$(LMMMIHHtHEHxHHLL$LD$HL$ HT$Ht$(6Ht1IUIJIM9&MH8L[]A\A]A^A_Imu IELP0E1f.H8HLL[M]A\A]A^A_ATUSHo HtH[]A\fDDG(HLg8AHG@GXHO`<@uAHP/H5HcH>yPv1 fH<HH9|HHGHLgI@It MAEH{Hs8HHH HP`H|$D*A@AE<2H HcH>DzSHHD@ A@LH DA<2HUHcH>H7H51H8X/HT$dH3%(HrH([]A\A]A^A_fHC`Hq7H5/H8/Hmu HEHP0H+u HCHP01@DjHf.LH!H!4Ay-DtHcHA+H 7H51H8(.AcoA<dB[H5{Hĸ7AyuYAE<v ABtA<wHsHHHHHH5cHt7Ayt@H5QH*7[DAytfAyuAE<v ABEvH7H51H8%-Hɷ7H5*H8 -A@HHNHEHC`HHKhHH{PHC\HHHCpHSPHHCxHmu HEHP0Ll$M8Dc\L{PEHChHCpL9{H{HA@H7HHEUA@HH9HE:A@HHHEA@HHXMHEA@HHMHEA@HHHEA@HHHEA@HtHnHEA@HVH,HE}A@HeHHEbA@HGHHEGA@HH HE,A@HHHEA@HH HEA@HHHEA@HHLHEHi7H5"1H8*+HI7H51H8h* McLshM1`IEHH7H5H81xY1H\$dH3%(H[@H7H5bH8'HZJWHy7H5H8'Hy7H5H8'}DH\$dH3%( H8H[[8@|$HD$dH3%(H[R5fH\$dH3%(8H[18HD$dH3%(H[M8@H8H\$dH3%(\H8H[?!H\$dH3%(4H8H[G3H\$dH3%( H8H[OH8HD$dH3%(H[1fDH\$dH3%(HH[f.HD$dH3%(H[0fDfZfDH8kHc8\H8TH\$dH3%(u0H8H[/HI7HH5H81VX#ff.USH8dH%(HD$(1G(4HHG#S\HHFtUHP`HHt~H77HH0HHu:HHHH#DH;-7>HHL$(dH3 %(H0H8[]@H q7H9(HuH~4HEH9H1f.HTH9JHH9uH7H5H8$1aH7H5:1H8#AH~"HS`H<@Ky?H{8<2HHcH>fDHY7H5B1H8x#H97H5B1H8X#Hs8'HH)H@hHL$HT$HLL$ LD$H0HSpHL$ HHD$HC8HChHH HL$H HcS\nH кfHHH9uHSPHHSHDH59HZ71H81SfHJBH?VHH?{,HH?-HHc?H?fZ[,HyHaH?H?HKH?.H;H?]H+H?HH???,H?@|$ /HHH5H+lHCH1P0ff.HdH%(HD$1G(HG@HW`I<@tZAyuSDW\L_8EHOxHWpHGhAHt$dH34%(gIIcHLHHHi7H5:H81Q1HL$dH3 %(!HDLJB]H7H5H8R 븃?<2HFHcH>Ht$dH34%(MHLHHD$dH3%(I;HTHD$dH3%(uI;H)I;HD$dH3%(RHz*Ic;I;fAZHD$dH3%(!H)AHD$dH3%(LHMI;HD$dH3%(I;HHD$dH3%(I;H+HD$dH3%(I;HgI;HD$dH3%(usHEA;A;HD$dH3%(uOA;Hs)A;@|$HD$dH3%(u)H,H:7LH5H81Off.AVAUAATIUHSHH=7{HH@LpH@H@(H@HHHutE1H{ AHALHCHc7A1HHSHHRHSL2HHLp!*1HwH+t)H[]A\A]A^@H=;HCwHSHD$HR0HD$H[]A\A]A^1ff.AVAUIATIH=MUS4HHH5:H;H+HH UHHHLH@H@H@1IHH1H15IHH5HHHLTHCHLkLHSHCHt|HmI,$@HCHP0H 1H[]A\A]A^H߻;HmuHEHP0kH߻ Hmt4I,$u ID$LP0MtI.uIFLP0H[]A\A]A^ÐHEHP0@AWAVAUATUSHdH%(H$1BTHHA(HA@H7H9F;Lt$`H $LL@H $Dy\D;{$XE~ILAhH{0IH9?Ht0Aw1HfDITH;THHtH9uHy`I<@uGLGP2H5%HcH>@H9H-'7E1E1LyLqHEH$dH3%(HH[]A\A]A^A_{'111*H-ӣ7밐F(vHF@hH^8Lt$`f.E1E1ueH9t`H-y7S@ 'E1E1u+t'H-P7L9&H f.H-7H-y7@Ax_ELC(A0@@u ApIV2w.L }IcL>Axu<_t@_t @8HqPH $yH $HIHsH{(H $XH $HIDy\L_LQ8EHs@LIxHHs8Ht$HqpH4$HqhHAHIcLAUATPWLt$0LD$0H0tHL9tSL1QLI@Ax<__fDH-7\@H LLQ8E1E1E)?<2HHcH>II9E1E1DuEAA8E1E1DAA9E1E1DAfA9E1E1DA~A f.¸EE1E1DfAnA .AA8ˆT$^ˆD$_E1E1DNH7H5&E1E1H8H>?E1H\$ LD|$,L\$ALd$MILl$Il$LL$L4$MIHMtIHxHEHHMtIEHxHHA2H )JcH>HH93I*IIM;!|H\$ D|$,Ld$Ll$l$L4$A8붋9f9HL$HT$LD$HL\$@LT$8LL$0]LL$0LT$8L\$@LD$H`~1f.EB8ˆD$_T$^'fn1.E H5gH 7H\$ Ld$Ll$H8L4${E1nH\$ Ld$Ll$l$L4$pE1E1LLLLvTAATUSL'MHH=7mHH@L`H@H@(H@HHHoE1HHHCH^7HHSHHRHSL"HL`C oMK0oU S@o]0[Poe@HC(c`UH+It$L[]A\@H=1HCiHCHP0L[]A\fDHٝ7H5H8E1ff.SHHGH;7tbHHt.H:t(sH1Ht1HH+tYH[HPHu7H5H81CH1[@G(uBHG@u8HHw8H[GHSHD$HR0HD$H[fDH7H5rH8*H1[fHHH 9HdH%(HD$1H>I1t H<$;HL$dH3 %(uHAWAVAAUATAUSHHZHHh8Au:@XAHIXHL[]A\A]A^A_fDAH[HsH11IHEHImIu IELP0M L{`Mt3L HxIIHLHAL$Ml$HS\1LI,$IMHKPC\Me8IMP~-HH{hIuh1 fDHHHHPH9uIMPAIcE\I}pAAHH~)Iuh fDHLHLH HH9uIExLHHL-yImuIELP0E1H+kHCHP0\@ID$LP0PHcHH HxIMhHTHTHHHuZfH7H5H8ZH+uHCHP0f.E1I,$HID$LP0;H7H5zH8ImuIELE1P0yIqfAUATUSHH9V2HDIHDH E$@HHH1AHmt"H[]HCH8H[]2fDHUHD$HR0HD$H[]DHA7H5BH8bHmu HEHP01ff.fSHGHHtHxH5ܐ7H9t *8tHCH=[H01HKH=HAHPHC[H01^ff.SHGHHtHxH5l7H9t 7tHC[H81fKH549HHKHSH=H[1H ff.@UHSHHY=HHC-Y=HHY=HK7HCHkHtHHsHtHHCHS HkHHHtH=A%HCHHCHS7HHSHHRHSH*HHhHH[]DH=7HT$H4$H4$HT$HHW@1DH}7H9GuHGH@fDH5H=X;.1H@H=7H9GuHW1B u HGfDH?H=-1H@H7H9GuHG@HIH=-HÐH=W=SW=Ht,fHGHW=H=W=-W=Hu݉[fGW=(H5 DATIUHSHGHHtH@PHtЅuH{1Ht [LH]A\[]A\ff.SHGHHtH@XHtЅuH{HtHCH/t 1[DHGP01DSH?Hď7tHs0HtH=1(H{(tHHCHtH@`HtHH{HtH/tBH{0HtH/t#H{ Ht}HCH[H@@HGP0HGP0ff.@HAUIATIUHSHHHLH5HHH5mHH-m7H5 HHkHH5HQu}HH5H;ugH p7I9L$t!H[]A\A]fDH-7T@I}I$HtH/uHWD$ R0D$ MeH[]A\A]fD렃DSH D9HHHHZH dH%(HD$1Hy7LL$LD$HD$HD$1tRHsHt1HL$HT$H{0nHL$dH3 %(u*H [D&HHt HCDff.USHH=+HH 7H=H(HHH5HEHx0H1[]qUHSHH=7HtQH@HH@ H@(H@0%1H{0HHCHet!H+u HCHP01HH[]DHHH[]ff.SH+Ht=HHH+t H[fDHSHD$HR0HD$H[fDH1[SH5 7HHH9t S0tHCHt[@ %HC[DH=/(1[ff.AWAVAUIATUSHH@HxH=9i iI}vI](t L%7I,$Ht..HHtI}(Hpu I$HH IHI}8H~!q7ID$ HIU81H5L}2I}@IHg)IHI]@H;u_@LLHjHHH3HLHEdHHEu HEHP0H H;C0tH57H5H8vI.:@I,$DE1HL[]A\A]A^A_HP=H b9IEIMHHP=IE\fI.u IFLP0I}0Ht;R(HH~HH5LH+u HCHP0Ml$]fHHIAH7UHtH81"6ZYI,$ID$LP0HHEu HEHP0I.IFLP0I,$H=|2H+HCHP0SH57HHH9t ,tOH{Ht&H5^:HtHPtH[fH 7H5H8z1[fD[1[SHt1H(HtH[#H@HP0H[u#D1[ff.UH58HSH&HtrHH@ uRHj HtHH7H5TH81-1H+uHSHD$HR0HD$H[]HX$fDH1[]SH57HHH9t c+tOH{Ht&H5~HtHPtH[fH7H59H8 1[fD1[SHHt=HH""H+t H[fDHSHD$HR0HD$H[fDH1[SH5<7HHH9t *tHC[fK1[SH57HHH9t C*tHC [f 1[AWL=KAVAUATUHSH(dH%(HD$1Lt$Ll$IH$LLLHt{H܆7H9\$tHt$HFtF ‰ \[@HN0HVHHEу:_uHN4HVLHHDƒ8_:H$L=fLLLH/H07H9\$tH|$HGtG ‰ 7HO0@HWHHHDƒ8_H78QHHHk$cYfHD$dH3%(NH([]A\A]A^A_DHHL1MH|$fDHHFH8_CH8_1Hj78yHH#q@HGH8_H5IJH|$DHGHf8_H5^F@@HN0HVHHEf:_wHN2HVJHHDf8_!fHGHiHFH8_;Hf.HO0@HWHHHDf.@~0_HF1DHVHf:_HBf8_fHO0@HWHHHDf.HHtFHL1vHt$c@H|$f~H_HFIUHt$%YfHHt fDHHHtH1DHGHtHGH(t1fHHPHR01Hff.S10Ht.HFHCHt H[H+u HCHP01H[fUH1SHHtGHMHuHH¿1.H+tH[]HSHD$HR0HD$H[]DH1[]AWH5AVAUATUSHH(HGH;7Ht$t H@HD$H tEH(H[]A\A]A^A_@Ht$H(H=E1[]A\A]A^A_11oIHtTLkIELIHHE1OI/tqImtZMtI.t?MtI,$tH&PfDID$LP0H&2IFLP0@IELP0@IGLP0ImuDLpIH\@LHHt4HQt HyH)uHR0LHHuH=`HHLHyHmHuHD$HEHP0HL$1HHt$H1HL$H=%HL$HH)HAHP0@HLHL$HL$H=aH1HHL$HHtrHLHmHL$uHUD$HR0D$HL$H)uHQD$HR0D$@1E1I/H[H)6fSH,H{HtHCH/tHCH[H@HGP0ff.@UHSHHHtH HxFu%HtH}HH[]D1H[]H{7H59H81o"ڸӐAUAATIUHSHHH^|7H9t H tI|$H9t#H uHz7HH[]A\A]ÐIt$H}HD[]A\A]DUH11SHH={7Ht6HHtHxHuHH[]@H+u HCHP01HH[]f.f1fH=6`H=8PH=(y0H=% HH~u)Ht HTHuH|7HHHQz7H5H8r1Hff.HH~u)Ht HHuHHy7HHHy7H5H81Hff.H=UPHtHfHtH/tHG`0fHtHwHHKff.HtHWHHwH@ff.SHH oHtHXH[D[fUHSHHH(HH{ HH'HtHhHXHH[]@H[]ff.fUSHHoHt$HHt@uH@tHKH[]@GtSH?Hu"HH1H+[fDH=I fff.SHuKHtRHSHBXHtUHHHt,H@tS{ y H[Hxy1H[DH=L[HrH=?H[$@HPHew7H5H81H+uHCH1P0AUATUSHHHHCH;{7HJH=yH-w7H=LeAD$ AD$ L%x7A;$HCHH=FHLmH=.A$AE J΃AE d R9HtCHC{ yhHH[]A\A]f.H=]H1H[]A\A]@{ x HxHHH[]A\A]@HxHH[]A\A]fDHH[]A\A]NfDH=<HmH='E$fHH=[]A\A]f.HPH5u7H5>H81H+HCH1P0fATAUHSHH HYH;AHeHHHSHSHH5LH"IHt*HPHx HI,$*f.H+u^HCHP0RfDHHn[]A\DcH HIIH1LLHtHIu7H8aHHs7HRH5H81$H+sHCHP0dHHH=0Hnf.HSH{ HfDID$LP0ATUSH H-x7dH%(HD$1HMHH H='HT$Ht$HA}Hu1H"HT$Ht$H<$DdHCLH qHtHHH}IH13HD$dH3%(u+H []A\f.H= zUSHHttH@ @tHH[]fH5 HaH+Hu HCHP0Ht1Hu1H} !HmHuHEHP0HH[]@1HH[]ff.HUSHHFp7H9Gt`H598HqHHta1H1HmHu HEHP0H|HCtCHH[]fHHHH[]Hu:HH[]HPHp7H5flH814H+u HCHP01HH[]H=4@AWAVAUATUSHHHH HH=LcL%p7H=M4$FH gq7AF AF ;~H=HsH}H9t:H{HHD$ L5n7DHHIL9H=<I$H='C HHp7K d~;29|>HL[]A\A]A^A_f+IHE1f.R9}¾H=I$H= C$f.I.>D$ A`AH9VL=q7IDHEHHHmr7IcHHL5m7IL9I. HCD$ HHgHEHe17H5E1J HSL@Hn7HRH81]DHEHHHq7IcHHH;m7IH(HPHR0fDIFLP0D$ HCHHH9L=n7IFLP0fH=o f.HHGH5 HPHl7H81xHHff.USHHoHExHt H[]HHtHH[]5DHXxHExHtHZH[]ff.USHHFHotuHHHtH[]fDH}@t!HHt3HU@HHH[]fHap7HUHH5H81qH1[]HPHk7H5~H81DfHGH@@HtDUSHHH HHt?HHDHmt H[]fDHUHD$HR0HD$H[]D1ff.SHt1HHHPHHt [fDHGP0[D1ۉ[DSHHpHtHH[1[@SvHt1HHHPHHt [fDHGP0[D;1ۉ[DSHHHt HH[ [ATUSHHFH_Ht$HHH|$IHHtJLHt$HH|$H/tH[]A\fHWD$R0D$H[]A\H{HH|$t$HLHHSHH/tZMH oHHEH{@u HtDHSIH5~H/i7H81H[]A\HGP0H|$fHSIH5 HPHh7H5H81dHGH@HHtDATUHSHHH IHt>HHHLI,$t H[]A\@IT$D$ LR0D$ H[]A\øDUHSHHHHtHHHH[]H[]HOH HtH=5]7pH=;H=\7dH=7H=^7XH=2tH=}]7LH=,TH=X7x@H=&4H=][7X4H=H=X78(H=H=V7H=H=[7H=H=5]7H=QH=U7H=QtH=Y7H=QTH=W7xH=Y4H=U7XH=vH=V78H=AH=[7H=AH=U7H=2H=W7H=.H=Z7H=)tH=5\7H=TH=T7xH=4H=Y7XtH=ɿH=][78hH=ɿH=V7\H=ѿH=Y7PH=ѿH= U7DH=H=W78H=tH=MZ7,H=ɿTH=%X7x H=ɿ4H==V7XH=ѿH=5Y78H=H=S7H=H=S7H=޸H=ET7H=H==X7H=tH=UZ7H=TH=V7xH=4H=U7XH=HSHHHHHH[H[fATUHS萺I1MtDH58L臶HHtGHCfHSH9,tHyHHe[]A\D[]A\fD1!HHt)HH58LxH+uHCHP0낐fSHH dH%(HD$1HT$Ht$H譹HtHH5A8H詵Ht4HPt'HPHHH9tFHHHyf.HT$Ht$H<$-HD$dH3%(uH [1H趽/ff.@HR7HHWH8f.UHH=SHHR7H=HwHHEHH[]ff.USHH-R7H}Ht2HoW7DHOHWHMR0H}HuH[]ff.fSH=_:HCR7H=GH迴HHtDDHWHOHR0HҋHHu[ff.fHG`0DHHHE1ɺ1A"HHDHff.Ht@HҸHHDHeDHHDHATIHUHSHLHpdH%(HD$h1L"A@H޿ AA#uH޿= IfD$HAIHH)ȹ0H D$x[tTHAyLcIHA)D؃0H BAuttAHcA<,yHօyx$HcHHHTH) HH9ufHHHH\$hdH3%(u Hp[]A\@ff.t/tct>HHFHFHFfDfoP8foX8^fo%8fo- 8&nfo88fo @8Nt/tCuo&on)%8)-8fDoo^)8)8ooN)8) 8foD8HM8HGDoHG)8H&8DHxHH=]8%_81ff.fHxHHH=*8%48@1ff.fAWAVAUATUSHHXdH%(HD$H1m8H=|HCH=|kL-R8Dd-KTHJH9HBH0HrHteDH|$HdH3<%(HX[]A\A]A^A_H=L5=IF H=H(HuH-S=fr(;r,$tHщr(HJHxH1=H@xHPOH1HrHHpJ$KDHBHBHPHP9j$HB0 )΃0Hj(r,HJHDHD$HD$1HD$HD$ HD$(HD$0HD$8HH H=H3HHT$HT$Љ~8HRHQHJ_H@ J$H=H H@(@HBHHJ L5=MYIF H= 8H=8HH IH=H=HH;z=H=vHj=IFIV>)H¸?HAFLH+T=HIF(HIF L5=B$B HIFAvKDHBHBHPHPHH+5=HPHHHB$r HHpHuH@ H=HtH@(늾?@+=D<D9DH4@HH=j=eH N=HO=D9ssAɍqEGE1KIL)HH7HH8j1HAUATUSHHtMH-A7HIIH} THHHtHXLhH@ L`(H[]A\A]DH=7H5rH81fD1Ht HfA7H9WtHtHHt HtHBHD1H9UHSHHHt H@7H9Gt>H=tNHsHt5Ht0Ht7H9GtH=wtHk1H[]ÐHuٸUHSHHHt H>7H9GtH=_btHk(1H[]ÐHuٸUHSHHHt H<>7H9GtH=OtHk 1H[]ÐHuٸAWAVIAUAATUSHcHXHwH&IHLHM14fDLHUH+Iu\HCHLP0Ht=IHtz.L1HtHhHuLEt"HHu1dfHHHuH=7LH51H81'@LH}t1HkH+u HCHP0LHH[]A\A]A^A_Hi=7LH5OH81}1@HG(H+GH̸ff.HGH;G(| 1HPHWHG HGH鏸ff.@AUATIUH1SHeH1HLH|AŅmH+u HCHP0EH}(1LNxztLe(H}HtHEH/t}HV:7LeI$HH[]A\A]fDH}HtHEH/t1H:7H]HH[]A\A]H1[]A\A]HGP0HGP0w@HwH(ff.@AWAVAUI1ATIUHSHH(/HIƺHHCI.AAAHMIH,$H<$LHD$H#H4$LHLt$HH$LH$HLHHT$H$L$HT$HLHLD$H$裞L $HT$HILD$IHIuIALD$LH$P0LD$H$I(uI@H$LP0H$I/uIGH$LP0H$H*u HBHP0Ht$HH$HHHFHP0fI/u:IGLP0H|$t(HL$HH$HHuHAHP0f1H([]A\A]A^A_IFLP0#fH(IHtIL$$ @I/tJx1IHtLHHhL`HX Lp(H([]A\A]A^A_IW$LR0$HIuIALD$LH$P0H$LD$I(uI@H$LP0H$I/uIGH$LP0H$H*HBHP0I.H$IVLR0H$I/ofUHH=\SHHH(dH%(HD$1H$HD$HD$H7H-HHHD$H5LP1LL$LD$讼ZYH<$ H$HH|$HHD$HH|$HHHtX1HΖHHtH\$DH27H5ʣH8H+uHCHP0f.HD$H<$H/uHGP0H|$H/u HGP0@1HL$dH3 %(HgH([]1LD$HߺH5|K萻tH|$HD$Ht1!HH$HHHD$HHT$H4$HHHHXH<$Ht H/uHGP0H|$Ht H/uHGP0H|$HH/HGP0DvHHD$HoH|$H/u HGP0fDH<$H/H|$H/Hճ{ff.AUATIUH1SHٰH(H} HHH}HLƱH}1LA赱AEHuLuIHHu H-HHHHQI,$Au ID$LP0Hmu HEHP0H+u HCHP0HD[]A\A]DE1LHu1LA-fAAI,$uID$LAP0fDHOHW1HwLG H=>ff.SHHHt"Hx,H9C(HNC(HCH17H[H1Hu1DAUATUHSHHH}(HHHxuBH17HHC HC(H?HH+u HCHP0HH[]A\A]fDHEHHC bIHt:H}(HyI,$At/AtAt3HE HHC({fHx@ID$LP0HY07HHC(EHTH(铮SHHH/uHGP0H{H/uHGP0H{ H/uHGP0H{(H/uHGP0H[ff.SHHHtH/tiH{HtH/tJH{ HtH/t+H{(HtH/t H[ëHGP0H[鰫HGP0HGP0HGP0AVAUATUSHHȬHH{(H{ HH{説IHH{ 蕬IHtMH=07HLH(IHt0H[H=ԅ`LH=HH[1]A\A]A^!Hmu HEHP0Imu IELP0MtI,$u ID$LP0[1]A\A]A^@HmuHEHP0[1]A\A]A^ff.ATUSHHw H(XHH{HHHmIt^MthHsHK LH=/7HH"HHtJH[H=΄ZHH=HH[1]A\HEHP0Mu[1]A\fH{H/uHGP0I,$u ID$LP0H{ H/uHGP0f.HH~H9}HF1H)HHfHyH9~H)H1HGHHf1ff.fATIUHSHH=/7IHt'HXHLHHh yHxI@(I@[L]A\I(u I@LP0H+7H5:H8JE1[]LA\ff.@AUATUHSHH覵IHH}萵IHH} zHHHH9taH{LH9rPHLLHx=LHHH)HHH<3[]A\A];Hi H='7QHHHE(HC(HIHH{(HI,$Iu ID$LP0MtmHu LqImIMtNH}LI,$ILkMt+H} 袅HC Ht1肨HCHufH+t1HH[]A\A]f.HCHP0@+HoDHHHL)HH9qfIELP0ID$LP0LkM-SAUATUHSHHfHHt]H}TIHH} >IHHLLHHHH[]A\A]f+HtH=%7EHHt:HMHU 1HHHP HE(HC(HHHHCHuH+t[1HH[]A\A]軱H;諱HAwDHq(7H8i[1DHCH1P0f.SH=HHH dH%(HD$1tA1HL$HHLD$H5x胹tHT$Ht$H<$| f.1H\$dH3%(uH [cUHSHHHFH;5)7t+H;T)7t"@HtuHH[]@HHtSt4HuHHHt;Hu HH+t6H[]H)%7HH5H81H1[]@HSHD$HR0HD$H[]ff.fHHFH;(7t+H;T(7t"hHtBHHfDt&tH餤@1H镤D1HfHFH; (7tH;'7tHH[ff.UHHSHϓHtBH}HH{H+t H[]fDHSHD$HR0HD$H[]DH1[]ff.@AUATI1USHH蹣H1HHHФH1HH譤HmAtCEtMAAIt$ I|$HH+tBH[]A\A]HEHP0EuIt$(H?Af.HSHD$HR0HD$H[]A\A]ÐI|$(H3HH=Hmu HEHP0H1[]A\A]fH+u HCHP0H%7H5H8誗H1[]A\A]DH+uHCHP01UHHSH苡Ht>HHHXH+t H[]HSHD$HR0HD$H[]DH1[]ff.@AT1USHHHw(H诡HHH{HHmIu HEHP0MtfHs H{HHt9H{H轉HmtNH}H{H/tSLcH[]A\fDI,$uID$LP0fD1H[]A\DHUHD$HR0HD$fHWHD$R0HD$LcfI,$HD$uIT$LR0HD$fH$7H9FtH7HAUATAUHSHHwxH3uJ tfH9tyHv(H(tztJAuTH!7Hf.HY7HH[]A\A]f.H1[]A\A]fDtH #7HfDH}(uHsH}ݠZ蚟IHtH}(H豠ImuIUD$ LR0D$ Hs H} ~fAUATUSHHH8dH%(HD$(1HFHP`HtGHt=H1HtUHH HmuCHUHD$HR0HD$-fDH;7t?HPH7H5=H81#1HL$(dH3 %( H8[]A\A]fHs(HL$HT$HD$HD$LD$ HD$ tH{ Ht$ ʍHH.H|$ HtHD$ H/uHGP0LkHs HT$LIHH|$HtHD$H/0Hs HT$LoIHt8H|$HtHD$H/ H{HLL(HH|$Ht H/H|$Ht H/H|$ HtH/twMtI,$t[MtImt?HHmxHEHP01if.E1E1vDIELP0@ID$LP0HGP0HGP0]@HGP09@HGP0@HGP0ff.@SHH 1HuHSHsH=1[xHK HS1HsH=͌[xHGAVIAUL-8ATIUHS1IN Iv(H9|#DHHH<HtL9uHH9}1[]A\A]A^LHՅtHHHtH1DHWH1Ht HJH9Ht 韚Hx(鏚ff.@HHW@H9P(tH@ HHVfDLOMSHIAH9GuyHW II Iq(H9HHHHt H=տ8H9u.Lɿ8fHH9|WHHHL9tHtHHk(HS H[H7H52H8肏HC1[fDHHS I)u IALP0HC1[1fATUSH1H@dH%(HD$81ZwHHooKoS HC)$)L$)T$ HtHIHH5HunHHLHHuH|$HH/HmfD1HL$8dH3 %(HH@[]A\fDHHu HCHP0Hmu HEHP0H|$HtH/uHGP0HCHP0PHGP0H|$dH=5rHH= H1荢HOHEHP0@H=Z\H==\SHHHtH/t H[HGP0H[ІAWHIAVL5K8AUATUSHHL(H|$(HD$(LH LL!HLH+HAL$HMLE1II9%L9Cu L9{L9MLMcIIMS L\$0LHMuM9LDIM9HL!HLLMI9L9CuM9tIHLߺLD$ LT$HL$L\$ZL\$HL$LT$LD$ I+u0ISLD$8LHL$ D$R0LD$8HL$ LT$D$L\$H|$(HW(L9 L;HHH[]A\A]A^A_L\$0HH,$LH4$IHIKL\L!HHH+H@MIEHELHLD$ HL$LL$L\$WHmL\$ALL$HL$LD$ uHEHP0LD$ HL$LL$L\$Ex$HD$(H@(H9u%H9+u+EL 1ILILIHf.UHSHHH-7H9FtHHHHHU0HtxH8HtDHe8H9t8HHHmHPHHuHWD$ R0D$ H[]fDH1[]HVHsHHU0HuH[]AUATUHSHH9HFH;7IH;;7HL-8ƴIHLBHHHHHHHU0H?HHHHL9HHu HCHP0I,$H7HH[]A\A]HEI9E~ HLI1L%8I} IE(H9|GHHHH1HtL9upHSHHHH0HHHtL9uLHHH9}H7HH[]A\A]f.HHCHP0HHQHU0HtMHHML9DH7H H+tzI,$HD$f.1H[]A\A]HEHN7HI,$tG虝H 1H+tQI,$uID$LP01HSHD$HR0HD$mID$LP0IT$LR0HD$HCHP0ID$LP0#fUHSHHH7H9FtGH蟦HHtNHHU0Ht@HH8HH9H[]!fDHVHtHHU0HuH[]ff.AUIATUSH HHHÿ1IHH5,8L脰HHIu1HLBI,$It8H+tCHmtHL[]A\A]DHEHP0HL[]A\A]ID$LP0H+uHCHP0Hmt@H+u HCHP0HE1[L]A\A][H-7HEBf.SHHH=7؆Ht^HSHHXHXHPHP(HPH@ HHHu;HHPH7H HHH HIHHHHHZH[H=MHD$wHD$HPff.ATIUHSHHW0HHHt[H 8H9t/HEHP1HUHuHUD$ HR0D$ H[]A\ÐH(L`1HCH[]A\fHCH(L`1HCH[]A\øff.fUSHHW0Ht'H8HtBH 8H9t6HHkH/tH[]f.HGP0H[]1H[]DHG8HHGU1L8SLO 4?LPH_(MiMrI9|JIIIIHtL9u[HVHHHHIHHtL9u4HHI9}Ii 8#[]H6HHDHG8IPHHHH1H5M[HI1e@L_MLW(L IJ8IHt$LֹL9tILL_IJIBLG I9|HHHHLfHI9|HHHHtL9tILL_IJHHs7H5DH841Hff.fATUHSHHHVHO(dH%(H$1HGLF(HWHVHFHGHWHV HFHG HW HV@HF HG@Hw0H}0LC(H9H9AH9U(tpHM(H{0Hu0H9C(t}EuxL%t7H{L耱0HHC8HE8H$dH3%(3HĐ[]A\fDAHC(@HM(H9tHU(H{0Hu0DoE@o{@opoh o`0oX@)<$oPPoH`)t$o@pDC@DoJ)l$ DHDoR )d$0DP DoZ0)\$@DX0Dob@)T$PD`@DojP)L$`DhPDor`)D$pDp`DozpDxp}@rj b0Z@RPJ`BpH}L<HC8HU8HS8HE8Z~f.AWAVAUATUHSHdH%(H$1HAfML9|MMHLe(H]@I9MIL谷HIHE(L1Lm HnLuLd$HEHEMHt$LM(L=8LE H>L9HLnILML!HLH8tMLHQLY fLH!HLH8t-HI9uIHILLH!HLH8u@H8HLhHEHEMbI9t H|$o1H$dH3%(vHĨ[]A\A]A^A_HLg(H_@I9tcH_(HHH1HGHGpHGHH)HHELd$LuHEMJHGH9G?Ao$AoL$1HHAoT$ Ao\$0LAod$@Aol$P)D$Aot$`Ao|$p)L$ HG)T$0)\$@)d$P)l$`)t$p)$I$HGpHH)HHD$HEHD$LuHEMus/{ff.@ATUHSHHH; 7H9FHHHtLeHHHtnHEL9~?HUH RHU HTH9|)H=QHH4HHMH[]A\C1H[]A\DHVHupH+D$ uHSHR0D$ H#tH 7HHfD1@AWL@HAVAUATUSHLg(HodH%(H$1M9HG@HHLMHGpHH)HHBHBHB Lz(HB8H~9LL5#8H;HtHL9t H/uHGP0HHuM9tLk1H$dH34%(HĘ[]A\A]A^A_ÐH~oG@HHL1I)$AoO)L$AoW )T$ Ao_0)\$0Aog@)d$@AooP)l$PAow`)t$`Aop)|$pHGHGpHH)HHBHBHB Lz(HB8kxff.H3H,7HHH9AUIATIUSHH~H5< 7H9tH;= 7t ɩ1H-8ME IE(I9|KHHHH1H9tHu|HSHHH@H0HHH9tHuTHHI9}IT$ID$H)HI;D$ |XHQHH4LHMH[]A\A]HQLHG 1H[]A\A]I}H57Ө LãHHu!fHLtQH+t?H"rHHuHmu HEHP0$H gfD{HCHP0HmuHUD$ HR0D$ H+D$ )HSHR0D$ 'DATUHSHHLgHtSHCI9}?HSH RHS HTH9|)H=QHH4HHMH[]A\1H[]A\HmuHUD$ HR0D$ fAWIAVAUATUHSHHH~H57dH%(HD$81H9tH-7H9t ;I9t|IwHtsHEHH@HE HDH9E1I L%٦8xELHIG(HHt!L9tHPHHHtIM;o ~1HL$8dH3 %(HH[]A\A]A^A_DIH|AH7I9GtoL_HHu*fHHeH|$H/-HoHD$HuH+!輋HL@HD$(L_HtiHUHH RHU HTH9Lt$0Ll$ Ld$H\$(MLLHL{HT$0Ht$HruDfDHuHHIIH+D$ uHSHR0D$ {H+tBH|$D$ H/uHWR0D$ SHGP0@HCHP0HSD$ HR0D$ HEHH47rf.UH1SH0HtzH@HH@@H@H@HC(HHC0HC8HǃHtHHtHH[]f.H+u HCHP01HH[]@H;=U7SHtH1[D@HH=pu1[fATIUH-7SH9t-H7H9t H虣uHL[]A\fD[HL]A\AWAVAUATUHSHHdH%(HD$81HD$ H9AH~H;=f7H=H;=7t$H5u7H9t HL$ @1HL-ˢ8H{ HC(H9|NIIII4$L9t HHQHHHfH0IHL9tHu\HHH9}HHL$ H+u HCHP0H6HH\$8dH3%(HH[]A\A]A^A_fIT$HHHL$ t+tHL$ ,IT$I4$HuH+ 1@HD$L|$0H$HD$ Lt$(HD$H$Ht$MLH1w2Ld$Ll$0HI$LLHHHt H(tHHH[]f.HPHR0@H}H5-7@uH56Hff.@UHSHHJHt=HHHHt*H(t HH[]fHPHR0HH[]@1HH[]ff.AUATIUHSHHH6H9tH;=m6t H{tgI|$H9tL-N6L9t HYtHLH[]A\A] I|$L3uH(6HH[]A\A]fH}H56uf.HH HHH;=6t HHUHHSHHHHt#HHHuH+u HCHP01HH[]@AWIAVAUATUSHHI9RI1xHH,I~H;= 6tH5x6H9t IGI9F1L-ϝ8IN IF(H9|RIIII4$L9tHuRHSHHH"f.H0IHL9tHu$HHH9}HH[]A\A]A^A_fDHIT$LAW0Ht3HL9hH_IT$I4$H-E@Hm%HEH1P0LMI I~H56LL-8ۗIHtL[fHHtcHIHtzHHLAW0HthHL9tHtLHHutHH+uHCHP0LeHHuI,$u ID$LP0H I,$u ID$LP0Hmu HEHP0H+uHCHP0D1ifHL[]A\A]A^A_f.UHSHHH~H;=6tH5 6H9t 袛tvHH3HHt&HHPH+t2H=6H?tHEHHH[]HGP0HCHP0H=W6H?uH{H56rH 6HAUATIUHSHHHA6H9tH;=6t H˚tgI|$H9tL-6L9t H詚tHLH[]A\A]0I|$L胚uHx6HH[]A\A]fH}H5=6Puf.AWAVAUATIUSHHH~H56H9tH-6H9t Il$HHbH9I|$1IHH6E1L=8H9CIL$ ID$(L9|OLHHHuHtL9uOIVHHHH0HHHtL9u$HIH9}HL[]A\A]A^A_fDHUHS0H=HHL9IYHIHHIHHL$]HL$uHHLIt$ ID$(L9\LHHH)HtL9uIVHHH!DH(HHL9t HhHIH9}H{HLAHu6H9C0HHL[]A\A]A^A_jf.HUHuLImuIELE1P0E1pAUATIUHSHHH6H9tH;=}6t H苗tgI|$H9tL-^6L9t HitHLH[]A\A]I|$LCuH86HH[]A\A]fH}H56uf.AUIATIUSHH~H;=6tH86H9tH˖1H-8ID$I9EI} IE(H9|NHHHH1HtH9uWHSHHHH0HHHtH9u,HHH9}H96HH[]A\A]f.HHQLAT$0HHHt H9[HO6HH[]A\A]I|$H56ߕHL,HHt4HLH+jHSHD$HR0HD$QfDH1[]A\A]ATIUSHHH-O6dH%(HD$1H$H9tZHw11ILByu&1HL$dH3 %(H[]A\H4$H\f.HH=atHs11ILxtH$Ht5H9Xt;HHHpHxgH(u HPHR0HD<HtHBfD1HH<H bUHSHH[tH?6HH[]@H{H5e6H9t tQH6H8xit>oqH=6H0HHt"HHH+u HCHP0uH1[]ff.fATUHSHHt$H6HH[]A\H{H56H9t ;tgH6H8htTpH=6HpIHt8HH-I,$uIT$D$ LR0D$ ff.1H[]A\DHxb1@AUATIUHLSHHHtRH}I~*1HtI9t Lt!HH9]HL[]A\A]fImtHE1[L]A\A]IELE1P0HL[]A\A]DAUATIUSHHHL-6H-:6L9tH9t HȑttI|$H9tL9t H譑t9H{HHHtvL9tLHtPHH[]A\A]fI|$LcuH-X6HEѐH{LDxf.Hmu HEHP0H1[H]A\A]ff.@AUIATIUSHHHH->6dH%(HD$1H$H9tH;=6tH谐H{H9toH藐ucHC1ILHp1ttVHH4$HC81HtHHL$dH3 %(uIH[]A\A]DLH=:]AufDH56tH{S2^fAUATIUSHHH~H-16H9tL-6L9t H踏tHLH[]A\A]H{L茏uHHH1Ht%HLxH+uHSHD$HR0HD$H[]A\A]ATIUHSH~H;= 6tH5|6H9t H\HcH>HEI9D$ID$8HtHU8Ht H9[HL]A\@HEI9D$~t[HL]A\fDHL@HHH\|H+u HCHP0xf@[]@A\ElDHEI9D$nHz6H[]A\ÐH}H56H6H[]A\1ff.H~~MATIUHS1HH9]~HtL)u[1]A\DH6H[]A\H6Hff.ATUHSHH~H56H9tL%36L9t AtHHt-HH[]A\ÐH}LuH 6H1ff.AUATUSHHHFHtnHHI1%fHPHHu HCHP0HLI;m}!ItH0IHMuHHt,HL[]A\A]fDHHH[]A\A]fHCHP0HL[]A\A]IUHSH.HHtHHH+tH6HHH[]HCHP0@ATIUHSmÃt[]A\H}H5 6H9t 裋tHX6H8 atiH=h6HHHtHLHmuHEHP0[]A\ff.HSHcHt H!i1HfH~teATUHSHvIHt8H}~4HH9]~HtLuI,$t%E1L[]A\f.HGHHID$LE1P0L[]A\f.AUATUSHHst&HCH=*EHpH1[]A\A]AH{HmHHHyHmIMtvID$LHP耕I,$Iu ID$LP0MtFHCH;6HpLH=V1AHImuIELP0 f.1HVHH[]A\A]H1[H]A\A]HEHP0MGHCH=BVHpLH=6V1w@Hbff.@AVAUATIUSHoH=UnH 6H=tUL(FA1I$AtLFI\$(H~9L5N8fDH;HtpHL9t H/uHGP0HHuI\$(ID$@H9tHHID$L@AIAt~-[]A\A]A^@Hf.[L]A\A]A^`u[]A\A]A^ËH~~MATIUHS1HH9]~HtLu[1]A\DH6H[]A\H6Hff.ATUHSHH~H56H9tL%6L9t !tHHt-HH[]A\ÐH}LuH6H1ff.H56H9FsAWAVAUATUSHH8LO LG(H$L!HLH+HHIIE1L=U8I9sH9Ku L9=M$L9McMS L\$IMfDMuL9LDIM9LL!HLH+HL9H9KuL9t} PA~ H}I;~'HE Av 1H@ :IvH HH}0HH@HDHL$(LT$ LL$L\$O`tbH+HL$(LT$ LL$L\$ML\$H,$LH4$KL\L!HLH+HDMIEH8H[]A\A]A^A_LHL$(LT$ LL$L\$T=L\$LL$LT$ HL$(H+hHHL$(LT$ LL$L\$=L\$LL$LT$ HL$(wH+HHG0L} A~ +HUI;V H} Av 1H@ $@IF0MVHIDH@ HE0HH@HDHHL$ LL$LD$L\$r^H+HL$ LL$LD$L\$fDMF0@I~HLHD H}HDHHL$ LL$LD$L\$;L\$LD$LL$HL$ H+LHL$ LL$LD$L\$T;L\$LD$LL$HL$ IvHH}H1fH==<HtH/H)<tfDHG`0HH=6ff.fHH= 6}ff.fSH5d6HHH9tH;=6t tHC[H{H56ЁuH=NyH[DSH56HHH9t 蓁t H[H=:Ny[ff.ATUHH56SHHH9tL%#6L9t 1tHH[]A\fDH{L u۾H=My[]A\ff.@UHSHHHH5%6H9t 軀tHHH[] H=ZMxH[]fUHSHHHH56H9t([uH{H546H9t BtH;uHHH[]G H=L&xH[]f.AUIATIUHSHHHH;=6tH526H9t MU LIE(M9|XMIII9Ht Hw8H9uRIpHHHH]8H8IHHtH9u$HII9}I1LH[]A\A]@ILIAH}I$H[]A\A]DI}H56@ H=KvSH546HHH9t ~tH[fD, H=dKv1[ff.UHSHHHH56H9t k~tHHH[]6 H= KUvH[]fH=KpxSHH H/uHGP0H{H/uHGP0H{H/uHGP0H=<t H[2WfH<[HOHW1HwLG H=LK>bff.HO HW1HwH='K4fHH~u)Ht H6HuH6HHH6H5BKH8M1Hff.HGH@`HtHt t@HH6H5KH8L1Hff.@H6H9GtH6HH9FuH9AVAUATAUHSHH2_IH_IHHCDLLIEHCIE HC IE(HEIFHEIF HE IF(HIEIE IE(IFIF IF(ImuIUHD$LR0HD$I.uIVHD$LR0HD$H[]A\A]A^ÃwH&t Hv6 @H6H@Imu IELP01ff.H=HuH=<HtH<Tff.@SHHH͝<HtxH<HHt1HHt8HHt?HHP HXHpH[fH6HHuH6HHuH56H=Y6HT$H4$KtH4$HT$HsSH=HHH dH%(HD$1H$HD$HD$+tgHHHD$H5P1LL$LD$]ZYt2Ht$H<$Ht,HT$|HL$dH3 %(u&H [@1@H|$H1H$Gff.@ATUHSpSHt{HH`SHHtX1HH |H+It*Hmt L[]A\HEHP0L[]A\fDHCHP0HmuDH+u HCHP0E1[]LA\DAWIAVAUIATIULSHHH L56L9HGTIHEL9HGSHHHHII$L9tvHGSHx;IEH9I9$1H}H[]A\A]A^A_fHHyGIHCI$L9ufH}HHIIEf.IIL9(1BD~fDAWIAVIAUMATIUHSHH H;=t6LL$ LqgIEHHH9qHID$HH}H;=6t2LgwIHI9IELH?H)HIH}H;=6Lf1IHIuI9H?I)M'IuLIHxZtH9~dHHHHL$HHH1H[]A\A]A^A_@IH1+IIuIHyH9} H)HCHD$HH1[]A\A]A^A_LIIEH?I@LI'I]H?I@HIEDL1H6H5:CH8`EfDAWMAVAUIATIUSH(H H;=Z6H$HL$HHH>1OIHaIEI|$H;=6D$LHqHHD$T>LD$WLǺHLD$PLD$I|$H;=6LD$LLD$HIH=LD$6HLLD$PLD$HEf.H $HLHL$L!IHEu HEHP0IHP1IHubIV$LR0$H([]A\A]A^A_f.VNHHHD$IHH$HH([]A\A]A^A_HD$IHH$HfH+t}Hmu HEHP0MtI.uIFLP0H([]A\A]A^A_H6H5@H8BHD$IHH$HH+FE11HCHP0Hp|DD$IMEI$HEuDH$MIHtHLq5HHI|$H;=Y6D$\HID$ILMHILL5I,$LD$IuID$LP0LD$M5DHD$IHH$HI(pI@LP0aHD$IHH$HH+HCHP0@fLLe4LD$II(tM1LLLL$ MLL$MDIMI)}IALP0MkHEI(I@LP0IGHD$I@LP0LL$h1LLLD$vLLD$x0HEMkHHEI,$tiHEIMMHD$IHH$HI(u I@LP0I,$ID$LP0IID$LD$LIP0HELD$IImt HEMIELD$LMP0HELD$HD$IHH$HH+P@UHHSH(dH%(HD$1sHt}HH8xwHHL$HHLD$kH+t?tIHL$HT$H=<1H4$SHL$dH3 %(uPH([]HCHP0u1DHI6H5~<H8>H+uHCHP01<AWIH50|8AVAUATUSHHGH+HTH5{8MoIIGHn+HTLHD$PHHbHH,MCE11fDHAITHHTIcHL9|IcI9mDAIcHL9}YIwITHHH+D$HHHH0&yHmtsH+u HCHP01H[]A\A]A^A_fIw1HHH=;QHmtAH+uHSHD$HR0HD$H[]A\A]A^A_HEHP0@HUHD$HR0H+HD$qHmbHEHP0SfD1E1fDAWIAVAUATUSdH8LgH<$Lt$ Il$dH%(H$(1HLd$Q9HLHdLt$HFHL]ILk(I$L M]L1E1HHD$H cHHdL8HH8HDLH9D$HLLLN=LcHLK*H8, IfA$Ml$I/u IGLP0H$AIcH;PHt$HHHL MH$H|hIH*1H$(dH3 %(HH8[]A\A]A^A_@AE...MeI/u IGLP0)H|$fA$eHE1HD$DH5a91HHH6H81keDI/TIGLP0GM8ff.fATH5w8UHSHGH^'HPH~)I1@H|Ht H/uHGP0HI9u[H]A\,3ff.ATIH5w8USH&H*PLHHbHHt>I$H5ew8&HOHCH~1DHDHH9uH[]A\ff.AWH sv8AVAUATIHHUH7SH(dH%(HD$1LL$LD$HD$HD$$NH|$H57=uHD$H/HT$HtHR I$H5uv8HX%HOI$H55v8I%HNI$H5u8H%HNII9L9H9L+IHgHHt$HFH1HVHHITHH9HuHTfDHy6IT$H56H81hH|$H/uHGP0E1HL$dH3 %(L*H([]A\A]A^A_L9/H6IT$ILH57H81hf1fDH9}[MIIM)I0I$HHJ4(wPHtHIDHH9tH|$HuH6DH|$H/,HGP0 H|$H/HU6IT$ILH55H81gH-6IT$IHH55H81g4HTfDHDfDAWAVIAUIATUSHHVHHXL%6E11I $ fDAH9A_HcHHHuHs8I}LH5s8HIEH)Hu8H)΁IH6HIIIEIFIAG)KHHHHHH5p8L5HHP1HHtHHPH6H HHH HIHHHHHZH[f.H=HD$/KHD$HP@"H=$-TH1[HGtHFtrAWIAVAUATIUSHLoLvT$ M9LIN1HOtFHH9t=ItI|8yH1[]A\A]A^A_@H 6H@I9~;I9~6|$ t|$ tTHT$ ItI|H[]A\A]A^A_3(D$ wH -AJcH>1M9t$H}6HH[]A\A]A^A_f.H61M91M91M91M91M9DUSHH_Ht-HoH=ACHHH=HH[1]?H=CHH=H[1]m?ff.fHxH9w~HDHHH6H5H8v*1Hff.@AWAVAUATUSHhdH%(HD$X1HGHD$HICHcHt4HL$XdH3 %(Hh[]A\A]A^A_DH\$ HH\$1IW(HD$THHRHNHD$H O"H|$L%6H*(H>M,$(HbH6AE AE ;~H=*7I|V+HI~>M4$+H AF HH'6AN p΃d4@9Mt^H|$LMIE HIEu IELP0HH9l$H|$H5! =@H|$$L^[1W+H=I$+HHD$=HD$@$LH=ב|RH=dRH|$D$T~PH|$)w<Hw<HPfDH[fDH=Q6HyMHuGH=|$L1ATHUSHGHIH9HNH9HHLHH9tAH)IH6Ht%H~ I41HLHHLHH9u[]A\@H6H9GuHHf.HHW1]H=HH17ATHHUHSH H=D6dH %(HL$1HD$H9HHHL`HL0HM~1fDHLHHLHI9uH+uHSHD$HR0HD$H\$dH3%(uVH []A\fDHLD$1H Gd8H" tH|$HtNfD1@4l ff.ATUSHHH0dH%(HD$(1HFHP`HtQHtGL%6I4$gHHHCH H9 HDHfDH;y6HsHL$HT$LL$ LD$VH|$ HH|$uH|$uH;{fD3HtjHL$ HT$H~]Ht$LDH<HtHP@HHHHHJL9u%HPH6H5!H81R1H\$(dH3%(ucH0[]A\Ð[6H1HuHCHI<$H5øt 1H6H9C/HHfD13fUSHHHHHuHJ6H9CHHH[]HHu H"6H9CtHHHH9|xH2HtHxHtLCE1J4f1M~"fHLH HHL9uHII9uH[]1Hy?H[]H1[]2USHHFHHH~H}xe1HtRHuH~1HLHHLHH9uH{H~'H41f.HLHHLHH9uH[]fH[]UDHPHe6H5H81O1HGtHGHH=uFHHfHHGt;HxH9w~HDHfDHA6H5LH81HH=dE1ff.HHGtCH?u=HxhH9w~bHDH8HHtH/t 1HDHGP0HtH*u HBHP0H=rEHtH*u HBHP0Hd6H5uH8fDAVAUL-16ATUSL9ot[]A\A]A^fDHGHHHtLwIM~hHoHt1IlHtHE@t/HHHt H҅tHEL9uHEHH{HI9uID$IT$HID$ID$HIT$HBID$[]A\A]A^SHHPHt$(HT$0HL$8LD$@LL$HdH%(HD$1HD$`$HD$HD$ HD$.HtVH~QHPLD4$LL$H|$%fLH HHHJL9t/vHHfDH\$dH3%(uHP[DHtHGt UDHH=KC1H@AVAUATUSH/HHUH;-6ILuIMHEHfI9HEHHHt&HUHHEHEHHUHBHELM9~0H|HtHDH/uHGP0HI9uLHT0HH HM9HCI]HkHHHtH=U8HCHHCH6HHSHHRHSH*HHh1[]A\A]A^1HtHmt"L,HIE[]A\A]A^fHR0M)J|1JHFuMHD$HXHt Le1@HDI9GtEHL9|HLL[]A\A]A^A_##H~ uH5€8L,u@HEfHI9HDLHIHtHH@LHHt1IwHL$LH9HDHImHu IELP0Hmt8HH[]A\A]A^A_fDHmHEHP0 fDHEHP0@UHHSHH6H0HHtHxHH[]D$Hu,HEH@hHtHHtHHx HHH[]HfUHպSHHH5tkH(dH%(HD$1LD$r"tVH6H|$H0HHt!HHL$dH3 %(u(H([]DHD$#Ht$Ht@1? ff.@UHHSH5jHӺH(dH%(HD$1LL$LD$!tCHT$Ht$HӃt%H6HHL$dH3 %(uH([]#Ht1 ff.fUHHSH5,jHӺH(dH%(HD$1H56LL$LD$HD$1!t+HT$HH|$HL$dH3 %(uH([]D1 UHHSH5iHӺH(dH%(HD$1H6LL$LD$HD$1 t+HT$Ht$HHL$dH3 %(uH([]D1w UHHSH5 iHӺH(dH%(HD$1LL$LD$t9HT$Ht$HӅx&H6HHL$dH3 %(uH([]@1 HW1HJ(H~HGHHB HfAWIAVAUIATIH5z8USHI5HIl$IH}HHILxH~1@ITHHHTH9uLHL8H+Ht2I.tHH[]A\A]A^A_f.IFLP0@HCHP0I.ufD1@UHHSHHVHHtTHHWHHHtX1HH1q#H+t H[]@HSHD$HR0HD$H[]DHHH1[1]+#1@AUATUSH1H(dH%(HD$1HtqHhIHtlHD$Ld$Hl$1LHH/tDHD$HpH>~]H;56Ht$tLyImu IELP0E1HT$dH3%(Lu&H([]A\A]f.HI6HD$oZf.SH5x8H3Ht+HPt[@H(uHR01[[H36Hu1f.w-AWAVAUIATUSHH8dH%(H$(1A-HtlHD$(HkI1HHD$(HHD$(H9}mHSHIcDH;B}HRLH4H863yI,$@H$(dH3%(vH8[]A\A]A^A_LLl$@cHLH1:HD$(HcHD$8HD$HD$0HD$HD$(H$HL$HT$LH4$z-HH|$0Mt6IH)HtvHHt$i.HHt$LHHDHgH1HHI/u IGLP0HcHCH=SD@,DAHAH HugL18HH봐HY6LH8~I,$ID$LP0sff.t.H08HtHHH8H2fH(AWAVAUIATUHH5zv8SHH/HHHLH+AEH5yQ8H/IHHmIH t?HL HHtgHL\H+Au HCHP0ExDHI9uI$HP1I$HH[]A\A]A^A_DHCHP0HI,$u ID$LP0H[]A\A]A^A_f.kfD[H1[]A\A]A^A_f.IT$D$ LR0D$ H[]A\A]A^A_fD3ff.ATIU1S.)Ht#LHH;u H,HH+tH[]A\fDHCHP0H[]A\fDATH5t8IUS-HHPH H(tv(HHH5~t8L-HHHHuKHS,IHmu HEHP0H+u HCHP0L[]A\HR0E1H@0HmHdHEHP0HZE1[]LA\@H+I|'HfDAUATIUHSHHdH%(H$1HHt LՅuRH`Ht LՅu=HXHt LՅu(HPHt LՅuH1HtLH$dH3 %(uAH[]A\A]fDILGH M L=LP E&fDSHHH5H dH%(HD$1HT$tDHHHt4Ht$H~@HH+uHSHD$HR0HD$@1HL$dH3 %(u H [H 6H5 H8*1qATIUHSHHHt HՅu-H{Ht LՅuH{ 1Ht[LH]A\@[]A\ff.SH_.HHPHHEH[*f.uHH@tH(Hff.HGHHt$HHt HfDHA6H@HH56H5H81HHH6H9Gu7HOHcH9tH6H5H8111HDH6H5rH81Hff.ATIUHSHHrtH{L[H]A\fD[1]A\ÐUHH1SHH6tHH66HH[]H1[]ff.@ATIUHSHHt&1HsLՅxH؋6H[]A\[1]A\ÐAUAATIUHSHHHtHsHDL[H]A\A]H1[]A\A]DDDrfbf1UDATIUHSHHtHsL[H]A\fD[1]A\Ðf.UHH1SHHtHHH[]@H1[]ATIUHSHHRt01HsLՃtHG6H[]A\fDHt[1]A\ATIUHSHHtHsLՉÃuyHt [1]A\DHc[]A\ ff.UHH1SHHt,HӉÃtHHc[]h  HtH1[]ff.fATUSH~HHu+HvHIHHt+HHL[]A\@[1]A\Htff.UHH1SHHt,HHHtHH[]fD;HtH1[]ff.fUHH1SHHft,HHHtHH[]fDHtH1[]ff.fUHH1SHHtHHtH[]ÐHtH1[]DH6HD$H:HD$ff.fHu'fHHtuH9u @HH6HOH5H81+1HÐHtHt2HDHH5Hτ6H81U+1HfDHH5ff.UHH ˊSHHHHHvtBHCtHtBHHH\$(dH3%(uXH8[]DHD$HT$ 1H9uHD$ 1HuH}6H5HD$H:HD$띐1HH;=16t'HH5ac8HtHHfDH=Ac8HtHHu6H851ΐATIHHUHS+HtUI<$HHHHtgHHHmAt5H+tExD[]A\fHCHP0Ey\E1[]DA\ÐHEHP0H+ufD3H+AuHCHP0ff.AWAVIAUIATIUSHHG0H9F0uH@H9@t?IMMD$LE1H{6H5:H81x"HD[]A\A]A^A_fDHLLHLsuL f.LLHLKADžuH9M9t.Ho{6IMLH5MD$H81!eDIH H; H9tvL H Mt;Ht6LHL$L$0uL$HL$I@H f.H9K `H;M V@ADH;uHxfDH; \HSf.ATUSHoHHFHt^tUIHaHt_HHEI\$1HPHUHt []A\@HEHP0[]A\Hy6H5H81c 뾐HPHy6H5H818 Hy6H5PH8sfDHW HGHt'HRH5xHtHpH=1DH5dxHtHpH=U1f.H=YC8HtdUH-|SHDC8HfDH8H;Ht"WHC0HuHH8r H;HuXB<H[]f>B<DAUATUSHHH~uHHt HB u&uuH0HH1[]A\A]DH(HtHYH9(tHH98tHx6H5RH8:H1[]A\A]D1HHHtHH5198HIHt}H1H1IHtfH=88AHtCLHQIHt0HHw6HSH5 H81Imu IELP0I,$u ID$LP0Hm2HEHP0#ff.fH~AVAUIATUHS1 HH;]}^HDHPtLhMtLIHt@HL=tI,$uID$LHP0H;]|[]A\A]A^S끐ff.@SHH HWdH%(HD$1HGHt$HHGHGHHWHBHT$HGHHPHtHHT$Ht$H<$AHHHt H/kHHt H/EHPHt H/HXHt H/H`Ht H/HhHt H/HHHtH/tH(HtH/t]H HtH/t;H0HtbHCH@HD$dH3%(H [HGP0HGP0HGP0u@HGP0G@HGP0!@HGP0@HGP0@HGP0@HGP0AUATUHSHL'MHHHH1A HHtHHL HmAt3H+tHD[]A\A]HCHP0HD[]A\A]HEHP0H+ufDH IHHZAHHHH1҃tuHt6HHH@Hqv6HHHDATIUHSHGHHu1Hju6HH u@HUu6HEH1[]A\fDI$H|HCH tH1H5281HHt1HHEH+tHt[1]A\HCHP0HEI<$HtI$H/uHGP0]HHtKHt6Hff.HHHH*1҃tuHxs6HHH@Hu6HHHDATIUHSHHHtRHsHHHt%1HAԃt@Hs6HH[]A\@HD$FHt$Ht@1H[]A\D#Ht1f.ATIUHSHHRt>I|$HOHH[t"1HLՅxH-s6H[]A\@[1]A\fUHպSHHH5BH8dH%(HD$(1LL$ LD$taHt$H|HHt3HT$ HՃtDHr6HHL$(dH3 %(u7H8[]fHD$Ht$Ht@1@Ht1mff.fSH~H_u0Ht HB u1[f.HHtHH98tHH9(tHyo6H5JH8[UHSHHHt HB unHtHCtHCHHux11H1HHH"H+t H[]DHSD$ HR0D$ H[]HHtHn6H5H8Hn6H5H8fU8H=SHHo68H=H~H='.8HkHt3H}HHHtHH[]f.HtH1[]DHH[] f.AWH5W.8AVAUATUSHH( Ht.H1HHmIH(L[]A\A]A^A_ÐHq6H8QaDH HHtH8Ht7H^fDL%o6LkI$H5-8IHHt]H;vo6H@HEH}HEHHEH7f.HEHP0H-IHtu1HL1H5,8 I.Hu IFLP0HtGH;-n6{HE_HRl6H5#H8sHmu HEHP0fI,$uID$LP0fDE1mHD$HtHEE1HD$H@H|$HHL$HHD$HHH|$HGP0f.H|$HL I.uIVD$LR0D$I/uIWD$LR0D$HD$H;EumIL9l$VHEHN4ILIH{I.u IFLP0Hlo6H8t0뙐LeHYj6H5H81XHmu HEHP0HL$HHD$HHmHAHP0^fDHHPHUHHIUH5HZj6H81HT$1LWI,$Hu ID$LP0IHAHmu HEHP0HL$HHD$HHHAHE1P06fAW$AVAUATUHH= SH(:L5Cj6$H=M&H]@Ht HH81dH1[]A\A]HHHSH59H\6H810H1[]A\A]HSH\6H56IMH8I1I11 ff.AUATUSHLnM~LHHvI1u)fDHI9t&Htt LAuI$H[]A\A]fDAUATUHSHH8HIIHHH;-]6tBH{HtHCH(HtLLHЅxSHH[]A\A]DID$tI|$uMtIE tLHufH+u HCHP0H1H[]A\A]HZ6HWH51H81rjff.fATIUHSH~tLHH}LtH]HH[]A\fDH5y@8HHHtiH@tH;]tLHuH+t1H:Z61H5qH8YH[]A\ÐHHEH[]A\HCHP0@fAWAVAUATUHH=GSHHH(dH%(HD$1HD$HD$1HL$LD$HHi[6H5H|$Ht{HD$H;[6t]HH|H{HT$H|$HHH}HUHE 1HL$dH3 %(UH([]A\A]A^A_11f.H=<oHxY6H=$HLsMMf MAD$IxHD$HID$HHLhM1L=d>8fHI9ID$HH|LuIT$PIcD$HZHD.IDH$H V6H9HHxH|$HHG}HPH]W6H5VH81\@fD1|H|$H7HW6H5<H8a@IT$XHt-ID$PHHH~1:u?<t2HH9uHV6H5H8cfIcT$HD.IDH@HD$HwDHqV6H5H8HQV6H5pH85H.V6H5H8tHV6H5H8VHU6H5[H88ff.HtH;5X6tHtHHAUATUSHHoH;-X6HGtHHHH[1]1A\A]QIHHIHt:11H8HtIUHHHPHXL` H[]A\A]D1ff.H@AVAUATIUSLvM~`I1 IHI9tLIDLHhHuLHquH&U6H5H8G[1]A\A]A^@[L]A\A]A^ff.t+JwHcHtHpHf.1DH H=1Hff.AWIAVAUATIUSHH!Y6H9FMXMIMnHHIM}1 @HI9tIDLH[HHtIHIHt$HX6I9D$t.HH[]A\A]A^A_@IFLP0HX6I9D$uA|$ I|$dLtAA\$L-5<H[IDHxHhI$H/uHGP0H[Mdf@~ yZI|$dAAAD$H @H<H;L9`Hh@HufDL訰11ff.AWIAVAUATUSHH(HcFHH=YLghH-MaIXHCxE1E1HD$HD$5H;W6CH; T6MwAI8A9o^Iw0HbHHH@H;P6uLA(Iw0I9p0uH;5t<t[H=K8H5d<HH8L<H8Hx0HtH9uIH8Hx0IHuILA(H<HH$H=<E1>HShH-HtHtH8t MIHHHzHc@H=wH="HSpH-fDHAHH9PH8I9H8I8HD$A9oHD$HtnAuhI$H(L[]A\A]A^A_f.L;d$OHP6HD$H@HI94HT6HD$#M4$H(L[]A\A]A^A_fH=vXLgpH-MLfH89htH([]A\A]A^A_HH=HS`H-|fIH=BLg`H-3fMt[M9tVIGI9@lHqHHL$SHL$HT$HA0HH9¸DE+MwL<ff.USHHH6HtHHHTH3HuH1[]AWAVAUATUSH(dH%(HD$1HIILt$HHD$Ll$D1LLLt|HD$HXH;~H;P6tHHt HG u3HH(xHhHLRy!LhHwD1HL$dH3 %(uH([]A\A]A^A_rfATUHSHH`dH%(HD$X1 _<uIH=8H58Lt(H fH8H8tH9h0uHH8HH8uHH$LHtz@HH9v;Htf9Hu H8H9wHHHHuH<$t:LHx/HhLHHT$XdH3%(uH`[]A\1bfUSHHt2HxHHH[]DH[]@HL6HWH5H81 DSHHHtHH[1[@SHHHt"HPHHtHSHH[H[f.f.AUIATIH5 8USHHHH1HHmH}HTHKHSH HCI$HHC IEHH+tGI$H@IEH@ 1H[]A\A]HEHP0tHQ0HHH5 8#HHtS1HI$H+uHCHP0I$HttH@IEH1[]A\A]fDHu>I$IE>HRJ6H5+H81H+u HCHP0 HPH5H4J6H81I<$HtI$H/uHGP0I}HtIEH/uHGP0HQH5aHI6bHPH5HPHI6H5^H814I<$HGI$H/5AWAVAUATUHSH8dH%(HD$(1oIH6AHH1H\H5KI,$HJfHL$(dH3 %(HQH8[]A\A]A^A_f.HD$HGHD$H8HD$HD$ rHT$Ht$H|$H|$Ht-XHOH|$HtHD$H/fHhIHHT$ Ht$H"IHH5 8HBIHHD$HXH{IHxHEHIG1HL$H~HTHHITH9uLL$ LD$LLL1H|$HHt H/uHGP0I/u IGLP0I.IFLP0HD$HGHD$H8HT$Ht$H|$)H|$hHHH58H H+Iu HCHP0HT$MHuHL$1H|$IH/uHGP0H|$H/uHGP0M'HIHkHT$ Ht$HLL$ LD$1LLL:I,$H|ImI.wH|$H/HH|$ H/HGP0DID$LP0Ld$M1E1H|$Ht H/uHGP0H|$ Ht H/uHGP0MtI,$u ID$LP0M?Im4IELP0%DH|$H/uHGP0H|$H/61Ld$MVI$E1HI$-1ID$LIP0D1M XHGP0T@HGP0@ID$LP0tIFLP0zIELP0`H\$HH+LIbDHPH-D6H541H81DHD$H1fD1HD$HfD1HD$H1@H*u HBHP0H|$H/HG1P0sI,$u ID$LP0Imu IELP0I.KIFL1P02fI,$-ID$L1P0HB6H5H8:H|$H/[HGP0OI,$u ID$LP0ImIEL1P0f.E1#1<1E12fSHHH5HdH%(HD$1HT$D$1t t$HHL$dH3 %(uH[詵fATUHHH5g2SH dH%(HD$1HT$D$EH= <H58HHHH}H5i8HH(L% <t>I9H+t$HHL$dH3 %(H []A\fHPHHD$R0HD$I9tMDHD6H58H薣H/ <H7fD1@sfD1HH+eHD$HSHR0HD$LHCHP0.fH+HD$t1 fATIH5 8UHSH"HLHÿ1gIHtW1HHrI,$HH+Ht=H=Hmu3HUD$ HR0D$ H[]A\H+u HCHP0H[]A\f.HuLH6H[]A\DID$LP0dHCHP0WAUIATUHSHHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$L$HD$HD$ D$0HD$HH}u{1HH1HHHmIt9H+t#HL$dH3 %(Lu}H[]A\A]fHCHP0@HEHP0H+ufDHH HHE1@IHuH|B6IuH88p~ff.SHHtKIH5y"81H[HHtEH1HPHHt [fDHGP0[DHuRH5j#81H붻SHHtKIH5!81H;RHHtEH1HPHHt [fDHGP0[DHRH5"81H붻HHQ1H58d@S1HH5!8HBHtmHHs>6HH0hH+tHx#H[HSHD$HR0HD$UHu H9<6H5H8zf.HH H581HHP1H58@HHP1H5y8d@HHP1H58D@HHP1H5y8$@HHuP1H598@HHUP1H58@HH5P1H58@HHP1H5y8@HHO1H598@HHO1H58d@HHO1H58D@HHO1H5y8$@HkH5>81HKH581H+H5~71H H571HH571HH571gSHHtKIH5Y71HN;HHtEH1HPHHt [fDHGP0[DHdNH5*71H붻H+H571SHHtKIH571HMHHtEH1HPHHt [fDHGP0[DHMH571SH붻HHM1H58$@AUH57E1ATUHSH0HH1]HH1HHHmIMtaEID$H;;6HPH 86H5TH81I,$u#ID$LP0H+tH[]A\A]ýH+uHCHP0H[]A\A]fDHEHP0Md{Hu4H58HA1HHPHukLh<SHH dH%(HD$1Ht$HHT$H57HHt411HHHtJH(u HPHR0H+u HCHP0HT$Ht$H<$HD$dH3%(uH [ÐHHUHSH2HHt HH[]KHuH:6HuH8sאATIUHH5 7SHHHLHLH+Ht+HtH;-W86uEHE1HPHUHt[]A\HCHP0@HEHP0[]A\HEH5%HPH56H81 Hmu HEHP0ATH57IUSHt\1HJHHt1HHuH+ItlHHmtH[]A\f.HEHP0H[]A\fD÷H5L8LdHHtH11H藜H+t H[HSHD$HR0HD$H[fDH1[ATIUHH57SHHtEHLHH\H+tH[]A\DHSHD$HR0HD$H[]A\H1[]A\ff.fUH58HSH7H;56HH11H袛H+Ht9HHEH'HtaHmtH[]HCHP0@HUHD$HR0HD$H[]DH(u H@HP0HH[]颩fHtH56HPxHyHmHnH16H5eH8ݦHGH;DUH57HSHHt:H11HsH+Ht HH[]HCHP0HH[]@HEHH=HpH1[]č@ATUSHHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$$HD$HD$ D$0HD$@HHHH=]E5HHte1HHHmIt6H+t HL$dH3 %(LuUH[]A\ÐHCHP0@HEHP0H+ufDE1ۺHuL%/6I$SAUATIUHSHHwI|$HF`H9tHW`HtH H9 Ht,HH9H.6}HHH[]A\A]H.6It$H}H7;HHDL1H5]7HQ.6H9uH+uHCHP0@E11LHCHH57H9cHMI9L$TH+t\Eu=fHtH9t&HHL1[HCH57]A\A]q#AH-6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JHt+HH9PH9-6tHHH[]A\A]DH-6It$H}H@7軰HHBL1H57H,6H9uH+uHCHP0@E11LH\BHH57JH9aHMI9L$RH+t\Eu;fHtH9Ht%HHL1[HBH57]A\A];#AH&,6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JHt+HH9PH+6tHHH[]A\A]DH+6It$H}H7;HHAL1H57HQ+6H9uH+uHCHP0@E11LH@HH57H9aHMI9L$RH+t\Eu;fHtH9Ht%HHL1[H@H5J7]A\A]p#AH*6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JHt+HH9PH9*6tHHH[]A\A]DH*6It$H}H7軭HH?L1H57H)6H9uH+uHCHP0@E11LH\?HH5?7JH9aHMI9L$RH+t\Eu;fHtH9Ht%HHL1[H?H5 7]A\A];#AH&)6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9J Ht+HH9P H(6tHHH[]A\A]DH(6It$H}H7;HH>L1H5]7HQ(6H9uH+uHCHP0@E11LH=HH57H9aHMI9L$RH+t\Eu;fHtH9H t%HHL1[H=H57]A\A]p#AH'6lHCHP0@LOH;*6IA`t+HtH H9H(H^'6HfAUATUHSHHH~L9tOHW`HtFH H9J(u9Ht H9H(6HHH1[H<H577]A\A]DHHHH9P(L%&6I$LH[]A\A]@IHHN<1H57HuH{H7AHH"<H1H57L%W&6L9uI,$u ID$LP0E11HH;HH5G7L9ZHKH9MLI,$u ID$LP0E$L%%6L7AL%%6ff.fAUATIUHSHHwI|$HF`H9tHW`HtH H9JXHt+HH9PXHY%6tHHH[]A\A]DH9%6It$H}H`7ۨHH:L1H5=7H$6H9uH+uHCHP0@E11LH|:HH57jH9aHMI9L$RH+t\Eu;fHtH9HXt%HHL1[H$:H57]A\A][#AHF$6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9J`Ht+HH9P`H#6tHHH[]A\A]DH#6It$H}H 7[HH<9L1H57(Hq#6H9uH+uHCHP0@E11LH8HH57H9aHMI9L$RH+t\Eu;fHtH9H`t%HHL1[H8H5j7]A\A]#AH"6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JhHt+HH9PhHY"6tHHH[]A\A]DH9"6It$H}H7ۥHH7L1H57H!6H9uH+uHCHP0@E11LH|7HH5_7jH9aHMI9L$RH+t\Eu;fHtH9Hht%HHL1[H$7H5*7]A\A][#AHF!6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JpHt+HH9PpH 6tHHH[]A\A]DH 6It$H}H7[HH<6L1H5}7(Hq 6H9uH+uHCHP0@E11LH5HH57H9aHMI9L$RH+t\Eu;fHtH9Hpt%HHL1[H5H57]A\A]#AH6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9JxHt+HH9PxHY6tHHH[]A\A]DH96It$H}H`7ۢHH4L1H5=7H6H9uH+uHCHP0@E11LH|4HH57jH9aHMI9L$RH+t\Eu;fHtH9Hxt%HHL1[H$4H57]A\A][#AHF6lHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9Ht0HH9H6}HHH[]A\A]H6It$H}H7SHH43L1H5u7 Hi6H9uH+uHCHP0@E11LH2HH57H9cHMI9L$TH+ttEu=f.Ht H9t*HHL1[H2H57]A\A]}DAH6\fHCHP0@AUATIUHSHHwI|$HF`H9tHW`HtH H9Ht0HH9H36}HHH[]A\A]H6It$H}H87賟HH1L1H57H6H9uH+uHCHP0@E11LHT1HH57BH9cHMI9L$TH+ttEu=f.Ht H9t*HHL1[H0H5w7]A\A]D#AH6\fHCHP0@UHSHHH f.H t t]HHHuH覹HHHU H8HEH(HtH/t?1H[]@H58dHt*HPHHtHHHH[]HGP0HCH5HPH6H81UH[]H8vH6H5^H8ˏhHRH5`fDHGfDH t tHHHuIfSH57HH}Ht'HHHSHtHHt HH[HSH6HRH5ˠH81q1[ff.fATIH5 7UHSHHHH@HHtnHHUHHHt9LʘHHt#hIHupHmu HEHP0H+t1H[]A\HCHP0@HfH=y7贓HHr6H82H[]A\f.Hh1HHI,$Hu ID$LP0H+t Hu@HCHHP0_fDAUATIUHH5 7SHHLoLƲHtIHt,Mt3HLHHH[E1]1A\A]駦H-6MuL%6HI9tHHH[]A\A]fDIDžAVAUIH57ATIUSHoHHHHH547HHHtqH6H9EtWHELHL4HmIMtQH+t[L]A\A]A^HCHP0[L]A\A]A^fH6H9E0uLLxIMuH6H8tؙLHL誁IfHEHP0kH)LLHH+[H5=7]1A\A]A^?ff.@AWAVAUATUSHXHdH%(H$H1H HHHH6H{HPHLM2;uH=;7L-47uK5DHShH-Ht#HHtH:tIu0LHI8I}I}tIcEH=wH=HSpH-@H{PtHLHπH1H$HdH3 %(cHX[]A\A]A^A_@HUH;6LHHHIu0HLHm HEI8HP0I}DH8tHH5`7wHUHHRHuLHug=DdHHeIMHuLLrI,$Au ID$LP0EH HuHLâHEt@tۉƒ u1HHzIHtqHYI.IjIFLP0[DH=vHS`H-HIu0H6L}DHHH-IDHHt|HuLHujfH(HuHt[L軡HuHHwIHtHuHLDqlI,$uID$H(LP0HuHuDHHHuLHuvfDH(HuHtcL+HuHH˙IHHuHLpI,$uID$H(LP0HuHuf1H.HHH@H;-W6QH8H{ uHE HC H{(uHE(HC(HuHHH H6HH0譶eH@LXM~IUADIM9KKlHEtHC`LHHM`HIU`H8HpHHsHBLHxHxHx NHx(Hx0Hx8Hx@bHxH'HxP HxX Hx`v Hxh; Hxp Hxx H H9 H H Hg H! H H HO H H H} H7 HHHeHHChHtwHMhHtnIUhH8HpIHNHeHHxLHx3Hx(Hx8MHx@rHxHHCpHt:HUpHt1IMpH8HpHIHHoHxdHHt5HHt)IH8HpH5HHcH{0H{@EH{H H{XHH[HHHaH#HH u+H HtMt I; tH f.H(rH0HH&HHttHH1@tH@H@HMt I;@IH@M9Hu31fITHJt IHI9H%DH=DuH@H)H;m 6HH5 7nH H{xxHHt/H{`H{hH{pHLP1Ml$MDHI9sI|HGtHhHzyHd@oH@aH 6H9@MH 6fH0HMt I;0HHH0fHHHMt I;HHHfH(H~Mt I;(lH(`fHH Mt I;HfHHMt I;HfHHMt I;}HqfHHQMt I;?H3fH{xHH57HHT$jlHT$HH57HMlHHHHExHCxfHHMt I;HwfHHWMt I;EH9fHEXHMt I;EX HCXHHEHHCHHHHHE@HC@HHHE0HsMt I;E0dHC0[Hq8HHtHzhH;w8Hx@Hp8Hq@HHtHzhH;w@nHxHHp@jHIHH\HtHRhH;JHIHHH@Hq(H HtHzhH;w(Hp(HQH Hx HxHqHfDHH9HtHR`H;#HfDHSHbHxHRHHPDHIHHRHHPHHHtHz`H;uHifDHHEHtHz`H;/H#fDHHHtHz`H;HfDHHHtHz`H;HfDHHsHtHz`H;]HQfDHH-HtHz`H;H fDHHHtHz`H;HfDHHHtHz`H;HfDHH[HtHz`H;EH9fDHHHtHz`H;HfDHHHtHz`H;HfDHHHtHz`H;sHgfDHHCHtHz`H;-H!fDHHHtHz`H;HfDHHHtHz`H;HfDHHqHtHz`H;[HOfDHqxH.HtHz`H;wxHpxHqpHHtHz`H;wpHppHqhHHtHz`H;whHphHq`H}HtHz`H;w`jHp`aHqXHBHtHz`H;wX/HpX&HqPHHtHz`H;wPHpPHqHHHtHz`H;wHHpHHq@HHtHz`H;w@~Hp@uHq8HVHtHz`H;w8CHp8:Hq0HHtHz`H;w0Hp0Hq(HHtHz`H;w(Hp(Hq HHtHz`H;w Hp HvHcHxHxOHqHu/Af.HqH*HtHz`H;wHpHqHHtHzhH;wHpH- 6H9HHE$H H D@eHWHI@HHHHHH HHHHJHHHH HHHsH9H~H8H!HxHqHHp1cH9HH8HHxUHqHHHp1HH=17eHHHHH57:HEHHE^HEHP0OIHoHHP1讆HEHPwfHHH{_HHHHHH57}HEHHEHEHP0@HRHH;Q@HqHI;pHpHqHHIHz`H;wHpHHI;H~HqHH;rHpLDH9HH;:xH8pHQH/I;P%HPHrHH;qzHpqH:H\H;9SH8KHRHH;Q@H:HhH;9_H8WHUHSHmH1蠫HHPDHPpHSp0HPhHShHP`HS`HHMt I;HfH55H1HHH5 7E^HlHH5H57Ҭ:H5HCx:f.fDHl$LBHK1H,HxH.5HH8gHyH8H8DH_fH?I5HqHHp]HqHHp HH5H507軫(fDHqHHxHpHqHf.HqHHplf.HqH*[HqHEH5H5H8oH5r5HtHdH55HtHAH5D5H̞tNHHHE HEHP0HT5HSH5H81ϟH55Hkt1HH5HSH5H81苟H55H'tHyNlH5?5H]H MAWAVAUATUSHLwMH_IHCHD$E117DHL荝HI9tNI\HCHtLHUIMuHMH\$I9uHD$H[]A\A]A^A_f.HwyHD$fLLuH5H5;H8lHD$Hy5H5oH8lHD$n@HQ5HSH5H81̝HD$@ff.AWAVAUI1ATIUSHH=5ʊI,$.HHnHPHHEHAD$HHIHHH(HI$HCHMIELHHLPIl$HS`HHShHHSpHHHHIcD$HC IcD$ HC(EJL-@HEt}JPЃvHcHMITUH 8uHuH{VHIgLpLlHLLHH~HEufH{05HuxgH +I,$.HZlHtUH)HHWHH5 7H1/Hq5H5_mH8jH+u HCHP01HH[]A\A]A^A_fDIT$H5,5u8@1u LjIEHt0uHrHuM1耣IHrHPH=5H5|H81輚EHIHC0lH0aD1饞DAWAVAUIATUHSHHxLfdH%(HD$h1HD$XHtH{RH t5I9MLHHHHL 5HD$hH 7PHk55HD$pP1LD$p0TH tXHt$XL{IHtCI9tnH8H0H9t[HHLHH|$XHtH/uHGP01HL$hdH3 %(H Hx[]A\A]A^A_H|$XHGHD$ HQHHHD$HtH|$`蹔IHuH5ƻ7HTH HD$<HHT$uH{(D$1TI @IFLP0RAWH AVAUATUHSHHHHHHdH%(HD$81YNHEH}LeID$E1.fIL;mNdID$jHL萃u5I$XtL9t%I$Hu]DHHtLH9uH5H5IiAH8+SHL$8dH3 %(DeHH[]A\A]A^A_DH;I5tIL;mGHIH-HH HOaHELP1I$LHPL:IHHHI/u IGLP0E1H;PImu IELP0I.IFLP0HHHSH5gH5AH81[LL$$Ll$ILt$H\$HI/u IGLP0H;PImI.ArMWIxHHD$(L$$LHt$ HL$0MILl$ILt$IH\$HIIVHEHMMHD$8H5( J1H81B:DH 5IT$LH5dH81W u?Hxy,HxtHxt HxtPHxtHxtHxũ@HDxHJxHDfD@H!xH'xHDf.%tGlHGD@fHGt8lHl DJHH@puD@ftHGGzD@ff.wX1tH Lt@HD8=t$V0HcD>8t ff.HHHtH1DAWAVAUATUSHHFHFHD$PHHAHAHI@H_I@LWIAL9}|HDX Lx0LhHL|$DEA@D\$A I@@tUELpHM{GLA{tVA}tPL_M9HH^L^H[]A\A]A^A_EgLxHMsG_LwA{uHoA}I9 A{I9ZHH^Hn1AIHI@I@LgHHGHAHGI9LEZ DD݃ @@"@IIZ0IRHA@HEHXH_[{H5H5CuH8IH1[]A\A]A^A_Eu3LpHM{LGDLt$|$MD]DLt$|$MDL|$|$MDD!t:tHGD}uH_HA!:}H5H5{H8I1I94DP EEAA ArAELPHL,A<}LPHG*E9wHHH^Hn@IZ0IRHA@HEHXH_[]HGA@MrHMj0L9|J@@ELIDރ<]ÄHHGL9@u@ELIDހ<]ŐLPHLd-fALHOH@A@HGAT0AH9~IR0HH_H5H5PuH8C1@Ij0IRHA@HGIH4LDE$\E!H9lEHEHD2H_gIRHH4HGDEH936IRHHG4A1H9GH5H5tH8SB1UIRHH4HGDZEH9rATHAH9IRHff.@AUIATIUHSHHH>MtL)LH>LAUH;LLHHH;IuIuH;UHH)HHt1DH0HH9uH[]A\A]ff.fAWILAVAUATMUHSHXH$H|$dH<%(H|$H1HD$8HD$@MtLHHt$8HT$@H|$8D$E11H|$ H|$@E1E1H|$(B8XI9LHLHHNH1H)HHH9HNHHHЅPL$IIMtLD$Ht$8H|$@L$qHt$HdH34%(L2HX[]A\A]A^A_HL$I9HIMHHNHH9HNHIH)IHH9LNMMHL$LD$IMMt1L$Ht$ LHD$H|$(LT$HD$LT$E1L)I)H M+L+$f.IHʈT$-J)E1IMtHD$HIMfHfs=AUIATIUHSHHH>MtK H)H>L`RH;KT-HHHH;I4$I4$H;MtJH)H>LQH;JHHHH;I4$I4$H;QHHH)HHHt@0HH9uH[]A\A]ff.ISII@tH11IH9r SHр9HQH9uI9vLIt DL u HI9wH9uHH)HHLPH[@L9HHHHt HHuHIII9wH9wIHABH9t yHHH)H[f.HH)HnfHH)H^Hff.f'FSHHHtH/t H[FHGP0H[ESHHHtH/t H[EHGP0H[EATUSHuH;HHH[]A\HIH9w~HH=5eHHtHh@N$H@HLH@H@@ H@8H@0=HC(Ht6BD H[]A\[]A\?4E1jH+u HCHP0411@AVIAUIATUSHO Lg(Ή@ @?H0ImHHHHL9jIF`HH`t-I}8H9t$HtHt$GDIE8Ht$IE0L ZHH&HLp@ L9H{(Ht)y HSHH9tCHC(C }HK0HSH@HEBHH[]A\A]A^Im00HHH@Ɖ@ @HS0HS(fDudHSHB2HH[]A\A]A^HSH1fBrHH[]A\A]A^DImHHH$HK0HSH@HEHSHHS(@tk<u<Hs0HSH@HEkDHK0HSH@HEX@HSHHSHHS(Ls@@C11'@IE+1fDW0G4HcHH|?!CUHSHCHHHH9H+Ht8HtBH;-D5tHUHtEHH[]HCHP0HuH5H8j=tFaEH-5HEHy5HRH5jH81hHmu HEHP01HH[]@HMH=gH%5H5jH8F7Hmt1ff.AWH77AVAUATIUHSHLMhH9FHHkH;5fHSI$LuL{HK II9}0IvHHL$HH9HL$LuI$HL$I| LHIM<$HHP1HHuuHSD$HR0D$H[]A\A]A^A_fDI$HpI9}&MHI9IM#I$LEHpI4$A\ 1H[]A\A]A^A_HI9}IvHHH9HL#u"LuHALI$HJI $AD #H+u HCHP0돐H(u H@HP0H[]A\A]A^A_ff.AUE1ATUSHHH9}0HHIH?H9HHMH4H:HtI$H]HD[]A\A]ADAWAVAUATUSHG L@D 5Lg0HH@LD1D$ AM&DAA,wHI9t\AuA,v@t$ J t$ tbA9DB@tu@AHD$ I9ufDD$ txHD[]A\A]A^A_fDA,\lfDQt$ P0yA9DBLAD$ :fA\D$ !fDE1LgHAVAUATUSLoL;oHIE1HcfD@HH0HH@HEBH1HuH{t1fDw LG(``AA HHPtHGHHHPMt H@HG@HHЀ`t0HW8Ht'@ LG0HOH@IEH9t HW0HDH1HGHHHHfDLOIQ1HMt@xJvfDAA Eu4HWHL9ZH€`?LODHOHaLO0HWH@@IEfDHW1HtHBH+GH11AWHH5RAVAUATUS1HXdH%(HD$H1HL$ HT$HD$ HD$(LD$(8BHD$(Hl$ HD$@Ld$HD$nKHHID$H7IT$H;UAL$ D$E AAA ^Mt$H jHM0HH@HEHD$@1H f.|$MA<0HD$0HHD$@AA-||0HD$8HHt$0HHnQH|$0AH/uHGP0H|$8H/uHGP0ExRHD$@HHD$@I;D$Y|$NA<S@Hٯ5H5bZH8%f.H+u HCHP01HH\$HdH3%(2HX[]A\A]A^A_H;5Lt$8Ll$0Hl$@H~mV  HN0HH@HE>0/IHDHT$8HH$PI/uIWD$LR0D$LLHL3J Ht$0HFHHHT$8HOfDIt$0Mt$H@LE HmHfD|fDA>H5H5XH8:#%DH5H5WH8#DH٭5H5XH8"DH|$HL$A @ HQ0LaH@LEHD$@HD$Hx1tALd$E1LB~(1A H|$9 C3H3L9DXM{H<$~kAAEH$MHLDc~+H|$1J(E.~fDEnnfD>AWAVAUAATUSHHHt$HT$HL$dH<%(H|$81HL1E11Lt$,@H|$AADHH[]A\A]A^A_LD5D~.H|$1JNH81tIHf.UHSHHxdH%(H$h1H,HD$HD$1HH1 HH9~+HL5ʃv?HʀHPH9HT$Ht@H H|$H)H<HD$H$hdH3<%(ucHx[]f.H|$H)H fDH?H9!H461 HD$HtH 6,ff.HHt HH(t f.HPHHR0ATMULSHH?Ht;HstH[]A\fDH;HuH;L u/HHգ5AQMIHH8H1H5 BHXZ[]A\ff.SHgH;Ht[i(f[ff.HwHWH9~#HFHGHHyfHHHHu5H5LH81Hff.@UHHHSHHH?HtFtHH[]H;HuH;H5A u@H AHHHH[]@H?uHt+HHh5H5yKH8HG u1H95H9WufAUATUSHZ  LR0HH@MLDW AAAE Lo0HH@IED9AÄIL wI< OI)IJ4H9sLLHfDHHfJHfJHfJHfJH9wIIIJ@ ƒ fAwIT$0IL$H@HEHHH9sI@0HH@rp@rp@rp@rH9rHHHHHHH I9fHCHAI9wIL$HwfD116IHʼn;Hdff.@AWAVAUATUSHH HHHIL<HؾALHHH9sJA%txAH9v H H H uHH9wN,;I9#t(AI90uH@5IHt^AD$ u\I|$HLH4'fAD[fL%;MI$HL[]A\A]A^A_fE1IT$0I|$H@HEfD;H[]A\A]A^A_ A4D4IHt@ ƒ AIT$0IL$H@HEHHH9sN0HH@rp@rp@rp@rH9rHHHHHHH HHI9HCHAI9wIL$HlIT$0IL$H@HEHHH9sJ0HHfrpfrpfrpfrH9rHHHHHEHH HHI9UHCHfAI9w<IL$HxfD11g3IH;Hff.@AUAATUSHG Lg H_0HH@HD߾L3HHt@ u(H}HLHEt24HH[]A\A]fDHU0H}H@HHELEu#HH[]A\A]@H_Hf.AVIAUATUSHdH%(HD$1G D$ Hw0LoH@LEH LgI9KLd$p7{ xHHL$HL$ILD$hHL$`LHLLkGI6HH}11HHH@tu1HT$LHH5Q"tnHD$HPHtBI$HyLI$HI9HH+u>HCHP0HD$-DH t5H5!H8*H+u HCHP01H|$dH3<%(uXH([]A\A]A^A_fHL$#HL$HHEfHw5H5!H81H+uff.AWAVAUIATIUSHH<$HL$dH%(H$1HD$HHD$PH,~L|$`A1HD$@LH HD$P1HD$HD$HHD$HD$XHD$ f.AIHI9~8HkADmƒv=wy?IHʀAGAWI9HD$@H}H LH|$@H)wH|$HHt H/IH|$PHt H/$HD$@D(v2?I ?ʀȀAWAOAG-fDHH 4H{I t$(USLL$(LD$ Ht$8H|$0H IH9HHH@H`HHD$@H)HH I)I9MtH|$@LT$(LHL$0YLT$(HD$@HL$0LH IBMAB @ EIzHHL1.ww#IAWHL9uvH$H|$IHL H5,H LT$LT$I*H|$HHt H/H|$PHt H/H|$@Ht H/uHGP01H$dH3<%(LH[]A\A]A^A_@HnAB LLT$(HL$0LT$(RAB HL$0@ IR0IzH@HE@H*H9ML4R1LHD$@Lx Hq1GIr 1f.AHHH)HHHHILI*uIBHL$(LP0HL$(I,DLD$`M)I9Mt1LT$8LLD$0HL$(HL$(LD$0HHD$@LT$8$LH LLLT$0LHL$((LT$0HL$(IHfDIBLP0HGP0@HGP0@fDIr HLHGP0HD$@HGP0H|$`LH)HD$@}L$L$RMff.fAWAVAUIATIUSH(H<$HL$dH%(H$1HD$HHD$PH,L|$`A1HD$@LH9HD$P1HD$HD$HHD$HD$XHD$ f.AIHI9~7HkADv=w|ƒ?IHȀAGAWI9HD$@HH LH|$@H)H|$HHt H/zH|$PHt H/UHD$@1fD(vb‰Ɖ? ?΀ʀ=wAWIAOAw"?AWIɀAwAGAOHH T HC t$(USLL$(LD$ Ht$8H|$0H IH9HHH@H`HHD$@H)HH I)I9MtH|$@LT$(LHL$0yLT$(HD$@HL$0LH IBMAB @ EIzHHL1.ww#IAWHL9uvH$H|$IHL  H5LB LT$LT$I*H|$HHt H/H|$PHt H/H|$@Ht H/uHGP01H$dH3<%(LH([]A\A]A^A_@HnAB LLT$(HL$0LT$(RAB HL$0@ IR0IzH@HE@HH9ML41LHD$@Lx H=-@GIr 1f.AHHH)HHHHILI*uIBHL$(LP0HL$(IDLD$`M)I9Mt1LT$8LLD$0HL$(HL$(LD$0HHD$@LT$8$LH LLLT$0LHL$(HLT$0HL$(IHfDIBLP0HGP0@HGP0@;fDIr HLHGP0HD$@HGP0zH|$`LH)>HD$@LL$L$Rmff.fAWAVAUAATUSHo H|$Ht$dH%(HD$x1HZ? HHD$`HEH HD$hHD$ HHEHD$@_HT$LR@ HD$LpHML1@LT$(WHD$XH5LT$(Lx M E1M@ELT$(M3AMD9s+IML$A$M9. LuC.MD9rM9m LfAD9rHI9~uAD9sfDnHD$XLH H)LHT$0I9 III7A H v6Lοcv)L޿vLƿ'DH9HHH9uHL)HH9LH)HHD$(H9) H?H9 H|$XHLT$8HT$(1HD$XHT$0LT$8LL L%I9W D|$8MMLT$0;GLLH1IHII9$uG>@HB0HH@@HDIMB11fDA^fDAFM{LL$HT$ILHt$ H|$h@H|$XHt H/H|$`Ht H/H|$hHt H/uHGP01HT$xdH3%( HĈ[]A\A]A^A_fA fDHT$HHPH=\ 5H=T HtzHt$H=\ I9H؃ MIŹ5DA F,fDHD$h @LIIHI)MH9DIAD$?M9uI9!AA9LkIAM9@ADD9@Ht$H= HD$hLT$0Ht$`HHD$@IHD$xPSAUHL$8LD$(HT$@H|$0H LT$0HHH@H HD$XMHQH I)HH)L9HI4L)HH9LH)HHD$(HH9~eH?H9 HH9HLH|$XHHL$HLT$@HT$0LD$(GLD$(HT$0LT$@HL$HHD$XH\$(Nd H1LY0LAHA@VEm@LID4D9sGA4HM H9q AA @uE7@LID4D9rLL$HT$HMEHt$ H|$8L聿HHD$HH,HCHP0DHGP04@HGP0@y 6HLT$@HL$0̽HL$0LT$@HAHH.@BHvHHBHH f.EtK@LID4FHqHHqHG~sfDHqHf.MII9H؃5AA9nIUIAI9Ct.A9<IMaAqM9C.A9#HHD$HHu HAHP0Hh`5H5 H8dLT$0MMD|$8M9LzC.A9#IMaAM9kMMLl$pH)HALL$8HLT$0P0LT$0LL$8M9pL1Ƀ C.A9IUMaAI9HLT$8HL$0HL$0LT$8HH~fHD$XH I)HH)H;D$(HD$(H|$XHL$8LT$0HDHHD$(aLT$0HL$8)HD$XNd HLT$8HL$0sHLHHL$0Ll$pM LT$8H)NM9~lL1ɃC.A9IUMaAI9Ct.A9 IMaAqM9`M9MHD$XH I)L;|$(}H|$XLtVfDAA,u7u,EtwHI9AuA,ht@1H[]A\A]A^A_;Lc0HH@LDIfAtjAtkA<$1@볐E1vAHI9yIcfDA,\VfDAA,u7pu,EtwHI9AuA,ht@1H[]A\A]A^A_Lc0HH@LDIfAtjAtkA<$HcfDE1AHI9yIcfDA,\f.HA|AXA\ADrfH}HuHAAEA\H4HB5AD6xH AL6AD6 IsHARDFD&\LM1ɾL\$L\$8f1M9Il$A'A\tfEtfDfDDn\nfAnA\rfA FfAtF&A\C>r\H4AxfAxL8A A >HA6L\$(LT$ HT$DD$DL$$DL$DD$HT$LT$ L\$(?؉AAH A\H=@5HADxH?AD7AD f.A.L@fAnLýE1A'A.\H @5C>xH}HAD.HH0A>t\fA n0xK ?HfC<~H=?5H?ffADf7fAD'H}H|$0 |$HEHD$H|$wQH[?5l$CuJ<HD$H,+Al> Hl$AL>AD> 3AD>HD$ HD$8HD$@؃HD$(D$HD$HE HD$HAEAH>5HD$ CUJ<H,HD$8Al>,HD$@Al>,HD$(Al> ,HD$Al>,HD$Al> Hl$HAL>AD>3AD> H}H|$0 |$HEHD$H|$H==5\$C>uHD$L?AA\.H AL.HAD.H0AD.Hl$.H}H|$0 |$HEHD$H|$TH^=5l$uKf Hl$fAL>ffAD>f3fAD>UHD$ Kf,HD$@fAl>f,HD$(fAl>f,HD$fAl>f,HD$fAl> f Hl$HfAL> ffAD>f3fAD>H=o<5HD$ C>UHHD$8A\.HHD$@A\.HHD$(A\.HHD$0AHD$HHD$AHHD$ AL.HAD.H0AD. Hl$Hjf.SHFtV~ Hx H]t8H=W7HtHSHHXHXH@ HP([f1[@HPH=65H5 H811[HHt>HHtH@tHx HH= /HþH= ff.fAUATUSHHHHHHu =L$N,#I9H1DH9vI9wHHtSP <<<ZHH[]A\A]HH-6;HHEHH[]A\A]DH[]A\A]H45H5Z 1H81&HH[]A\A] HE0H}H@HELHN HE0HuH@HEIIL9sSHHfDHHfJHfJHfJHfJI9wHHIIILJ4HHI9HCHfFI9w HE0HuH@HEIIL9sOHHfDHHJHJHJHJI9wHHIIILJ4HHI9*@HCHFI9wH[]A\A]k11HH4;HHuH7HuHH}HG1fUSHH_Ht-HoH=}HHH=q# HH[1]`11WHHt/H=CHHH==# H[1])fH1[]SH4;Ht7H{HtHCH/uHGP0HHHHuH3;[ff.Ht^ATIUSHHoHHtP uHxHHLH[]A\Hx0@H@HHD?pHHxcHt+tFt1H.5H5 H8;1H@HHH顦HHH顤HHH1H05H5 H8Hu H9WH9DG A@u@DHGHA uHGHIHLHItk1tLHI9vNHH8cI9v(H@uH9vHGHH9wHI9uƸH)HHHH9?AA'DH9  O O O uHDH)H HHH9AA#tpDH9f Wf Wf W҅uHfW @D@ff.f.DD\I93 tt{I97uHI9A'f.LtI9v3uHfDDfDATUSHGG HHk@u<t<EHHIHtxC Hը u,AD$ HsH t6IL$0I|$H@HEɵL[]A\ÐHs0HH@AD$ HD uI|$HӐˊtC UDE1[]LA\DnH= E1fHi15H9Gu# SHx ttHH[fD雒1[@AWAVAUATUS1IHHLIHHIHL +IHGIHIHH)L9LH)H9 W @9H<LL$BIHtlP LL$ MWHM~<d<< MEM~<f<<{1LLLHL[]A\A]A^A_ÐUE@f.I0MWH@LE[@H[]A\A]A^A_UDH,5H5 E1H8'of1fDA,HL9|MEM;KI1@,HH9|@LLLL$ҤLL$MEIMMHډK<謤ME1@fABHL9|MEMKIB1f,BHH9|fD@fUSHHH5= HdH%(HD$1H葺{ HCH4$H9H)1ҹ0HH)Hp @ L@0HHH@IEȃH4>DGAu90@HL$dH3 %(H[]DH81@H0fDHHHlH4)>WՁu@90뉐Hi:wfsf90f cHi H4)SH HHH5k H dH%(HD$1HT$LD$ D$ tP{ y:HCHt$H9}DL$ H)1HHL$dH3 %(u-H [DHu1@HQSH ԏHHH5 H dH%(HD$1HT$LD$ D$ fDMfDfDIR0MJH@LEDBDmƒ HfCyfLcD$$EHHII)LAAKM~J HH9uMzfD$$eLcHHII)LK<9L¾ L$LT$HL$LL$话L$LL$HL$LT$M@AtMfD$$LcHHII)LKyJ@MQf HfpH9uMfDL!PSH ԊHHH5 H dH%(HD$1HT$LD$ D$ CH95HƨuH9rfHH9Ht D)D NHxH9vHDH)jHuHl$ D$(D$@D$P:EH\$0DD$8Hl$ Dd$(L)IHD$AN$L9H\$ HLEMHD9(t=HxH9vHډH)iHuH\$ L9H+D$EH\$ MHIH|$O$?H\$ ADI-LL\$(H)~iHtHL\$(fD9(HtHI9wqH+|$AH\$ HIoHAWAVAUIATUSHhHHI€ H|$H$kMAE =Ht$V ˉAΉ\$ AD9Dt$$DM HL$HIHHL$ IU0ImH@L$$HE9L$ H|$L$$9L$ HhHD$I]H@HD$8A| AzE1AL$$9L$ _L$$9L$ AHhL[]A\A]A^A_HN0HH@HDHL$ =ImHL$$9L$ GH|$DcHD$0LEt#AE H|$EDE1gHD$P <7 <E1<;HL$ @HY Hi0u HD$HhHL,$ I INHDIHtE1E1MaI9|%nfDHi4<8t+II9 B|=@y>ruf.MDII9}B|=@H4<8tMuL9uHD$H =4H9HLJ|-L)ӊIHI ID$N,IL94$.L9#<@H4<8t!II9B|=@ynquL9L)J|=HQHH DI,$-ID$LE1P0fHL$HY  HD$LhHL<$ I INHBIHE11MOL9% fDH4<8t#IL9&C|vpuMDIL9~C| Hr4<8tMuL9uHD$H 4H9HLK|L)4]HHH  ID$H HH9,$7L9$DH4<8t IL9C|vouL9rL)K|H\HHfH $H }ID$HH,$HIl$fDDL_HlDHIH|$IfHD$@ @t AE @H H$ H HNHH@IHH<$ Ll$8I)Ll$0 H HSH|$E1E1HDLd$(IHHD$@HCHHD$fHD$@LL$H1D1f.A AIL LD$I)D8MDHH9|ADII 1&@L2LHHH.HDHL9VD:2u1H 7fED8u HH9|H9[ L2LHHH.L΃HDHL9~fDHD$LLd$(LM L4$V fDLd$0H*u HBHP0I,$u ID$LP0E1fDH H$ H HNHH+?IHtH<$hL\$8I)L\$@ H HCH|$E1E1H Ld$0IHL$HHHL$PHLHL$XHKHL$@HD$HLT$1L HD$X01LAIL LD$I)9MDHI9ىAHD$P1II D0&ALLHHHDHL9iHE94uHT$(H 1T9u HI9HT$(L9ALLHLHHDHL9~fDLd$0ML,$fDHD$H 4H9Hj H$Ht$8HL$H)HHH4HD$H4H9XOHt$8H|$HuLHMMM\ HHLD$9IHLDE D9 u^HuH+LD$0H)IHHH)x3HHtADHrH)#L)LMM6fHLHL$8LD$0CLD$0HL$8H)vHALD$0HP0LD$0]fDMI HT$ INHI'rIHvMHT$ HL)IHID$ML$E1Ll$ HD$(LMILMIfDELT$(LDHfA GHHH fA9LDHuHL-I4fD;@LDE GfD9 FHuH+LD$0H)IH lIFL$HI9o M?HD$HhHf.HD$H54H9pHH.IH1INL$OHtAL.HHu H)L)L9d$HI fDL9d$HI)fDLMMcfHL5= I,$ID$LP0fHL= I,$ID$LP0fHLHL$8LT$0L|$ e@HLHD$05LL$0I)uIALP0먐AL$(CIHGHT$ HHML$(E1L|$ Ld$(MADHDfD;W H81HHGHSHHOH;H}Yp @ u'H@Ht2tYH+ttHcHHCHP0@H4HjHi4HRL%)4I<$8HEI<$H5G HP1>t @UHSH~"HHxHuk@ ‰ tHHK0@HSHHHD‹EHHPHHt>H[]@uLHCHHY4H5bG H8u H+uHCHP0H[]@HCHfHK0@HSHHHDDtHU1H HH9H8uHH9u6H&H ~HU1HHH9f9uHH9uHM11HfDHH9tA9 uHH9uHAUfATUHHSHxHQ4dH%(HD$h1Ht$0HL$ HHD$HT$LD$(HO|OO:HD$01HD$5findHD$=HF%F-FHD$H\$ H\$(D$aH|$ H9tHt$!H|$(H9tHt$!H|$Ld$Ll$HHtw} yQ{ x HtKHMLHڿqH+Hu HCHP0Ht/H 'DHuH+u HCHP01HL$hdH3 %(u Hx[]A\A]fDAU1fHrfindATUHHSHxH4dH%(HD$h1Ht$0HL$=HHD$HL$ HO|OO:LD$(HD$01HT$5HT$HF%F-FHD$H\$ H\$(D$awH|$ H9tHt$ H|$(H9tHt$H|$Ld$Ll$HHt{} yU{ x H'tOHMLHڿloH+Hu HCHP0Ht3Hk +fHuH+u HCHP01HL$hdH3 %(u Hx[]A\A]Nff.AU1fHindexATUHHSHxH4dH%(HD$h1Ht$0HL$=HHD$HL$ HO|OO:LD$(HD$01HT$5HT$HF%F-FHD$H\$ H\$(D$aH|$ H9tHt$kH|$(H9tHt$OH|$Ld$Ll$cHHt{} yU{ x HwtOHMLHڿmH+Hu HCHP0Ht3HxNH&@H(uH+u HCHP01HL$hdH3 %(u(Hx[]A\A]H4H5 H8:1AU1fHrindexATUHHSHxH54dH%(HD$h1Ht$0HL$=HHD$HL$ HO|OO:LD$(HD$01HT$5HT$HF%F-FHD$H\$ H\$(D$aH|$ H9tHt$H|$(H9tHt$H|$Ld$Ll$HHt{} yU{ x HtOHMLHڿkH+Hu HCHP0Ht3HxNH&@HhuH+u HCHP01HL$hdH3 %(u(Hx[]A\A]H94H5~ H8z1HtgLDA-@t2L9tRH 4HHt$H4FufD<_ADFDHw 18utf-fFff.USHHO HS u&H[H<t1<1<H[]Hs0HH@HE<uHHx,H~'f;}HCHSHfxteH9u1H[]DŃtK \HHxH~ʋ3t$1 tHH9u1@H[]f.HH'H ~=HH91HFHH)1H@H[]H;tHCHfHxjH9u1fDUSHHGEHo(HHt)HtC `<`HC@HHH[]@G <IHHGH9H<Ht$HC(HS H{Ht$у``tH{@HL 8tnHŀY LC0HKH@IEL9HfDDHHDBI9wHH fHC uKHKHL9~HDHHDBI9w뮐 1@kfDLC0HKH@IEHKHEH=2 HHATIUSHHdH%(HD$1HzHt[H,$MtLH97H$HHHL} HL$dH3 %(Hu)H[]A\ÐH]f.HHff.HtRH H=b. HHÐAUATUSHdH%(HD$1HIHIHHtOH$HXHtuHH9wVH<Y.HHtAHHLHt]MtIEHL$dH3 %(HuMH[]A\A]fD11@% H=|- 1H1Fff.@1DHGSt5H(Ht$C `<`t HC@[HC[f.$ H[ff.HGSt) Hy HC[uH[H[USHHGts HHy]HxxH9k~rC u"H[Ht,t~H[]@HS0HH@HEu+H[]@u1H[]DHa4H5' H8H[]fDkH[]ff.fATUSHG7HG *HHH9wAK ʃ@t4D9σ @@tY@t;uH[HD$[]A\fϾ@t@EDu\H[HfD$k[]A\fDuH[HD$+[]A\HK0HHHEHK0HHHErDHK0HHHEH4H5 H8뀸vH3}4H5 H8tVf.HT @HHGt;HtHM*DHT$H<$:HT$H<$HH%*D1H@ATUSHHGIHH|HL)HHtXH@tHH[]A\@ID$HH5, HHHF|4H8I1"H+u HCHP0H1[]A\fDHT$^HT$HmfHHGt;HtHDHT$H<$ HT$H<$HHeD1H@USHHGHHt-H%HHtoH@t0HH[]fDHT$H<$HT$H<$H@HHH{4HH5 , H8I1!H+u HCHP01HH[]f1AWAVAUAATAUSHHD_ dH%(HD$1EA HkHH[HHH9EH41AAH$HH H EH11E11L + L5: AAFD?AP~EC>tEutEHVt%AA)DH?A 91HNHHD߃AvAHՃt AHу )-HrD11IL9>t$AHA)DHH * ? 9Nt-HH)H H$H\$dH3%(H[]A\A]A^A_ÐHC0HkHH[A@HEHG11A+>ExA~wDEG<>EtEuAt Eu'Au!DHDFDfD+HHEAw~L v#fDHHH?AVwfFDUDHD[ 1D H ׃v!@HHH?AVwAHIH >fDA+-HfDF@+BfDHHHf1%1 ff.fAUMATAUSHHtPHLDHH+tH[]A\A]@HSHD$HR0HD$H[]A\A]fH1[]A\A]USHHGG HHyWƒ``tiH{8HHsAAA teHK0H{H@HEAt[AH[]D@C ƒ``uHHsH0tH[] @H{HAuHHHHH[]GHs0H[]HHHHH[]fH1[]fAUATUSHHGG HIyS`<`teH{8„udMt<`HC0I$C `Hk0<`tHk8HH[]A\A]f.C `<`uH„tH5-n H]IHH@HxHHC8HtxIUIu HHS0H Imt!C `=DHC@IELP0C `f[1,@1!fImuIELP0D1uDUHSHHtAHHHkH+t H[]fDHSHD$HR0HD$H[]DH1[]ff.@1DAWAVAUATUSHxHt$dH%(HD$h1HGHD$XHD$`G HLc< LmHH1LeE@LH9%H1AAHD$HHHX E@ MH=H HX$$D$D$H|$fHU0LmH@LEUDHD$HHP H)H9Xt H|$HHIH|$XHt H/uHGP0H|$`Ht H/uHGP0HD$HfDH\$hdH3%(4Hx[]A\A]A^A_DE fMtA-H=0 $E1D$D$H|$HD$PA'H|$`Hl$(1H|$ H|$XH|$0H|$PH|$8Dt$ ;DHc$HLHcD$LHcD$tHcD$ THD$PI9ATHH(HL$PwHt$@QH  PLL$@LD$HHT$8Ht$PH|$0mH IH/H@MwAIdLHHD$HHHp H)HpHH)H9HH|$H2HD$HH\ IGH%AW \Iw0IH@HDM^MtHLc $LcD$Hc|$HcT$ N N L;H<AAAHL9uJ\I/IGLP0tNI/u IGLP0H|$XHt H/uHGP0H|$`Ht H/uHGP0H|$HHt H/uHGP01fATE"DHIw LL]fAG y'Mw@IL\fLx2AG fIwH1tAH= D$A$D$H|$M3Hc $Hc|$Hct$HfHHH)80HT$PATB0HD$PHHD$PL9|Hl$(LD$PL " Ht$H|$ IHHJ3H=V $E1D$D$H|$ ATAUHSHiHtDHDHHH+t H[]A\@HSHD$HR0HD$H[]A\H1[]A\D11sAWAVAUATUSHxHt$dH%(HD$h1HGHD$XHD$`G IAՄLփt$ .1|$Mt$HIl$9H?1EH)H)H96H1HHvHD$HHHX Eu HX"fP H|$H HD$ExH H HEHD$HD$`Ld$(1HD$HD$XHD$PHD$0HD$PHD$ H9HH)|$>IHAf%HA f-$fA@(ffAfCfDCH9vHB=wfHfCH9wHHL$PH9.HHAt$(PQLL$8H ; LD$HHT$0Ht$PH|$(H IHH@IW II?IIMHHD$HK|$Hp H)HpHH)H9PHH|$HHT$8^;HD$HHT$8H\ IGH%A @ Iw0MGH@IDL HLEL9sMIHHIfAHOfAHOfAHOfAHL9rHHHH4HI9vI)@fCHL9uHCI/ Ht$P@IT$0Mt$HIl$LE1|$II9LfDHxHH9wAG IW@WIHWDHD$HHP H)H9Xt H|$HHH|$XHt H/uHGP0H|$`Ht H/uHGP0HD$HfHt$hdH34%(.Hx[]A\A]A^A_DHIvHLHL PEL9r/_Df3PHHfSPfSPfSL9s20Pff!xf!xf!fuHSI9fHxHZv fHfrHI9wHL$Pp@H9rH_fD==v9Af%HA f-$fA@(fCfDCH9HB=wfH@L9s[IHDHIfAHOfAHOfAHOfAHL9rHHHH4HI94I)@fCHI9uJKIwH|HIw JcH)HLHH)8@L-AG 3fDL9r e  z^Le4\xHHf~׃MA<9@~I8VH9u@H$H H)HeH$HL$dH3 %(lH[]A\@HS0HH@HEDC\tw-H=De4A\uAHfD^A LGDFALAAGDFALAAGDFH?Vf\\HfVfDsC A\tHfDV_@SfDA\nHfDN7@H(D11gfA\rHfDF@1+1@1lt@SHHt=HHH+t H[fDHSHD$HR0HD$H[fDH1[ATUSHdH%(HD$1HGsG H4 LeHHtHmHcHHH9H1BH$H H-H HH1D?A4H=b4A\UH fDFALAGDFALAAGDFALAAGDFALAAGDFALA AGDFALAAGDFL׃A<8@~AVHH9tA HHH9uH)HH$HL$dH3 %(H[]A\fHU0LeH@LE]DALv\uAHf~H=a4A LGDFALAAGDFALAAGDFH?V@tE D/fD1" 1@1T@SHHt=HHH+t H[fDHSHD$HR0HD$H[fDH1['UHSHNHtIHúHHVH+tH[]fHSHD$HR0HD$H[]DH1[]SHHGG Hy#ƒt;HHߺ[Ht$ntNC Ht$ƒuHs uH{HH[H{0HH@HDH[kH1[1DUHSHHtIHúHH&H+tH[]fHSHD$HR0HD$H[]DH1[]USHHGtYG HHy;@tHsH{0 uH{HH[]@HHHߺ[]f+t C kH1[]fAUATUSH(dH%(HD$1HG!IH\$ HIH޺ L;H=|0 HuYMtH=(R L1HDHHT$dH3%(HH([]A\A]H=8 HtH= 0 H8H= H H=/ H H= HH= HuLHQHfLLHHHHxH5VV4H9t H[4LH H81HsHH=PV4[H+HHCHHP0k@LHMHTD 1C@LHuH,DHCLH5 HHHV4H8I12H+u HCHP01H{(OHff.ATIUHSHIHtDHLHHH+t H[]A\@HSHD$HR0HD$H[]A\H1[]A\DSH f6HHHHYH dH%(HD$1LL$LD$HD$HD$_1tHT$Ht$H5HL$dH3 %(uH [f.1DAWAVAUATUSHXdH%(H$H1HGLoMG  HoHHT$@fv@IAHH)D$ HMN)D$0cE@E1E1I[D7DPwS=t( | u Dt A|@u D|@AHcL9uDPv HD$HaE1E11D|LIIMHH|$HLIzHIu IGLP0Imu IELP0AIcIL9}Wv|y@Ho0HH@HDSDDEfD|ECHD$@H$HdH3 %(HD$[HX[]A\A]A^A_f.M'MtImu IELP0HL$HHD$HHu HAHP0HD${AA @zHD$HtMU:f}@[HD$DHIIIGLP05@f}@Yf.DDHcHH|?HT$HD$HT$HHD$H|$H5k6HT$袯HD$foL$ HT$Dp0HH8Dx4HL4LxHfoT$0HL$P HT$1LI-1HL$gftsDTAtCD ADHcHHEH;P4HEHJHHu HHHQ0IUIIH;T$0c|$(|$(5D$(tH$H\$(HD$0IF0HD$8I9aH\$HLl$AF ‰ SIVH@HHED$8H\$(DH\$0H  !1H$@uwH;@LLHu@H|$hHt H/H$Ht H/H|$xHt H/1f./N@]INH@HHED$8BLIL9uL;L$jCLMIH 7H|$ AHD@1HH)H|$xHLNHD$HN1O<)Et5MT Dd$(NLl$ LIAMfDMIL MI)D8MDHI9uLl$ LLd$ 1E1Ld$)@CLIII 2ALDIM9sG:4uL\$LL$1MfDE| E8< 8HL9uL|$M9CLIII 2LT$ ALDfHHOHH)H|$HHD$L~HNE1ET5Dd$(O/IJ<8ML LDAIM MI)D8MDHI9uMLd$ 1E1MLd$(BLMII 0ALDIM9KF:uLL$L|$1MfDEt E84 HL9uLt$M9BLMII 0LD$ ALDf.HKH LH81豽HmuHEHP0sH(t"H:H*HjfH@HP0@A<<ADEfLLD$ct_AD$ LD$pHA4H5 H8蒋Hm8fDLD$L$LL$HH L$LL$LD$8MK IMhE1HL$Hf.L9l$tiIEMt*ML1LHHD$LL$#LL$HD$MILxMtLM1HHLL$MLL$Hmu HEHP0MI,$ID$LP0HPH=4H5 H81輻HmHEH1P0 LD$聾IHtA ALD$Dk A DHC0L[HA@LEHD$ AAMt#AD$ IT$0IL$H@HDHT$ MAIMhO4HD$IHD$(nHq0HH@HDLLLL$LL$IMM9IMMt/L|$(Ht$ LHL$LL$L覜HL$LL$IMILAMtLD$A MǨ tHqHy11HH:H(HHmHP0L[HID$HHD$ D'}DG DA t LO0HHA@IE<t<t@<t,HH<uHwH4PH~fHH9uH3H4H~1D HH9uAVAUATUSHG HIIAxlpHrME @t=D9rfH]L)L9IOH~EDHLHԂH[]A\A]A^<t<E1H[]A\A]A^H4H5l H8H럾&H=Ǿ HH*4H5 HH8܆cAWAVAUAATUSH(&Htyx HyPS <<1<tVH+tH(H[]A\A]A^A_fDHCHP0@HnuH+u HCHP01@Lc @L{0uL{H1KnHH1Mn@HH <uGHL9}]A 7I7HD$yH!6HtHT$H4$AzH4$HT$tL9}HD$Lv8 Et!LHuL9uH4H9CIH)I<{H*HHH$蓓H$HHHu HBHP0M9LLs HCHHD$1#mHHE1MEHD$LJ I!H <8uGHII9~XA8vHO 6HsLD$HL$H4$yH4$HL$LD$tI9~HFA8 InEt!LMuI9uH4H9CIL)HEIHHH^IHIu IGLP0M9QMLs +HCHHD$1kHHE1M HD$LJ xI!Ha <8uIHII9~[A8fvH6HsLD$HL$H4$wH4$HL$LD$tI9~HFfA8 I Et!LMuI9uHr4H9CxIL)HZIHHH#IHIu IGLP0M9M@HC0L{H@IDHD$L{HuL{H1jHHJ1MfDHH! <uGHL9}]A 7I7HD$yH6HtHT$H4$vH4$HT$tL9}HD$Lv8 =Et!LHuL9uH44H9C:IH)I<+Ht~HHH$H$H(HHu HBHP0M9L@HC0L{H@IDHD$MHIuIGLP0DHmu HEHP01zI9HT$fIF1f.ATIHHcUSHdH%(HD$1H3H$H,1HH݌tYH$Ht@H;y3t7HBtBL{HL$dH3 %(uHH[]A\L@1@H3HUH5 H81<1#oH~u H ff.H~u [Hff.H~u 1.fDH1ff.UHSHH8dH%(HD$(1 HUHB`HtYHtOH03HH0^HHHHH̶H\$(dH3%(H8[]ÐH;3HsHL$HT$HLL$ LD$sj H|$ H HD$HT$H HK A@A@ +E H0̨HP @ HH0L@H@LEH|$ HL$1!fA1Hl$(H*fDBLHHJ HDHI9lL6fD9L\$1Hl$(H,fBLHHJ HDHI9LD9>fUSHH;wwHD$(H;M$H HHLD$".H;HHH/HGP0H3HH}11MZHHH@1HL$(LD$0HHj3H5 ^\H;NAHHH@HKHC IEHIH+HT$0HHH9Ht$(~ FHFH~MIV(AF4HLF IN(@u<t<EA9VHL7dHD$0H\$I$IEHHEHP1HUHuKHU$HR0$9@HT$LT$zLT$HT$HHEf.HL$8dH3 %(qHH[]A\A]A^A_LD$H;LUH4$H;7H3H5} H8?HmwHEHP0hIuILL $H)*tHHHCH $HP0HT$0H $H!HHT$0Ha3H5} H81oH3H5Zw H81oIIFI+F H98*fHL[Ht$(fH&Ht$(Q<AVAUIATIUHS~ HMMu L9eE @u<t<EȋCMM)9r1Hs HSH)I9~=Mt4LHZy#7@LLH"8;CvMuHs H;MLHcMLs 1[]A\A]A^@H%tM5[1]A\A]A^HH[]A\A]A^aDATIUHSHHu H9IH}tw}~w9MuIH} EZL1H} []A\@H} HEH)L9}MtLHYu}4uLH_kHtE5P HEHE @׹@t@DωMHHH@wvfLHEN #HHLxH9sRHLHHfJHfJHfJHfJH9wHHHHHHMI9L1H)ffA@HH9ufH}LHNH} LHEN #HHLH9sQHLHHJHJHJHJH9wHHHHHHHII9L1H)AHH9uf.EHH0@uHHHHM1Le U@ATIUHSHHWf. {`s;HSE1LHHtKH6HtFHHHXNxEHl*1H[]A\ÐuD$sOD$HtאHHhI$H'*DAUL,ATIUHSHLHHI9HHfDH>x'I9HƨH>yA9T$HI|$ I$H  H@HH I9v1DHH9uH1I\$ H[]A\A]f.HgHH9wHI9"fA9T$PI|$ ID$H)H9HH:HLU&Hp0HH@HEƀ4HHHbKI|$ IH xI941ҐfDfQHH9uSHHHw HHt@5u*H;pt H$HtHHH[4HH[Ht HH(tH9HtHH[HPHR0@11pH9HufH;HtHH/uHWHD$R0HD$tDHHt HH(tfDHPHHR0AWAVAUIATUSHH|$(H$dH%(H$1H|$0HD$PHD$XHuPHtHH9HHH$dH3%( HĨ[]A\A]A^A_Hl$`I1E1HE1=HD$(H|$HE1L$J4 H|$Ht$HHD$@H9MAuAwEMLd$@Ht$PHH pc UHcc HD$8PHD$pPHD$`PHD$`PLL$8H|$0LD$`GH0;HD$(H;D$H]AHP+HT$(9L$t8H$HT$xH)HT$pHt$hM\ HHt$HE1H$HD$(H9DEiσ߃A@/ +E.t\wW;\$tHH$HT$xH)H/T$pHt$hHHt$HH$HD$(1E1-(HHD$(fDIIQAIFI AWHHD$(A MDIHI!ƅA$T$t=w^ AA A9\H$HT$xH)HCT$pHL$h9HH$HT$xH)H/T$pHL$htHH$A(=HD$(Ht$HDyIQ 1҃+H>@Ht$HHH+L$0HT$(HL$8H9v x-H$1E1E1AHD$HwHt$0HT$(H _ H)HD$8H)Ht$PHHT$HH_ UHD$8PHD$pPHD$`PHD$`PLL$8H|$0LD$`H0AHD$(Ht$H@AD;L$twYH$HT$xH)H~DT$pHL$htt fD AHHt$H1H$HD$(DʾHDD$$LL$Nx2T$pH$DD$$LL$HL$huD H$@H|$PHt H/H|$XHtH/t|H-1DʾHDL$$L$NxT$pH$DL$$L$Ht$hD H$D HGP0H,1 f.HGP0H@AMHPHt$0H Uo HT$(ھHDD$LMH$DD$fھHDD$$LL$MH$DD$$LL$11'iHH9H32ffD FfDH|$t*HD$(H$HT$xH)HT$pHL$hQ`+CMt9EHD$8IEHD$H9$t |$tnHD$H$H|$PHt H/H|$XHt H/H.eYffAH$fAH$o+HK6H$H+D$0IEMHGP0iHGP0IھHL$PKH$L$+H$+fAf.HPHt$0H l HT$(gfFiH$Y|$pHt$hH|PH|$PHtH/uHWH$R0H$H|$XHtH/uHWH$R0H$HH$R)H$D+@1TDAWAVAUATIUSHH$H7H|$dH%(HD$x1H|$HT$HD$0HD$8H IHuH?@ H\$@Hq4|$T~Ll$hHD$XH+D$`L9Ht$HT$HL-xZ IH|$)Ht$HD$`HD$HD$H9 @DL$PHLD$HHHL$`A(IA20 HHH9wE1 LHIIH|$0Ht H/3 H|$8Ht H/ H'1H\$xdH3%(wHĈ[]A\A]A^A_H9wx~DHH DJIIjADJAADJII ADJII(ADJIH8I0JADJH9sHLtH9wO II)IDHEQA?HHA JDII)I, DHDXEQA?Du A#ESA?e HHE DDщJIHL$@A @DDEx1!HLJ H9 LDDEyL)AhA H)HpN?DDHDPAɄRD HHH9wL)HD$Ht$HT$`HD$XL)G H)Hc u+p~? HD$Ht$HT$`H9t}HT$H)MuH)HD$ H qV Ht$(Ht$0HH SHD$PHD$PPHD$HPHD$HPH|$0LL$HLD$@H0{HD$Ht$H9MtHD$H+D$I$H|$0Ht H/uHGP0H|$8Ht H/uHGP0HF^LH9wcifIɈ HHIDJIIDJIIDJII DJII(DJIH8I0JDJH9sHLtH9 AɄ'DII)IDHEQA?HE AL)HD$HT$`AHt$EA D;|$THD$`HT$XH)HT$PHL$H_DPDJA?u HH|$`D 7AHD$DE<0p~?Xu 8xDGA? HDA/y6p~?u xDGA?/D@EHA?] HE7DD<7RA0{HD$AH|$`F`<HD$ff.Hx'Ht11YfH8HH3H5Y H8f1Hff.@SHSH11H[AWAVAUATUHHSHhdH%(HD$X1Ht$n.Ht$ H)@HHHH9D$ Bt$&Ht$(HJIHmH= L.LI* DH MHt$0LbEIHHt$0Hy LH2HtqLD$(H3HHSHKH5G H8MH1HHHHZYHu HCHP0HtHN+HmuHEHP0DE1HL$XdH3 %(LHh[]A\A]A^A_1H1lGIHH1uIHt$IT$Hx HHHPHH1HWD$ R0D$ fHP0AWAVAUATIHUHSHHdH%(H$81Ht$5xwA<,HuWLH9uJt$Ht$L@HHHt$HHHD$ .HD$@H)3H5B H8J1H$8dH3 %(}HH[]A\A]A^A_1L1| HD$HtmHPHHH9H<LIHHD$LLHP HvHD$0I9tL48IHD$(HD$Ht=MLt$(Ll$ fDHIH)tLHLLHu1H|$Ht4Ht$ "?IHt"Ht$ H=LI,MuDH=S L=IHHCAUILPH3HEIH5UA H811 HIEHIEZYHu IELP0H>H$H+,HCHP01DLl$0LLHHLkfDHLUHT$0I9LHD$HD$ fDH|$t(H!3H8I1fLL)Dk 1lff.@UHSHHHHHH[]AUIATIHUHSHHbHtH9HO1H HHHHtFHLHLH+tH[]A\A]HSD$ HR0D$ H[]A\A]øff.1DAWIAVAUIATIgfffffffUSHHdH%(H$1H|$ H|$Lw oD$THdHD$HHCD$XHD$hA7@*L@%u#oH3@@%@yH3@H5oP H81MA1H$dH3<%( HĨ[]A\A]A^A_fAW0:IGE1H=3wL@@0HcHtpL0HcH)HH?IHH)H9~1L0HcH)HH?IHH)H9IAHDH,AuLI.HHDHp@A0McHtnM0HcI)LI?IHL)I9~1M0HcI)LI?IHL)L9vHKL4AuH"HL)@H|$L"I@HI.ueD@HXAlAzE11E1҄uD$TAPۀSH=S HcH>fDD$TefDD@lNzHDD‰IGAWA@H 3H5; H8J H|$ 1NH%#PHDHAz%E11E1APwӹ!HsHXPA1E1D$X/nƃHt$hD$XH6H|$LH1LJD$X/ ƒHT$hD$XLL$H W1LcHHc$H3H56 H8LH|$LHHxLH`f.HT$`HBHD$`xHT$`HBHD$`HT$`HBHD$`"HT$`HBHD$`Ht$`HFHD$`Ht$`HFHD$`HD$`HHHD$`H2HPHT$`CHT$`HBHD$`H|$%U$HD$@[%xD$xft$vA/DAHD$hD|$XDL$HL$v1LDL$BDL$LcHA/DAHD$hD|$XDL$L$LHL$L1?BDL$LcH|$#HD$@Ƅ$x%fA%HD$@H0H|$Ytrf,A]@,HD$@OHD$`HPHT$`:HI;IGLP0,H|$DL$LD$"LD$DL$OH|$vDL$AuH|$Hđ3H5eE H8HD$`HPHT$`THD$`HPHT$`HD$`+AltDHAl@D@AP!HHXPE1۸E1HHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$H$HD$HD$ D$0HD$HT$dH3%(uHfDAWAVAUATUHSHL$dH%(H$1H7H|$HD$@HD$HH|$0HD$8HD1H~bEu]E1L%0 H9uCH<$tH$H0H9HH7H9tEL%S0 H\$PH Ht$8HD$0HH)HJHHIH|$d~HL$xvHT$hH+T$pH9~ HyLl$8L=^C fDHT$PAR @u AtADEHH)H HL$p|$`HLL$XHEGDD(ALZMڃA HLHD$0H9{ID9uLZA HD$0M@D(A|LZMڃtPA HLHD$0H9ID9uLZA HD$0MffA QVfDfA QfH9H<$HT$H / H)H)HD$ Ht$(Ht$@HMLSHHD$@PHD$`PHD$HPHD$HPLD$H۾H0HD$0Ht$80(LT$p=NHD$0H+D$H A HD$ HHD$(jf.LT$pHt$8H+D$LHD$ HHD$()fLT$pպHHyOHHH|$@Ht H/uHGP0H|$HHt H/uHGP01H$dH3%(HĘ[]A\A]A^A_HD$0JHO_5HAL%, H|$0H9h fD9L$dsWʾH߉L$ D$`LT$pL$ HT$Xt@tKB HD$0ILT$pHHD$0)HD$hL)H~D$`HT$XuB LT$pDfB RHt$8HD$0HAH|$0H9YHH|$0H9AAL%+ rH<$HtH+D$HH|$@HtH/t9H|$HHtH/t H4OHH|$0H9uHGP0HGP0117H9H L%3+ E1D6@AWAVAUATUSHHT$LD$ dH%(H$1H7H|$8HD$`HD$hH|$PHD$XHH~HuD  H9H* 1D$/HD$'DH9 Hs* D$/HD$HD$pHHD$H|$XHD$PHH)HVHH?HH$~H$vH$H+$H9~ HkHH)H$ILGAHl$xIH$HHLL9l ID\$/EIIeDM9C4G<HD D$A H QL9s;ZBB4Lx (sLHL9rHE1H)Ht$PHH$AE0HFA:H+D$8H ) HD$@HHD$HHt$`Ht$HD$`PH$PHD$hPHD$hPHT$HH|$@L$LD$h̸H0H|$XHD$PHH)H.H9HT$8H)H|$ H)HD$@H +) H|$H`LucHHqqHH0H QqL9s1H~HHuHHHL!L!H DL9gf.AFHH+t$8H ( Ht$@HHt$HHL$pHA @L9IDt$/EHB 0B4 HpD(AA_HB L9HHuL9rgfDL9rH)HD$PH|$XH$fDHD$PXfDHuHΈ HHH@rHH0H J@rL9sH~LuHDH)Ht$PH$D;$H$H$H)H$HL$xD$HH$H HT L9|D|$/EIIIB 8B4 HpD(AH)HL9AB<>F$HpD 獇$= AAA A@LHf HHHfrHH0H fJfrL9UH~HH;HHHL!L!H DL9QIDt$/EHB 0B4 HpD(AAHB L9HHuL9rFDL9rKfDHuHΈ HHH@rHH0H J@rL9sH~LuHDH|$qHH|$>H|$`Ht H/uHGP0H|$hHt H/uHGP01H$dH3%({Hĸ[]A\A]A^A_DH|$DxH$DHFHT$8HD$PH)H|$ HD$@HD$XH [# H)HD$H-DHBf L9HHDLAf.LAfHAfL9HD$PHH)HH$@H$7fD$AJfDD$H$3H~6H9,H|$ tHD$ H0H9HH_HH|$PH9tûHt$PH$H)L92ADHt$PH$fDH|$ t H+D$8H\$ HH|$`Ht H/uHGP0H|$hHt H/uHGP0H|$*fDHH|$PH9H D$/HD$GHH|$PH9uB 6B4 Hp$=A AD D-HH|$PH9mHH$ HH$H)Ht$PH|$XH$11,H@9H9H)Ht$PHH$JH D$/HD$NwE1)@AWAVAUATIHUHSHH|$dH%(H$1H|$0D$,HD$PHD$XMo HH91H=28 HHHHH9vVQHH\uH9P nwHcH>HHH9wHuJH}9H3HH$dH3%( HĨ[]A\A]A^A_fDHLl$`LHH$MRHD$L5" H8 J4 Ht$HH9D8HPA\EHT$D;d$tw[H$HT$xH)H~FT$pHt$htfD$HH$HD$Ht$HHHDLp T$pH$Ht$huD<H$@LD$0HHxH|$L)HL$8H9HT$LL)Ht$PHHHT$HHG AUHD$(PHD$pPHD$`PHD$`PLL$xLD$`rH0'LH|$PHtH/tNH|$XHtH/t.1HQnwTHcH>HGP01fHGP011(H{9Hf|$t[H$HT$xH)H~xT$pHL$hN5\HT$HH$DBDD;D$tw^HT$xH)H~QT$pHt$hDD\L H$aD¾LL$DD$W H$L$DD$wLl$`LLAf F`H|$PHt H/uHGP0H|$XHtH/uHGP0f.L#DH|$tlH$HT$xH)HST$pHL$hHD|$tTH$HT$xH)H;T$pHL$hjD|$t AH$HT$xH)H(T$pHL$h DH=p9`?{LD$0HH  DHD$,H)H=H  DPL 8w3McDCHcH1H8BTЉT$,HHD$H9DHMcDCT$,D^A va@BTT$,@|$t 8H$HT$xH)HT$pHL$hi D|$t[sH$HT$xH)HZT$pHL$h*r\D|$t& H$HT$xH)HT$pHL$hN'JD|$t oH$HT$xH)HVT$pHL$h DHD$,H)HH  0H9sxWЀH;L$tH$HT$xH)HT$pHt$hC* gf|$t+H$HT$xH)HT$pHL$hw< D|$t!fH$HT$xH)HMT$pHL$hp"D|$t zH$HT$xH)HaT$pHL$h1 zDHD$,H)HH  f F< H$%BTɉT$,f\fAf\H$9L$tGDʾLL$}H$L$/L$,0vHT$LD$0H  #L'YH$\L2H$ L H$x LH$ LH$ LdH$"L=oH$'LHH$L!H$ LH$Ll$`LFL$wH  H9/L Zq3PAHD:HA@HHD$H9u.H  H  H$vAfD$AfA"fDH@H8H|$@Ht H/uHGP0H|$HHt H/uHGP01H$dH3%(HĘ[]A\A]A^A_H\$PLl$8HL= L5O xLID$HHIHHD$xHD$J4 Ld$ Ht$8f.L$H+D$ LHPHT$0HD$(Ht$@MMHH HSHD$PHD$`PHD$PPHD$PPH0HD$Ht$8H9HH)HrHT$ LH)H)Ht$0DHHD$;L$dw9HD$pHT$hH)H~'T$`Ht$XtKtT HHD$pfDʾH߉L$5T$`HD$pL$Ht$Xu HD$p@f Ff.H|$@HtH/tPH|$HHtH/t0Hh 11gHg9HfHGP0HGP0fAWAVAUATUSHH|$dH%(HD$x1H|$HD$0HD$8HIHHu 'H\$@H"|$T~Ld$h HD$XH+D$`L9HL$HH|$HJ4'H $Ht$(H $I9HD$`HD$|$PL|$(Lt$HD$LD$(Ll$0Ld$L9s=0@HT$`(4HHHT$`HD$L9rH|$0Ht H/9H|$8Ht H/HH\$xdH3%(HĈ[]A\A]A^A_LHX1@H+D$HMMHD$ HLHHD$(H  H SATHD$PPHD$@PHD$@P蝖H0|$PHL$HHD$LD$(ff4Q@4HT$`HD$LD$(He9HtzHHGP0@HGP0@H0H|$0HtH/tDH|$8HH/HGP0111QHrd9HmgHGP0ff.AVIAUIATIUHպ SHHpdH%(HD$h1H\$]HH=9 HyH= H[H=h9 HuH= HW H=9 H9 H=& HH=y H}H= HwH= H)fH1ALALHqHHHLHH'IHH@tnH+u HCHP0L@1LLL@HT$hdH3%(Hp[]A\A]A^LLLJHHH`3HH5 H8I1~I,$u ID$LP0H+u HCHP01uD1LLLp[LLL ED1LLL+fDAUATUSHxdH%(HD$h1HHGHHIHunLl$1LHt$ HtzH|$LHLHD$uHD$HL$hdH3 %(Hx[]A\A]ÐHwHuH`9HtSHDHH HLfDHq^3H5 H81{11/ HP`9Hu^fDh H= w1@HCH55 HPH ^3H811t@AWHHAVAUATUSHH8H=~b3dH %(HL$(1HD$HD$HD$ H9HHH~x LH10HHLmDe LhHEAAHCC Bà Љƒ߈S U HC(@HC0 HC8ȀHC@C HCHAHH?@HE@@H|?I9UM}T$ IH;EHCHT$ tLk0HC8tLk@HC(M AI HuHHHmHEHP0HHmuHEHP0fD1d@HH um5H1HT$(RH4 LL$(LD$ ZYtH|$HHt$HT$ Hu HHHL$(dH3 %(HH8[]A\A]A^A_f.H}0HuH@HE@3Hmu HEHP0H+0HCH1P0f.Du 1ҿHAAGDH\9Ht4HC[H3Hm1fD11 HH\9HufDATI$UHH=g SH [3$H=N H膽HY3HKHHtATu[LH2 H]A\fD[LH  H]A\ f.SH3H[HATUHSHHHGH O HyPC HS t_Hs0LcH@LE<tT<r<H]H[]A\HtiK HS uLcH<uHHxH~fA<$t ID$ITH9tHfxuHX3H5 H8 H+1H[]A\D苶tK DIHtHpHx nI,$Hu ID$LP0HtHCK f.HCHP0H1[]A\H>HHPHHHWD$ R0D$ fHHHA4$1@HH9aA ufDH+t"HW3H5 H81DHP0HH H ~5II91L6HL9THA<$4ID$I@I9HxuAWIAVIAUIATUSHdH%(H$1HNHuAHX9HIHH$dH34%( Hĸ[]A\A]A^A_@Hl$pHH$~L$zH$H+$L9aHZ3H9CzHt$HK.Lt$8Ht$Ht$@Ld$8Ht$Ht$`Lt$@HD$`HD$hHD$HHt$L9/A>IHRHHImIu IELP0ML;5W3uIFHG6A~ I~AF ‰ f EIN0@IVHHHDD(AD9$DHbH$vLHpzHpY3H9CDc Lt$8Lt$@HD$`HD$hE|LSA >HC0HHA@HEAK.AIHD$HAAEHL$x$L9wL$TIfDL$TL$TfL$TfL$TfD$P*[ HЃ 5IHD$XL$>H$Irf.AHHЉD$PH$ HcLLT$XH)HIHI9H$KHAHD$XuA1뙃@Hp0HHHHDHH=vH$P DA fDAIqfDAq+fDIH$MX=A<%t8HALH)H$H$L9HuA< %ufDH$I}PH$H/I}PD$xtH|$pH/1H$dH3%(H[]A\A]A^A_ffAHEHoH}Ha=3H;H5= 育H$H/HEH;@3H;A3ssHr3HD$@HHPD$dA } HT$XL}D\$THtI9|HcD$`tI9 A D$PH a E ƃ@  H}0HMH@HEϋ|$d\ @ DAJՃ{ IL9}L|$X$AAu&D\$dHT$XEf HI9} D9EDCϺ@u<t<EA9m D$dHt$Xt I9€HA9wH$H+$H9} H D$TD$Pƒ߃Xt oA tL$H$H$O.0D$PLJBHHH$HD$XH HD$XIHL$L$L$ HEȉL$HA?H5 _H$FL@H93H81H$H/eA|$P.fH93H5 H8&DfADHH$D$THT$XI9mHHT$XfDI}P%H$ZDD$dEt:$H$H$w HfDFHH$D$TmT$PЃ߃Xt oV$H$H$0T$PL@BHHH$M H$H$MH躶L$I1HDL$ DD$DT$HL$+DL$ DD$$DT$A9HL$DBJH03H5 H8JD$P0 HD$`H$$L$A/AH$afDtcA HAЉL$PH$ DDD$`)ʉAA9H$CDAЉD$`]uA 1뢐A qfA%fDAb%H$QtI}PDHL$DD$DT$wD$dHL$DD$DT$9ACAA 1mI9I}PHNzDD!H$H9$}H$T$xtH|$pH/uHGP0H$H/I}PYH豺HNH=PH|$Xu |$`?HHD$@A LHHP HD$`H$HPH$Hl$L$H$ AHD$PH$A1HD$X1H$ HHH$H$H H1@ HH9ujH$HPHUH hf HfpH9u8A+14DfDFDH$H1-3HET$H5 H;HH1oAIHHDŽ$H$ηH6HD$XA nAqH$sHl$@D$dHEH|$XX|$`ML$TI}P H_H|$XAD$T6X-otx EI}PHIHI?IGLP00fH+3H5 H8DHGP0HXHH8HHWHHH@HP0qE ƒ "VHEH(ZfDHGP0I}PHU0H}H@HDD$dE11H$H/oHGP0cD$`Z0f9$fH$H$H)HJ$H$W ,脱H#HT(3H5E H8襛[HD$`H6H=9 HEA HEH(DI/t1IGLP0HEHHEP0H%3H5: H8 HWLT$ HD$L$R0LT$ HD$L$HU0HH@HHDYf,BHU0HH@HHDSI}PH$@,H$L9U(H|$HLsHl$HAIH&3H5 H8)HU0HH@HHD(螧H$3H5 H8c H#H H$3H;["fDL$?HX$3H5 H8HĘIHH1$3H;}B-HUI/HEHHD$HL$PaH#3H5 H8,H#3H55 H8H|$HHHD$HH/rHGP0`INHx ff.fHGuH"3Hff.H(H=)%9dH%(HD$1H H$H( ) HD$HHHPHHHuHGP0H={'3薢H 1ҿHp fIHIL H9uH=<5Hu35HH=)B54x`H=C5$x81Ht$dH34%(H(DH=9 ĵaH= 謵f.H=A 蔵fH= 脵o11HH#9HH= PH=#9HH1fUSHH=w#9HtH/Hc#9tFHR9HH;HtHH/uHGP0HH9uκH[]飜HGP0f.AWAVAUATUSHHHtHCt H;%3tH[]A\A]A^A_ÐC uH="9H:H= (L%1!3:H=u M,$謃:H=` E}%M,$:H=F 聃H=Z"9HAE%}:H=! I蹪M4$:H= DE~%MWH}IEH/uHGP0LmH[]A\A]A^A_fDH!9HH[]A\A]A^A_逢:H= /I,$:H= 躂H=!9HHE%x@:H=T I,$:H=? zE%C H+C `:H= 誩I$:H= 5C%,ff.HGHtfUSHHHoH 11HH謑HCHtH{ZH 9H 9HHCH[]ff.SHHHt HH[音[SHHB t HB [HdH%(HD$1蓽H$Ht H袜H$HT$dH3%(uHT@H=9Ht HG ufAWAVAUATUSH蝻IHt H@uH[]A\A]A^A_EDIoE1E1HB#3H HH81&H~`E1@HLkIc L9tBIGJ{ C <t<tH= I芰c L9uH"3MLH H81I/u IGLP0H=9袠H=9HH/H9uqHGH@0H[]A\A]A^A_fH(z>H0"3H=| HC <HLcH[]A\A]A^A_Ð7HWt1HJuH1DH1  HuÐH1DLAH9tLDDEufDUHSHH苨HH<诰HH[]DAt19u8t4DH9u Et AuA@9} Euff.Ht2DA9u-Et%H1DDDD9uHtH9u1fD9Dff.9tHu1H@USHHlHH9t HB;juH9(tH9u1H[]f.USHdH%(HD$1HGtyHQHHtyHH$H9wFH,HHt1HHHCHHT$dH3%(Hu1H[]fD[1苢11׌H=*5{f.2}xv$K'0,%&2B X2^wM2{NS2oU2eY* V2W2 Ð[ ~~ Sc}!{8@|*Rv/yvN1BdXl 23u   D,Yu -.y D%4mn'Yr (tZ)4 ITzwzDvtvLFWY Gu f Ht BsrE DN|YwBKkc` Lt MrT Pjq Q@ R,   8 # fH~HFo HD$D$O2sr Q2R2 DH2svJJ2~YHb K2b$ L2N0 (2eNZ )2 f2z\2ZjvX^2LV _2u  @ 2| Z2du\ fH~HF HD$D$2lx2*xw2v2$ aytliV`l   ,wq*v$ wwfvv6xjMb Jf: utis(tb Ð JwB"^l8s#4^L A lmv*fS b ÐP bD _vvjiv: k, fH~HF HD$D$Dfdnda W4qUT fH~HF5 HD$D$f u>s[Hov>]fe^U _2 Xav2YH Z fP  jvB>cHX,M h [6RfT6 DC r} bqw@E L[dF J G  DX gw" ~  DY F4 Z x  nwJ vN fH~HF HD$D$DZlI<> @ d\v*A F B  Ð    f.nc V D\evJf^P Rt >  U< fH~HF HD$D$m*jw8DUY>  f\VzKj tV D thvB _U ID & XM:G;  D $04p'"n; ,w>'`]'S 'Z< !0_v*"0C #0  Ðf0 '$g&'*\J fH~HF HD$D$Ð1lm(0jv`80av290K6 :0hJ f )0B$ &0lNvA D!2evB#2YS$2|H %2 1ZFR1ZD 2v D%xpASoN0pZ2f2`22V,K 22t %$ $$ooxg\ennhsd]>u"J Jv0]w1D + f.2\lwz2J fH~HF HD$D$DNl6QLiQ)mw~FQuc^ D4[v**8VB M;b Ð 4bD ; f. kQ2 mQ NDew" N D O\L pO ]NjV0Nj$0NHjN/  2Rb^ DpJ.A q r DiLdvJkJS l m g$I.@ Dg D|iV4[PhNg1TZvj2E3uGn D  3 $:0  fD0| DQNJ< ~ Dר fҨeШcd5 DV|eFck@`v^xbYv0f  @ s OI; |^ DXvBVT G@d . XD;v Y f֩laQ]w@ةlSL٩zAfPz fSlRJT< UT6 Dѩ$[vBөQIԩ; թ  \K?fЩ D Ԩ,PVJըZ>z ֨f D\wB٨PDfF  2 OVI=  D)VvZQv,7  x l 'B6N D@ sT ~v.o4S  \Xwb Lv,x=f  F "PFC#= $tV M @24M~G2"<" 2, DR!4]x!ce!cj[!v`V!LRX!>b  Y!Z!< h ycn"kCc!$ cjCcH-lV~2jRL/(I"> 01  `!\_!a]!= fH~HFG HD$D$n!dRwzi![vLk!x< H l!4 m!  Ðg!>5 Ds!YwJp!T^ q!8L r! u!4JEv!B6 w!lN Db!LCc!6 d!, Dc$`f!zWvP !!\!N!uK |!Vw:z!0N fH~HF HD$D$U @0 ~!R fH~HF HD$D$!up `$ D  fD TG>B B6r |^ Dw DPvBy H<f > * u D=N/. t  fP|UUBRv@WE&>X*0 Yv DRIf<S5 TT6 DE,PvBGD=H/ I C<.% DRYjW`Pv> HTA86f@vX ,G> 2 4 DV|Nv:XG@Y5f T8.V D$VvrvMvDE9fPZ QlN D:,n DdLvb~7v4 $  X  7*^ Ds$H t$.# u$tV Dg$UvJi$QhU j$2 k$ e$47>* D$KY$GY,$XP$Jw<$>3r $$u^v" D$.\ Tn $@ $, D z$SvB|$Q@Q}$tI ~$ x$T8* D$: $T$" f$WF$L$HZ$&?`1 $$ 'B.:'-B 'n D` $4*^ $Hb $4 D$JvB$~E8B$,8l $ $3*N D $8\ fH~HF7 HD$D$$MwJ$Gv N$T- $. $>:$*B $ D|'O'LwH~'C< 'r 'f D'>8',: 'D& Dw'dKw:$6  v' y'=n8z'", {' D| M_ 9] x- fH~HF HD$D$^OT#S|Kzv.B` y ?v*z && {  Ð x  $Q>?bODHLIwd/v6. @B , D   ?4)  DFvBF?p4( ~` 7-fL. D6LIwjDv<92V$n  Ð,1# D:CvB<95=& >h 8l1V(> D$DM$J $Cv>$7d,$(& $  $93 $J( $ D$CvB$8x4$% $fH $5) 0 Ð$LI$2EwH$l6,^ $ $ D!$6/"$B! #$n D$BvB$:1$T$ $> $+"& DNP$N<`>NY$M^$Ew:[$=4X \$]$uTĿ `$@4 a$X b$D& D U$LT$p=Q$&$ i$Jn<vPp) 6 qfz fk\+&4 l`" mL. Dd@vBf4.gt| h b, DW$*! D8$K^/$ 3$|1$J~ DJzI (9J#E A~ b" Ð 5$ ," D.$J)$<v>+$r1%,$ -$jL '$D+n DE$vpK$<vBM$48)N$, O$ P I$ D$DA?$wd<$H99$$ p  l ^@ @$ L ;7v2mb  f ) d/T(P  3V& ʺ v D\:vB~/'LĻ F( &&& D?;v@/*  D<4" f D8vB.* 6 ,& DT!6D fH~HF' HD$D$ f.@Cwj3uSҶ Ð(sD*:?7D +n,uI ? fD( A:< B&  fD&T"n D?7v@*>i2 j~ D->(R \> DG6vBIF."f   E#^ DUAq r;P8?w>s *L2t h0 u z\ Rt/"Sr T< Dl 6vBn v1`.o T$t p  j V D<5w@+^&2¶ lN D!/v*"δ #0 Ðf  Y|3vZN/v,h  f W$n D@N j6 t9:y1{7|Z Dh r@^?o U?b 1? 7wj v<  u X O fDȴ J, 8 *̲ ff   g  f 4vB ,! ij   ,%Ff tV D\8j 24v@l 'v#m j n  Dg ,v2h ~v i  fff  0vB&"| fH l& Da;8:/ s:vY#v3 f` fD<  T" 9g ^ U @h NR4 Ю N2 N`0 N `D7w2~ h  ҿ bL'cJJ dv D~ lRb SL. DY6vB[F,2\T̮ ] V(W2گ X Dg9 b) `0 fH~HF3 HD$D$v,$. w0R x Do1vBq,+rd sν m$> έ D$2 /v@" ʮ L. Dt&>B   De,vBg!0h < i c$~  D 8^g .8Dr H0w wDt `&*(j u $v z f L&v2  v ػ ff  k L+vBm > xn   o fH i  F D  2 +v@ # zff غ f " : J v Dl )v:n "Ho f J, j D  Dx 2f 0wp 4/vB %x+ d T   > Dk *vBm 6pn 4 ̪ o N0 h ".i ZB j   D 0 :)vH ff  g  f  z Z dF D| l(vB~ "f &  z ,  D3')v55!~65 ͨ 7 1O9f0l ` 0/+2.v. DL<06.)w>B8  $!v*V b ÐffH "vBnt L  Nl^ O Ðl,G(w@lF fFj fIL&J KD& D$&vB\  < fĴ D  j tV Dt'wBNf6 " lv ڤ  DdD > effz fl$v:no< fJ, ijb£ k  D  أ ȣ     p ` P @ 0          p ` P  p ` P @ 0  0  X H   С      p ` P @ 0  p ` P @ x  ؠ Ƞ p  P (        x h X  ؜ P H P @     ؞  Н      X ` 8 (   Н      p ` P h 8 ț        H P @ 0      Л      fP @ 0      Й  8    (  P @ 0 fh P ؚ Ț     x 0 P   ؗ p  Й        h  H P  x  @   p ` P @ 0  ؗ H   ȗ H ff З     0  @ 0          x Ȗ   ȓ ؔ Ȕ  x  H    Е   8 (     ؿ ȿ  p H 8 ( 0    ؒ Ȓ           p ` P @ 0      В  8 (   ff8 p  p ` P @ 0          p ` P @     x h X H 8 (     ؎ Ȏ Џ      p ` P    x h P H 0 (       0 ` h X H 8 (      P     X Ѝ  ؍ ` h X H `   0        x h X H 8 (         p ` P @ p ` P @ 0      Љ          x h X H 8 (   h    ؇ ȇ     x h ؈ Ȉ   Ј      0          0      І   0      x h X H 8 h Ȅ  @ X p    (   Ѕ    Ђ P Є    h X ؂ 8  @ p   ff  h  ؃   P @     Ђ  h   p ؁  h  Ȁ   p (      H 8 ( x ج    ȁ   p  8    Ѐ    ȫ  8 Ѐ f p } X H 0 (     ~ p~ `~ P~ @~ H 8 (   X H} 8 ( 8~ (~ | p}     h~ (~ } @ | (~ } } { } }     { X} X} }  { { } 8 hz Xz } Ч f} X{ H{ p| z { y ffffy y X| y X| py { h| Xy | { z z 8z p { P { p{ { x{ h{ `x x z { z x x  Pz @z ` @ pz (z f z y x @w  Hy fx y p 8 ( x 0 w 0x Hy x Hy f  w px hx fH x Xx  fx u w 8x w w 8u w  p w w t t hv Xv ( fv v ȡ Pt v v w fw u v s 0 v @v u v u hs u xu 0v    6u u t u J fr fu u  u :u iu (u s vu t t t  t is     t t z fs   q p ? ^ 5t $ cs r t  r r t s  s qr s r r ff.fv.) vN_ t90t11/ D w;sV 1f.( s0 1 Ðt1f.ws: 1fDt r( 1DfwLH0 HsZ PHHl2BB@tH,2D11w9H)0 HZ BHH 2@f1w5H/ HY BHH2@ff.1w9H/ HxY BHHl2@f w8H 6/ H %Y QHH2BtB fDH)Hfw8H . H X QHH2BtB fDH;Hf1w9HY. HHX BHH<2@f 1w9H . HW BHH2@f 1w9H- HW BHH2@f1w9Hi- HXW BHHL2@fwLH- HW PHH2B@tH2fD1wLH, HV PHH2BB@tH\2D1wtH[, HCV PHH<2BB@t=~~=DH1L͓2Hʍ HcA HJL9ufD1@wCH* HT BHH2@@t Hu =@L62< 1fD HcA H9f.1w9H* HT BHH2@f 1w9H) HS BHH2@f 1w5Hy) HhS BHH\2@f.fHGH5u2HWH9tBHHHHO0H98t`HG(HwHtHH0HO0HtHA(HG(HG0HtESHH*t HC[ÐHBHP0HC[@HHG(HO0HwHufff.@HHHtH1DH#1Hff.HHdH%(HD$1IH52 MIHT$dH3%(uHUDBAUIATAUSHHHH-b2H9t=H4u1HCH;n2t$H;%2tH2HH[]A\A]DI}H9t'H4uIEH;2tH;2uDH{H?~6H2H9t*IuH>~ H9tHD[]A\A]fAtZL9t0H 2HH[]A\A]f.H2H@H92HH[]A\A]f.L9HOHH9H Ȑ2HAH=5i HP1fATUSHHGH8~jL%2L9t^HH5D4H\-HHHKHUHuLHHAHH=mi HP1KHHH=h 1[]A\gHIH=i HINHAHP1=HmuHUHD$HR0HD$H[]A\f+HKH9KID$LHPHHH=h 1[]A\@ID$LHH=h HP1yHAHPff.SHS=HHCH[H@f.SHHt=HH[+ff.ATIH=D2UHSHHt"H@ L`HtHEHkHPH[]A\SH1H1HHtH(t[HPH[HR0fH[<H2H9Gt+HtHGH;Ō2t H;|2uH:fDH>H0Huff.ATIUHH5 S1H0dH%(HD$(1LL$LD$HD$HT$HJHHH 2H9L$H,L;%2H}HD$HD$ Ht H1LA$0HHtgHT$H}HC HD$HSHHHCHD$HD$ HtHt>HEHC(HC0HtHX(H]Ht$(dH34%(HH0[]A\HT$ Ht$QHD$ HHP0HC(HS0HP0HtHZ(HX0@HD$fHT$ Ht$H|$H\$HHVfDL;%2HCHC(H{0H!H_(DH2HQH5.e H81 0HD$Hff.@SH \8H1HHH>d 1҅tHSHH~HHH[Ha2Hff.HH2H5d H81Hff.@SH HGH2H9t'H;H2tHFH9t5H;62t,H [2fHGH8~6H;ϊ2t-HHFH9u̐HFH8~VH;2tMH H[T$Ht$H|$=tqH|$Ht$T$HH?oH=f2cT$Ht$H|$t1Ht$H|$T$HvH>AH5&2H [l@H 1[HHGH;2t+H;<2t"HY H541H)fHGH8~H;2t HH|$Vt"H|$HH?H=2f.1HfHGH8~H;[2t HSHt#HCH8H22H[f1[ff.HGH8~H;2t H&SHt#HCH8H҈2H[&f1[ff.SHHHH?~H;=2tH[HT$H4$"t$H{H4$HT$H?H=T2H[H[ff.@SHHGH2H9t'H;X2tHFH9t5H;F2t,H[b/fHGH8~6H;߇2t-HHFH9u̐HFH8~NH;2tEHH[ /Ht$H<$RtfH<$Ht$HH?yH=2mHt$H<$t.Ht$H<$HvH>SH5H2H[.fDH1[HGH;2tH;`2t1HGH8~H;2t HDHH|$t&H|$HH?H=Ȇ2H1HÐSHHGH$2H9t'H;؈2tHFH9t5H;ƈ2t,H[fHGH8~6H;_2t-HHFH9u̐HFH8~NH;?2tEHH[Ht$H<$tfH<$Ht$HH?yH=2mHt$H<$t.Ht$H<$HvH>SH5ȅ2H[fDH1[HGH8~H;2t HSH7tHCH8Hr2H[H[SHHHH?~H;=C2tH[WHt$t H{Ht$H?H= 2H["H[HGH;i2tH; 2t1,HGH8~H;2t H,DHH|$Rt&H|$HH?H=2H+1HÐSHHGH2H9t'H;2tHFH9t5H;2t,H[fHGH8~6H;2t-HHFH9u̐HFH8~NH;2tEHH[Ht$H<$tfH<$Ht$HH?yH=2mHt$H<$Zt.Ht$H<$HvH>SH52H[NfDH1[SHHGH2H9t'H;2tHFH9t5H;2t,H[fHGH8~6H;2t-HHFH9u̐HFH8~NH;2tEHH[PHt$H<$tfH<$Ht$HH?yH=2mHt$H<$Zt.Ht$H<$HvH>SH52H[fDH1[SHHGH2H9t'H;2tHFH9t5H;2t,H[/fHGH8~6H;2t-HHFH9u̐HFH8~NH;2tEHH[p/Ht$H<$tfH<$Ht$HH?yH=2mHt$H<$Zt.Ht$H<$HvH>SH52H[.fDH1[SHHGH2H9t'H;2tHFH9t5H;2t,H[20fHGH8~6H;2t-HHFH9u̐HFH8~NH;2tEHH[/Ht$H<$tfH<$Ht$HH?yH=2mHt$H<$Zt.Ht$H<$HvH>SH52H[~/fDH1[SHHGH~2H9t'H;2tHFH9t5H;2t,H[B fHGH8~6H;2t-HHFH9u̐HFH8~NH;2tEHH[ Ht$H<$tfH<$Ht$HH?yH=2mHt$H<$Zt.Ht$H<$HvH>SH52H[ fDH1[SHHGH}2H9t'H;2tHFH9t5H;2t,H[b fHGH8~6H;2t-HHFH9u̐HFH8~NH;~2tEHH[ Ht$H<$tfH<$Ht$HH?yH=~2mHt$H<$Zt.Ht$H<$HvH>SH5~2H[ fDH1[SHHGH|2H9t'H;2tHFH9t5H;2t,H[fHGH8~6H;~2t-HHFH9u̐HFH8~NH;}2tEHH[Ht$H<$tfH<$Ht$HH?yH=}2mHt$H<$Zt.Ht$H<$HvH>SH5}2H[fDH1[SHHGH{2H9t'H;2tHFH9t5H;2t,H[fHGH8~6H;}2t-HHFH9u̐HFH8~NH;|2tEHH[pHt$H<$tfH<$Ht$HH?yH=|2mHt$H<$Zt.Ht$H<$HvH>SH5|2H[ fDH1[SHHGHz2H9t'H;~2tHFH9t5H;~2t,H[" fHGH8~6H;|2t-HHFH9u̐HFH8~NH;{2tEHH[Ht$H<$tfH<$Ht$HH?yH={2mHt$H<$Zt.Ht$H<$HvH>SH5{2H[nfDH1[USH(HGH-y2H9t>H}2H9t2HFH9tQH9tLHtHBH9t^H9tYH([]N&fDHGH8~nH;{2teHHC}2HFH9ufHFH8H;z2HHBH8H;z2H(H[]%HT$Ht$H|$<H|$Ht$HT$HH?H=dz2H|2HT$Ht$H|$txHt$H|$HT$HvH>H5z2HT$Ht$H|$t0HT$H|$Ht$HRH:Hy2H([]$H(1[]SHHGH$x2H9t'H;{2tHFH9t5H;{2t,H[fHGH8~6H;_y2t-HHFH9u̐HFH8~NH;?y2tEHH[Ht$H<$tfH<$Ht$HH?yH=y2mHt$H<$t.Ht$H<$HvH>SH5x2H[>fDH1[SHHGH$w2H9t'H;z2tHFH9t5H;z2t,H[fHGH8~6H;_x2t-HHFH9u̐HFH8~NH;?x2tEHH[pHt$H<$tfH<$Ht$HH?yH=x2mHt$H<$t.Ht$H<$HvH>SH5w2H[fDH1[SHHGH$v2H9t'H;y2tHFH9t5H;y2t,H[$fHGH8~6H;_w2t-HHFH9u̐HFH8~NH;?w2tEHH[$Ht$H<$tfH<$Ht$HH?yH=w2mHt$H<$t.Ht$H<$HvH>SH5v2H[.$fDH1[SHHGH$u2H9t'H;x2tHFH9t5H;x2t,H[RfHGH8~6H;_v2t-HHFH9u̐HFH8~NH;?v2tEHH[Ht$H<$tfH<$Ht$HH?yH=v2mHt$H<$t.Ht$H<$HvH>SH5u2H[fDH1[HGH;)t2tH;w2t!HGH8~H;u2t HDHH|$t&H|$HH?H=Hu2H1HÐHGH;s2tH;`w2t1HGH8~H;t2t HDHH|$t&H|$HH?H=t2H1HÐSHHGH$s2H9t'H;v2tHFH9t5H;v2t,H[fHGH8~6H;_t2t-HHFH9u̐HFH8~NH;?t2tEHH[Ht$H<$tfH<$Ht$HH?yH=t2mHt$H<$t.Ht$H<$HvH>SH5s2H[.fDH1[SHHGH$r2H9t'H;u2tHFH9t5H;u2t,H[ fHGH8~6H;_s2t-HHFH9u̐HFH8~NH;?s2tEHH[P Ht$H<$tfH<$Ht$HH?yH=s2mHt$H<$t.Ht$H<$HvH>SH5r2H[fDH1[SHHGH$q2H9t'H;t2tHFH9t5H;t2t,H[fHGH8~6H;_r2t-HHFH9u̐HFH8~NH;?r2tEHH[PHt$H<$tfH<$Ht$HH?yH=r2mHt$H<$t.Ht$H<$HvH>SH5q2H[fDH1[SHHGH$p2H9t'H;s2tHFH9t5H;s2t,H[fHGH8~6H;_q2t-HHFH9u̐HFH8~NH;?q2tEHH[pHt$H<$tfH<$Ht$HH?yH=q2mHt$H<$t.Ht$H<$HvH>SH5p2H[fDH1[SHHGH$o2H9t'H;r2tHFH9t5H;r2t,H[rfHGH8~6H;_p2t-HHFH9u̐HFH8~NH;?p2tEHH[0Ht$H<$tfH<$Ht$HH?yH=p2mHt$H<$t.Ht$H<$HvH>SH5o2H[fDH1[HGH;)n2tH;q2tQHGH8~H;o2t H5DHH|$t&H|$HH?H=Ho2H1HÐHH?~H;=o2t @HtH=n2HHfHGH;Ym2tH;q2taHGH8~H;n2t HEDHH|$Bt&H|$HH?H=xn2H1HÐHGH;l2tH;p2tHGH8~H;/n2t HDHH|$t&H|$HH?H=m2H1HÐHGH;Yl2tH;p2tqHGH8~H;m2t HUDHH|$Bt&H|$HH?H=xm2H1HÐUSH(HGH-k2H9t>Ho2H9t2HFH9tQH9tLHtHBH9t^H9tYH([]NfDHGH8~nH;l2teHH3o2HFH9ufHFH8H;l2HHBH8H;l2H(H[]HT$Ht$H|$,H|$Ht$HT$HH?H=Tl2Hn2HT$Ht$H|$txHt$H|$HT$HvH>H5l2HT$Ht$H|$t0HT$H|$Ht$HRH:Hk2H([]H(1[]SHHGHj2H9t'H;m2tHFH9t5H;m2t,H[fHGH8~6H;Ok2t-HHFH9u̐HFH8~NH;/k2tEHH[PHt$H<$tfH<$Ht$HH?yH=j2mHt$H<$t.Ht$H<$HvH>SH5j2H[fDH1[SHHGHi2H9t'H;l2tHFH9t5H;l2t,H[fHGH8~6H;Oj2t-HHFH9u̐HFH8~NH;/j2tEHH[Ht$H<$tfH<$Ht$HH?yH=i2mHt$H<$t.Ht$H<$HvH>SH5i2H[>fDH1[SHHGHh2H9t'H;k2tHFH9t5H;k2t,H[fHGH8~6H;Oi2t-HHFH9u̐HFH8~NH;/i2tEHH[`Ht$H<$tfH<$Ht$HH?yH=h2mHt$H<$t.Ht$H<$HvH>SH5h2H[fDH1[SHHGHg2H9t'H;j2tHFH9t5H;j2t,H["fHGH8~6H;Oh2t-HHFH9u̐HFH8~NH;/h2tEHH[Ht$H<$tfH<$Ht$HH?yH=g2mHt$H<$t.Ht$H<$HvH>SH5g2H[nfDH1[SHHGHf2H9t'H;i2tHFH9t5H;i2t,H[bfHGH8~6H;Og2t-HHFH9u̐HFH8~NH;/g2tEHH[ Ht$H<$tfH<$Ht$HH?yH=f2mHt$H<$t.Ht$H<$HvH>SH5f2H[fDH1[USH(HGH-e2H9t>Hh2H9t2HFH9tQH9tLHtHBH9t^H9tYH([]fDHGH8~nH;7f2teHHsh2HFH9ufHFH8H; f2HHBH8H;e2H(H[]HT$Ht$H|$lH|$Ht$HT$HH?H=e2Hg2HT$Ht$H|$txHt$H|$HT$HvH>H5De2HT$Ht$H|$t0HT$H|$Ht$HRH:Hd2H([]H(1[]HG Hu2SHHHH?~!H;=d2tHC H[H8b2H5G= HD$H:THD$ff.fSHHHH?~H;=Sd2tHtXH[fHT$H4$tDHT$H{H4$HHtHH= d2H[þHH=c2H[JH[ff.@1HtDH0HHufff.@USHHHoHGHkH[]USH8HWdH%(HD$(1HHbHHHHD$HD$ H;Ht HH;- c2H}HHHtMHD$H;HD$ HHHHH@(HP0HtHB(HH\$(dH3%(H8[]DHD$HtHHT$ Ht$I@1HH[HUHH@(H@0fHT$ Ht$HD$HHD$u|HL$HH(t6HpfDHy_2HRH5; H811DHPHR0HD$.@H@(Hx0HG(HT$ Ht"HJ0HP(HH0HJ0HtHA(HB0HT$HuHH;H@(Hx0Huff.@AUATUSH(HWdH%(HD$1HHL,HIHD$HD$I}Ht HL;%`2MLHHHtuHHb2I}HCHD$HD$Ht HMtHD$HI}HC(H{0HtH_(I]@HL$dH3 %(HH([]A\A]fDH\$HtfHHT$Ht$q@HI^2>@H`HP0HC(HS0HP0HtHZ(HX0mDE1HT$Ht$HD$MuHH+t8HH,@H\2HRH5~8 1H81ZDHCHP0HD$*f.SHt2HH5L`2HH9t;u2HCH;a2t%H;N]2tXH=`8 1[HCH8H^2[DAWAVAUATUSH8dH%(HD$(1HHGHHHHHHMHHyHH $HT$ Ht$IH|$wIH $1K<6H $HD$HHhE1MH $I=fDHHIIHAHIID$LI9tlIHLi0HyHH/uHGH $P0H $zH=6 ?HD$(dH3%(H8[]A\A]A^A_@HHuHt H}sHCHL9uHT$HH$HHu H|$HGP0HT$ Ht$H|$HYHAH4HtH $H9UH+uHCHP0HHMH,HyFHHMH ,fDHHHT$ Ht$H|$ BfH\2H[8HAUATUSHH IH5Å4HAHtH ]2H9HHZH=[8NHHHH5x4H` HHHtEu&HD[]A\A]fHCHP0EtH\2HLH[]A\A]DHH9 [8YLHHtHtAHHuHCHP0A^DUHSHH=Z8tU(H5Z8HH&vNH5wZ8HoHHHt-HHH[]|@H=.5 lH5Z8HuH1[]ATLFQ IHULSHuxH-Y8Hp1HHHY2IL1HIH+tH[]A\HSHD$HR0HD$H[]A\L HLuCH-LY8HkL{HH1Y8HP1H[]A\DL HLtSL3 HLH-X8HLHHX8H1H-X8HLHHvX8H1PfDLHH^X8Hu1(fDH=T2 1Uff.fSH1HEi H54HHt6HHH+t H[HSD$ HR0D$ H[øԐU1HSHHHHHtH+t H[]fDHSD$ HR0D$ H[]AWAVAUATUSLHH$0H|$HT$ L$XLL$HD$HdH%(H$1L;BW2LHT$HHtHB u H;W2H,HHEH4T2HH07H|$HH5g 1HD$H;HcD$XHHD$PIHD$(HHL$(HT$H1BHHD$@H!H|$H;=eV2H ˆT$_H=g0 tIHHH=1V8H/uHGP0L%V8ID$9I|$qID$L ID$ I|$ 1Hl$0LH\$8HfHt$0fAŃ:L;5U2Ht$8L@AƃH|$LwAăLIHEEt EHmu HEHP0H%U8HH;XH@H,HEH}HEHEH} H;=T2Le(Lu0H$L}8 L;5T2AA'HHHUHl$HHT$HmHEHP0H$[fD1QH8T2HH$HQ2H5. H8H$f.H$dH3%(H$H[]A\A]A^A_H+Hl$H$uHCHP0H|$tHt$HHD$HHuHFHP0fMt L;|$P3H<$IH\$8Hl$0H<$H5R H<$H5- |$_H<$H5!J 5H<$H5,- jHD$H;R2HHT$H|$HOH$I,$uIID$LP0<@H$f.IH\$8Hl$0I,$H$HL$@HHD$HHu H|$@HGP0HmHL$(HHD$HHu HAHP0H+F7@IL$H|$ vHH\$ S H\$ HKHH~.H|.HD$ HH_HEHP0.H$HHl$0H\$8HN2H55, H81KH$fDHs0HKH@HEH@{HL%P8MHKN2H5+ H8H$_ID$LP0H$@H$H<$H5 3|$_H=* H$HH<$L<$HT$E11LD$(HL$ Ht$LILIH$HIuIGP0H$MCImu IELP0fHO2HH$@Ht$H|$yH$@Hl$0H\$8H="* H$HoH=^O8H/uHGP0H$HFO8HOO2HIH=M) dHt7HHO2Ht$@H|$NDH$|.e|pZ|yOH|$ HP17DHf|.(f|pf|yfD HL$XLl$`H( LH|$H5w4$IHH=1y4LIHH|$ H^LLLL3nLH=l WLH?LH= (I.u IFLP0Lt$HMA~ LԨAV L RHH@tLH0HT$H1IHRH9~ < Lt$HLnIHt0LL&Imu IELP0LH= !HEJ2H5>( H8fH$HH$HHHBHP0H$|p|y1H=& iHD$HH=L8H/uHGP0HD$HL84HuHK8HHeI2H5' H8覾H<$H5 YHH2H$LH5 ' H81H$HO2H=% HmI.IFLP0H$HH/K8HD$HR?IH2LcH8>H52 ID$H?2LcH8H5] ID$H92H*82LcH8H562 ID$H >2LcH8ID$ HCHP(H8HH9uH:8HeHH:8Hx1H=| HH:8Hx1f.H5N| H1 HD6SHHHtHCH/tHCH[H@HGP0HHHtH1DHGHtHGH(t@HPHHR0HHt HH92Hff.SHt5H(Ht1H;92[fDH@HP01H;u92۹1[ HD HcH>@H:8H@H!;8H@H ;8H@H:8H@H:8H@H:8H@H:8H@H:8H@Hy:8H@Ha:8H@HI:8H@H1:8H@HH32H5 H811Hff.fw{Hl HcH>H:8H@H:8H@H:8H@H:8H@Hy:8H@Ha:8H@HH32H5  H811Hff.fAWAVIAUATIUHH5c4SH8HdH%(HD$(1EIH9HHHUHH9HD$1I@HD$HLHT{H+Au HCHP0Ex.HD$HpHt$H;u LSHHuAImusIELP0gfE1MtE1HD$ Hl$HD$HD$H\$fDHT$ Ht$L޽ADžxHL$HHLDuMuHL$(dH3 %(DH8[]A\A]A^A_D苶H}~T1L H  IT$IH32H5& AH8HR1 M"fE1M dL | H  HtHHe L / HDA藦AWIAVIHcAUATIUSHHHtiHŅtzC1L,HDHL9tZI<IHuHmHD$u(HUHR0HD$H[]A\A]A^A_f.H1[]A\A]A^A_HA LLIPHh H=)42H5 PL 1cHMHQHUY^HuHD$nfDAUIHcATIUHSHHtpHÅt*I<$pHtKHCuI|$XHt3HC HH5U_4LH+t2H[]A\A]H+u HCHP0H1[]A\A]HSD$ HR0D$ H[]A\A]AVAUATUSHtcL'IIL袎HHtYM~61HUHHI9t I|AHuHmu*HEH1P0[H]A\A]A^1IHHu1[H]A\A]A^UHSHHt"H;= 32HtHH xH1H]1H[]HEfUH5$^4HSHHtJHuHH1H=( H+t H[]DHSHD$HR0HD$H[]DHi42H8ɪt%HuH1[H= ]鸹1ff.ATUS28t[]A\fDH=k4dx1L%l4肷HHtHH5J L؍ HH5D L辍Hmu HEHP011H5j4H=< H58Ha11HMH558Hi4H= H58HH558Hi4H= HU58HH5U58Hii4H= mH58HH5&58H2i4H=k >H48H11H5i4H= H48HjH5h4HNH548Hg4H= He48HH5]48Hf4H= H.48HH5.48Hf4H= nH38HH538H+f4H= ?H38HH538He4H=i H38HcH538H]e4H=7 HR38H4H5r38Hd4H= H38HH5C38H_d4H= H28HH538Hd4H=  TH28HH528Hc4H= %Hv28HxH528H2c4H=e H?28HIH528Hb4H=< H28HH5X28H4b4H= H18HH5)28Ha4H= iH18HH518HVa4H= :Hc18HH518Ha4H= H,18H^H518H`4H=u H08H/H5m18H`4H=O H08HH5>1811H=- H08HH51811H= _H`08HH50811H= 8H108H11H5e4H= H08HdH5_4HHH5/8H_4H= H/8HH5/8H^4H=Y Hx/8HH5x/8H^4H=0 hHA/8HH5I/8HU^4H= 9H /8HH5/8H^4H= H.8H]H5.8H]4H= H.8H.H5.8HP]4H= He.8HH5.8H\4H=c }H..8HH5^.8H\4H== NH-8HH5/.8H+\4H= H-8HrH5.8H[4H= H-8HCH5-8H[4H= HR-8HH5-8Hv[4H= H-8HH5s-8HZ4H= cH,8HH5D-8HpZ4H=Y 4H,8HH5-8HZ4H=e5 Hv,8HXH5,8HY4H=M5 H?,8H)H5,8HY4H=45 H,8HH5,8H\Y4H= xH+8HH5Y,811H=F QH+8HH52,8HX4H=Y "Hk+8HuH5,8H?X4H=4 H4+8HFH5+8HX4H= H*8HH5+8HW4H= H*8HH5v+8HbW4H= fH*8HH5G+8H#W4H= 7HX*8H11H5`4H=n H)*8Hc11HOH5*811H=G H)8H(11H虜H)8H H5)811H=  Hk)8H11HVH)8HH5)811H= OH )8H11HH4)8HH5<)811H={ H(8H_11HЛH(8HCH5(811H=@ H(8H11H荛H(8HH5(811H= H?(8H11HJHS(8H11H5^4H=9 CH'8H11H'H5'8HlT4H= H'8HSH5'8H T4H=W Hr'8H$H5r'8HS4H=1 H;'8H11H5^4H= {H '8H11H_H5&811H= @H&8H11HH&8HwH5&811H= Hn&8HP11HHb&8H411H5V]4H= H#&8H 11HH5%811H=c H%8H11HCH%8HH5%811H=% f.H2HHH[]A\A]A^A_H=Q811HHDI|$H5xHHHH5H4H5lHmu HEHP0A|$HH[HH5KF4H*f.Hmu HEHP0Ic|$0腓HHHH5/N4H解Hmu HEHP0Ic|$4DHHHH5M4Hf HmHEHP0@H=811HH@1fH=811萊HHtIl$H HEHH5D4HӢf.HmuHEHP0HtH+uHCH1P0H=y811HHTI|$HHtHH5K4HPDH=A811HHU1DH=!811蘉HHIl$H HEHH5J4Hס fH=811@HHI|$HHHH5DJ4H|Hmu HEHP0I|$ HHHH5RC4H:qHmu HEHP0A|$HH[DH=811耈HHIl$H~ HEHH5gC4H迠H=8110HHu1H=811HHTI|$HHHH5I4HLHmu HEHP0Il$H HEHH5B4H ?H=811xHHIl$H HEHH5B4H跟fH=811 HHdI|$HHHH5C4H\Hmu HEHP0I|$H5!HH{HH5+C4H*EDH=A811耆HHI|$HHfH= 811@HH 1DH=811HH\I|$HHHH5,B4HTHmu HEHP0I|$PHHzHH5F4HIHmu HEHP0I|$fDH=A811hHHH10DH=811@HHI|$HHHH5B4H|Hmu HEHP0ID$HHHHT$tjHHHT$HzE1L5 HENH=)811pHH18DH=I811HHHI|$HiHHHH5F4H{Hmu HEHP0I|$wHHHH5G4H9PkH=811訃HHAD$)L&H-8HEHH5D4HțHmu HEHP0I|$HHHH5n@4H膛H=811HH4I|$jHHHH5t@4H,cHmu HEHP0A|$HHRHH52C4H!Hmu HEHP0I|$HHHH5?4H訚f.H=)811HHTAD$r=H2H5; H81蕰H=811HHI|$H58HH]HH5}>4H,Hmu HEHP0I|$H5:HHHH5$?4H謙fDH=811HH\I|$HHHH5@4HTHmu HEHP0I|$PHHzHH5C4HIHmu HEHP0I|$HH8HH5@4HИfH=)811@HHI|$H5HHHH5<4HuH= 811HH$I|$ZHHHH54;4HSHmu HEHP0I|$H5aHH;HH5A4Hӗ Hmu HEHP0I|$H5}HHHH5@4H芗Hmu HEHP0I|$ HHHH5@4HHHmu HEHP0I|$(DHHnHH5.@4H8Ic|$0覆HH1H 8HIIL9HH5:4H螖Hmu HEHP0I|$H5HHHH594HUlH 8HwH 8HgH8HWH8HGH8H7H8H'H8HH8HH8HH 2H5 HT$H811HT$fDHmH-8HEfDH-q2vH-e2VH-Y2FH-M2ZH-Q 8HEHH5J=4H 4H-- 8HEH-2HEHH-8HE@H)2H5 H81H-8HE1aHHH-2Jff.ATUSHHt%\1ۃH[]A\fH=q811{HHtUH}H5hIHt-HH544HޓAI,$u ID$LP0H+u HCHP01H[]A\fH=811 {HHtH}IHtHH544HetI,$H}lIHtHH544H2TI,$u ID$LP0H}.IH?HH5(44HuWfDH=)811`zHHH}IHHH5e;4H蝒I,$XID$LP0HfH2HH[]A\DID$LP0ATUSH?IHc 1؁HHHH5<4HxFH+\Ic|$$袁HHt:HH50<4HȑxH+u6HCHP0*fH+u HCHP0HtHmu HEHP01H[]A\H=811yHHtI|$~HHtHH514HDH+u HCHP0I\$HHHH5?;4H~H+I|$H5xSHH@HY1HH[]A\DH=811sHH@Ic|$@{HH|HH5h64Hh Hmu HEHP0Ic|$D}{HH2HH564H蟋' HmWHEHP0HDH=)811rHHT@1H[]A\fDH= 811rHHtI|$FHHHH534HtsHmHEHP0fH=811`rHHlI|$H5#HHt5HH504H虊u@HmuHEHP0HH+HCH1P0H=811qHH41DH=811qHHP1DH=711qHHIl$H HEHH5/4Hlj.Hmu HEHP0I|$H5A HHHH5/4H~Hmu HEHP0Ic|$yHHHH5$/4H<0fDH= 711pHHI|$H5kHHDtf.H=711`pHHlI|$HH8HH5D04H蜈Hmu HEHP0I|$HHHH5.4HZN@H=9711oHHI|$H5HHHH524HdHmu HEHP0I|$H5BHHPHH5|.4H贇Hmu HEHP0I|$H5HHHH5S/4HkHmu HEHP0I|$ H5HHHH5-4H"@H= 711nHHI|$ HHhHH5-4H̆3Hmu HEHP0I|$HH&HH5-4H芆~@H=y711mHHI|$H5 HHHH5u-4H-Hmu HEHP0I|$H5rHHHH504HFfDH=711PmHH\I|$HH(HH54-4H茅Hmu HEHP0I|$H5HHHH5 04HCHmu HEHP0I|$H5HHHH5,4H\@H=711hlHH1oDH=711@lHHLI|$HHHH5,4H|Hmu HEHP0I|$xHHHH5B,4H:Hmu HEHP0I|$H5HHHH5.4HXHmu HEHP0I|$ DH=711HkHHTI|$HH HH5+4H脃Hmu HEHP0A|$ HHHH5+4HBHmu HEHP0I|$>HHDH=1711jHHI|$H5KHHYHH5e+4H轂$Hmu HEHP0I|$HHsH=711jHH I|$H5xHHHH5*4H5)H=Y711iHH1DH=9711xiHHIl$HzHEHH5+4H跁Hmu HEHP0I|$H5HH HH5*4HnHmu HEHP0I|$H5賿HHHH5*4H%Hmu HEHP0I|$ !HHHH5+*4HJHmu HEHP0I|$(HH=HH5)4H血Hmu HEHP0I|$0H5 HHHH5 +4HXHmu HEHP0I|$8H5R蝾HHHH5*4HqH=I711gHHIl$HvHEHH5)4H&Hmu HEHP0I|$H[bHHHH5)4HtHmu HEHP0I|$H5蹽HHHH5)4H+Hmu HEHP0I|$ H5%pHH~HH5(4H~IHmu HEHP0I|$(HHILǾ8Aԉ7_HtXLhD`0h4H[]A\A]HI1H5 H8SH1[]A\A]ff.fAVAUATUSHtEIHt]H8LAE^HtHXhL`Dp0Dh4[]A\A]A^H1H5r H8R1fDH1H5r H8R1fDHy1H5 H8R1fDAUATUSHtFHHt^8LAA]HtXHhDh0D`4H[]A\A]@H1H5 H8BR1fDH1H5 H8"R1ff.AUATUSHHtmHHtEH8LAAO]HtHXHhDh0D`4H[]A\A]fHY1H5 H8Q1fDH91H5 H8zQ1fDAVAUATUSHtwHHIHtCH8LAE\HtHXHhL`Dp0Dh4[]A\A]A^DH1H5 H8P1fDH1H52 H8P1fDHq1H5: H8P1ff.AUILATI8USH[HtLhL`h0X4H[]A\A]ATIHU8S[HtL`h0X4[]A\f.AUATUSHHt=HILǾ8AԉU[HtHXLhD`0h4H[]A\A]Hi1H5 H8O1fDAUATUSHHt=HILǾ8AԉZHt HXLhD`0h4H[]A\A]H1H5: H8:O1fDAVAUATUSHtoHHtGH8LIAEnZHt HXHhLpDh0D`4[]A\A]A^fDHy1H5 H8N1fDHY1H5 H8N1fDAUATUSHHt=HILǾ8AԉYHt HXLhD`0h4H[]A\A]H1H5 H8*N1fDATIHU8StYHt L`h0X4[]A\f.ATUSHt3HAHϾ8.YHt HXD`0h4[]A\HI1H5* H8M1fDAVAUATUSHtGHILϾ8IADXHtHXLpLhD`0h4[]A\A]A^@H1H5 H8M1ff.AWAVAUATUSHHtYHH|$HI8IIMD8XHt$T$@HXLxLpLh L`(h0P4H[]A\A]A^A_H91H5j H8zL1fDATUSHt3HAHϾ8WHtHXD`0h4[]A\H1H5 H8L1fDATUSHt3HAHϾ8^WHtHXD`0h4[]A\Hy1H5Q H8K1fDATUSHt3HAHϾ8VHtHXD`0h4[]A\H1H5 H8ZK1fDATUSHt3HAHϾ8VHtHXD`0h4[]A\H1H5 H8J1fDUHS8HEVHt h0X4H[]ff.fAVAUATUSHtHHAԅtDH8LAEUHtHXHhD`Dp0Dh4[]A\A]A^fDH1H5¿ H82J[1]A\A]A^H1H5J H8 J1fDH1H5R H8I1fDAVAUATUSHtHHAԅtDH8LAEUHtHXHhD`Dp0Dh4[]A\A]A^fDH!1H5j H8bI[1]A\A]A^H1H5 H8:I1fDH1H5 H8I1fDAUATUSHHtmt?H8LAAQTHtHXhDh0D`4H[]A\A]@Ha1H5 H8HH1[]A\A]DH91H5 H8zH1fDAUATUSHHtmt?H8LAASHtHXhDh0D`4H[]A\A]@H1H5 H8HH1[]A\A]DH1H5 H8G1fDAUATUSHt>ILǾ8AԉSHtLhXD`0h4H[]A\A]H)1H5 H8jGH1[]A\A]ff.fAUATUSHt>ILǾ8AԉRHtLhXD`0h4H[]A\A]H1H5 H8FH1[]A\A]ff.fATIHUH SH"RHtL`HhHX[]A\fDSHH QHt HX[f.SHHt#H QHt HX[DH1H5 H8F1[fDATUSHtSHHt+HHIXQHt HHhL`[]A\Hy1H5 H8E1fDHY1H5 H8E1fDAVIAUILATI(USDPHtLhL`Lph X$[]A\A]A^AWIAVIAUI0ATIULSLHH|$@}PHtL0LhLxL`Hh HX(H[]A\A]A^A_fUSHHt)HHH׾.PHtHHhH[]HQ1H5 H8D1ff.USHHtQHHt)HHOHtHHhH[]fDH1H5 H8*D1fDH1H5r H8 D1fDAUIH5D3ATIUHSH(dH%(HD$1xH53HmHHHt$LHuzH+H5Y4HqxH5B4HzmHHtRHt$LH,Ņu,H+Ht$H|$LZIEf.H+u HCHP0HL$dH3 %(uxH([]A\A]fDH1H5 H8BHCHP0)fHy1H5R H8BHCHP0?@ff.AWAVAUATIH54UHSHHXdH%(HD$H1MlH:Ht$(HII/u IGLP0H5u4Hv=H5^4HkIHHt$,HI/u IGLP0H5^7HAH54HvvNH54HkIHtmH57HAtS$LH5u7LuAt0$)H1LH5P H81frfDI/t2AHL$HdH3 %(Da HX[]A\A]A^A_fDIGLP0@H1H5 AH8@f.H517H@tlH54HUuUH54H^jIHHHt$8HHr)*I/u IGLP0H5c4Ht|H5L4HjIHHt$0HI/u IGLP0H53HtPH53HiIHHt$@HH(AƅvI/u IGLP0DD$,L$(IHT$@t$0H|$87QI$HF;DH1H5 AH8?H57H9?H514HsH54HhIHH57H>ArH57L>xALH57L>RA&H5e7Lu>,AH1LH5 H81cofDI/u IGLP0H5a3HrH5J3HgIHH@EI_HH6GIHH~=HD$@E1HD$IGHt$HJ<&[HD$@KDIL9uI/u IGLP0L$,T$(IL<$E1o5HI$AH57H@=)H54Hq:H54HfIHHt$8HH'I/u IGLP0H5^4Hvq(H5G4HfIHiHt$@HH%AƅHI/u IGLP0L$,T$(IHt$@H|$8%I$H@H1H5 AH8;H1H5 AH8;H5O7H;@H5O3HpH583HeIHzHt$0HH$\I/u IGLP0H54H-pH54H6eIH Ht$8HHJ$I/u IGLP0H53Ho=H53HdIHHt$@HH#AƅI/u IGLP0DD$,L$(IHT$@Ht$8H|$05nI$HtiHPH%1H5 H81k?H1H5 AH8#:*I/u IGLP0H53HnzH53HcIHHt$@HH #AƅI/u IGLP0L$,T$(IDHt$@I?I$HHP1H5 AH8k9rH57H9T H53H'nH53H0cIHH@MwHLBIHHD$@1H$I9vIGH4$HHL$H H53H`IHHt$8HHAƅI/u IGLP0H53HxkH53H`IHkH@tMoHL?HH9HD$@1H$4IGH4$HHL$H<& HL$HD$@HDHI9I/u IGLP0L$,T$(IHH|$8AI$HH5"7H5H53HzjH53H_IHmHt$8HHAƅLI/u IGLP0H5U3HjH5>3H&_IHH@MoHL>HHHD$@1H$4IGH4$HHL$H H81ZgH57H)UH5`3H(^H5I3H1SIHHt$0HHEAƅI/u IGLP0H53H]HH53HRIHH@IGHHH$42IHHD$@1HD$H9 $~XIGHt$HHL$H<THL$HD$@IDHH1H5 AH8#(*I/u IGLP0H5w3H\ H5`3HQIHH@a IGHHHD$W1H$HHD$@1HD$9IGHt$HHL$H<zHL$HD$@H$HDHH9L$I/u IGLP0H53HzY HD$8H5U3Hz HD$@UD$4LPDL$8LD$PHL$HHT$H|$@ZYI$HHPH1H57 H81XH57H&H5Y3Hq[tmH5F3H~PIHhHt$@HHbAƅGI/u IGLP0T$,t$(HH|$@"^I$H!Hٰ1H5: AH8%H57H &H5x3HZH5a3HOIHH@H;R1t H; 1Ht$@HLAƅhI/u IGLP0T$,t$(HH|$@sI$HB7H1H5 AH8%H517HA%H53HYKH53HNIHHw1I9GHv1H5G H8$ H$HL$THH$I/u IGLP0H53HDY0H53HMNIH7H@MoHL-HHHD$@1H$I9~xIGH4$HHL$H< HL$HD$@HDHHPH1H5 H81UHg1H58 AH8#I/u IGLP0DD$,L$(IHHt$H|$8GI$HNCHPH1H5 H81TH1H5& AH8#Hĭ1H5M H8"Ht$@HL|AƅI/u IGLP0T$,t$(HH|$@KI$HHW1H5H AH8r"yH57H"[H53H.WtvH53H;LIH%H;1H;>1t L;=`1I/u IGLP0T$,t$(HLE1$HI$AH1H5֣ AH8!H57H!t>t$,|$(HE1T)HI$ApH 1H5F H8N!IH5R7Hz!7H53H VfH53HKIHHt$8HH' I/u IGLP0H5H3HUH513HJIHHt$@HHI/u IGLP0H53HVUttH53HcJIHMHt$0HAƅ/I/u IGLP0DD$,L$(IT$0Ht$@H|$8!I$HH1H5 AH8H1H5G AH8Hu1H5 AH8H57HyH543HLTfH53HUIIH?Ht$8HHi!I/u IGLP0H5*3HSH53HHIHHt$@HH?I/u IGLP0H53HSttH53HHIHHt$0H AƅqI/u IGLP0DD$,L$(IT$0Ht$@H|$8b"I$HA6H1H5j AH8Hب1H5 AH8H1H5Ƞ AH8H5ƭ7HH5v3HRH5_3HGIHHt$@HHcI/u IGLP0H53H4RtnH53HAGIH+Ht$8H訽Aƅ I/u IGLP0L$,T$(It$8H|$@JI$HH1H5l AH8Hz1H5 AH8H57H~H593HQQH5"3HZFIHDHt$@HH莾&I/u IGLP0H5o3HPtnH5\3HFIHHt$8HkAƅI/u IGLP0L$,T$(It$8H|$@G AH8X_H5<7HAH53HP]H5u3HEIHH@MwHL$IHHD$@1H$I91IGH4$HHL$H<HL$HD$@IDHHT1H5% AH8ovHPH/1H5( H81KIH1H5C AH8-4H5Q3H)DIHHt$@HH=I/IGLP0H5%3HCIHHt$8HHI/sIGLP0dI/u IGLP0H53HaNtlH53HnCIHXHt$@HչAƅ:I/u IGLP0L$,T$(ILt$@CI$HHʣ1H5s AH8HPH1H5 H81$JH1H5 AH8H57HH53H_MH53HhBIHRH@7MwHL!IH HD$@1H$I9~\IGH4$HHL$H<7HL$HD$@IDHH1HH5 AH81II/u IGLP0H53HLtlH53HAIH|Ht$@HAƅ^I/u IGLP0L$,T$(ILt$@7I$H6+H1H5 AH8 HPHɡ1H5 H81HHH1H5 AH8fH;=1tWATIUHH573SHKtLHH[]A\HI1H5ʛ H8j[]A\H1fDAVIH53AUIATUHSH dH%(HD$1KH5`3H@HHHt$LHLAąumH+H53HLiu HD$1H|$L#IIH53H?HHt)Ht$LHtmDH+u HCHP0AHL$dH3 %(DuYH []A\A]A^fH 1H5 AH8$fHCHP06H+u HCHP0Ht$9AAWIAVAUATUSHHXHt$H53H|$dH%(HD$H1IH53L>IHt}H@M~HLIHtEME1Hl$@@HD$@KDIM9IFHHJH+u HCHP0Ht$H|$LL;-IE ff.fAWAVAUIATUSH8dH%(HD$(1H;=1H5˛7HI wH57Hp WH53HAhH53H 6HHH@<H]LHmIHAHD$ E1HD$H~0HEHt$LJ< HD$ KDIL9uHmu HEHP0LL1A!HIEfH53H^IHD$H53H^HD$H5I3H^HD$ 1Ht$H|$L1IEHuHL$(dH3 %(UH8[]A\A]A^A_fDH1DH57H tH5=3HU?H5&3H^4HHrHt$ LHrÅHmu HEHP0H|$ Lj5IEH2(H5i3H3HHHt$LHuAHmHEHP0wHPHe1H5ޑ H81:@HmHEHP0H53Ha3HHuHt$LHuuHmHEHP0H5I3H3HH%Ht$ LH%]Hmu HEHP0HT$ fH1HH5 H81:Hi1H5 H8HI1H5* H8eff.USHHt)HHH׾HtHHhH[]H1H5 H81ff.AVIH5$3AUIATUHSH dH%(HD$1<H53H1HHHt$LHAąumH+H5d3HZu HD$1H|$L?IIH513HI1HHt)Ht$LH聩tmDH+u HCHP0AHL$dH3 %(DuYH []A\A]A^fH1H5 AH8fHCHP06H+u HCHP0Ht$9USHHt)HHH׾HtHHhH[]H1H5 H8B1ff.AWAVAUATIH53UHSHHdH%(H$10HHt$\HI辧Imu IELP0H5.3H:.H53H/IHHt$`HfImu IELP0H5Ɩ7HH53H.:6H5o3H7/IHJHt$pHHk+Imu IELP0H5 3H9\H53H.IHHt$xHHADžImu IELP0H5]3Hu9rH5F3H~.IHH@IEHHHD$ HD$HWE1H$H|$HL$~aD|$ MLt$Ld$(Ld$H\$H\$IEHHJ<-H$KDIM9uD|$ H\$Ld$(Imu IELP0H53H8 H53H-IHH@IEHHHD$ IHtnH|$;H$1H\$ HD$LHMIH$IDHH9\$ID$Ht$HH<&tMImt9AH$dH3 %(D HĘ[]A\A]A^A_IELAP0fDHI1H5 AH8dfH57HAǃteH5v3H7H5_3H',IH:Ht$hHH[ADžImu IELP0H5h3H6H5Q3H+IHH@IEHHHD$( HD$HE1H$H|$HL$/D|$ L|$H\$(H\$Ld$Ld$ fDH$KDIL9IEHLJ,H53HG!IHZH$HHXADž5Imu IELP0L$`T$\ILH$I$H HPH1H5 H81(Hw1H5` AH8HV1H5 AH8qH51H5ބ AH8PImu IELP0H53HIHD$pH5C3HIHD$xH5û3H*nH53HIHH@!IEHHHD$ CHD$HH$1HD$(IL9t$ IEHt$(HJ<H$HL$JDIH5\7HtZH5̷3H*H53H IH Ht$xHH!ADžImu IELP0H53H)H5w3HIHH@MuHLHD$HH$1Ld$IHD$HI9IEHt$HH<MH$HL$HDHLH\$ MIImu IELP0H5Ǹ3H_GHDŽ$UD$hLPDL$lL$HT$(H$H$%I$AYAZHHPHJ~1H5~ H81$H5u7HAǃx?H53H"(H5s3H+IH>H@<IEHHHD$HD$HHD$xE1H\$(MHD$H$HD$ H5n3HIHHt$HHI,$u ID$LP0H5 3HEHDŽ$H$H|$xHHHL$JDIL9t$IEH5ԫ3JH&KH|1H5 H8 I,$MIGLP0H5a3HIHHt$ HHuI,$AID$LP01ImH\$(Mu IELP0H5.3HF&+H53HOIHbH@MuHLHH/H$E1HD$M9~rIEHt$HJ<H$JDIHPH{1H5 H81"Hj{1H5[ AH8Imu IELP0L$`T$\IHH|$E1HI$AyHPH {1H5* H81!KHz1H5= AH87H5 7H3uH53HSCHD$xH53H3CHDŽ$L$`T$\IH$H|$xI$HImLLd$u IELP0H5@3H8$eH5)3HAIHTH@I]HHIH!H$1Ld$IHD$HHH9IEHt$LHH5$3L|  H5 3LIHHt$ H<I/u IGLP0H53L% H53L.IH:Ht$(HI/u IGLP0H5Nx7L5H5F3L>>HD$pH53L>jHD$xH5V3Ln/H5?3LwIHH@I_HHIHE1Ld$HIHL.IGHt$0LH<H$IDHH9I/LLd$Hu IGLP0DD$hL$dILHt$xH|$p3HHL$JDIH`t1H5| H8HPHAt1H5| H81I/~IGLP0oHt1H5| H81TH5e3L-IH9Ht$xHHauI/fIGLP0WH5]3LIHHt$pHHQI/IGLP0Has1LH5G| H81HAs1H5J{ H8b1ImH\$8Ld$@u IELP0H5$3HH5 3H%IH8H@<MuHLHD$HH$E1HD$ M9~VIEHt$ HJI$HHo1H5y AH8H5u7HAǃlH53HY4H53HbIHuH@MuHLHHBH$E1HD$.IEHt$HJ<H$JDIM9Imu IELP0T$`t$\HHE1HI$AH53H IHH$HHImrIELP0cHPHn1H5Tx H81UHm1H5ox AH8AH5s7H=#H53H]6HD$xH53HH5ޣ3H IHH@1IEHHHD$IH1H$Ld$IHD$H.IEHt$HHi1H5j AH8YH5}3HUIHhHt$xHHiIImIELP0 H5P3HIHHt$pHHImIELP0Hh1H5m H81DHa1H5Ym AH8H5wg7Ht#t$`|$\HE1HI$AHHa1HH5Vm H81ff.@H;=yc1tWATIUHH5Ǜ3SH tLHH[]A\H`1H5m H8[]A\H1fDUSH0 H=3HH H H3H5 HH˾[ H5|B H?? Hf7H5m H葾! Hf7H5? Hs Hf7H5> HU H~f7H5> H7 HXf7H5> H H2f7H5 H H f7H5> Hݽm He7H5> H追O He7H5l> H衽1 He7H5U> H能 Hte7H5A> He HNe7H5 > HG H(e7H5 > H) He7H5= H  Hd7H5%@ H} Hd7H5= Hϼ_ Hd7H5= H豼A Hjd7H5= H蓼# HDd7H5q= Hu Hd7H5Z= HW Hc7H5C= H9 Hc7H50= H Hc7H5= H Hc7H5= H߻o H`c7H5< HQ H:c7H5< H裻3 Hc7H5< H腻 Hb7H5 HgHb7H5< HIHb7H5p< H+H|b7H5X< H HVb7H5B< HH0b7H5+< HѺaH b7H5< H賺CHa7H5; H蕺%Ha7H5; HwHa7H5; HYHra7H5; H;HLa7H5; HH&a7H5; HHa7H5w; HqH`7H5c; HùSH`7H5M; H襹5H`7H5ji H臹Hh`7H5ci HiHB`7H5[i HKH`7H5: H-H_7H5 HH_7H5: HH_7H5: HӸcH_7H5: H赸EH^_7H5A< H藸'H8_7H5O: Hy H_7H56: H[H^7H5: H=H^7H5: HHp^7H59 HHJ^7H59 HsH$^7H59 HŷUH]7H59 H觷7H]7H59 H艷H]7H5vo HkH]7H5Y9 HMHf]7H589 H/H@]7H5#9 HH]7H5 9 HH\7H59 HնeH\7H58 H跶GH\7H5 H虶)H\7H58 H{ H[7H58 H]H[7H5^8 H?H[7H5t8 H!Hz[7H5'8 HHT[7H5 8 HuH.[7H57 HǵWH[7H57 H詵9HZ7H57 H苵HZ7H57 HmHZ7H57 HOHpZ7H57 H1HJZ7H5j7 HHZ7H5T7 HHY7H5f7 H״gHY7H57 H蹴IHY7H57 H蛴+HlY7H56 H} HX7H56 H_HX7H56 HAHX7H56 H#HX7H56 HH^X7H5j6 HwH8X7H5O6 HɳYHX7H556 H諳;HW7H56 H荳HW7H56 HoHW7H55 HQHzW7H5d H3HTW7H55 HH.W7H55 HHW7H5 HٲxmHV7H56 H迲xSHV7H5ec H襲x9HV7H5@5 H苲xHV7H5,5 HqyD1HH[]ff.UHSH$tBH1Ev;uH=>Z711eHHu2D1HH[]@uH=$Z7113HHtH}H5 W!HHtkHH593HqHEHHEuHEHP0fDH=Y711HHdH}C>HHuH+FHCHP07H=aY711xHHAHT1HHH[]HHEuHEHP0fAWAVAUATIUHcSHHXdH%(HD$H1H(1 HD$0H/1 HD$8H1 HD$@HX7HD$HX7HD$HX7HD$ ("HtHCH;T1H5fX7HH53H~H5w3HHHtH@vLuLLIHtEMN1Ll$DHD$IDHI9)HELLH[ H81TH5QU7HH53HBH5z3HHH~H@3LuLLIH@M01Ll$HD$IDHI9HELLHHw8HfHHtH1HHHHH[]Ð H1H[]ff.@USHHHHt+HCH,xMHH9>Hw8HfHcHtH1HHHHH[]Ð{H1H[]f.DATUSHHDdH%(H$1Af-H\ HcH>fDH{ H$dH3 %(HĐ[]A\ýfGfGt1A~IcAHHC H<0ŋCD9yfDH 1f?cWG1E1KIcHHC HI\H;<u[1]A\ÐHiI1H5 b H8誾[1]A\[]A\fDSH p[ HH=[ PHcH>fDC9HE[ HcH>C9uܸ[f.C9uH[fDC9uH{8uQ@1[@C9uH[ZHcH>@H{wtH{[H{1[|@HCH L1H9H2H,H1H5tV H8M1[fHCH@H;IF1H;K1„H;-H1HG1H5V H81[DH{RH{1ҾH{iH{ HtH{(HS@H{H#HHHSH*H;!1ҾE1HfDH{HfDH{H{iH{IH{BH{"H{HCH?91Ҿ[@H{HCHH1HtHH9HF1H5s_ H8[1[H{JH{Z1/DHCH D1H9HHE1H5+T H81[fH{.H{1H[)HC1H5S H8芺1H % @HW HcH>H% HD1H5] H811[Hm% H[% HJ% H=% HC% H @% H .% H % vH % jH % ^HR uH R FfD1H0D1ҾH{1Ҿ[f.HD1H5R] H8Z1[fDHC1H5-R H8:1[fDHC1H5j] H81[ÃwZHV HcH>H,$ HC1H5i\ H81?1[H$ H# H# H# HQ ff.UHS1H"HDHxHttHc1HtHUH9|θH[]fUHS1HHDHxtHc1HtHUH9|ӸH[]AUAATAUHS1HfDHt=Hc1HtHUH9}6H|HuEuHXB1H5)\ H8虷1H[]A\A]@H[]A\A]HH o! Ho! HEHtH?u,HA1H:% H5P H811HfD1Hff.SHH?THCHtHxHt@H{t{HC HtHxHtt[H{(HHH1HtHH9HSHCHt0H 1HtHH9t&H@1H5([ H8@1[@1HuӐ1Ҿ$tH{ [1Ht{H@1H5Z H8ڵ1[fDAWAVIAUATL%fS U1SHfDHc1MtIH9I\H ;IcL>H{tCfHCHtH8uH  Hc H?1H5N H81{1H[]A\A]A^A_f.{HCHtH8uH " fDHCHt H8gH  @HCHt H8GH  _fH{_H{HDH{H5 0-HCHH8E1D@LlI}HtI}H5 HCAIc1HtHH9|H{ Ht H?H{HXH?NAf.H{HH{H!>1H5X H8bH1[]A\A]A^A_ÐHCHt H8EH [ H f.H{H{H5o H{@H{:H{H5 H{oH{YH{H5 DAH{ +fDH{H{H{H{T~H{R[DH{HM~H{0H5 `]H{1ҾhEH{4H{81Ҿ?H{ HtH{(Hdf.H{H5 H{H{ 1ҾDH191H5;J H8袰DH[]A\A]A^A_@H);1H5V H8jH1[]A\A]A^A_fHS HH:HHSHH:H:1H5U H81@E1ALlI}MI}Ht2HCAIc1HtHH9|H{H5 p)H4:1H5T H8u1UH84.H:1H5H H8B1"fkfHHtH?u1H91HH H5]H H81O1H Hff.USHHtwt"H71H5:H H8茮1H[]HHttH{HttH{H말HH[]@HGHtH8u9H81H < H H5QG H81CH1[]f.11HcHtHH9},H|HC1HcHufDAUIATIUHSHH6H? IHH3AMH=F 1UHHtdLHHtdHH1HmIu HEHP0H+u HCHP0MtHj=1LH8ץI,$t@H1[]A\A]H+uHCHP0H1[]A\A]L91I@L fAIHTD ,H HHD LHE1AHSHsLH} H$8dH3%(H@[]A\A]A^fDLYC L`C t@LC d@LC T@LC D@L=C 4@LBC $@L @LB @Ly @EeAu*IuH EefEeIuHD=AEeMuEeMtIH~E11@AIcI;}ItHDHu1ifDMuMtIHtwEefHI01AM0H5M H811 DLA @LA @Iu1HpDL 觥AWAVAUATAUHSHHdH%(HD$1Ef=5f=f=!DmAHE~2Lu E1E1DIcAHI|ӣM|E9Iw1讜H$H<ULh ~@E1IcLAHHE HLrL>LvLLh.D;e|AEH<$1HwH H<$HH/uHGP0HHH,$蕯H{H4$HyJH<$H/HGE1P0Bf.fuZH=U H{HH$xHSH<$1IHL$dH3 %(LH[]A\A]A^A_fH-1H5@ H81E1븋EHm '1HHIHtH}XHID$Ht1HUPHHDdf.Lu HH$I~xIHw}t61LHHYH4$HSLIfDHm HH}X HH$HEt1HUPHt@Lm HI}HHEt1LHH_HS1HYIi\ff.AWE1AVIAUATUSHH8HnH&/1UIt9u#D߃BDeHEt@A't A"LmH4$L舠H4$H=!TLHD9^ID gA}tL DH8uE\LL $L $HE1H8L1[L]A\A]A^A_'UuDeHDRHDeAUD9'UD9LmATD9uLHADD9H=@H E1PI.IHH=z HEu(\LLL$L$L$LL$H1LLIHt=I61L"I/HIGLIP0H=G E1H8L[]A\A]A^A_EH= H:H8L1L[]A\A]A^A_fDHVI~HH EG E1H=F E1mI>H*I9wK4I1L $H譖HD$(HHtL $HD$K\ I9Hx>EIHL9AE<\uE\AEIMHUIHML9w+fA?IL9uHIL)1LJH$HH $A AAA }HQ0LqH@IDHH$H@HD$HE1H\$IHHl$ LI{HS HH(t1J@HAHH4HBHH4 (HHHMSs1IfLc D$$Ml$ AMf3p H5; HcH>@{HC Hf"(@H57 H$1H81E1S{Hs  Hf.HC HHp(HtËKSHLEIǐH$dH3%(L H[]A\A]A^A_@CH[ \{HC  Hp(HH=KSHƿLE>IvfDCtHuHcIHD[E1E~=IcHHHC H4HDDAHcIDD9kHC H= LESHp0KL!IfLc A$f-0fC LHIHHC HHpPIHHC HHHKLMHLDCLID1!;MmILHL$81LIDHHL$HD$8A}0D8# HL$HT$8: EE( HIM;H}L׼ HMAT$LAt$yIfDMKMHHs f~(BHV(ALz Aff4A@GHuHc菢IH{AG@AE1fDIcHDT$HIGHDD$H4HV HH.DD$DT$8DDEDAHcIDE;G@|LMEI>LHM11M~fDI|LGLDHcI9AO>IHHKLMLHDCIDHUAt$A|$IDHT$$LHIHD$8HHD$0A|$AHD$HD$8HD$T I/Iu IWLR0H|$8H/uHWR0Lt$8MAE;l$IIcHD$0HID$ H4HT$DIHD$09D$$HH|$8LHGaIGPH|$6H|$8rf.H%1H8qR Hr 1H8ZJL50 HT$8Ht$0H|$(7H|$0ݐHH HLl$@ļLLIH0 1H+u HCHP0H}IT$LIt$H|$(H/uHGP0H|$0Ht H/uHGP0H|$8HH/HGP0}DAE(Iu(f f=P A}@~IEHfx(MF H I,@fA}(  A}@tIEHfx( ^IUHIu@HHAL$AT$HLEIf.fA}( AE@IuHV(f fM ~ f~xM~ PHuHLcLnHD$HXHuLTHD$H>Au@E1~uIcHHIEHH4HEAWHL$HAILcJDAGHH4IEHH4HHL$AJDE;}@|AL$AT$LEHt$H|$ɁIMmLHHwZH=1 LqH=B L H=) L HLHAL$AT$HLEIfH5- zIw(LHIkIwHHHV Hd HAO8LMEG<#f.I0HHT$_H^HT$LMHLJDBfIfDBDJu11E11LP\ZYIfEGAAFHHHI4wHDDAHcE|IDD9sHs HHC 1fx( t9HUL赑Ht SPSPH[]A\A]f1@HpPHHHuH1[]A\A]AWIAVAUATUSHHHf>~6|MG Aff#tdIH(E1E11$pA9t9fH(f#t"փf tfpA9uEEJHD$1HD$ HD$AwE1E1E1HD$(D$D$4A9NIO IcHLAf#fAF9THHH4f> QH HD$(HAwAD9~IcI HHf= hIW IwLL$DLD$ Df tf uJAF9DL$ELH}Ht;IcAAwAHDH 1DH5w( H81譲1HH[]A\A]A^A_@AFHHHH4IHtAAwDHF Lx(x@9HcHAЉуf uF9HcHAf#E1HcH I4f A9}H(Vf#u1EoE>IcHsHHT$HD$HHT$EHD$ HsH豉HD$HEEASIWIwH{H j X1HHf<AHLD$8IcHH4HMHcT$4H|$ D$LD$8HDBD$4f1HsIcHD$ HHD$E1HD$:f.HsIcĈHHEuHD$ HD$HD$HsIc脈HHtLL$LD$ANIW IwHAƃYAw&HsIcHT$,HT$HHD$ \'@HsE1E11111mAZA[uUHD$ 1E1E1HD$HD$ HsMHLL$0HL$(HT$Ht$8lZY1E1E1IPIpH{H $ I1wIWIwH{H $ *1XAWAVAUIATUHSHHAEHwL$ Hc HtnIAE~fE1;@DHHDHcIDHMT$ Lt-AE;}}&IcHuHH L4L[HuE1HL[]A\A]A^A_ÐAWHAVE1AUATUHSHH(xEfulH@ HfMu#"fxuJH@ H@pfMfNtH1H5# H8g|HD$fAHuIcڅHD$HEL`JDHD$RO4W0MLϾʛL1LHzIM@{M4$IL;d$,L{ HIWHIw@HHD$HC HHpxIHLL$A@LuIyVL1HIjHC HHf8MxAufAxtH@ H@pf8MuAtcHuIc蕄HD$HtMEE1&DHL${JDuH[ HPIE9~WH[ HHC Hp(HuHD$HD$H([]A\A]A^A_ÐEHu1 HD$Htf;LuH[ HD$IFsHuكHD$HIfAUAATUHSHHHv dHtGIHC HHp( Ht/LEKHLSEt*At1AVAUIATIUHESHwHc$~HtHHËE~@E1DDAHcHDD;u}IcLHIEH4Hu1H[]A\A]A^f~tBUHV HSHHvHQHt4KSHLEH[]鯓Hv /H1[]ff.@AWAVAUIATUHSHHHF HHx0HIHC 1HLHP(utHC HHpPIHt\HC E1fxx2Ht_HHt:SuLMDKLLRHZYH[]A\A]A^A_f.H1[]A\A]A^A_H0IHtHC HHHuff.AWAVIAUATUSHHL~ Af uIO LIf uIO LIft'f-fDH ~ HcH>Df8 H i HcH>@HHLL1[]A\A]A^A_uDIG IvHcxHD$ j{HD$(HHD$ D$@L|$0HD$ Lcd$LH@ KLDAGMG D$AGMx D$Af= f= AxAG(IWPE1Af=!u; fDfAAA9HH(Bf=!n f3uA@AGIvHcrHHA%ZfHcHDA;o:HcMg LHIHx藼Hu=DAGIvHcrHHA%fHcHDA;oHcM_ LHIHxHuDAGI_ z f{(IvHcqHHzAGIw P f>P 1E1gDIO HLHɽ1DIw DAHLlAGPA9o IcH,HHf>P LIHufIw LHVHH@HINAWHAwHH[]A\A]A^A_\@IVAwAHH[]A\A]A^A_Y{fAWIG LHp(ZHH.IG LHpx>HAOAWHHMFHH[]A\A]A^A_ sM4U0HMFiHH5Y @H@LQ IHI_ @HqH=; A HD$ AD$HHf<G AD$LHHH4 HD$(H+DAO@Hq(L$HHIG LHpx HHIG LHi HAOMNHHEGHHH[]A\A]A^A_x}IVAwAHH[]A\A]A^A_ysIVAwAHH[]A\A]A^A_z{ HC LHp(ZHH.{} Hs LHx4HHAOAWHMFHH[]A\A]A^A_馅Hs LHINAWHAwHH[]A\A]A^A__{ Hs LH(5HINAWHAwHH[]A\A]A^A_Uf.HLHLMMNH1DE1uHE LHp(@IHHt$LHMMNH1DEL&LHHIG H4gHAOAWHHMFHH[]A\A]A^A_afHD$0HEGEOVHL$8HT$0Ht$@H|$(a_AX[fINAWHAwHH[]A\A]A^A_nPfDINAWHAwHH[]A\A]A^A_醕fDIvpIG LHp(HHIG LHpxdHAOMN1HEGDHq(LHHIG LHpxHoAOMN1HEGfHT$(H(LOWf.H51 vD1ۍGHHI,EfTf=f2IPIpI~H 1H 0H5* H81ؒ1H@xs!IvjIHAGLHHIG H4HH_AGLHHIG H4IH6AGLHHIG H4HAOIW LHMNHcH HʋJDBHxID$CIUHLUHHHٺHL&MH`IG LfxPGHpPsHJIW HRHHRKۀWH5 Hc H> AOMNHHEGHH[]A\A]A^A_m Ծ;1z/@ƍ4볾묾1z*@ƍtv땾 뎾H5 H0H81襐IWH5E H5 Iw(E1A1LLD$軷HH?LD$A}Mx HLHHAG@IvHcXhIHAG@E1*@DDAHcIDE;o@IcLHIGHH4к HuIG LHp(HxAOAW1HMF_AD$LHHH4HD$ H=HD$(MIWIwI~H T1LIG LHp(HHIG LHpx~HAOMNHHEGGHHI,NjEHcIvfIHf}tVEE1&gDDAHcIDD;}}CIcLHHE H4к觵Hu-HL荵HIEHtHMNDD$DLL$HHH[]A\A]A^A_gE&HUHuI~H ) 1DHD$ HLHHH4f>蘾HoAOAWHHMFHH[]A\A]A^A_YHVI~HH o r1-INT$Lt$HH[]A\A]A^A_rAD$LHHH4HD$ HIW s{HSHsI~H  L/1INAW1AwE11ۿ_AOAW11MFpfAWAVIAUATIHUSHTIt$HcdHM~ HfA? AF1D$ ~}HcD$ HM0H5 H8W1HuHH鎡fDH0H5Z H8BW1HHH閘fDAWHAVAUATUSHHHHL$dH %(HL$81HT$ HD$HD$0HD$(HK@H&HD$fOf<HHt$Hc)`IHsE1Ll$D$FfHcD$H HC H,f}6H苕Hm DE1$IcAwAID;4$oAIcLH4HE H4EHu1H|$(Ht'H/uHGP0H|$0H/HG uHGP0HL$8dH3 %(HUHH[]A\A]A^A_fOtIH߷HD$ffft8H0H5 H81蘆SHCHD$H[ fDLk fA}(LPHt$HcH^HHkAEyIu f>kE1Hl$ADDAHcHDE9e9IcHIE H4f> HHu@Hs H|$2HiHt$H,FHV@HLHLAHHt0I}H;=50uHmHcH~HH[]A\A]A^A_Ð1@H+uHCH1P0@SHH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SH胊H{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SH#H{HtH/t4H{ HtH/tHCH[H@@HGP0HGP0AVIAUIATUSHH;=0L~IH~lHx#aHHtqfDI|FyHtiHDHI9u1LA0HtJIUHhHHPH[]A\A]A^DH0H5b H8M1H[]A\A]A^HmHD$uHUHR0HD$H[]A\A]A^HH= 1DUHSHHGHXH{2`HtOHUHHPH~#HU1fDHtHHHtH9uHuHH1[H= ]aH1[]DAUATUSHLoHo MteH}IukHEM~P1*f.H|HDH/uHGP0HI9t"ID$H|HGHuHmt^1HH[]A\A]L8_HHtM~1HDHI9tID$H|HGHuHmuHEH1P0HH[]A\A]AUIATUSHHV|HI^HtfHM~n1f.HDHI9tRIEH|DEHuHmHD$u#HUHR0HD$H[]A\A]fH1[]A\A]I}1HbyHmuHD$@AWIHAVIAUATUSHHWL;=0IL]IHM1@IDHCI9tZHI|uHHuL-0I}UPI,$ID$LP0HH[]A\A]A^A_DLH]IHt[H 01H1fHILHPH9uHDH1LA0HHt~L`LhLp L\IHuI,$uID$LP01bfHH= 1;fI}HSH5i 1{I,$u ID$LP0I.uIFLP0ff.H7HtHHDAWHAVH5 AUATUSH8dH%(HD$(1LL$ LD$HD$ 2]JH|$tIH4HD$ HHxHH5 H5_0H9xyH\$ HHCL-0L9lL50L9uDH|$ H;H|$ HH/uHGP0H+u HCHP0Hl$ Ht5LAHHu]HtH|$ H/uHGP0HD$ I,$thH\$ 3H5 H0H8GI,$uID$LP01HL$(dH3 %(HfH8[]A\A]A^A_ID$LP0H\$ fDH+S$uHAV0HD$ H\$L@HH\H@L9L9tj$PQHHHD$ @:H|$ HH/uHGP0Hmu HEHP0H\$ HI,$ID$LP0HHEZT$fHmH*X$$HD$ H-DHm $XM $uHAV0HD$ @1QHHD$ HOH5i 3@HD$HHH$Yt$IƅH|$ H/uHGP0HD$ 1^fDLPHD$ HHH8H|$ IH/uHWR0Hmu HUHR0L|$ MLHL?HHL9huH4$HXL$mILH1y H1XHmuyHEHT$HP0HT$L|$ IHEHP0fH\$ nfDI,$u ID$LP0ZH$NHfDL|$ I Hmu HEHP0I,$HCI,$u ID$LP0ZHLOHBff.AUIH 53H ATILULSH0dH%(HD$ 1HD$ HD$P1LL$ LD$/ZYH|$$qHHH5<3HmHHtqL/\IHLHHqI,$Iu ID$LP0Hmu HEHP0MtImu%IELP0H+u HCHP01HL$dH3 %(Hu7H([]A\A]H+tHmuHEH1P0DHCHP0Aff.@UHH Q43HSH_ H(dH%(HD$1LL$LD$HD$:.H|$HGHtoH5;3SEHHHt$HtuH11a[HH+t(HL$dH3 %(HH([]f.HCHP0@HLxH|${f.1@H1ZHfkWHHuHD$H5 H@HPHX0H81rQ?@Hn@AWAVAUIATUSHHHH=6dH%(HD$81HD$HD$ HD$(HD$0HHD$0H h23HPH HD$0P1LL$0LD$(,ZYHD$(HL50L9HD$L9HtH@HD$ L9HtH@1L=z;HKugHl$(LLDHHKuCLLcpI9Hl$(~H|$HuHLLtf.1HL$8dH3 %(HH[]A\A]A^A_HD$ Df.H=)83'HD$(HL50L9H;RHH 6HTsH|$ Ht$(HtaJOH|$0Ht ]7ubIL)HD$HD$ L9m,@H=j@ KHPH5w H0H81pH|$(1HH573^HH(qHPHR0bHPH5J H0H5 HD$H:M>HD$et/VFHD$ HHq0HRH5 H81i1;NHuH0HD$H:=HD$Y6AWL= AVAAUATIUSHH8dH%(HD$(1Hz HD$HD$ IDHD$ihHHH\$1JHHdLLL$ LD$HH )31H o#H+AbE)H~ H|$ H|$bIH1E1pf.1H1PIHHtCDHL5CtcHmu HEHP0I,$uID$LP0LIL0HHH|$HxHIH+u HCHP0I/uIGLLIP0ILHY0HT$H5- H81gE1HL$(dH3 %(LcH8[]A\A]A^A_HCHP0KHHtHmtfMtI,$tJImuIELE1P0@Ht$1LD$H߹IUDID$LP0HEHP0@HtsHmt`ImIELP0 f.H+@HCHP01I/u IGLP0H+HEHP0HD$ Ht HIH0HT$H5 H81Xf_>3ff.HH1ff.@HHֺ\ff.SHOHHx H[>f;JHt1[fHHZHHcdB@H(HdH%(HD$1LL$LD$H5 5Ht1Ht$H|$2axHcBHT$dH3%(u H(Ð1'2H(HdH%(HD$1LL$LD$H5 Gt1Ht$H|$3xHcAHT$dH3%(u H(Ð11AWH=+3AVAUIATUSH8dH%(HD$(1HD$ fH=+3HWH=p+3HH1LD$ LIĹH5b 1FH0H9 HH.H9%MI91HH5+3LQHH(u HPHR0H_H5+3H1QIHnHHI,$IMH0H8HHL9H|$ HtHn=1HH5*3HNQHeH(H^HL$(dH3 %(7H8[]A\A]A^A_I,$1ID$L1P0MtImu IELP0HtH+u HCHP0HtHmu HEHP01{fID$LP0MFH1IHPHR0&{>tfDk>fDH 0H5 H801H0H5 H801Hɺ0H5 H8j01=fDD!;H=H5b)3H1OIHLHFI,$Iu ID$LP0M~H0H8WFHL9D4!H55)3HYH5)3HIYIMAH8LVLIHD$VHD$MH1HbH5g(3HNHH(u HPHR0Hl$ HHH5(3)YHH5_(3IYHMHL:VHH/VHHHD$H|$ *IHHT$HH"3I.Hu IFLP0H+u HCHP0I/u IGLP0HH~[HHHS0H0Hɷ0H8Y!HH1HHHHHEHHt HP| HDHL$HT$H^I,$uIT$HD$LR0HD$ImuIUHD$LR0HD$HtHmuHUHD$HR0HD$HHD$&HD$@3CHt1+MMIm11H5:I,$tdI.t7IE1HIEI,$MI.IFL1P0\H0H811ID$LP0I.,Mb1Im?19\4BHt I,$Hô0H81ID$LP0Mu1f.H8@HHKHtHH6fD1HÐH(HdH%(HD$1LL$LD$H5 ?twHt$HFtOH|$5`HD$Ht[H(t%H~0HHL$dH3 %(u_H(DHPHR0@H0H5: H8:+1fDHa0H80t8Hq0HV)fDH0HdH%(HD$ 1HD$H5dHD$P1LL$ LD$>ZYHt$HFtXH<$/_HtHT$dH3%(uTH(DH|$t>H0H8/t+7HD$HDH 0H5Z H8**1q(HBHtHHDH(HH5H dH%(HD$1HT$HL$HD$G1tHt$H|$Ht$dH34%(uH('DH(HdH%(HD$1LL$LD$H5 u=1tHt$H|$[HL$dH3 %(uH(t'@HH1ҹdH%(HD$1IH5Ť H$=1t H<$"HL$dH3 %(uH 'ff.HHH5 dH%(HD$1HT$F1t |$\HL$dH3 %(uH&fHD<@H"@H@HH 3HdH%(HD$01HD$ Hq HD$HD$ HD$(D$ PHD$0PHD$0P1LL$0LD$(~H 1tDD$HL$ HT$Ht$H|$EHL$(dH3 %(uH8%f.AWAVAUATUSHHF}HHVHHLnHF0I9ELv IF?IHHHSHHtvH53H!HHHH53H]HCIm@H+u HCHP0HtHmu HEHP0I,$u ID$LP01HH[]A\A]A^A_@I|$ID$HXHLH9IHtH9tH+u HCHP0IH53LOHH$L1L_H $HHHHHH $H+H $IuH$HCHHL$P0HL$L$H)uHAL$HP0L$MHIuI}Au0jE1E11jLjjLT$04?H0L$HHL1LL^L$HIHHLL$ImL$IMHg0H9CH+#HCL$HLP0L$I*u IBLP0I/u IGLP0HtHmu HEHP0I,$ID$LP0DH0H5 1H80$HY0H8)te1HIHɮ0H5 1H8#E1H0H5 1H8#]I/&IGLP0LH)0I@H90H5 1H8X#IELP0L$fDLHL$ -L$cH)u HAHP0I/u IGLP0HtHmu HEHP0I,$}f.H+KHCHP0<H(H1ҹdH%(HD$1LD$H5ȏ HD$6t@H|$Ht&H5/3jLHt-HL$dH3 %(u?H(HtH1@H0H5 HD$H: "HD$Q H0HdH%(HD$ 1HD$H5S P1LL$LD$5ZYt7HT$Ht$H<$D6u Hɮ0HHL$dH3 %(u H(1H(HdH%(HD$1LL$LD$H5 U5t9Ht$H|$15u$HE0HHL$dH3 %(u H(@1?ff.@H(HdH%(HD$1LL$LD$HD$H5 4t@H|$H|$t;&FtBHt$H|$CHT$dH3%(u=H(fD1@[KfH 0H5b H8* 1qAVAUMATUHSHpHdH%(HD$h1IH!tJLeH] Ld$HL9HT$hdH3%(HJHp[]A\A]A^HH5.0H9tYIOuMLt$1HL3EHt$ H|$LLIEIEHtmHX L`DLeMH0HLd$L9BHǩ0H5` H8I}HtIEH/uHGP01 Ht$HNLd$HH1DH](sHI0H1LH5 H81OfDATHUH5 SHHHY0dH%(HD$@1HD$0H\$(H\$0P1LL$0LD$(2ZY*HD$ H9H9\$(UH@ H|$(J H|$ H53 H@H|$Hܨ0H9GLd$LD$0D$LH H5 :HHLLMuE1HL$(HT$ H6H|$0HtH/uHWHD$R0HD$@Ht7H(HH&HPH5 H0H81$N1HL$8dH3 %(HH@[]A\fHGHHxeHT$(Ht$ f@HD$(fDHPHHR0HD*H|$ H573H?XnfH0H5B H8QD 4HT$(HD$ H9tLHt HHg0H5 1H8HD$(H5 H@HP HD$(HHD$ HUHSH5, HPH0dH%(HD$@1HD$8H\$0H\$8P1LL$8LD$(J/ZYpH|$0H9t 9H|$(H9cHG HD$0H94HcH53HnH|$H0H9GHl$LD$ D$HH% H5K `HHu H< t< tHIHL$0HIHT$(/3H|$ HtH/uHWHD$R0HD$fDHL$8dH3 %(YHH[]DHGHHxHT$0Ht$(H0H5 H8f.1@H|$0fD1HHD$(HD$0H9H@H90H5 H8Z1; 'H|$(H5/3H7Uqzf.H0H5 H8 1H5T H HDH0H81HD$0HH|$(H;fDUHH 3HSHj H`L 0dH%(HD$P1D$HHD$DHD$D$D$D$LPHD$PHD$$PHD$HPHD$HP1LD$`H0vD$ €T$fD$vD$*HD$(H=U HÀHۅt$H=h H€H|$0It[+D$ t H\$0HCKRHHt3H|$0H HHH@<XHH1H|$ H/uHGP0HL$HdH3 %(HNHX[]fDHƹH= ;Hn0H5 1H8H|$^Ef1@H10H5o 1H8pMH0H5 1H8P-Hl$H|$0LD$HHI H5 HTztzH=o -}6H=X t H=6 Y-|6H= M$MzXDvy6LH+4$sxEtMl$8Mt A|$(LEAYInE1AQH5 DHcH>@D$ D$4HD$HSHAI|$8HtIt$HHLDLcKTmH4x4bKDmHs@H,LH)H9}3II?HtH/uHGP0Hs@LH)H9|KDmHxu Al6HHIHH+$IW=fCxMHEMH(0AHHIMoH/uHGP0Dk6HH+$EeiCxMHEHv(0MAHHIOMwMoHLHL$PtHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGHdH=đ H\n6H= D0lEcEDk6HH+$EgCxMHEMH'0A8HHŋ j6HH+$dCxMHq'0HEA HHIGIWDj6IGHH+$IWEilCxMH%'0HEAHHIOMwMoHLHL$PRHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH"^H=r H m6H=Z D0ED=i6HH+$]CxMHEMHW&0AMHHhDMDuAEHL$H{8McDL$HHQPHAHLH+JHtHe0H9GfWHyYI H= MoH;l6 H= D0KEBCD=h6HH+$EbCxMHEMH%0AHHhDMDuAEHD$(McɾH= MoJHI)Hk6H= D0EBSh6HH+$jCxMHEMH$0AHHMoLD;d6HH+$EWCxMHEMH 0AHHhDMDuAEHD$ McH{(H52JDHD$PkIHk^HIGMoHD$HIGHHD$X}HPHK8HOHS0LL$X1LD$HHt$P HHt$XHHD$PHHuHFHL$PHP0HL$PHt$HHHD$HHHuHFHL$HHP0HL$HH]1HLHL$P%HL$PHD$HH)u HAHP0I.u IFLP0HD$HIGHD] H=5 XHe6 H= D0ݾE<D5b6HH+$E\CxMHEMH0AlHHhDMDuAEHD$ McIMoNtLHGI H= He6 H=n D0.E%<D a6HH+$E_CxMHEHl0MAmHHMwL;5 ]0ENIFQIGIwIGMIM_IWIOIG؋IIwЃHH@E1L1LL\$HL\$HII+u ICLP0MUL;5q\0lPL3I/Au IGLP0ETtMuIEM$ H=, OHc6$ H= D0ԼE:Dx`6HH+$E+[CxMHEMH0AQHIGAIHD$gHhDMDuAEHL$(IcHPCxMHEMH 0ABHHMGMwMoHI0LLLD$PLD$PHD$HI(u I@LP0I.u IFLP0HD$HIGH BH=Mt pHP6H=5t D0E'5M6HH+$ACxMHEMH2 0ACHHhDMDuAEHD$(MwMcMoJHHIOMwMoHLHL$PHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGHYHnH=lp HM6nH=Tp D0E $DI6HH+$EHCxMHEMHO0A@HHIOMwMoHLHL$PHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH=zH=o H8L6zH=o D0HE?#DH6HH+$E<CxMHEMH0AAHHhDMDuAEIcDL$HHDL$HA:DMc1HNHHI|I|HH9uHM,II? H=n HWK6? H=n D0gE^"D H6HH+$EhFCxMHEH0MAfHHhDMDuAEIcDL$H@HDL$HA:DMcHHH HPN1ItI4HH9uIHHM,HK H=m HkJ6K H=m D0{Er!D G6HH+$EJ@CxMHEH0MAgHDHD0HhAEAED]HEDMDD AsHHY8IK<AUHC@JLH)H9#II?HtH/uHGP0AUHC@JHhDMDuAEHD$ H{8McMoMwJtH;HB0LH9Gm+3AI.u IVLR0Em8H=Sl vHH6H=;l D0E5E6HH+$8CxMHEMH80AZHHIOMoHQHCt @EH; @0CH)uHR0H=k H.H6H=~k D0>E5DD6HH+$ELCxMHEMHy0AXHHH{(H3A0H9G)H=z2EHH{(HPH@GIH=j MoHtG6H=j D0脠E{=)D6HH+$=CxMHEMH0AGHHhDMDuAEHD$8McIWMoJH8HHt H/uHGP0D5C6HH+$EHDCxMHEMHD0A}HHhDMDuAEHD$8IcHH4<HC6HMoIHH+$ <CxMHEMH/A|HHIGIWIOD B6IGHH+$IOIWE4CxMH/HEAHHIGDB6MoHIHH+$EW9CxMHEMH3/AHHIOMwMoHLHL$PDHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH_DH=h HE6H=lh D0,E#D A6HH+$E DCxMHEMHg/AHHMGMOMoMwLLLL$PLLD$H謗LL$PLD$HAI)uIALP0LD$HI(u I@LP0I.u IFLP0EAEH=g H5D6EH=g D0EE<@6HH+$vACxMHEMH/A<HHIOMwMoHLHL$HsHL$HAH)u HAHP0I.u IFLP0E#4SH=f HvC6SH=f D0膜E}D=*@6HH+$E3CxMHEMH/A=HDHD0HhAEMcD?6ILH+$E1CxAHr/IFAnHHhDMDuAEMwL;5;0&L;5!:0&LDL$HLcL$HaAI.Mou IFLP0@ H=e HQB6@ H=e D0aEXD ?6HH+$E(8CxMHEMH/AoHDHD0AEIcA ηHD$HHHMoMw$<HC8HD$XH<H5ӫ2LD$`HD$PH!1IHl$hLd$p\HD$XH :0LHH9HH|$XLD$HHmu HEHP0I,$u ID$LP0l$H:H|$PHcɳHHDd$`Et^H@tQE Ɖƒ @@M<Hu0@HUHHHDƒ8_HL:IH LILd$pHl$hI/u IGLP0D$HHL$PHHD$PHHu HAHP01H蜲I.u IFLP0D\$HE: H=Jc mH?6 H=2c D0ED<6HH+$E@:CxMHEMH-/ATHIGMWA@LSHHD$HMoLImIu IELP0MwMw H=b 謿H!?6w H=qb D(1EM;6HH+$Y>CxMHu/HEADHHIOH=é2MoHL$H%HL$HH=1HH1HL$HHL$HIH)u HAHP0MpBI.u IFLP0fH=a ѾHF>6fH=a D0VEMD5:6HH+$E=CxMHEMH/AFHHIOMwMoHLHL$PHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH<H=` Hz=6H=` D0芖ED .:6HH+$EI<CxMHEMH/AKHHIOMwMoHLHL$PHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGHS<bH=` 9H<6bH=_ D0辕ED5b96HH+$E;CxMHEMH/A?HHMwMoMGIFH;g20_L;40L1H52L1LD$HLD$HHD$I(u I@LP0H|$'@I|$8tHD60H8蔬'H$o?I.u IFLP0H$H=^ IG H;6H=^ D0菔ED386HH+$E:CxMHEMH/AHHHIOMwMoHLHL$PHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH0H=^ >H:6H=^ D0ÓEDg76HH+$Er0CxMHEMH/ALHHhDMDuAEDEML$č AE IcHI)MjIBHD$HIEH;`50u E9H;-0'IEH;30v'Ey&1H$LDDD$P{DD$PHI*IcDD$P荷IHDD$PIADAt5H$HQH:HcHI|uLHHH$H40I9ELLLXII.uIFL\$PLP0L\$PMtI/uIGL\$PLP0L\$PImlIEL\$PLP0L\$PLl$HMH$1HH8HHQHHL9wMtH$LxLMK4 H=[ HZ864 H=[ D(jE556HH+$5CxMH/HEAHHhDMDuAEHD$ MwMc1MoJtL薷I.Au IVLR0E7sH=[ )H76sH=Z D0讐EDR46HH+$EI7CxMHEMH/A`HHhDMDuAEDAMGMwLD$HDLHM,LXLD$HIr-HIu IFLP0ZH=1Z TH66ZH=Z D0ُE D=}36HH+$E,CxMHEH/MA^HHhDMDuAEHD$8IcHH8H%HH/uHGP0H=Y 袶H66H=gY D('EC 526HH+$'CxMHk/HEA~HHMGMoMwHQ00I9@NLLLD$HLD$HI(uIPHD$HLR0HD$HI.uIVHD$HLR0HD$HIGH&2H=X H5562H=X D0EE< 516HH+$%CxMHEMH/AHHhDMDuAEHD$ MoMcJtLtImIu IELP0MwMh H=W Hw46 H=W D(臍E ,16HH+$.$CxMH/HEAjHHhDMDuAEIGMoMwHD$HAAH_ HcH>HhDMDuAEMwDL$HIFLDL$HHI H=V MoH36 H=V D0蓌E D5706HH+$EC#CxMHEMH/A]HHMoLImIu IELP0MwMӶH=JV mH26H=2V D(E 5/6HH+$"CxMH6/HEA HHhDMDuAEMwL;5+0Mo/L;5)0%LDL$HnI.DL$HAuIVLR0DL$HE%%McL4$ H=gU 芲H16 H=OU ( .6LH+$ CxAIFMHN/ArHHMGMoMwH8,0I9@LLLD$H讎LD$HI(uIPHD$HLR0HD$HI.uIVHD$HLR0HD$HIGH H=T 觱H16H=lT D0,E#D-6HH+$E CxMHEMHg/A7HHhDMDuAEMoMGE1AuIGMMGMIMOLLLD$XLLL$PtLL$PLD$XHD$HI)uIALD$PLP0LD$PI(u I@LP0MtI.u IFLP0HD$HIGH H=`S 胰H/6 H=HS D0E5,6HH+$ CxMHEHH/MAHHhDMDuAEHD$ H{8McNlH*H(0LH9G+ H1IH=R Mo輯H1/6H=R D0AE8D+6HH+$E)CxMHEMH|/AeHAHhDMDuAEMwL;5-&0Mo[L;5'0LDL$H詷I.DL$HAuIVLR0DL$HE!McL4$' H=Q ˮH@.6' H=Q (QL-*6LH+$CxAIFMH/AsHHMGMwMoH)&0LLLD$PYLD$PHD$HI(u I@LP0I.u IFLP0HD$HIGH&H=P Hq-6H=P D0聆ExD%*6HH+$E&CxMHEMH/AHHhDMDuAEMwMGMcIFH;A!0H;(0O,DLLLD$HLD$HI.u IFLP0KH=O H,6KH=O D0虅E>)6HH+$ CxMHEMH/A\HHIOMwMoHLHL$PǀHL$PHD$HH)u HAHP0I.u IFLP0HD$HIGH(H='O JH+6H=O D0τED=s(6HH+$ECxMHEMH /AHHIOMwMoHLHL$P[HL$PHD$HH)u HAHP0I.u IFLP0HD$HIGHS>H=[N ~H*6>H=CN D0E '6HH+$CxMHEMH@/AHHD\$HD\$HH%J HQ&0EH81H)6 H=M D0ÂED=g&6HH+$E]CxMHEMH/AkHHt$HLŘ1#1L;t$H1L;t$HIFH&A@H|$HLIMyH)u HAHP0AˬIWI|$0HpA鎷fDH)0H5P H8蚓XL$HsxH{ LH$Iu蛅#Hl$HH4$L4HEHD$HHHEHEHP0鯪LLLcL4$鏪KDmHHcID$xIID$pIGID$hHIGL$H$L$HLHD$HL>HD$HLLHH$HH$=~H$H$HIT$hHIL$pH$ID$xHSHI0IGH$IOIWL4(阩E1RMoIGH$IE D\$hD\$hHIy$LHD\$h*$ImjIED\$hLMP0D\$h隱HiD$H(HLIIIM鞩DD$XDD$HD\$pIcDD$hDD$hD\$pHHD$PHD$H駲DHyjE 0Hu0@HUHHHD€8_5IWI|$hMoID$pMt$xIT$hIWIT$pIWIT$xHtH/uHWHD$HR0HD$HHtH(u HPHR0MtI.u IFLP0H=H 轥H2%6H=H D0B~E9D!6HH+$ECxMHEMH}/AYHIFHINHHI.u$HL$xLHD$pD\$hV0HL$xHD$pD\$hHt$`D$XIH鞯H$HGP0HmaHEHP0RIt$HE1HLA"I|$0H,IDŽ$H=oG #6舤H=TG D5#6}H=H=F -#6WLImYIULR0JLl$HMHEH Hu0@HUHHHDf8_Hc|$PD\$HIHHeDD\$HLHLHcLDuHHHLHD\$XM|ILHT$PHL$HثHT$PD\$XH HLl$HHHBD\$HHP0D\$H防H=E H0H=E LLT$Hw{LT$HEZ,ED\$XIz0HEJ(Eu5IJIr@LMAD\$XLT$HLT$HD\$XuHt$PLLLT$hD\$X苙LT$hD\$XHD$HIz0H5H|$HIJIr@aEB(EMALD\$XD\$XHL$HHHD$HHHHAHP0D\$XHD$H麭@H0Hl$hLLd$pH8יD$HLD\$h譸D\$hHHD$HI/UIGD\$hLP0L|$HD\$h H 0H50PH0HH=C H0H=C LLT$PyLT$PAz,Iz0HvAz(u+IJIr@LMALT$P}LT$PZLLLLT$P趗LT$PIIz0HIJIr@HAz(MALHD$PO}L\$PI+ICLP0E1qfDH0H8Ab4H52L蕴IH/H衁I/HD$Pu IGLP0H|$PD$`MDH40H=`B HIG{H6H=@B D(xE6HH+$MCxMHD/HEA HLD$HLLD$HHD$=U6McL4$DKxAIFH/ApHI.Mou IFLP0D 6HH+$ECxMHEMH/ApHHT$HͿH52\vH!HCLLLD$HZLD$HHD$趴AHEHIt$HI|$8HL`|L|$HߨHt$PLLD\$XD\$XHD$HөH0H8 IM bHUHMoIGHhLxHHEHt @@HIHMtfIMHtA@@` L;-0 IEHP1IUHuHD$HLQ0HD$HHLְLH{I.u IFLP0HmHEHP0HmuHP0H 0H5B H8.MڟImϟIELP0D6McL4$EtDKxAIFHQ/AoHI.Mou IFLP0Dn6HH+$Et CxMHEMH/AoHH06HD$I|$0H>I|$0H+LE1 H=o> 蒛H0H=W> L0tI~PtH90H8衋蔓H{0LHH{(H0H9GSLRHEH0H8JWMNHr0LH59 H8{0M}L鬧M9ndI~AAEl LHcHH4HHquMlRM9nI~AAE' LHcHH4HHquD\$HD\$HHID$XD\$`MHl$hHHLMHD$HHLILCHH+LLHLD$pbLD$pD$XI(u I@LP0Hmu HEHP0DL$XEu_H9\$HuLLLHl$hILl$XHLL$XD\$`I)Ll$HIAD\$HLP0D\$HͨImLIHu IELP0I.IFLP0qIED\$`M}HD$H腨D\$`HH|$HD\$`HD$hD\$`HL$hHHl$hHHILIHtyHHD$HH HLHtHHL$pHL$pH)uHQD$pHR0D$ptImLIHu IELP0I.IFLP0鑛LD\$`IHl$hLHMHLD\$hHL$`螟HL$`D\$hHHHuHAD\$`HP0D\$`HL$HHHD$HHH2HAD\$HHP0D\$HIWLD\$hMoHHT$`蜬HT$`D\$h H*ҦHBD\$`HP0D\$`鹦H|$HDLg~HEHsH 0舗HܯHK8H1HS0LD$H1Ht$P舻HܯM_MoMwLLI9FHHLL>pI.u IFLP0=6HH+$ CxMHEMH/ArHDL$HɖDL$HHtJH@0H8萆I|$8DL$HHtIt$HHLytDL$HDL$HZDL$HI.MouIFDL$HLP0DL$H H=8 McHX6I (H=8 fnaD 6LH+$ECxAIFMH/A]H1DL$HH>H錨I9FRHHLLnkH{(LnH|H 0H8fsMjH0LH53 H8uLHs(H9FLj{H\HI.u IFLP06HH+$CxMHEMH/AsHI.uIFDL$HLP0DL$HD=6McL4$EDKxAIFHN/AsMHI/ůIGLP0鶯LMo:HH H 0M_MwHIIcDD$P?IHE1DD$PI.uIFDL$HLP0DL$H56McL4$DKxAIFH/ArMHDL$HHt!H 0H8臃zDL$HHD$(JH@HDL$HuHaHD$DL$HHpPHxHD2tBDIU M}MUI}(HrHH$HcHAu0LIcWLVHIL)RI)1LAVLI%H0I IuHM}HIImu,Ht$hLDL$`L$XDD$PP0Ht$hDL$`L$XDD$PHD$HAAMH0IGI:MVHj0H57 H8|I.u IFLP0HmBHEHP03LIMMIMIM۔IMHD$H鯝I.uIFHT$HLP0HT$HH*MHBHP0錔MoL!Mo,IKMgIM8MSHw 0LH5/ H8q5I M%HD$Hx@HHH 0H50 H8qIMIIIMH=A3 dHm0H=)3 H(hH}PMH 0LH5. H8qlI@I8I0MLI MnNMFIM6I IMfILH.IVHrt5@t,1 @tHH9ILHquH0H52 H8v1ImM鉏HD$HMHHu HBHP0I.L|$HYIFLP0JIMHS0D\$PH8|D\$PMIm1HIHHH@8H0HH50 H81n~1L蟍HkImZIUHD$HLR0HD$HAHD$HkIGLD\$hL@LD$XzLHD$PlLD$XHL$PH5\2 HHR0H81ئD\$hIHD$Hx@yHHH0H5* H8kIM֍MIIIHhDMDuAyAE鹗HhDMDuAxAE镗MfIM7HMIKIFLP0IH 0IMIMIMIMIMߋIMϋIMDL$HňHHD$DL$HHpPHxHDi钋IfM邋HHu HAHP0I.eIFLP0VMI.DIFLP05M HhDMDuAAEiHhUAEA}D$PAL$XˑHhUAAED$HD$PAL$X韑HhUAEIIMeI9I.SIFLP0DIMI Hl$hLd$pLMALD\$XdD\$X頒H{0H8vu*1HxI.uIFLP0MʉM‰H0H5, H8pLLLw}IE1I.MIFLP0pMhI H8JkIMIIEDD$PH=P# DpoHx/H=4# L8XA DD$PIEE1LP@ uM]AKEA,I0HA(u5IOIw@MLAL\$XLT$P\LT$PL\$XL1AI0IHIOIw@HtgA(MALHD$P\L\$PI+ICLP0E1Ll$HM 1LALl$HIMALHD$P\L\$PLl$HMAtAtBHDH5% He/H81E1Ll$HMAA H$A,HPLpH$I0HA(u1IOIw@MLAL\$XLT$P}[LT$PL\$XuXLLAI0IHtFIOIw@MtdA(u2MALL\$P0[L\$PtI+u ICLP0E1I.IFL\$PLP0L\$PLl$HMMALL\$P#[L\$PDHH5$ LLAIMH /LH5C H8z^ʀIcDD$PzIHqDD$PADAt9H$HJH9HcHI|uDHHkHH$A,tsI0HtjA(u!IOIw@MLAYL1LsI0IHrH/LH5L H81蜘1LLsI~MIMIH/H5 H8fMLkHA@kx1bf.1jDAWAVIAUId ATIH= USHHxH$DD$Ht$P HcLD$H։ H9tHcI H9uH:HH9AD$~}Dt$8D9}sH\$HHcE1L|$XHxHA9BH;uMt8ID$@HcLHtkHtH;HHHtH/uHGP0AIT$P1Hl$Hz LlI}BmI}IEHtH/uHWH$R0H$@HAT$HcHTH:HHt H/uHGP0IT$PHcH;BID$XHtHc<j1lH/MLd$0H5C LH8IT$h1 HD$$EHL$DLUHD$ID$HHx~JHcD$l111LD$`LL$IT$PHZItHHHHI4IT$HHcHH;r|AD$ t;HD$HHxHtH@H/uHGP0H|$HHx[]A\A]A^A_jH|$H1*aHD$IMH/Ld$0H5 LH8IT$h1HL$T$hLTHD$1ۃH=% 1DHH=Q訇|$<H HD$H HE#HmHEHP0ff.fHE1E11jjjjjvH8ff.HtbUSHHHGH@`Ht,Ht"1;KHHt:H+H[]HI/H5ZH8j\H1[]ÐrH1HuF AUIATIUSHHF HvHtC~1HcH @HCHu09kIcE IUHAM HH[]A\A]f.HpLLqAWAVAUAATUHSH(H<$aH@H<$IHIw^IHHHHxRImIELP0f.ztxH 9/H޿1HcfHS!H+u HCHP0ImuIELP0fDISH+uHCHIP07fTfVf/vH /H޿1IIZHfAUATUSHHHoHtjG;G tPSH[]A\A]ÐHcHH:jf.HH;/tdH;}/tH;/SHH:sHHt7 H=( u 1[ff.1ø[fDAUIATIUHSHHH?mHHI$HuIH=t 1k`HHHLH=O 1K`IHtHH/H8DH+tKHmt4MtI,$tH1[]A\A]ID$LP0H1[]A\A]HEHP0@HCHP0HmuDH+uHCHP0H1[]A\A]H!/HUSHHo(H0HC8HhHyHC0H[]DH@H5O Hff.fAVAUATAUHSHG0HxHLp(Q6HtLHHE0HH8*iAŃwPH  HcH>H/H5B H8?fE1[D]A\A]A^ÐHE0HHx@t"AH JcH>AwH JcH>fHM0Lq@AH JcH>DHM0Lq8fDHE0HR@tAA(HP0H HHB4&H+HCHP0DE1HLzH+Iu HCHP0M[H}0L]DA\A]A^AAHAx@DEAepDAZ`DA[PDAb@DAa0DAt DH/H5" E1H8=fH/H5 E1H8g=fH/H52 E1H8G=fAUIATAHUHSHHG0HxH3Ht8HLH H+It1MxHH}0LD[]A\A]cH1[]A\A]HCHP0Myff.@H- HcH>D1Df.f.f.F@I)Ѝ)ҍBDf.1@I)‰Ѝ)ʍBЉ‰)‰É@@IƉ)Љ֍B@)IƉ)Љ@)DBfDIƉ)Љ )ʍTB)‰Df.f.)f.fAWAVAUATAUSHF I9V$IF FAU$E1f.IcH@IEHЋs{ESA=DA9DLtFCU<]tPo<wDHsDLAACwuH $ IHHcH>@HNHP dH1@H[]A\A]A^A_f.1H0i`pfHP H /VHvH[]A\A]A^A_fDHnFH LmS E1fDHtHAIc1HtHUH9|A~aH{0Lg1@HnFH Lm# E1fDHtH[kAIc1HtHUH9|A~H{0Lf1@HvINIVH1MN(MF H[]A\A]A^A_HvMnM IEH$H HPE1IFHHT$HtHT$IFD  w H HcLs0kLEUH<$H{0TIH01H¾nLHC0LHPhLjLhh1LHC0HPhLbL`h$H@@HvHk0DHHC0H /dHHP dHH1@fHR@HvH H{0V1H@bDHHHH{0IHIvHLk0LrLBIvH~1HnLtHC0IvHHPhLbL`h@PHC0HPhHjHhhfDH 5HHjMNMFLHY^VH a5HHjMNMFHnE1HtLmE11IcHtHUH9HtHA1IcHufHFHL Lo0iLIIN/?M1IFHHt IFHHt6L-HI9uwH I5HH1jMNMFH 5HHAvMNMFyfD1Hǃ~@oIHtcMfMI$LhMHC0E1H$$H<$Lt!IM9YKtHu1VHvtAVBHL 4H{01@HvtIvHtAVB H 4~}FH HcH>fH=и5LnMe(MiI<$^11HcI;$HItHu1]A~Hw0H tH HH[]A\A]A^A_!~VH{0HC0IN_HP(H1@HvH1@HvCSIvHv'7IvHv IvHvIvxHҪ/H5 1H8A"1@Iu1HtIUHŅEF0LHH55HC0H5/Hx HoIE1HtHHC0IMHPP1HtHHPXIvH#HC0H@L1H@IHC0HL`I$MIU(1HtHLLHHcH I,$u ID$LP0I.NIFLP0f.Hs0H3 H{0Lh1]@fHvGWA~wWAFH HcH>H{0e%HC0INjHP(xHC0IN`HP(bHڨ/H5{ 1H8I 9@H=l JHH"5H1f.E1H{0L\sInfE1aH{0L\CSIn?fH= JHH5HA1f.H= IHHj5H1Of.H=] IHHJ5H1IKtHHC0HPhLzLxhHP H /dO1MIM11E1E1H $AMcLM9InJl}uH{0tH H0AH$H)H=xH^HIFHUJTpMCIM11E1E1H $AMcLM9=InJl}uH{0LAH$H)H=H^H!1IFHUJTH5~ H/H81N1-HH$9H{0IHIFHHpH$Lc0LxfHH9,$LLpIF D w H l HckL+;LoLH{0-H HS0HJhHAHBhLL9HIFHL|$HtHT$%1#H=2 bGH35Hd1H5| H{0St!HI[H MH1AWIAVAUIATIUS1HD$ oDIlHt]IDIU0H0HzHIHtqIE0LdLHP )teI.u IFLP0HLt6D$ Hc1MtI$H9|D$ H[]A\A]A^A_D$ fDD$ fDHtkATIHUHSH&u 1[]A\HC0LHxHHHtFHH(Hx!HHuHCHP0f1HHu HCHP0AUIATIUHS1H'fHDLLHPH09uHc1HtHUH9|1H[]A\A]fAWIAVAUMATIUHSHHLL$HtL"E1ItHtpAIc1MtIH9|HtsHUH~cE11$@IvHt1AHUIcH9}8LtHC0dHHP Iu1H[]A\A]A^A_fDHI MtLLHqtH|$Ht$HTtH{0L⾎?DH|$t3Ht$HtH{0L⾍XH{0L⾃:H{0L⾌fAWAAVAUATUSHHHH0H4$HL$LD$DL$8H{0HH{0IH{0IHtMtzMtuIHtmH $IcHDHD$EuoHC01Ҿ|H@PHC0HHD$ t/HC0H|$ 1ɾ]HPhHjLHhhuW1HH[]A\A]A^A_HD$HHptHC0DHHD$ uH{0HtHS0HHJhHAHL$HBhH1ZzHL$HAHHH1Hl$Lt$(HILl$0Ll$ D|$DǀH HHHcH>fDPp~5DHxEHHHfHHH9uHs0H\ H(H[]A\A]A^A_HF(Lf LnH$MoI<$dE11DAIcI;$GItHufDE1Ln8MgI}\E11AIcI;E?ItHru@HHw0DB@H\ EHuH;sH{0SE1rAPf.Lf1 ItH+Hc1MtI$H9|DAH(D[]A\A]A^A_HFH HvL(M~MuE1L{0DIM9tM9~L譽HEHJtDu{LfA$G  % H/H5' E1H81?+DHH{0I H{0IMHIML{01LxLJHS0HcBp@HHHЉJp@xLHuHZDL蕼}HC01ɾ]LHPhLjLLhh˻SHuH?HM1/HtH߉T$H $ T$H $Hc1HtH1H9|ƹLqLQHC0WLHPhLrLph̻HC0Lm 1hpHc1MtIEH9ItHmut@HFH 0HPͿADžBHmH5H}*1fDAIcH;EHtHu fHIHHEH{ 0HPIAą.HmH1H}AIcH;ErHtHufH(1[]A\A]A^A_HvH+ NHuHH,H{0E1۸AHV Ht H:H(HH[]A\A]A^A_@D EH=35YHu>uHFHt H8mHaH{0耴IHLk0H¾sL۸cHC0H 5tHHP(w?HuHt*H&LԷ L躷HC0AHPhLbL`hHFHHHL$HE11NdIHHC0LdHHP 訷pImu IELP0HC0H Ė/dHHP s;HC0I $lHHP("M,$ID$1Ҿ.AH$IMLHp @HLxHuf2 fHHuIULLDIHtpHC0LjHHP(ȶI/u IGLP0M|$I IMALL.g@IHzf.IL9t$!HEHFE1HtL LH=a5I0 MHc}IHQM~'HM1HTHHITHI9uHC@9E@~H}HtH5r #HC0LdHHP 蝵eI.u IFLP0HC0LdHHP m5Imu IELP0HC0HMHP(HmlHE1Mf @&Hq0@HQHHHDƒ8*HC0mHHP(IwHHID7ADžIM9HEN|IMuA ‰ƃ Z@Hq0@HQHHHD€8*^DppVHcHHyx HH{0E1q7A@$Hvt5{(/H_H{0FE1薴AqAZHTH{0E1SA.AL$0It$I|$ED$4LK@IHLHHuHUB Hu 4H{0ɳAD$LHE1ZAIt$qHuH%]UB <H 4H{0K3It$H(Hߺ[]A\A]A^A_cH{0H{0IHD$H$A MH<$HEHD$HtH{0詭HD$HHC0H$1ɾxHHD$HC0HPhLbHcPpL`hJHHpH@xLAqLmE1@ItH#AIc1MtIuH9|H|$LqeAuHC0HL$HPhHJHHhH|$WӱHC0hpH|$t7Le1ItHHc1MtI$H9|HC0HPhH$AHZHXhOfHv/:f.1fAL$0It$I|$ED$4LK@^IHDHs0HM gMu(M#I>E11fAIcI;ItHSuf.DE@HuHHh`HK0HEHyHHHtH/uHGP0HK0HEHAHH=,IH`HHZ6I,$u ID$LP0H=(d,IHHHI,$u ID$LP0HC0dHHHHP ŮH=Б,IHHHI,$u ID$LP0Hu0HtH>tHrHC0HBL@ H=r+IHIHC0LHx8賦I,$Au ID$LP0EIcLs0L聭SL輮H߾HIMGL膮n11LH_I,$u ID$LP0HC0HMdHHP d,HMHUHLM(LE E1+IEH9 L裬AIcMu1H=\\)H5HH4$H߾Gf6HtuI<$H1W:IH[HH蛾I,$Au ID$LP0E(Hs0H< LH@AH{0PE1AI,$u ID$LP0HE1f.IuHIUH'D${1IHhIuHHiIEHtHPHtH0LHIuLH*IE HtHPHtH0LHrjH5S5HH$LHKADž@MFIM@I.IFLP0D$HuDE@HHrjHEH@8H@8{ H5/AHC0Hx hHeIE1HtHHC0IMHPP1HtHHPXHEHHH $L9 fIL94$HEJtHu0H}H{0sIHwHuH+cHC0LrHH$趩>LuE1DItHAIc1MtIH9|H<$1LnbLuMHC0I>HPhLbL`h11HcI;ItHuHY/H5; H8fI.vIFLP0gLe1ItH;CHc1MtI$H9|HC0HPhALjLhhfHH{0IIMHLs01H¾zLAHC0HPhLbHcPpL`hJHHpH@xLHEHt H8L}E1DItHS[AIc1MtIH9|վWLH0HC0H /dH߃hpHP @HC0HPhLjHcPpLhhJHHpH@xLLe 1ItHHc1MtI$H9|վXL蠧HC0AhpkDHP H Յ/d苦NfDfDNHcHHLx1tHyHcH{0E1HwHHTIA@Hq0@HQHHHDf8*HAHD$HAHiIm~IELE1P0bH="H5HKE1H5/H=E !IH$HC0HE1E1L拈H/H8I$aHI$u ID$LP0Hu+HǽHH$HC0LpIL$M/IU(1HtHT$D|$LLHL$AD HcH iI.L$uIFLP0L$I(u I@LP0E1#@H{0I1MtI$I9|HuHAHCMxH{0֟HD$HI.u IFLP0Imu IELP0Hs0H 1H 5lH莸<oImdIELP0KH=( HH5H\H}/H5Ӹ H81&1PH}/H5 H81&1D$\衞HuHHT$H|$rZH{0TE1虣AtHHs&fLL$jIHL$M~IN1HHITHI9uHC0LɾdHLD$HP L $8L $LD$I)uIAL$LP0L$I.IPT$uIFH$LP0H$-mHpA\HI$ID$LP0iI.iIFLP0PHP H /dHr:Ls0xTHuHE1[AAWAVAUATUSHHHH0H4$ҜH{0HƜH{0I躜H{0I讜HMMIHHC01LyHHD$HC0HPhHjHcPpHhhJHHpH@xHH$1LxItHt/Hc1MtIH9|L|$WLu@1HH[]A\A]A^A_HC01LnLhp.tH$HS0H@HJhH9H0LaLbhHt$0HH%HLl$8Ld$HD$HL$ Lt$(HL$HlH}H{0E E$LJIH.H}t`LHuH kL蜞LrL/L躟H}H{0c~H{0IHD$mILL ~HuHߺ議L`X1LzL覞>HC0HPhLrHcPpLph1JHHpH@xLL}E1DItHAIc1MtIH9|վWLYL諞HC0H |/dH߃hpHP 裝{HS0HL$HBhHHHcBpHJhHHJpHL$H@xHHR H |/dHAHuHHHuHߺ7XLHC0HT$(1ɾnLhp&HC0HD$HPhLjLhhHD$H9D$0H$H@3/vfDH9L$ Ht$HHHHʲ []A\A]A^A_cIH/L"L HC0HPhLzHcPpLxh&JHHpH@xLL}1DItHHc1MtIH9|־YL艜|@LaLbhH|$XaYHC01HPhLjLhhH$L`ItH(Hc1MtI$H9|HC0HPhLrLph蛖fD胖HS0mLl$8Lt$(1AWHcAVAUIATIUSHHHFH0L|TH{0HHHIHI7HHC01LHHD$腚HC0HPhHjHcPpHhhJHHpH@xHIwHHHtdIEAT$HcHtHH9ucMe1ItH{t/Hc1MtI$H9|>#u1H[]A\A]A^A_LHtH|$W2tHC0H x/dH߃hpHP .tHC0HPhLrHcPpLph}JHHpH@xLL|$QLęTXL诙?HC0hp/DH|$聙 ufDATIUHSHF8u Hp>t<11HcH9UeDHcH;E}THtLu[1]A\@ 譾tH5b5L%tκD[]A\fDAVAAUIATIUHSLH`dH%(HD$X1H=~5HD$Pf1)D$)D$ )D$0)D$@HD$HHHEHLH\$PHl$HHD$ H"MAE AELl$(Au H+v/D0HHLDt$0D$8HD$HH50~5HHl$E11LH蚣t;A$1H*q/H5x H81H|$HtjH|$ HtH|$Ht H/uHGP0H|$HH/uHGP0HL$XdH3 %(HH`[]A\A]A^fD_It$HH>HoH1HH=pH }5H@1gfD$ 1Ll$ W@D$4Md$1ItH#{Hc1MtI$H9|վHHH]H|$HDH=ݬ LHH:|5H Y@HHDHXo/H5 H8+@H9o/H5 1H81It$H14ff.@AVMAUAATIUHHSH|HtWHMDLHHH+tH[]A\A]A^DHSHD$HR0HD$H[]A\A]A^H1[]A\A]A^ÐATIUHS HtHHHL1H%HHtIع1LHHHHMH[]A\D1[H]A\fDIȹf.DHu/<ut1G<tuG<fuG<-ttHO<_tl<1tx<3uĀy2uy@tF@-@_HA<euyuQ1HRm/H{H0H9t 1Ht$H,tHt$H7_HgIHKH HHH IH_HHHt$HEImAHL$IT$HcD$H)H9\I,$A(1ID$LP0AHHcT$HHT$1H=k HfDHt$HkcHt$HNHVIH:HHHHHHt$HHHmAu HEHP0HHct$H|$HHL$HH)H9~ HHH|$H1HIHHT Ht$HT$H9MT$0ML$HEH= DAL$ AˉA A|A2@I@LIDɋ D(AHAwbJcH>H{H@1H\$dH3%(HH []A\A]A^f.ffHT$HHH9;1LH=btI.HI,$uID$LP0냐ʃ?Hɀ?HʀPHT$f1HfHHT$@1fHfPfHHT$d@@t+@LID qIL$HfDIL$HfH{HdI.u IFLP0I,$ID$L1P0I,$IFLP0HAfH JcH>fIELP0ZI,$u ID$LP0Hm3HEH1P0$mD(I,$M=mD(mfD(EƒUуM΃@ʼnЃ? %D(pfDmD([HCH5 1HPHe/H81> KfI,$u ID$LP0Im#IEL1P0A(1ATUHSHt\IGHHt7HELHkHtHC H[]A\DH+u HCHP01H[]A\fDHHtHEHHk[]A\DATIUSHxHHtkH1HtYfA- t H :j/ LHH9uHHHHtH+H[]A\H[]A\ff.@UHHSHHtZHHtBHHH5 :1.H+tH[]ÐHSHD$HR0HD$H[]DH11f1ff.AUIATUSHHH8H1HHHIHt_H@I|$Ml$IEHmH+I,$uSID$LP0HL[]A\A]LH5H= 1Hmu HEHP0HtH+tE1HL[]A\A]HCHP0@Hb/H5 H8I,$uID$LP0fDHEHP0H+AHCHP0I,$u2fDAUIATIHUSHH1HLH?HHH@tFH{u?LkIEHmI,$H+ueHCHP0HL[]A\A]fHa/H5 H8Hmu HEHP0MtI,$tMHtH+u HCHP0E1HL[]A\A]MtI,$uID$LP0ID$LP0HEHP0I,$;ID$LP0H+u+DLH5 H= 19ATIH=; USH`Hia/H= HHkH}8tRLHHtBH}@HH+tH[]A\HSD$ HR0D$ H[]A\DɐH H ATIH= UHwSH`/wH=^ H&H[H{8t#Ht/H{HH[L]A\<@3tԸ[]A\DH_/H5p H8AW>H= AVAUATUSHH `/>H= H1LcI|$8tH[]A\A]A^A_f1虼ID$8/ID$@%ID$HHtqH-1L5 L @H(L9tM11HHHH}HH+Au HCHP0EtLH(?L9uI|$8tbI|$@tZI|$HtRH=b vHtOH(u HPHR0AD$PH1[]A\A]A^A_LdH= 렸U!SHH=[ HH^/!H=? H(HmH}8t,Ht\Ht3H}8HH[]9f t˸H[]H]/H5k H8ff.@AWAVAUATUSH(dH%(HD$1HoHH=v H]/oH=^ H&LcI|$8HHD$Ht~H|$zI|$@Ht$HHtKH|$HH/t,HT$dH3%(HH([]A\A]A^A_fDHGP0^IHu1f]1HD$I|$8IEIHAI|$8L`H1LHHHH;7^/H@tDHyu=M9I|$@Ht$HHL$HL$ImH;Hy[/H5 HL$H8HL$H)u HAHP0ImIELP0fDK1@Ha`/H5 H8:H(uH@HHL$P0HL$IM9@H)vgH`/HH5 H816Qff.SHt1HHHPHHt [fDHGP0[D1ۉ[DSHc藾Ht*H\H(Ht HH[H@P01@1ATIUHHSHHtLHH[H]A\ D[1]A\ÐbfATIUHHSH HtLHH[H]A\ D[1]A\ÐATIUHSH譽HtHHLHHH+tH[]A\HSHD$HR0HD$H[]A\H1[]A\DH H} pAUIATIUHcSHHtkHH|MtFLLH5 1H+t H[]A\A]ÐHSHD$HR0HD$H[]A\A]ÐLH5k 1D1@bfRfAVAUIATIUSiHHHVV/H9Ct.H51H!HHtyHHmAtE~!H[]A\A]A^fDHEHP0EH+u HCHP0EuH\/LLH5Ț H811H[]A\A]A^H[/H8!tH[]A\A]A^@H+uHCH1P0_SHcHt*H\HHH(tH[H@P0H[@1@ATI1UHSHH5 HHtLHH[H]A\@[1]A\fATIԺUHSHH5 HKHtLHH[H]A\[1]A\fATUHH= SHV/H=q H9LcI\$8Ht3HHYOI|$HHDHHHt HH[]A\@3tDHZ/HH5? H81-H[]A\DHHG@tHH1HfHYU/H5 H8z1HH@SHHHdH%(HD$1HW/H0H9t LEHJH+H1?B@H|/ @B@B`D@B1:f.H@USHH8HdH%(HD$(1H8O/H0H9t Ht$Ht"1H\$(dH3%(H8[]DHt$ H3uHHHtHL$ HD$H HH)H9~ H HL$ H9^DC 1L[0LSHDEA@A <@E&ELID4H HH9tuHHH9uDHP LL$ HH0HxH@HEHT$ L9LEP/LS0HsHE@LHDB\GUMA OMA OMA OMA OM A L_H OI(L OI(IL A IASHT$ L9#S AӃA  E@LHDB \HOGuAI(HA F\D_AI(AAF\D_IMEELID4FH@HsHL_GxHE@LHDBJAHSHCHSH HsHzHH= 1H+HD$HSHR0HD$@HSHfHCH5 HPHH/H81@YHxHeH+HD$71 @HD@ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.F1tHH=m 0H1HtH= 1HAWIH=@ AVIAUATUHSHdHmF/H= HHtHUH;F/tHmuHR01H{PLkXL{PLc`LsXHk`HtH/t]MtImtAMtI,$tH[]A\A]A^A_fDID$LH@0H[]A\A]A^A_@IELP0@HGP0ff.@SH=? zHE/H=' HHtH[PH[ÐAUIH= ATIQUHSH(H1E/QH=Պ H譧HCPIEHCXI$HC`HEHCPHCXHC`H[]A\A]fAWAVAUATUSHH/Ht}HHLcIIIA$@LDHEt>@t5Mt`HL5tKI9tHmI$LImIH[]A\A]A^A_f.HE/HfH;E/HCt^HI1LHbI,$uIT$HD$LR0HD$Ht@H+gHSHD$HR0HD$H[H޿1IMuHmH+ILLLHtI?H+u HCHP0;H= +H4C/;H=؈ H(谥E X] 9~~I}m H/uHGP0I>H/uHGP0HA/HIEHF/HIIUHHtDHEHP0#fHCHP0LLLm 0fHEHP0H1II111ѤAUAATUHSHdH%(H$1E1H\$$t#< t1HHƄ$HuAE9uHD$H< w%Hf.Hs H< vZHuHD$HD$ 蟯Et#1H$dH3 %(uH[]A\A]H\$ff.AUIATIH= UHeSHH@/eH= H]HChI$HCpHEHCxIEI$HtHHUHtHHtHH[]A\A]AWIH= AVItAUIATUSHDHM@/tH= HɢH{hLcpL{hHkxLspLkxHtH/t^MtI,$tBHtHmtH[]A\A]A^A_HEHH@0H[]A\A]A^A_DID$LP0HGP0ff.@ATUSH@H|$Ht$HT$dH%(HD$81HHLd$0Hl$(H\$ LHHqH|$HT$Ht$-H|$H/uHGP0H|$HtH/tkLHHHt$H|$(~HT$0Ht$(H|$ 芡HD$8dH3%(u3H@[]A\ÐHT$Ht$H|$\f.HGP0rfUHHSHHT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$H$HD$HD$ D$0HD$ HHHrHtH+t1HT$dH3%(uH[]HCHP0臰AVAUATIH=< UH:SmHv=/:H= HMt!ID$A$@LkpHHEMtlH>/I9t`HUIEH@ML9u!H+u HCHP0H9IL/IE1HHE[]A\A]A^DHQ9/[LH5 ]A\H8A]1A^DH9tOHE1HLHjIHEHPHUHubHCHP0HuOLMpfDH11HH1HLH+ItHUHHUuHEHLP0HpI1L}Hm|HEHP0mfD1yHHt!1HLtH+I fHmHE[H]A\H@0A]A^E1#SH1,HtHHHZ;/H8"H+t [f.HCH[H@0f1DSH<9/H;Ht 1[ÐH=Q 4H;1[UHHSHHHH荧HtH+t H[]HCHH@0H[]DHH!9/H5 H8B1Hff.AVIAUIATIUS6(H=U WHHt~MMME1LHH=F 1qHH+u HCHP0Ht81HLHmHu HEHP0HtH{HwH+tA[1]A\A]A^fDuH5HQHEfHCHP0[1]A\A]A^LH1H= H襲莍tI>11H5o E1A@ÿI{MHn HH,/H813L4$LbLZDAWAVAUATUSHH(Ht$謝IHHIHCHH8HP1:E11H\$E ADHc1HtHH9}OL|Eg@EtD9|HHH蘀H+t H[]HSHD$HR0HD$H[]DH1[]f.DAUATAUHSHHdH%(HD$1HQH$9G/5APHxr wMHH $/H$<#Ov@sux<*HkHik H\$dH3%(hH[]A\A]Ðq@!@&/wf./vHC@HU1I<)t.Pƀv^tZDHLHcH$<)uHfHoq D@HCfDHCfDHYj @/v HCffHQH$/w;H /w^//w3P/w<HQ DHCHHHCHCHC/HCDHtHH1H@1ff.fATI1UHS_uCHt[]A\ÐHKp I$H豇H

    )tKDFAvQtMu@H5/HH|$Pw(uDt H߉L$ 4zL$ tHCLAtpHD$H;\/LxtHCL@H$He L1蜘LMjH\$XdH3%(Hh[]A\A]A^A_DH߉L$ 蜝HcT$ HH9t/H\$IL1H$H;e (fDL|$PBLt$8HD$(HD$PHD$ vf.t$HLM$HD$L$ Ht$0L@I>HWIY^HuIVHD$0LR0HD$0AH; ID$L9d$(tWILHE膗IHzeHD$AH$H5k LD8@K|fDLt$8L|$PMgfM&1fDE/| ƒHUEH{H*H茠HH']ME/| ƒHUEH A|$*HT$PHHHL$HL$HH A|$#H9HD$ʋHT$H9jH;/LtHCL@H j DH$Hj L1MHD$LcE/L ƒHUEA|$*H;U/LqtHCL@H d AD$M<*& <#/ȃHEMH(zHCU Ht$PHH\HEH諊H9D$PNH;/H h LDHCL@E/D ƒHUEHH*=C EME/d ƒHUEH{H*H|HHt+HlH+HuHD$HCHP0HL$HutHH5HMME/ ƒHUEH{H* HHHH]M@E/L ƒHUEHC H;8/LTtL@H tg gE/\ ƒHUEH{H*dMHDHHH=.H=h]M@E/ƒHUEH{H*HܡHH8H=H=f]ME/ƒHUEHH*ŨD$誠HrfMZT$UJf.E/\ƒHUEL:MAD$E/ HMHHD$zu H; /tS1HCHt$PH賭HDD$IHD$PEH=EHD$IHH;9 /HCH 0X zHEHHHEL:HPHUHEHHHMH{3HC(ME/WHEJ։ML<0/yHȉUH{LH(oH; /IOLLd$=H\$HcCPHHSH(LxÑHuILHEHPHU HUHBHE/.HMEL91HEHHHMS  JHK0HH@HDHʃEMHUHBHE,D\$EEa/<HMEHHH;7/HCHHt$P3HHHEH1HH O HHH9D$P?hf.H9/H5O H8zH/H5TV H8ozH;/LtHCL@H TH;t/LtHCL@H >V H/H5O H8zH/H5^O H8yH;/L6tHCL@H U E/HMEH&HaH;/HC HEDL$HHHEL9EiHHHMT$E/ƒHUEHD$(H*HIL$HL$0HDHD$ H8HHD$HHPD$H;UiHt$PAHD$HLd$0HEI/9IGLP0*HT$PLHZH|$AH\$H8Ha/HHHD$ HI/u IGLP0pHEHHHEL:HPHUՍHH/H5L H8wHIjH;/L.tHCL@H R =IH]8SH;/LtHCL@H /T HMHAHEHMHAHEH/H5L H8WwH/H5tL H8H|$HHHL$ HHHL$HcQrHHqHH,Ht$PHBHD$ H8HD$HHP |$o|$ItbHE2I/u IGLP0H;/LtHCL@H P rE1A111H袀AIEHEHEHEUHSHW~#1fDHc1HHEH0P;]|E uH1[]DH}/dH1[]fDAWAVAUATUHSHHH|$HHt$:HT$hLD$DL$ dH%(H$1H$ HDŽ$H$4sIHHD$HIH}1ۃLcJ|u~(LHH$HDŽ$HD$H|$LpHG\III9CD$`E1HD$8H$HD$PH$HD$@HD$hHD$(H$D$$HD$0Ld$X\$dLHL$hALd<|/<$gHƀMJI9HD$H|Ht$0hLL$`LD$PL$0HT$(Ht$8hZYHLd$XHD$NHu DLD$HHT$@LHt$HcIH|$0H$dH3%(Hĸ[]A\A]A^A_fD9\$$zMMT$ Ht$H|$(HHCH;\$87Hf.|$$;Hq|$`Ht$hLA\$$<$HH|$L#HHtCII9DLH5IH H7.H81轡H$pHPH$ME11cfDLE1I9zHL LDH MHALPH.H5kF H81^_H$FD|$`,HAHD$hL92AD|$`kf;HoHD$HHt)HHD$HPHL%4 ]fLd$H+fDHi.\$dDH5F H81_H$HH3.HL$hH5K H81-H$\\$dHT$h ;wH HHЃ|tMCL$HDŽ$LdH$HD$Lt$xfDHt$H|$LLSt_H|$xHG~ IfIutIH|$xM9uH.HH5lF H81:D$uh\cf1MDLH5E )H5hD H.H8mH$H5pD H5D H$]뉁|$$HI DMHI H5D HDH.H81vH$)H.H5! H8lH$}H5 E H.k@AWE1AVA΃AUAIATIUSHXHt$(HT$1dH%(H$H1H$ $HD$0HHD$8HXH\$(<)tL@~V<;<|<:tjuH5o.t Ht HF t,Ht'Ht"AoI@E1I$HD$fH=: w1HL$dH3 %(uH(^ff.H(dH%(HD$1HtSHGtFHt HF t4Ht/Ht*AoI@AI$HD$J~H=l9 χ1HL$dH3 %(uH(]HHG tt2HH= 9 o1HH .H5"9 D$ H:&_D$ Hff.fHXLD$@LL$HdH%(HD$1HD$`$ HD$HD$ HD$HGLOI9|yI9M~K LT$LD$`1$ʃLHtHHH2I9t/vLIfDH|$dH3<%(HXfHH9Hm; H *IHEH.HH5&8 H81d1Hy.H5fH8]1fDHtcH9HպH; IHEHfDH9HH : MHEHHHc.H57 H811 H9H: HkMHE[fHtgSH.HH9Ft"H=6 E1[ÐHFHu [@H.HH5o7 H81M1[ff.HtgHH.H9Fu>H~u HDHi.HH5/7 H811HfD4H=$6 臄1Høf.H; @H< @HJ @S6GHnDIپH = IH= H=>41cH04[f.@USHHtEH.HHH3Hu.fDHH3HtHwuHH[]fD1HH[]@UHH5%D S1HdH%(HD$1Hnyt&H,$H^HHtF@x/Hx.HHL$dH3 %(Hu>H[]f.H.HH.HH5G H81%Yff.UHH5yC S1HdH%(HD$1Hxt4H,$HHHt>HxHtUp1)Hc9IHHL$dH3 %(HuJH[]@H).HH5F H81mH .HH5F 1H81K4X@1H=1@gfAUHH5B ATUSHdH%(HD$1Hw1t]L%M.L,$11I$H0Hu _I$HcHH4HtAL1uuI$H|HHcHL$dH3 %(uH[]A\A]@1OWff.@AU1ATUSHAHtcL-.HI}HtRE17fDHH gxIH+u HCHP0AD$I|IHtHHuHmtC1HH[]A\A]HmtIH+uHCH1P0HH[]A\A]fHEH1P0HH[]A\A]fDHEHP0H+uff.AWIAVAUATUSHHH>HHH/HT$uHGP0L#Ml$M~L5.1IlL9utHI9uH[]A\A]A^A_H}`Ht$wuHT$Hu`H}0LiATHH5=@ USH H .dH%(HD$1HLL$LD$HD$8uH|$H\$H,$tgH5 HrIH|HHH{H+Hu HCHP0LkPHL$dH3 %(HumH []A\1HHk{H+HuHCHP0fD1@H+u HCHP0lHHuH.H8GrTfHHH5? dH%(HD$1H"t1tH<$1HtHcxcHL$dH3 %(uHTATHH5> USH H.dH%(HD$1HL$LD$s1҅t(Hl$Ld$H}`Lduu0Hy.HHH\$dH3%(HuKH []A\fDH]`HHHuuHu`H}0LHH+uHCHP0/Sff.@SgH==HXHtH{(踁HC`Ht[DH=A rf.H== [rU1SH ,ZtmHCHP0Vff.USHGHtQH=4Ht~H/1H9tZHt ZfHc.vH=> H>H[HCHt[H=> 4oHC[ff.UHSHBNHHH\HtHHcxH[]fHH=> []nff.AUATIUHSHHMHHLIRHHt?H(t)HL\HHt6HHH[]A\A]@H@HP0@H(fDH.HH5> H81AWH=V= AVAUATUSHHdH%(HD$81dH.H="= Hb=H[LkMH-.DME5L%f.H{(H5SL541L=8 LU8H51Hu(@I6H{ LI-8I6HDEEtL1;@L]H{({IHH{(r]Hs`H{(]t,\I/u IGLP0bkmwMIFE1HD$HIFJHP HRH:~kL9tfH@HH$HD$xH9C(tKH9C tEH$MHtHD$H@HH$H$H*u HBHP0IL9|$pI.u IFLP0U]H{ VEkH{(VHCImu IELP0jHD$8dH3%(HH[]A\A]A^A_H51L51L=6 Hu8\@IvH{ fHt6HD$0I6H{ HI.6I6Ht&}tL19Ld$0LfD14IHHD$(L|$0HD$ HD$HD$ H$@HT$H4$LLrHD$0H5.HxH9t b|tƋutHt$(HFMt{H|$01plHt$(HHt{HtNHHD$1LHHD$JZHT$HL$Ht H*t]DH)u HAHP0{aHtQYHt$(LLw@HuѐH=E5 12pLDHBHL$HP0HL$fHt$H=*5 1oH$]@1H=%5 oH{ YTEH=5 1oH=4 18DX9fD{XH{(YHs`H{(ZAXX7Hff.SH]H54 H@Hx0=Ht3HH`H+tH[fHSHD$HR0HD$H[Hff.fH.HÐH=4AVAUIATIUSH H#H{H5.H9t yHWHH ^GHLHIuHHGH}8u9H} HtHE H/ttH|HHkvHE HtzLL10HHt`H=4HHuH+t[]A\A]A^HSHR0@HGP0mHd4H븾YH=}6 p렾^H=e6 pLL[xUHHSHsHt?HHHHeOH+tH[]HSD$ HR0D$ H[]øATUHSEHHI"THtHxH5.HH9t7xu.H@HHtTHHLsHu,HHt H[]A\HCHP0H[]A\fDHHu HCHP01H[]A\AUATUSHH=4HH1I?HHH=4HDSH+IMI}8IEHHHDHHHrHt`HHLHEDx1H2.tVLHH=/5 1PkHH[]A\A]f+DHHYHHHuHCHP0f.1HH[]A\A]HCHP0I} tH]HHtHyHtIu H`U8fDHCHP0!SH"qHt=HHH^H+t H[HSHD$HR0HD$H[fDH1[UHSH]HHtHxH5HH^Ht HH[]Ð SH5\HHy.tH1{fATHH5G/ USHdH%(HD$1H"ctH,$HH]HZHt"1HL$dH3 %(HH[]A\HtH#\HHtHHY.L I4$Hu{II4$HtkHS`uID$HteHHuHQIT$HHHPH(KNH+kHCHP0\H).H H.HH52 H815uBff.SHnHt=HH"[H+t H[fDHSHD$HR0HD$H[fDH1[AWAVIAUIATIUSHH=0 HXH.H=0 H(1HL}zHteHMtuHI0HHjMMH5011mZYHt2H(tHLHH[]A\A]A^A_`HPHR0@H1[]A\A]A^A_Me`fAUIATIUSHHlH|HHHwkHHKMLZkIHVLHLH>HmIu HEHP0I,$u ID$LP0HtH+u HCHP0HL[]A\A]@Mu11LH>HmIuHEHP0fD3H=HEMPI$M IFA~ E= I~H.L4$HI^HE HD$H5W1Hx((IH+ IHD$H4$HxGH;.HHH51HHD$^eLT$HPH51HLT$HD$7eHT$LT$HH*uHD$HBHP0LT$HL$HHLT$HL$XHL$LT$H)dHD$H$1LT$H51Hx01yeLT$HHH(H@HP0LT$f.L"Z1fH5i1H'HHH;N.HH@HD$HHxFHHCAAu $@HAE9 1AH.HqqHu1H+uHCH $HP0H $HmuHEH $HP0H $MtI,$uID$H $LP0H $HfHT$8dH3%(HHH[]A\A]A^A_f.H51HQ&IHc=LT$FLT$LT$8LT$LLT$VLT$xzEt I~H=c1LT$=LT$HHHLBLT$HHH@ Hx]LAIH)ExH<$1LT$LD$HWI+VIPsLD$LT$II(1MtSHD$LLT$HxCLT$HHHImu!IEHL$LLT$P0LT$HL$H$HHD$HHuH<$HL$LT$HGP0LT$HL$I/PMI*IBH $LP0H $H591Hq$HHH@ HH51HA$HH=1LHt5I,$fID$LP0Vf.L<$E1MH.H2L:Ht$AH.Ht$IH2Ht>HtIHʰ.H$H5 H81YI,$I/IGLE1P0fDLP5HLpHH5(LQSxpHHHL.xI,$Me@H4$H= IHHHH&&I.IFLP05H߯.H$H5 H81XID$LP0 DHFHAUAHATUSHH2H{LHHHILOLu.HCH HIHELc0HC(DmH[]A\A]DHC0HC(H[]A\A]Dff.@UHSHHH6Ht\@5H3HHHth@4H3HHHtt@4H3HH|H@[]4@HC(H;C0t~HPHS(@8H3HHHuHC(H;C0trHPHS(@8H3HHHuHC(H;C0tfHPHHS(@8H3HuHC(H;C0t]HPHS(@(H[]@HL@H4@HH@H[]ff.HH@HHHH8H*uHBHH@0ff.@USHHH6Ht%@t3H3Ht1H[]\3@HC(H;C0t6HPHS(@8H3HuHC(H;C0t.HPHS(@(H[]@@H,f.HHމ[]AWAVAUATIUlHSHHH@H2IL$HHH?HH1H)LhM4KT-AF fDHHzuHHHHHNE1*M~6DC\HIHM9uA^HxuH[]A\A]A^A_@HB(H;B0tPHPHU(@8IL$HHH1[]A\A]A^A_Dm EH[]A\A]A^A_@HDATIUSH2HHt[HL]A\Tf.LHxJHI;01HL9t*HuHuHE(H;E0t$HPHHU(SL9u[]A\;HATIUHSHHHHHL[]A\6fDAVAUATUSHHpdH%(HD$h1F PV ~0FC HD$hdH3%( Hp[]A\A]A^DHH H;=.HȰ.H98H;=P.RH;=í.H;=V.X~PH~H H?-IHH{HH$-H=H7I,$Hu ID$LP0HH3Hr~/HHCC H6HSJ/C H6Ht@0&/C H6HN/C ~HC(H;C0rHPHS(0C S@H6Hth..C 2H6HT.C HC(H;C0dHPHS(SC @HC(H;C0THPHS(.C @HC(H;C0HPHS(NC @H6HdF-C nE1E1H}H;=.H;=*.H;=.H;=.4H;=k.H;=.H;=y.H;= .k H5'.H9vH;=.iH;=. HHH8Ll$1HL8DH3AsH A,Ht$ H k CLC NHC(H;C0HPHS(TC #@HC(H;C0HPHS(FC @H޿0C H3A?HQ A?,CC H޿N9C H޿S!C }H޿. C e{PHLl$`:LzH3AgHA+HھL C H{HuH=H&IHH{HHLvHI,$Au ID$LP0Imu IELP0EAE/H޿TC xH޿FC `HC(H;C0HPHS(r={PH3AxHA*H@S11Ҿg-IHHH3IHKS*HLLL- H&11Ҿg-HH}HnH3IHm)HLHjH C ^H1IHHHHH3AiHsA)HL\C 0H;H3AsHAU)HuH*H} H\C Hn ?)C CE11Ҿgd,HHOHAf<H3IHA(H3HD(HL{PYE @MH}H3QAZHQA](E Le }LmH@tLm0H3HnAĉ*(HLLC /HS&HDHC lHޣ.H5 H8HLl$`mPLpH3AyHWA'HLH$L:%I,$ID$LP0 HH5 FHIH{PH3E AtHA&IuHk CImIELP0C >HC(H;C0CHPHS(D DC CHC(H;C0HPHS(D H3A[H6AP&LmI!HLMIE1HEHJ< I`M9uHC(H;C0HPHS(D PH9k:G^H3A>H^A%H1HH=}HH`HAIHu]HHHmLJHHuI,$u ID$LP0K,HHC(H;C0HPHS(D xHC(H;C0HPHS(D(HC(H;C0HPHS(D(#HC(H;C0lHPHS(D HmF{PH3I~ H= A(HA$ITHL7E1M*J|HIM9uAuH7HC(H;C0HPHS(D "H޿r(H3A{HYA#H$Ll$Lt$IH|$H|$H LLLH;Hޅu1C HC(H;C0xHPHS(D |H3A/H|$H,-HC(H;C0t]HPHS(D AH]AHhAHSHC(H;C0t!HPHS(?AHH޿?_ff.fAVAUATIUSHH`Hn(dH%(HD$X1HtEHF0H)H9-ILf(HT$XdH3%(HH`[]A\A]A^f.H~8H L;f@H{IE1H1A LLtLIHtH{H1H H591I*IHt@H~.LH0cI.Iu%IFLP0fDH LIM9|Hk8LHHC8HtHH{Lc@/HA.H5;1H8@L`FHHC8Huf.#HM9}%H.LL1H5_H81=?ZH.H51H8 = fDHHHt@ ҉Hff.@HHHtHʁHH HHfHG(HtH;G0s9HPHW(DHt9HH8HtHøHH?ESHt*HHHH8 xH[H+u HCHP01H[fS1ۅt)H>H_HH5.HHHH[H.H5HH8. ff.AWIAVAUATUSHdH%(H$1AW JAO (ÃH؃AƃSY H5 HcH>HY.AW H5E1H8 H$dH34%(LvHĘ[]A\A]A^A_@HI.H5:E1H8G DE1LHcH LH]IHt5HHƿ5.IHD$xHtE pAG PAW @E1LUH} IH AG E1P@E1L%HM IHuHPH59H.H8b E1AADALHIHdH5Hw1A<6IwHHD$xcHD$HHD$xHE1HtK\$LHHxH|$xHZ6H+u HCHP0IL9u\$Ll$xA<IWHMxpHt$L#^fDLa.IMLDMgHLHHVHD$xLHD$H Ll$xLIHH*7f.zuD$SD$HIŅ@LIwHI|@L.IMlDL.IMTDLHcHLHHHtcL$HHLx11Ƅ,Hf.D$uD$HfDE1LH@IHH5HH1VIHD$xHeLHzIH Ld$xHHI|$  AG MP)fL.IMDH).L(IE@LXHIHH5H/HIHD$x@ MH1LLH HT$xHRHHH9ufLHIWHH9BHRL,L;-B.Ll$xIEDLIIHMI$H9 LH?IM1I)ILLt$(H?LHHhHD$HHHD$H]HD$MHHNHo1I4 \$Lt$H\$Ll$ KAL{AHu=ADADdHI9 L>AHtHT$\$Ll$ HHD$HHHBHP0LpHcHKLHHL$HHL11LƄ,%8D$f.d$zuHLHcHLHFH]HHLz11LƄ,f.D$f(zuD$}L$HD$5IŅ#LH@IHH5eHH(IHD$x2M_HV1L HLl$xIDHH9u+'IHD$xM f.LHHLHHH|$xHH.HpHHu HCHP0HmuHEHP0LE1HHlH I\@LHx@LKIHHr0ڑD$f.T$zuHLIHH"0f.D$f(D$AL$HDH5H .H8RDH1.H5"H82HHu HCHP0HmuHEHP0fHH|$xH/CHGP07HKHLHIHHHHHD$xIMHu-H@H5YH|$\$HHD$HHuHGP0H܊.H5]H8DE1(H5H.DIwHH,IHD$xH|$xU Ll$xH+HCHP0 I11L9IHD$xH|$\$Ll$ HHD$HHuHGP0H.H5H8Sf1IWH?H.H5KH8$IwHHJIHD$xLHD$0HLjHD$@HLOHD$HuHL4HD$PZIHLfHD$(HLPHHD$L:LT$HILHD$LT$L\$HHD$8?LL\$ LT$L\$ HHD$LL\$XLT$L\$XHHD$ LLT$L\$XHIH5.I9F1LL\$`LT$XyLT$XL\$`HHD$LL\$hLT$`LT$`L\$hHD$XLL\$hLT$`%LT$`L\$hHIPAUD$hPt$ AVt$Ht$Ht$pASL$ARLL$xD$$$$|$`L$H$HPHLT$XL\$`t0t,HLHL\$@LT$0HD$zL\$@LT$0HD$HD$xHt$(HHD$HHu H|$(L\$0LT$HGP0LT$L\$0I*uIBL\$LP0L\$MtI+u ICLP0HT$8HtHHD$HHu HBHP0H|$HtHHD$HHuHGP0HT$ HtHHD$HHu HBHP0MtI.u IFLP0HT$HtHHD$HHu HBHP0MImIELP0v3HD$xHD$hH.H52H8"5Hl$(\$Ll$ Du1\$E1Ll$ 7fAT9u ED)كAD9PLAkHtHt$\$Ll$ HHD$HHkHFHP0I,HH|$xH/tHGP0hIwHH|IHD$xH&H|$xH/uHGP0HD$x!H|$xHH/uHGH\$P0HT$H*uHBHP0H|$xHHD$xH/HGP0H|$xH/HGP0AG PIwHHHD$x%\$Ll$ HHD$Ht$IDdUIwHLqIAG PIHD$(E1HHHՉЃKHă.H5H8H.H5RH8bH|$HHD$HHHGP0ZLT$`L\$hH+E1Iw HtALyLT$L\$XI.uIFLP0L\$XLT$Mw IMw |HD$E1HD$E1E1|HD$E1E1HD$ _HD$E1E1HD$ HD$9HD$E1E1HD$ HD$HD$8 H|$(HHD$HHH|$(E1HGP0HD$fSH HuHHHt2H[DHه.1ۺ)H=^H6)H[Ð HuH.H5hH8ff.UH1Hٔ SH5l1HHhdH%(HD$X1KHHH@uRHPHG.H51H81'H+u HCHP0HL$XdH3 %(HHh[]fD1Hl$D$ H$HD$ HD$0HD$(HD$80HHD$HH{HH|$HHH/tH|$8HWVMHGP0H|$8Hu6f.15@UHH5SHdH%(H$1HHH$1HD$PHD$`HD$xHD$HD$pH$D$\CH$HtVH|$PHHAH$H/t#H$dH3 %(Hu!Hĸ[]HGP01HhdH%(HD$X1H4$HHD$HD$HT$PHD$XdH3%(uHhff.SHpdH%(HD$h1Ht$HD$RHD$XHt$\$`H|$XHtH/tHD$hdH3%(u6Hp[DHGP0H|$H|$HHD$XuSH`dH%(HD$X1H<$HHD$HD$ HD$(HD$0HD$8H|$8HtHT$XdH3%(uH`[`SH`dH%(HD$X1H<$HHD$HD$ HD$0HD$(HD$8NH|$8HHtLHT$XdH3%(HuH`[ff.SH`dH%(HD$X1H<$1HD$HD$ D$ HD$0HD$(HD$8gHHD$HHt%HH|$HHH/t,H|$8HtHT$XdH3%(HuH`[@HGP0H|$8HuSH`dH%(HD$X1H|$(HH|$01H$HD$HD$ HD$8D$ HHD$HHt%H3H|$HHH/t-H|$8HtHT$XdH3%(HuH`[DHGP0H|$8HuPATUSHHdH%(H$1FHT$5uYHl$@HEH=wHH(IHt8HHHLHrLHD$HD$fDHPH$dH3 %(u Hİ[]A\ff.ATA2UH1SHpdH%(HD$h1HD$HD$ HD$(HRHX HH\$8Dd$`HD$HH\$@AHD$XH\$HHH|$XHt H/HD$(HtRHt$8H H{H)ET$HD$(HL$hdH3 %(Hp[]A\T$tԃHH5LHEHy.H81HGP0HD$(HY멐HD$XHH|$(HD$H/uHWR0HD$P@C1=fHWH(MHPHR0T$:DH(HH5dH%(HD$1HT$HL$ D$  1tt$ H|$AHt$dH34%(uH(7SHH57H0dH%(HD$(1HL$ HT$D$LD$! tmt$H|$HHtWH|$ H1H H5c1 H+tHL$(dH3 %(u(H0[fDHSHD$HR0HD$f1wSH=c1HHtH5=a HH[f11Li~([k(})tlt1HDD9)D 8}zIcL>HHt.H5H8fH@{t}t]u@Dȃ~DȃlDD_WLWuDFLA9YD@AWAVIAUATAHWUSHH(HdH%(HD$1HyI>G @H)E)HމLA HfDHL$dH3 %(H H([]A\A]A^A_f/ƒHSHc:HD/eƒHS:;HfD/%ƒHSHHHY/ƒHS:cH3/ƒHS:+H /]ƒHSH:"Hf./ƒHSH:BHf.y&/ƒHSH*HIxNoHEeD/]HSHBHCIH*8#HHHHHfD]~AŅHcHHEAEE1D$L,DHUJ:IM9{DHLHuHv.D$H/ƒHSH|$D$HMD/]ƒHSH:RH"f./UƒHSIH*8#{HH*HHH/ƒHS?#H*HUHHHHf.}AljD$ ] HHLD$EHDHLL$AL$HILLHL$8L$I(uIP$LR0$I/uIW$LR0$ED$D$9D$ DHLE1IHWLt.AIAC=rƒHSCHMD/-ƒHSH:B H"f.Hn.H5H8Z1ƒHSHSHBHCHSHBHCI> @HSHBHCHSHBHCHSHBHC]HSHBHCHSHBHCHSHBHCHSHBHCUHSHBHCHSHBHCHSHBHCHSHBHCM/HSHƉ H42/HʉHHGIHHpH q.AHI=H-q.HE7D$uI8]u8HI@HmHEH1P0@I8}tHmu HEHP0Hl.H51H8fHI>E/[ƒHSH2H>HHIE/,ƒHSH2HH^NHIE/ƒHSH2HHHSHBHC_/ƒHSHc2/ƒHSHc2;/ƒHSHc2_HH[H.k.H5H8BHSHBHCHSHBHCHSHBHCHSHBHClHSHBHCHSHBHCfHCfDAWAVAUATUSHXH4$T$,dH%(HD$H1bIHcEHHFHD$@E1E1HD$HD$8HD$HD$0HD$ JDA9EH4$DLMcAHuHn.HJDEA9HT$Ht$DD$(AH|$ H4$DLDHT$@Ht$8H|$0HD$+HD$LcD$(EEuCI$;T$,uVT$,tHI$HL$HdH3 %(Hu]HX[]A\A]A^A_@H+uHCHP01@H+u HCHP0Hh.H51H8`fUSH1H8dH%(HD$(1H|$IoHKD$HL$ x[t9Ht$H|$t:A1HT$(dH3%(u2H8[]Hm.H1ff.@HHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$1HHD$HD$ $D$0HD$HL$dH3 %(uH4@HHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$HHD$HD$ $D$0HD$HL$dH3 %(uHq1DfUHHSHHT$@HL$HLD$PLL$Xt:)D$`)L$p)$)$)$)$)$)$dH%(HD$(1H$Ht$D$HD$HD$0D$0HD$ HHtR1HH%H+tHL$(dH3 %(u3H[]DHSHD$HR0HD$f.1GATUHSHHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1HHH$HH$HD$HD$ D$0HD$ HHtr1HH H+ItDHmt-DHL$dH3 %(LuRH[]A\fHEHP0@HCHP0HmuDH+u HCHP0E1ff.ATIUHSHHHH58d.H9t HtLHHtkHLHuRH+t H[]A\HSD$ HR0D$ H[]A\HuHe.H5H8DHyH5ZHHXc.H81. He.H5^H8`@ATIUHHSZHtHLHHt H+t []A\HCHP0@ATIUHHSHtHLHHt H+t []A\HCHP0@ L2e.HAu~d<0GLO߀XOHL-h.AA< Hvm1HLfD<0GHW߀XO OLg.A< HHA<0u@H<0tA9"U1H-LcSA8H)fDIDLHE DD9AA)EuJ9DrIDHLHsHu HA9H>p"HH[]@~-uWALf.Du4A Lf.fDB"1HtH>ÐHdH>H[]D<0tAL/f.zGLO߀OOHLf.AA< HA@A@Le.<0uGLO߀Bu{OHLe.A@A< HsCALqe.A LWe.ALLBe.LA@L-e.xOLe.A< Hw7HAOLALd.:HAu1HoHÀBu0OLd.A< HwHA@H<0tHcH Ld.DDStDH `.Ht-uCըuHHx7HHڀ-HD[Hy"[H-uHH9uH[f.DUHSHHHw'IIɺH HuH[]@fDH[]ff.@HHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$H$HD$HD$ D$0HD$HT$dH3%(uH`AWAVIAUATUHSHHt$HtE1HL[]A\A]A^A_fDIFHcHD$8IF HHT$@HD$HQIHtIMtIHEHD$H=~IfH IHTH\$Hu HHA|SHH9 HD$HHD HD$(HH. IH1HH11H|$LD$H~<u`HDHHHHHcHAL ADȍJvwBEHADHcI9~mATJ2vYBfIDLDL+fDfDHt$111DIHcH9 HHD$ HD$HHH|$HD$hE1E1IH$MLML$L$E@IlEHKH\$PDuI|M|HLDL$I4Ht$0DOD!ItPL0IcL>A|HE1Il}ZHCHH9\$XML$11Ht$H|$(DZHHHHH9~ )ʉAT uԃf.DH|$`Ht$XD҉T$pHcATLRT$xIvLRI=AsApAD HsAHpD 8l T$prEB'ЃDuDIf.ItILE1HcHzHI|? LT$0EE9H D>ruHD$0A9 E1`ITMtIAHL$HHILHD$L$MHD$ hH|$ H|$ BH|$Ht3L+H|$(!D@ILItHL$`Ht$X@MDILE8AAIcHBL9 MI)IJHD$PHD$J4ЅICH9Af A~ADw L\$XLL$`ILL$`L\$XL\$XLL$`IHTP.DLL$PE1H5L\$0H81L\$0LL$P@H H|$ LL$pHL\$`HT$XHL$PHL$PH|$HD$ HH|$ LL$pHD$& HHT$XL\$` HD$JHD$ NH$MI5LL$`L\$XL\$XLL$`IM{H|$LLL$`L\$XDL\$XLL$`IHIuIFLL$`LL\$XP0LL$`L\$XHD$0 dHL$Hf8fDxHD$PUADHQHL$hHL4HI9LL$`L\$XL\$XLL$`I/LL$`L\$XŦL\$XLL$`IHIuIFLL$PLL\$0P0LL$PL\$0LL$PE1L\$0:L\$0LL$PHcCt!HD$`A94QT$QT$$L $L1LK4H H HH1H1H HH40HHH1H H1HH HHH1H1H HHHHH1H H1L1ƀHH HH1HH1H HHHHH1H H1HH HHH1H1H HHHHH1H H1HH HHH1H1H HHHH1HH1H HH HHH1H1H4HHH1H1HH H1H|$dH3<%(u?H[ÐQT$QT$QT$$L $f.HA蓶Uf(SHfTZH "HdH%(HD$1f.sDf.wH\$dH3%(H[]f/G/H4HFfDH|$fAf/Bf.Ë\$z{1%qqIHII3H,HxXfH*\HL9J HGf.zt`YHH!HL!H f/rf(\H,H1HyHHfHH H*X1fDxtغ?%C)k=)ˉHHHH!к=)ʉHH HIHHEhfDfWFI@Ӻ?%Ck=)ڍJ<胴HHHtfDH1HtH-1HtHHfDff.HU-1@HdH%(HD$1|$HT$dH3%(D$uHճDf|$l$fHGUSHHHHkHtuH=K4THHSHtHHPHSHtHH=K4|HHt HHH[]fHUf.H=14zH=YSH=>K4qHt ǃ[Ë="K4HyH=USHH=HH?.H=H(+1H9H[]ff.ShaHHH=J4HHC`HCHCHCHC HC(HC0HC8HC@HCHHCPCX蜮HJ4H=&J4HHJ4H[f.KHHI4HSH=!H=I4;H=I4t mDATAUHSLHHA.H8H1HkHCC fC$HC(ǃHǃĦHCPHHǃHCXHC`HChHCpHCxHC0HC8HC@HCHǃHǃHǃHǃEuRH=H4HEHHCHtHH]H=H4:H[]A\fHIHHfDf1DUSHH_H=H<.H=H(FHEHt5H@HtH9X~&H@HH;J>.HDH[]H1[]ff.@ATIH=USH 1H:<. H=vH(趞HmHtNH}Hu2fH5=.x1H}HsH9w~I$[L]A\!諘HHEHu[]A\DATUHH=SH!H;.!H=ֶL ID$Ht@H@HSHtH9P| H@H9,tHH[]A\`H=)D[]A\H=0fU6SHH_H=NH:.6H=6H(vHEHtEHxHtOH9_|H<.HH[]fH=)H[]H=H=yfAUJH=ATUSHAHJ:.JH=HƜLkI}HHWH~mL%]7.1HGH,H}L9t Lt3H˻Ht&Hx HtH@ H/uHGP0I}HHWH911uH[]A\A]I}H[]A\A]ff.fHm9.SHHt)Ht;H>.7H=HH{HtHCH/'HHtHǃH/HHtHǃH/uH{PHtHCPH/JH{XHtHCXH/H{`HtHC`H/H{hHtHChH/H{pHtHCpH/H{xHtHCxH/twH{@HC0HC8HtHC@H/t@H{HHtHCHH/t[HGP0@HG[H@0DHGP0HGP0HGP0V@HGP0+@HGP0@HGP0@HGP0@HGP0@HGP0N@UHSHH=oB4ҦH]HtfHH[HuH=@B4H}8HtHE8H/XH}@HtHE@H/-H}HHtHEHH/H}HtHEH/H}HtHEH/H} HtHE H/H}(HtHE(H/tZH}`HtHE`H/t3H}0HtHE0H/t H[]DHGH@0H[]HGP0HGP0HGP0s@HGP0H@HGP0@HGP0@HGP0@HGP0@USHH=HBHK5.H=H(ǗH9tBH=j@4t=Z@4荕H9tHH[]:f.=2@4H=ٱfATUSHHHt@胫H{HuH=?4H-?4L%KfH9t#HHEHuLwHEH9ufDH{t H=UHH=?4HEBHjH=b?4t[]A\H=i?4Htw[]HR?4A\UH=7SHսH-3.H=H]YHtlH=HEH=H=>4t=>4H9tHH[]D=>4=H=ѰLf.ATUHSLgH=m>4ТI\$H9tnHUHEHtHBHEHtHHEH=2>4HEIl$HtHHktHHHu[]A\H]fSH=׭zH2.H=HHt H[DH= TH[ff.@ATIH=sUSH2.H=YH+虔H=EL#H=1H[]A\ff.SH=誻H1.H=H/Ht:HHt[@HHu袳H[f1[ff.ATUHSHH=~!H*1.H=fL 覓H=W<4Md$谠ID$Ht H;u+H9tH@HuH=<4[1]A\HHtHEHH=;4HtH+t,[]A\fHCHP0f.H;4@HHGHGAVAUATUSHH=G;4I袟L5;4MtcI^HtRDLcMt;H#HHtKLHLHmAu HEHP0Ex$H[HuM6MuH=:4w%DH=:4dImu IELP0E1[L]A\A]A^@UHSHH諮]:4t0HY:4HtHH[]fDH[]fH=jfH= :4-H:4Hff.fH=94t=941ff.fS薦=94Hș94t Ht=94Hex![H=,f.H=9[SH=GH-.H=/Ho1HtH9[S=84 Ht+HH1҅u Hb[fH=84HHtǃH%fDH=HL蠢dfIGLP0LLHHH=8AHLHHH=$$I.IF$LP0$fH=财cDH#.H #.HHD$HHu HAHP0H=1賛IHt HfH $HHD$HH-H<$HGP0H)#.H "#.HHD$HHD$OHAHP0@fD[E1aHLELLH&HH=觡AH".H ".HD$HHHHAHP0HD$Ht$Ht$HD|$褢E12ff.AWAVAUATUSHH8DdH%(HD$(1HJ%.L A;H,HcH>fL5ҞE1fDH{H;HcsHðHHtWHKHHL$jHcSD}H9t9HmHL$uHUHD$HR0HKHD$HyHHgHŋSHsIDH=-1詨HHHMLH=3 1耨IHmu HEHP0LL豌MtI.u IFLP0MtImu IELP0H{Ht HCHD$(dH3%(H8[]A\A]A^A_DH .$HLG XL5H ՝ALELDt@請pfDH.L5ZE1L GL5-E11HA .L5E1L H! .L5BE1L HT$ Ht$H|$ Ll$M^L覍H|$IHt H/uHGP0H|$Ht H/uHGP0H|$ Ht H/uHGP0L5rfL5E1aL59E1QL5E1AL5 E11L5E1!L5E1[H H.H8ÖfDH)".E1HCL5H81@H-q.HE#1L&LH=1迥I:H|$HDIL5E1FfDIL5E1. fAUATIHUSHHȹHH=#HۥH.H=L(`~HIEHx0萃HHtHH1HH5"-H+Ht4HtoHH5xLMyHmt!H[]A\A]@HCHP0@HEHP0H[]A\A]HmuHEHP0fAWAVAUATUSH(x$ILL$ILD$A׉T$辑y"L%.I$H(L[]A\A]A^A_@qHB.8t At$L=O.jHaALAWLHAWLDH5|11AWcH HHu?H.E1H8e_fIMI?DH51H虸IHLոIH HH51Lg1HJH51L跭HnHHD$!HL$H)IH . H.HD$I.u IFLP0Imu IELP0HWt$HLPHH511LL$ LD$IHEHHEZYHu HEHP0MD$H=H, HD趷HHzHH5P1LH0HmHEHP0fDL=9.jE1ɉLHL1AWH5v1AWAW]H IHILDHmu HEHP0Im@I.IFLP0HmHEHP0fDHmuHEHP0Dq@HQD$HR0D$Hy.HD$!IELP0`I,$uID$LP0Hmef.I,$ID$LP0DAWH=AVAUATUSH膢HH(H=gHH(H=FHIHH=&0HHH5SHe~HHHH5L跁AHEAHHEhL5 c4L=b41MAMEutH.H2.H8MM1H ]HIHHH=vLH=t1菊I,$HU.H8赠MMH vHIHHH=v莐LH=1/I,$H.H8UMHL 9H %IH9H5H|IHtBHHt%HxHtH(uHPHR0I.u IFLP0LH=ȕLH= 1eI$HAI$H=6a4Ht褢H!a4H=a4Ht舢H`4HuyMt ImHt H+HD[]A\A]A^A_@HPHR0HPHR0HEHP0ID$LP0 ID$LP0\I,$A*ID$LP0HCHP0[IELP04Ll$H;$LLL֠H<$H=0o_IHH;<.LLLhpHt$HH|$bH<$HHT$Ht$HAH;.A!H<$Ht H/uHGP0H|$Ht H/uHGP0H|$Ht H/uHGP01HgH5L0LԕHtH(u HPHR0Eu1yIHt$H3 H;It$LYD诜銲f.H.HD$HHkfAUATUHSHH-H;HtJL6JLIHHtH@H;-HmRH5mLHL$JHL$HxgHAH3HAHP0$D$f9D$&`LD$H|$LD$1ZLD$HHHu HAHP0*H-H=rHKLYsfDLLHaHHtMt E %A HmtsLHT$YHT$@LD$VGH|$HD$pH|HL$H|$&QH|$H_J@HEHT$HP0HT$tHP0D*H-H=qHCsfDH-H=pqHCR]ff.@UHSHH=VHTHtWHHIHHqwHHt8H1HPHHtH[]HGP0H[]û cDV64AVAUATUSQHHHgHH H虖IH=)HCaSIHuHHC(HHLVH=tj(SIHHHC HH~|HFcHSH{ H52jFH-H8soIHXLH=0Q]LH=IcI,$\Lc0LLH{T*x01LH -{rHt)1aHdžLOH1^H-h[H]A\A]A^ÐH=Ioz}HH^1[H]A\A]A^D1UH=iQqHyDID$LP0FfDH=)odzHgNH=njnjHHHH=0XHH=NDI^Hmu HEHP0CUWi_EtsHk0LHKvH{T"E$[H]u6Hw-tH[]A\A]A^A_fH[]A\A]A^A_DH=mHH(uHPHR0룐 ``-xlHFH=lu5fDH=)ltH=it(H=ltH=ltH=ajtWH=!jt2H=ilt H=iTtH=b=Ht 8N;iH=bx=Ht 83EH=bT=Ht 8 !H=ub0=Ht 8RH=ib =H8H-- 1HNj]gN9L؉]f.H=iTs;H=Qi-HriCHÞ&JH9uWH-fH@5Gf.HH~~zFHxaHcH>fDH?HtHOsH-HHH?HR@H?H|@HH!HfDH?HV?HAt:AH?HUH`H/VHGP0Jf.H?HHEf.H(]IHIfEH5^IfH\IH[EH5g^IHI9H\HEHf.[H؉l@Hcf.fZMCHcf.Ez)t%DHi-H5v]H8EDHL$dH3 %(H([]A\A]Ht$HuH2H|$&EfDH[IHI쀈EH5\IsqHx[IH3EH=LH5 ^>fDH@[IHsfEH=H5^H-H8;HHT$CjIHDeI9H--H}H5];fDHHT$iHEHmYH_zQHT$H]ZHEH7H5c].fDH-H9BH;-EH(rHEHeDHBHuhYHEH8HNHEHDH-HH5E[H81Ptk5HEDD$XD$H.fDcXHuDeDKXH<PHT$HYIHEH--H5[H}9f.WHjfDeWHJDeyfWH*DeYfWH fDmD5H}HH-H5~YH8ACWHDH9-H5rZH8UA WHDeH--H5ZH}8]DTNH-H50ZH8@h3?H-H6H8@IfUSHHoPH7WHs HH[H=Z1] (f.SHHGhHHt H/H{ Ht H/H{HtH/tkH{(HtH/tLH{0HtH/t-H{8HtH/tH[uIDHGP0H[`IHGP0HGP0HGP0HGP0j@HGP0G@AWEAVEAUAATIUHHSH+LHXH=-HD$QiHT$HHpHhhHPI$L` H@H@(H@0H@8Dh@H@D`LH@X@`DxPDpTHEHtPH@@fcLc1HC&1HC(&H{HC0H{(t{HtvHsH}HfjxbH} HLxRLeH+u HCHP0H]AuHCHE(Mt*I|$0HLH[]A\A]A^A_ÐH+t1H[]A\A]A^A_fHCHP0@CH@H*uHBHP01ff.AWAVAUAATIUHSHH8 4HtXHID$HLpLIHtOHTAtyMcL H+HHHu6H+u HCHP01H[]A\A]A^A_fMcLGHHtHHLhHEHHEtIAuSAumHHPHHuHSD$ HR0D$ H[]A\A]A^A_HEHP0AtID$HHx(Jy3fDI|$(HHHt HRI L+GHHI|$(HHhHEx'HHEWv 1;HHH|$0\HHHx*HD$pH H|$HHmHEHP0+ff.@AVHAAUATIUSHHD1Ҿ.HKHdHHHHH5HÅutID$x@u!HDHmtr[]A\A]A^fDDhPDpTH5GH"-H8,I<$DDMHmt-1ۉ[]A\A]A^HLHmuHEHP0[]A\A]A^f.H1HgHH&1AWIAVAUAATIHUHSHNVHL56-E1E1DI$HHI>;Hx1t)H-HH8O+II<$PTpPKD1@AUIATIUHSHHH{8t[AMA$H=G1?HHt]HEHHx8E9H+t1H[]A\A]HCHP0@1Ht$Ht$HC8HEHx8uH1[]A\A]ff.HHHPHu ATLb1UHLSHH 1x Mu[]A\fDHEH@JDHfDAUATIUHSHHHtHH;~BE11AIcH;},HDHH0u1H[]A\A]@I\$HtFH;~@E11fAIcH;}$HDHH0ufID$Ht H0H{HEHLID$ HbH0HSHHEHLH[]A\A]fDAVAUATUSHH GHPWH;WLs>IwKH FHcH>HvHtŅCHHSJLf.CHH []A\A]A^fH-H5C1H8H(kHH []A\A]A^DHvH4Ņt~CHfD~HvE6ŅtPA|$uHC@@uI|$H5*CŅuH=3SH53HukHH []A\A]A^DHvŅtIt$H ŅDLfE11IcMtI$H9$ItHEŅtA1IcMuLfE11IcMtI$H9ItHŅCA1IcMuHvŅMt$E11IcMtIH9oItHŅA1IcMuHvwŅMl$E11IcMtIUH9 ItHAŅA1IcMuHvŅ]HCHLCHjf.H13LFHNH4E1LHzŅ H3LNLFHNHuH=BHL$LD$LL$PHL$LD$HH3LL$f.H3LFHNHpH=%BHL$LD$bPHL$LD$HHV3AfHI3LFHNH H=AHL$LD$PHL$LD$HH3fLfE11IcMtI$H9tItHŅA1IcMuLnE11IcMtIUH9ItHMŅA1IcMuHv'ŅmIt$HŅVIt$@H=@3ID$Lh(Mt5I}~.E11ItHŅ AIcI;E|ID$LpMt6I>~0E11ItHtH~ŅAIcI;|EL$4ED$0L1H53HŅIt$HŅyIt$HŅbHs H{uŅFfDHvHvLfE11IcMtI$H9ItHŅA1IcMuMl$E11IcMtIUH9;ItH\ŅA1IcMufMt$E1 fDAIc1MtIH9} IDHHp ŅuӃkHrIt$ HtHŅ.It$(HH=ӻLH3HkH1H=p>HL$LD$LHL$LD$HH3H=LH3H@AWIAVIAUATUHSHH8LaD.LD$LL$It$dH%(H$(1=MEN4EF01LLH,A HKH==1AL ЈAL1HHHHD$HL$HHHu HAHP0A t_HCLl$ LP`JH:=H`1'L_KIHHHCsImI4$H,Ml$E1fItH AIc1MtIUH9|H}A~nfLdHI4$It$Hzt~Mt$E1@ItH[t_AIc1MtIH9|AIcH;E|H|$tHt$Ht[Ht$HtJHs H{mCHCH1H$(dH3%(ufH8[]A\A]A^A_DkHf.HHuHAHP0DHs H{1IELP0qff.ATIUSHttZtp[]A\H^11HcHtHH9}#HtLt/1HcHuH9|[]A\HvLu[Al$H]A\DHvHt tHsHt LtHsHuff.H>~UAT1IUHS1@HDHpHt LbtHcH;E|[]A\Al$H[]A\øff.@AWAVAUATUSHH(WHdH%(H$1BGH;GL{>Hw;H :HcH>HvHtHCHL CHP@SHH$dH3 %(& H([]A\A]A^A_H-H57H8JkH1fHvHDlCHP@HD$L~E1HD$oDH|$H81#M@HT$LH LHHMDHU@LLzAIc1MtIH9\MdLkHs8LLH7H$tLBHH$H6H|$Hz71"1HD$L~E1HD$oDH|$H61"M@HT$LHLHHMDHU@LLzAIc1MtIH9\MdLkHs8LLH7H$tLAHH$H6H|$H61!1LnE1'IDHHPH04AIc1MtIUH9|HCKHpDQ0HX%M@HXMDH\@LnE1'IDHHPH0TAIc1MtIUH9|HCD@DE(xXU@PXUDP\CHPfHvH4\HuHf.LfE11IcMtI$H9ItH A1IcMuDHvHuf.HvLeE11IcMtI$H9QItHTA1IcMu@HvOt{HuH?tkLmE11IcMtIUH9<ItHtfAIcI;E|LeI4$HtHID$HtHpHtH}ID$ HtHpHtHZIt$HtH$\Hu(HtH'Lm Mt4I}~-E11fDItHkAIcI;E|HuDMD1HDE@HeHuH QLe11HcMtI$H9ItH1HcMuLeE11IcMtI$H92ItHA1IcMuDLe11HcMtI$H9?ItHN1HcMuCHkH1DLeMI<$11ItH/HcI;$|fDLeMI<$11ItHHcI;$|jfDkHLuE1fIc1MtIH9MdIt$HtHSIt$HtHdM|$E1fItHAIc1MtIH9|AlkH1ALe MI<$11ItHHcI;$|cLe 11HcMtI$H9FItHU1HcMuHu HtHMuHu(HtH4\Lm8Mt5I}~.E11ItH+AIcI;E|HuDMDHDE@H"HELe011Lk8HC8HcMtI$H9}$ItHx1HcMuLk8Hs H{,ff.SHH?HtH/tJH{HtH/t+H{ HtH/t H[HGP0H[HGP0HGP0AVIAUIPATIUSGHHH1H@HC HJ]4HCH8HCHC8KMI$H=+L#Ls@$H-H=+L MAD$ H5k3=*@L*CHDmLkLH<E1E1LH&tOHCHC@DAEvL#uvHߘ-H5@+H8Hs H{H1I'H[]A\A]A^Du3Me1ItH+tHc1MtI$H9|ِHs H{t1HHt1IHH{1HH HmAu HEHP0I,$u ID$LP0E:H[]A\A]A^ÐH=T 8HH3H @IuH|DHmHEHP0fDH1&H[]A\A]A^DH[]A\A]A^Me1 ItH[Hc1MtI$H9|ATIUHHSH5HtAHLHHPCH+t H[]A\ÐHSHD$HR0HD$H[]A\H1[]A\DUHHSHHtFH}HH7HHt?HH+t HH[]HCHP0HH[]@1HH[]@H -H5(H8 HHH1Ht 0"H H@HHE3HtHH uH(uHQ0B0H3HfDH>d@SH-H;\#H3 H;H@-H[f.H(H !-HH5(dH%(HD$1HT$LD$(1tHt$H|$!HL$dH3 %(uH(AVIAULcATIUHSBHHHBxzH3HEJHMtqI$1HLLc(HkHC HIsMtNH+t[L]A\A]A^@HCHP0[L]A\A]A^fE1[]LA\A]A^ÐL%-HfDSHHtH~PHtOHHtcH;-t)H{PHCPHtH/t*HCP1H[fDH(u HPHR01H[HWHD$R0HD$HCP1119H{PHtHCPH/uHGP0fATUH-V_-SHN3Lc8HHL9t+H;uH}3HtHHHL9u1[]A\øf.UHSH~t9H-H9tHH=8HHH[]118D1ff.UHSHt9H2-H9tHH=3~6HHH[]11g6D1ff.HHxfH*YH@HƒfHH H*XDHH!-H5*H8xHc=.0H f1HfSHH5.%HdH%(HD$1HH"%t^H$HPH;_-u-HHQH$HL$dH3 %(u1H[Hy-HRH5$H81711HcHHc7HS!HHgHSHH0HH1ҹdH%(HD$1IH5;bH$tHL-H4$H81HT$dH3%(uH@H0HdH%(HD$ 1HD$H5P1LL$LD$Z1Yt!HT$Ht$H<$5H{-HHHL$dH3 %(HuH(wHCH,-HHAUATUSHHHHH50H.HHH1>HHte1HHE1uHIAAH+u HCHP0Hmu HEHP0MtI,$u ID$LP0HD[]A\A]fH+AuHCHP0HA[D]A\A]ff.HtSUHSHM.HHt6HHH+t H[]DHSD$ HR0D$ H[]øԃ@H-H8Ht -HHō-H5'H8f1Hff.@HHH5x!dH%(HD$1HT$T!t0|$~0H<-HHL$dH3 %(u*H1@H-H5&H81fSHt6!HHt2H1HPHHt[@HGP0[DH -10fHHH5 dH%(HD$1Hf tb$ff/s[Yc cf/s-H,H,-HHL$dH3 %(u:H\H,H?1@Hq-H5%H81fHU-SHH5%H8x)1H\0H5Ht H-H[1[ff.SH=%H-H=%HHCHHtH[H)-H[SH=g%:HC-H=O%HHC@HtH[Hٍ-H[SDH=%H-DH=$HoHtHC[HcxX, @1[@SH=$H-H=$HHKxHt&HSpHt-HshHt4H=1[DHSpH -HuHshH-HuH5-H=o1[jf.UH=,$H-SHdH%(HD$1H--H=#Hg1HT$HH5t5Ht0HCT$PXHf-HHL$dH3 %(uH[]1_ff.@UH=|#HSHdH%(HD$12H;-H=G#H1HT$HH5,H[D$tqD$~Hu FfHt;H[uD$Ht)HHL$dH3 %(Hu2H[]D$H-H51H8$f1gU5HH="SHRH[-5H=g"HHCHx HtHH[] @H1[]ff.@AWH="AVAUATIUSHH-H=!H_H5(0HCHxHHH-h-I9HH5U0H-H=~0YIH9H1HLgH=H3HLBuFLH50Hu0HEH(HIu IGLP0I.u IFLP01HH[]A\A]A^A_@I$LfDHى-H8t H50L9&IHtHi#IHtL)HuHLHH$jH $IH)ML$AH50L%L$HLHH$1H`H5ƣ0LD$ L $LD$II)I(MI/I.pIFLP0aH=%HH3HR@Ha-H531H8H$HAHP0L$I@LP0eIAL$LP0L$CfL$GL$LH~L0L$II(u I@LP0LLIHIIGLP0H-H5H8*DAUATUSL$HH $L9uH(dH%(H$1AH=p0H(HHHE`HWH5 HE1e@H5 HN)L$@HLHDŽ@$@/k/L$Hta/H\HCL$HL[/L.LHHx:ǃ@LDH5HteH5HvtRIHߺL?/HIEE1HHt&HH)IIHI) fDE1HLHHtZ1HHx9H+u HCHP0H$dH3%(u>H([]A\A]H=dfH=TfL#AVIAUIATIUSHH dH%(H$1HT$Ht$H|$.!HH\$ LHHL[&HHA]uIAwYHT$Ht$H|$\H$dH3%(ucH []A\A]A^fLHAvHH=tL H=(vAUIATIUHSHH(dH%(HD$1Ht$HT$H( LHHIHtLHHouKH+t5HT$Ht$H<$bHD$dH3%(uAH([]A\A]HCHP0@HSHtLHH(I,$aM8IG7AG AAA IW0MOH@LEIWH~?I111A,fDA.A qH D$JHD$@ fD$HLd$@Hl$  HcD@HL-tىI/uQIGLP0uCHt$H=h.fDHmI/L1IfH$HdH3%(HX[]A\A]A^A_DHmu HEHP0I/u IGLP01LHD$H/HD$/Lx LHHPIDHHT$ H=0HD$>HHtH@H\$HHD$HHu H|$HGP0Hm,fDHEHP0fID$LP0IGLP0HPHR0I,$jfHIHWHL$@Lt$0E1IDl$8M\$fHl$(!#HEHP0D1H^+LH5@~0I/Hu IGLP0Ht?H+HCH1P0xIA1HHt$IHl$(Lt$0Dl$8H\$HIo0HD$AguAgf.DD$D$(+D$AfDT$ff9蠿D$HL$T@Hqm0HD$sHYm0HD$ f.H=|E1@Ht$HdH34%(LHX[]A\A]A^A_fD$8MtADADl$LcL$AfzAgArsIUIHDMD$AD$,HD$ LN1I~H7IH|$<@|$(IÅt+LXMH+\$ L߾0HIIL9LLLHKL)K4,IHMA.MSL+III)L׾0LrIMAz.ut$<IL$HD$IZDD$,H [HHH@A1HcL AfLcAeH=E1f.HL$t:HtH>fHD$xdH3%(f(HĈ[]A\A]A^A_@Iʚ;wIʚ;wDӃDDD)E1ۃE# HtHMADAH)I)f.AvI9HOA<0HAu܍D D$LE1D$8HD$p\$8d |$8\$8%D)A<9 ))tHHD$p^D$p;D$D$j~CD$p11H @t HcYѺutD$pD\$E=T$tk%)~"sD$p48D$tpff.D$pT$( ufD$(GHWI׃0dP11 x@.LE1҃Et1E11f111B<+<-ABLZMك0fIA0tM9ADXLA AwHfGHF\@ED@A vL9A!HL)H  AAvAADEDEEHD&fD$(HBE1MPЃ HwHD@A vII)MMMU;D)D9AOAl$8ANAډ\$LE11E17f.XD@D9HIG BT E9}0HwG D@ED9HHAEdE9|DfH*D$pA wFLMHA YfH*XD$pADD$8A<)Z ƒtHcH D$pYD$p=4PD$p11H5}Dt HcYιutD$pHcցl$tPYD$pfH~D$pH ||HHD$pD$A(t$LD19D@HA<0 HHuۉ|$HE1D$1HH&D`@\$H1L|$PDt$,څIIÉT$D$ f}IHHxHcEHuH蓶H|$pT$HL$dHwH|$@IHa @D$0JIH H\$T$ IGD$dD4y T$ Dt$)ENZA9ىANA9ANƅ~A))A)Ƌt$JE~)ET$EuA|$tLD@IHE DL$HEv~&EEEuA}tLIHdE~&AuAtLDIH LLIHDPIcOP@D)}H4HxH 7It7fDH9HH9tYLLL|$PDt$,D;t$IcL$H53H@fD$(fW 0IcL$LLH5}3HMg A  AEI| HLHf D)DI9DLLmAU Hǃ0Huv >. \$9\$,Ht$hLT$ L9EYfIY,*Ѓ0AA\f/v HD$Ht$H=QtyHH\$xdH3%(HHĈ[]A\A]A^A_DHH H É%H\$(L$(=nHD$fH~'HHHt$H=H\fH|$pnT$t )L$p ANT$tE1AVAAE~EvAGAHL$@A|EA)B2 @) ƉfDJD$hH*fH~fH~H H H 7f.Ht$H=H\fD$HD$(D$AωL$4D$P D$DD$8L$ AL$ DD$8HH|$4D$@HcD$4HɲfLMLd$D$f(^,f*ȃ0EY\f.D$`D$`%HLI9`YfIf(^,f*ȍP0AQY\f.zu\$4w D$ D$lD$`t$@T$h6L$dD)|$(3EAlj|$XIHHD$8L$dID$|$(~E~D9AO)D$X)A)lj|$(t$PD$8L$@LWIHLHL$@HIcF H5c3HHHT$PL$@L$@HT$PHIHIֿIEHD$@Hu$HH tD$XAD$@Dt$XD)EOƉADžWAF;LL$PL$PHI/E11IcE Hb3H L,IMtIcGa Hb3H LT$pAVT$t )f.t$PLL$@HI L$@IHsL$@HIE |$uD$8D$@\A~DE~.AEuA}tLDL$P}L$PHID$HIcEA9FHIvHIT @H9HH:98t{L1Ҿ L$`l$4SIH(D|$8L$`E D$l D$`H]Hl$IH݋\$`L1Ҿ HIH LLFI0EAVu A~ D)9|Hl$AE1u AVt0LLL$ DT$=DT$LL$ HI~ PIcEAQ) H IvHIL H9Q HH9trfAQIIA0t\$4fDf.D\$`EDL$8Et$(΅~&ED$EuA|$tL`IH|$@Ld$HD$`Hl$(Ll$ Hl$PLLH\$@H\$HLL$8fHt$ LEnAǍh0IcD$A)u9HINHIT H9sHH:98tEAH|$ HHHu>HcPAv)u2H I~HHLH9sHHDD9tHcPqH=2]3H HH|$LD$@  E;D 2HD$(LxAoL9|$8 L1Ҿ *IH'1Ҿ LI9+IH` H1Ҿ HH\ L|$(uDIcFH\\31H L4If.t$4\H Yf(E1ɸ1LA@tHc׃EAY҃uEf(fLnrLn1;H9BIIQ<9tqf(øhf|$ H…D$`uY.H\$l$f/X\$4E1LMf.IcFcH [3H L4IHD$AHD$HoLgDf(øf.L6IH3@HA|D$DT$`E+L1ҾIHCHc@AV)…HINHITfDH9HH9t\$4LME1E1?M|fH9hPIIA9t\$4fDIcEHY3H L,IMMoMt$M9tIcGHqY3H LtN^uIHH{HH)HHHCHH H H)fDAfA WLCHHU M#Hu H}HLpT$`HKHu HH1H=~,.@AIDFDHHH9vH0AuL   Hu HKfDHw L$PLL$H?L$ZHLL$HU H$Kf.Hu L$PH}ZHCHE HfM]HkHD$XH}1IHoLC@HC8HE MeHu H}LLnHSHC@HE 1HJHu L$P$H}YHS$HU H[]A\A]A^A_@H,H57H8b^H[]A\A]A^A_fDLFuAE fA HSHu HHU 5@IWDFfDTfLNA HU AWAVAUATUSHLv Df(dH%(H$1D$ HD$0HD$8HD$@InHIEEEAn $Ag {f.!AEvArAgADHL$$D!oHHHYH$C +t t H{H4$HHIZMMtAD$ ‰ 0IL$0@IT$HHHDƒ8-AEH$ALAHL$(LD$L A1A-{(ntC1@ǃHl$0HNHD$ L\$PD1PLLSUD$4PLD$ LL$HL\$ T$@H A9UL$r IMI+M H9} H$HE1E1LjLLULP{H I,$u[ID$LP0N$Ar;yf.S2,D$ qD$HHl$0H|$0HuH$dH3%(Hĸ[]A\A]A^A_f.H,Hl$0H5H8ZfDHID$Hf8-AAfDD<$HLL$wL$@fDIL$0@IT$HHHD€8-A xf.#A%EfYDHHL$$DlHHHVD%HH$D{(nSH$LH,nHBJxDID$HfDID$H1fDIL$0@IT$HHHD-$o$HW$ff.AWAVAUATIUHSHXdH%(HD$H1L9uKHl,H9FHL'AHL$HdH3 %(DwHX[]A\A]A^A_fDHHLA<HL$As|$8sD$IT$D|$ED$=Lt$ H\$0ItL9|#H9~HuLHM|AADHH9I9MMUI)ك>^E1M9T$CL$AD$ @u<t<E9r|9wHu HEH)L9} M?Hu Dt$MMuxLHu HLHH] efE1MhME1RH1LLL$ $Q $ULL$9BZfDJ+H}LDHL $&RHu L $LHu HfH}I1LL $fHu L $D@H}DLL $QHu L $ M>t^tsIE1E1H:LHL $stXHu L $DMI?MIM)M*щfDIE1ɉID$HpbAHR,H5AH8UH1,H5AH8lUH,H5тAH8KUrSAWAVAUATIUSHHdH%(H$1L9uMHn,H9FHLAH$dH3%(H[]A\A]A^A_Hl$PHHLA>AdHt0|$xGۃSwHwHcH>DID$Hp oH|$pH5D$,HD$0HD$8HD$@zT$\cGH 4H XL4L$XM+ H|$`ƒXnD$hH,I9D$uxHLscfDLPJIHHHHI,$zIT$$LR0$dD1ɺ cNɸLLDpIHx@ ‰IO }@Iw0@IWHHHDƒ8- HD$A-HD$McL)HL$1|$xnt |$h׃Ld$0$L$HD$,L$LLPLUATjHD$(LL$0ML\$ T$LH 9SL$r HKH+K H9~ HsH1ML$XLLHPATD$hPLL$8H MtAI/u;IW$LR0$)H5fHY,H8QLd$0H|$0It$$$DLLd$0 :tAG O@@Iw0@IWHHHD€8-fhL$g$HI$H=GD9d$,DCd$,E1IE1$HD$Dd$,HD$HD$HD$1HHL$nL$q@fD@thIw0@IWHHHDf8-fDIGHlIGHeHH,H5Ld$0H8 PlIGHHNATIUHSH@dH%(HD$81L9HHHLA>E1Hty|$(Gw;Es t%uE1H$m $Gegv nL$D$tfo$fo$HDŽ$fo$HDŽ$)$)$)$HDŽ$I $0E4 $= LPf.f(zu$c $HL $Xf. $f(lD$EDEnugED$D$,DHHL$xDD$f(g_IHD$@H($DHL$|Df(;_IHD$HHLMJLIJLLIHD$ |HHLL{IHE ‰ nVHEH8-AŃHD$AF AA‰A- DIN0@IVHHHDƒ8-Ht$ALD$lLHAHD$H$AHT$ LHt$H$LD$pA-1$nt$׃H$HH$ZH$ML\$tH<H$D1HDŽ$H|$PASL$L\$@ARLT$@t$$PL$HL$8H D|$,LT$0IL\$8EH$pD1DŽ$+H|$0ASARt$$PL$LD$@HL$0H t$H$$6HcMDIL9HIϋT$tM)ǃ>!^M"E1틄$9BЉT$t9SrHs HCH)H9} HHs HCDcHD$ $MMD\$ILk Et)AaA?HD$ B(ILk DL$,Eu4HE1E1HjHt$jHL$8Ht$pH \HE1E1LjHt$jHL$0Ht$PeH AŃ%HC A'A]Ht$ L$HjHHC t D)HIL{ H|$@9H|$H9Hmu HEHP0I.u IFLP0H4$H$H<5E<4IFAHpJDf. x"f(fTfVf.XD1D$,D$ gEDHfD $D$] $T$HjHD$HHD$@H|$@A8H|$H8H$H$HEH8--fHLAH$dH3%(DH[]A\A]A^A_fDD1D$D$, gEDHf.HM0@HUHHHDf.HM0@HUHHHDFf.H$pD1E1H|$0ASARt$$PL$LD$@HL$0H IN0@IVHHHD€8-_@MH;LLAHs P@H;LLD$XD$8AHs LD$XD$8Ht$ DD$jHS HBHC EHD$ D)HC f.HT$ j|$f4BHHC Ht$ )fFT$t>KL^OE1E18@HHLD$ c7Hs LD$ /fM ME1@IN0@IVHHHDf8-HM0@HUHHHDf8-IFHMI?MIM)McRf.IFH(HD$ A(fFhHD$ B((Lk DHEHpIFH8LE1E1DAAH5rH,H8$DHD$HHD$@H5rH|$@4H|$H4Hmt H$AH$H5qHEHAP0H$H$AAT11USHnHdH%(H$1H!tH\$HD$HtHD$ HtHD$(HtHD$0HtHD$8HtHD$@HtHD$HHtHD$PH tHD$XHtHD$`HsHD$hHtHD$pHD$xtfHt3HƹH= t1^Ht8u,H$dH3%(H[]A\@L$dHL/*IHHuGL*H HwjHLLH5DH[]A\A]fH|/Ldt HvCHvH=[\G@H)ػ@fI1_fDA$/HLdCf.UHSHH>/uHHH[]7fD=Htڃ;.tHHH[]{/uH@SH=3HdH%(H$1HHWuD$%=H=t3/)H=v'1H$dH3 %(u|HĠ[fH ,H5\H=&3HOHDHH=3WuT$t|q%AWAVAUATUSL$HH $L9uHdH%(H$ 1H<,H$DEh \H=V\HD$0HD$&1H=>\IS1H=9\HHD$S1H=#\IHD$ R1H=\IHD$(RHD$HMMHH|$H|$1R/LHD$RHLH=Z32H$pH|$?=3/t H\$PH53Hw2HH=3DŽ$P@hAu3fDHHHHH5Atp$p/uκHH2@H=XDH|$/LQH h3H$pHD$fL$`@HHL`;H5ZLQH5YLDIH 11L$LEHD$HHD$8LH6+L L 0IHH!PHcA< A?#tHcHlPL@IHt HH; I/uIWHD$LR0HD$HhHT$8H5XH4MHKH5XH 4HT$81H5XMHH5XH HT$81H5XLHHƺL0LH9LmHt$0HJH=Ø3/:H=33OHtHt$H=3wH50XH=y3dH=m3H5\3Lt/LDŽ$`LH5XLL#H|$0:DŽH@3DŽL@4]NHHpH=W3.Ht$H=W33H5XH=W3D$D$0H$1Ht8H$H=~39#L|$HXfDHL)LxHHl:LMHTA?/HEHuL"LI"H=V3H"I|/HHHH9H<YHHH4$HHX0H5/H9 LHL=3' H5/H Hl$5MHE"I)HHIImIN4 LB:HL}/ItLHH5T/HMuHHH5=/HH5U3H~|$H3H=3pH=ٕ3dΕ3|$0kH=U3?H=U33H=|U3'qU3H|$9H|$ 9H|$(9H|$9H<$9H$ dH3%(HĘ []A\A]A^A_HD$HhIH$pH3 fDMw:LOKIHIŸLHM)IILGL+Ht3LHBHHNu$wIMffD3HH53!HH=35Ht$0H=S3*+&DH=1S12=H4$H!f.LH*LHHHMB$"fHH=v3L5o3*H5TLV3AHLVMu$%=HH=!3L-3H\$H\$%fLCEELHLIH5wRLtH\$H=35H53L)LDŽ$`LH5RLWLD$DŽH@3DŽL@4HH=R3L)L=R3H5R3LHLL$%=H5QL$D$DŽ$`fDH5/H=L3-ZH5/H=͌3-LI:L2H5LLH5KL6IH2A@H,:H=KHHI^ff.SHH= 3Ht0H 3Ht_H= 3H#H3K3H< H^ 3HtHH[=%D[fDH5 3HtHH 3HH= 3tH[3f.HwH@3Hff.H= 3tHJ3f.H7HJ3Hff.H= 3tH 3f.HH 3Hf.AVAUAATIH=KUSV,HH5KHHHH!L'LH\IHyDHH=x1)IH1HHCIHH+}Hmt^I,$t?Imt(MI1HPIHtn[]A\A]A^IELP0@ID$LP0Imu@HEHP0I,$uDHCHP0HmufIFLP0[]A\A]A^7HϤ,+H=KH.FH+uHCHP0f(H,H=&KHE|HX,)H=GKHERH+u HCHP0HmuHEHP0H,9H='KHgEH+u HCHP0Hmu HEHP0I,$&ID$LP0CUH=SH)HtYHH5HH+Ht^HtL1HO*HmHu HEHP0HtH+tHH[]fH=J1=H[] fHCHP0HuHCHH@0H[]DAWAVAUATL%VUSHHdH%(H$1H},='3D$<HH53HD$H,fmt ctEMLHމuH$,E1E1E1L=V=;LD$ HUHމcm?9XIcL>fDH,AD$ fDH,@H,qHq,Hǜ,WH,AH,1Hɝ,H8 @H,H8E@AH,H,H),H,H7,H,DHQ,fAwH,H H2HAH(1HWBH&H=KHAH$dH3 %(D+ H[]A\A]A^A_fH9,H$E1ELE3H ,H ͛, IA xL%,L-*,EEEu+u/H=EHt 8tAEH,H$L HD$L-5,E1H+,1H8yIA<$D$ H,0H;p0H,H˙,RLL H|$:D$ .1HD$(HLD$(L%,HHD1I<$@H),*IcUH4)>Ho,H>,H8$H@,Hk,.W{9AfDH,H89HHH$IHHb,LH0H$H$AD ADEH,H E1HOEH(1Hz?H H=E>HkH=G>HQH=I>:H1H&L?:H1LBHM>HH=NY>@L-,E1IcE9`L4H54LLDt$@f.H=BIH8HHxHD$H-Lt$LL-b7LY1/H(H5rhHD$ .H5@BL7Hu:bfDHxI.u IFLP01H5B6H-LHIHu.HD$(hELD$(L%,HHA1I<$r=H,u%I<$H RNH1G=AEMtH 1HcAEH H<$H }1HcAEH4H)H,5LL MHLAHHHH+Hu HCHP0HH6Ht$1&,SHcH4HU,1 H8,H, 1H8,!H|$IMu D$ ML[LHHHH<HL%l,L9hH(u HPHR0H=ͦH1HHHE1H=KE1cA*H=Ht8t H[,H,H=]\Hto8tjL%,HT,A$\H=)HtJ8tEH,HEHP0jH=r>$H,H,(AE|Lt$ Lr)LjH|$`H<,H8D$ M H̏,H5<H8mHmHEHP0H=G<HH8H5ZHHHOHL$<1HH5HrH|$HL$<1H54E1AHmu HEHP0I,$u ID$LP0H5=9L#HH+D$ HHT$@uD$X%=@R+L*LH_IHHI,$Hu ID$LP0HtiH1HHL$<H3H+HCHP0fH<. uH ] 3HHL$<H5:Z3H=F!}1L(Q4IH9MHGAQH APHד,H815AZLA[ApH,H MHGAH815H:H=9D H1H,HDeH8I2d/ A8L9AHFVH PH,H815_AX@n3Hm3HfHE,/HfDH%,/HfDHVH~#H;~t%1fH9|tHH9u1DfHF@uH,HSHHHHt HЅtHCHHtHS,H[DH,H[ff.AV1AUATIUSZHI|$I~_1L5DIlHE@t4HHHt H҅tHEHHtLLHЅuHI9\$[L]A\A]A^Imu IELP0E1[]LA\A]A^HHHHHfAW1L=/AVL5XAUIATUSHfIHt\IL9ul@HL9t`HkI9tI9tHC LLHtHL8yI,$u ID$LP0E1HL[]A\A]A^A_DI H/L9vfAU1ATUH-N/SLm`HIHtZH]H9t$HsI9t L u#HH9uH I9uHL[]A\A]@I,$u ID$LP0HE1[L]A\A]ff.fAV1AUATUSHPfo&3o 63dH%(HD$H1H3fo/3)$HD$H3L$HD$(H3)T$0HD$@HHIL-qDLsHHsHMLCH cDH501H=]DHXZHtjHL HEuCHHEu HEHP0HI9uHT$HdH3%(Lu>HP[]A\A]A^fDHHEu HEHP0I,$u ID$LP0E1 //H=C15i/,ff. /l/H=C15=/ff.5ֲ3H=I1H=3fHS11H5/HD$qD$HHtcHxH5,H9t;D$,D$u&H+uHCD$HP0D$H[@H`fD D$AWAVAUATUSH|$0Ht$ HT$(L$4dH%(H$1ӱ3 fH-/T$8D$0x HcHDT$0 ڽ//|$0t /HcD$0HHHD$HsLL H-z/HL $HU HHHHH9tLAILBHPHQL H@HH H9u҃|$0L<$lHD$HLdM9LfDHPHpH 6H HPHL9uH3 ID$ I|$1HM$$M9uHD$H\$@H\$HHH\$@LtM9^L-5 DIV MfLHLHIFLIH5,I9v IM9t>IFHHuINIHHHJHL$HINLt$HL1IIFIM9uHD$HLtL9<$Y |$0M9t$H4$HFL0IFHD$HHDHFH0HD$HHHD$@L}L}Hl$`Hl$hHl$`H9 @HP HHxt.HPH HQHT$hHPHD$hHHPH(HHPHH9uLl$`I9t,L%h IE I}HLMmI9uLl$@I9E1L%5?fMmI9t3I3tIE IMLH='?HP1MmI9uHD$@L$Lt$L$L$H9uLI9tHP L0HL|H~M/MtLI}tIEHHtIEIMIUIEHHHH$IEH$HMeM/MuLI9uD$L$M9t_Mw0Mo11LL-HDH(u HPHR0Iou IG LP0H$L9IǃD$M9uLc|$L|$Ll$@L$L$~IEIUHHPH$IEL$L(IEMeuFIU t9HHt-HMuIEIELImuIE LP0fDLl$@I9zH$L9HT$HHHPH$HD$HHLl$@I9L@HPHpH 6H HPHH9uL%IE I}1LMmI9uLd$@I9&ID$LHHtHJHCHH9u3MIT$ HHID$LIl$u ID$ LP0HT$@3L9iII9tdMl$ tH=3L9HBHHBHH9uH4$HFL ID$HD$HHFH073HT$HHT$@Ll$`I9_1L%~; @MmI9t4HtIE IMLH=|;HP1Mmت3I9uHt$L$3RH=3Ll$`I9tcf.Iu3 uIE HxtH=39x8MmI9uHD$`H9tH4$HVHHPHD$hHFH0Hl$hHl$`|$0jM Ht-D$4\H=53HX/H=<HD$ HtH|$H8HD$(HtHHD$Ht$H@Hw3HHHpHXLH$dH3%(HĨ[]A\A]A^A_IIWH<$HHPHGIGLL8I?L$L8/LHD$HD$IfDH\$@MH\$HH\$@HL94$m|$0afDH9/H 2/1H9tHHH9uHͨ3fDL<HD$H/H$HcL<$HHD=H${HD$D$H HLH=r:1D$\$8fɺf.E„t#f.E„t\H=8}1H=oH=3Ll$`-1uH3HTH=:C@H=9H-г/1ILe`H=9HIE1L9t@HHL9uH1I M9uH=61D$8wIL$I$HHJH $HQIT$LaL"IT$I $HIT$Ld$@WDHcD$0HD$HHH$BfD N9 d-o`;dfDH=(71D$:L;4$L-, DMM9t M&M9n uI~M[M9ufDHD$1H&3HHTHD$@L9tHHL9uH 3tIIL$HD$Ld$1H=e6hHH3HD$@H310I2H3HtHxu@AVIL 5AUH5)6I1ATH=5USHQH 50IXZMH#31L5[Hx@HHtHsKHtHsHvH^HHuH1[]DHGP0HGP0Z@HGP0/@HGP0ff.ATIUHS}HthH5y3LHt\tGHP/H9EtHL[H]A\LHeHtH[]A\[1]A\fHH[]A\@SH(HtHDH H{HtH/tHCH[H@@HGP0ff.@ATIUHSHHHt HՅu-H{ Ht LՅuH{01Ht[LH]A\@[]A\ff.USHHHoH}~H;-qb,t} u)H+t H[]@HCHH@0H[]DH}wE H+uff.SH=ط/HHtC HCHCHt H[@H+tH=3H51HCHP0ff.USHHHHtHǀHǀH/t>QHHtE1HHtJHHHHH[]HGP0 HHu1HH[]HmuHEH1P0ff.S10HHt&H@(H@H@ ~HCHtH[H+u HCHP0H=A3H51KfS t%HHHR`,C H[H=3H5k1[fSHH5`HdH%(HD$1HH$tIH<$xJH<$HtltOHHL$dH3 %(uoH[f1@H],H5zH8R1fDH=)3H551뢐H\,H$H5H81t1[ff.H#Ht HHH=3H5y1HfDSHH{ tH9CtH],H[fH_,H[USHH_ Ht=HoHG HGHHHHH=[1]fDHy[,H5H8H1[]ÐAUATUHHH5S1H(dH%(HD$1HL$HT$t/H}1tAHD$HEHD$HE H],HHHH\$dH3%(uIH([]A\A]H}ILA蟿EuH=;3H5$GAUIATIUSHHHt_H53LHt t>HHLLH[]A\A]HCLH5MHPH_,H81 H[]A\A]UHSH51H0dH%(HD$ 1HD$HD$P1LL$LD$ZYH<$%HD$H@/HD$HtH@ 4(:HH*H=MHVZ,*H=H(ҼH$H}HCHD$H;HCHD$HC,HC HtkH$HHD$HHD$HtHOHH=eHH.HHT$dH3%(HH([]DHоHfDHX,H5H8 HX,H5 H8HX,H5bH8jDH=3H5H<$H/uHGP0H|$H/uHGP0H|$Ht H/uHGP0H{ H1fDSHsHS HtJH9CuDHHS tHSZ,H[DHCH{wH0Z,Hf.H9W,H5RH81[fDUH=4/SHZRH={/F>H=/2*H=ӭ/H=:/uHH|HHH5HHH5OHH`V,HHHH3:H#/Hܮ/HH57Hʮ/Hs/H/HH5H/ xLHu/H5eHHc/x*H=HX3HD3Ht1HH[]@ATIUS`(HD HqW,H8虼1H=p;1+1[]A\ff.AUIATUSHHHHHIfHEH?wELLTHHt|H4H+Hu HCHP0HuFHu H*U,HH5H81I,$tH[]A\A]DID$LP0H[]A\A]1H@뽽UHH=3SHkHHc}HHc}HCHc}HC HC(Hc}HC0}SHC8Hc}vHC@H}iHCHPHu HH[]ÐH+u HCHP01HH[]@ATHH5USH@dH%(H$81HL$HWH|$1HT$Ht$HT$HD$HT$ HD$(HxgHxbH\$0H<$HucH$HHT$ HILu^蹴8 udHU,HH)S,H5"H8j1H$8dH3%(u6H@[]A\fH(fDHiT,H8葹jf.UHH5SHdH%(H$1HT$ tHH\$H|$Hu2HHt$HMHu/Hc|$e1H$dH3 %(u#HĨ[]Ð苳HS,H8ʸAT1US%HIĻ fHHAtSH|$ uHHHtQHLHEt)HHEuHEHHP0HAuL[]A\HHEu HEHP0I,$t E1[]LA\fID$LE1P0L[]A\f.HHN,H81HfSHH5(1H dH%(HD$1HL$HT$ \OH93|$ G?HD$H;}3H;}3tH|$ H5HHcD$ HHHz}3HHT$HXHHPHt+HL$dH3 %(HH [fD1@HR,HzfDHO,H5H8*HO,H5H8 zDHO,H5H8ZDHQ,1H8??DUHSH}H|ffHH*MH*E^XHt?ffHCH*MH*E^X~HtHC HH[]H+u HCHP01HH[]ff.HHH5dH%(HD$1HT$1t|$HL$dH3 %(uHfSHdH%(HD$1HcHHHZ{3H7/t;@|$H\$f.{Hc0uS= /H`tۋz3u1H=Xz3IHD$dH3%(uH[H=$=ff.fATAUSHË(V;~3t+[]A\D+[]A\ÐSHH51HdH%(H$1HT$ tC蒶H9C~3uYt$ tHT$u]t$ Hc=/5/HH$dH3 %(HuFHİ[DHL,H5"H8HL,H5H8HHH5dH%(HD$1HT$tPHcD$P?wKHHHy3HH@HtHHL$dH3 %(u:HHyN,1@HK,H5 H8"1ifATHH5+USH dH%(H$1HT$ tNH\$H|$Hu8H$HHILۯt6H~@1H$dH3 %(u$H []A\HL,H8蚾f.HdH%(H$1HJuft$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xt$xHH$dH3%(uHĘfHK,H8f.HHH5dH%(HD$1HL$Ht=<$G?w:t$IxMHnL,HHt$dH34%(uEHD1@HI,H5 H81fDH1K,H8Y10UHH5S1HHdH%(HD$81HT$ t Hl$|$ Hku'HHHL$8dH3 %(HuHH[]fH=u3ԯ譼ff.fUHH5 S1HdH%(HD$x1HL$ HT$HD$(LD$(:T$ Hl$Pf(T$T$ MH,f(HD$@WYT$(T$H,f(HD$HT$ zMH,f(HD$0Y|$HHt$0H,HD$8\u(HHHH\$xdH3%(uHĈ[]H=t3蔮mff.f/H=/DAUATUSH Hx3aH=/x3H HË(t3Hr3H5 HHwr3Hs31HHt3HHH5 H脥xpHs3HtZHH5 HXxDAIHt2HH5l H0xI,$tU1H5U H褦tPHH[]A\A]fH5 /H=q3mH1H[]A\A]DID$LP0H5 H,1H=fH0诿Hj3HtHH5OH衛HH+HCH1P0hHi3H="j3HH/uHGP0Hi3H5+Hi3:Hi3_ff.i3u 1AWAVAUATUSHH9m3t1H[]A\A]A^A_>i3IHAH-@i3L-AAAtIcHHtLDL1IHt8H{1HI/Hu IGLP0HtH+uHCHP0됸,W@SHH5H dH%(H$1HL$HT$H\$H|$Hn|$HH$Å$$$$$$$$$$$$$$$$vH"ۛH;,H8f.1H$dH3%(u H [ͭff.fSHH5fH dH%(HD$1HL$ HT$nt@t$ H|$lÅuu#HF<,H+HB;,H8j1H\$dH3%(uH [-ff.fSHHqu H;,H[1[ff.fHH=\HtH(t H@HPHHR0HATH5e3L%e3US[He3FfDH;1;,tH;e3tH;e3t 1$@H+u HCHP0At3HcHLHXH@tHuHuAuH=&e3HtH/He3thH=e3HtH/He3t;H=d3HtH/Hd3t[]A\fHG[]A\H@0fHGP0HGP0d3u 1HH9h3t1Hd3H@HRd3t6Dd3H Xd3HcƒHHAuC.9脠H5h3آ"h3HfHSH9h3HÐATUSHl3Ht H-"9,HXhLH9+tHL9uH[]A\HmtHSHH@HUHD$HR0HSHD$HHAUATIUHSHdH%(HD$1HHt$HH޾HŋD$usHHx H9H7,H5nH8H1HPHHu HCHP0HL$dH3 %(H[]A\A]xHI~Ht)H-R7,H}ItH}H5蕪DAt'DL9uH+u HCHP0A,$iH-6,HEH51HPH5,H811fۿH[ff.AUATIUHSHdH%(HD$1gHHt$HHNHŋD$usHHx H9H26,H5H8胩H1HPHHu HCHP0HL$dH3 %(H[]A\A]xH&IHt)H-5,H}蹮tH}H5DAt'DL9uH+u HCHP0A,$iH-i5,HEH51HPHx3,H811fKH˦ff.AUIATIUHSHdH%(HD$1HHHt$H迻H+HtVD$`HWHA,$HL$dH3 %(H[]A\A]HCHP0D$~HW4,H5mH8訧1@HELH5HHHW2,H811fH 4,H5:H8Z1\螥ff.SH 0HHHHHdH%(HD$1I1tHhHt H$HHPHL$dH3 %(uH[ff.HHHndH%(HD$1HH51tH$H H@0 ?Ht$dH34%(uH襤DHHH dH%(HD$1HH5+1t'H$HH HHǁ Ht$dH34%(uH&fDHHH5dH%(HD$1HT$$t0|$'x#Hc蛳HL$dH3 %(uHfD1跣HHH5pdH%(HD$1HT$D$1t1D$@$HL$dH3 %(uHJf.HHH5 dH%(HD$1HT$D$<1tD$1<@謲HL$dH3 %(uHҢfHHH5dH%(HD$1HT$D$̿1t1|$@DHL$dH3 %(uHjf.HHH5GdH%(HD$1HT$D$\1t1|$@ѱHL$dH3 %(uHHHH5dH%(HD$1HT$D$1t|$HcbHL$dH3 %(uH舡ATUSHH dH%(HD$1H,,H8rHT$ H5RH߉D$ 1h|$ 1HT$TۨugH=^3Dd$l$ HHtxAoHCcHC JHu=HL$dH3 %(HuFH []A\fH.,H8H@H+uHCHP01wATIUSH~HH,DH;H蜒H9u[L]A\鋒ff.AVAUATUSHH dH%(HD$1HH;=.,HHF@IH;Ht$H莝I,$A0E;Ld$M6Ml$ Mt$LWL9LCHH@H MLDHYH+,H5H81aH|$H/"E1=DDfEtWHFAHF HF0H{8F(fDHL$dH3 %(DH []A\A]A^@LFHH+@H >MLDHH,+,H5H81fID$LP0EHD$޵H#LCHH?H ˋMLDHOH*,H5RH818HGE1P0H HH~@HtHF@H/uHGP0ALc@AHCLk HC0Hk8C(fDHEHHt+H8t%HIHD$Hf.HD$袬CHt$ HMHsAąqD$ HCHC HC0Hk8C(H H>H Hݜff.fHHH5dH%(HD$1HT$D$̹1tt$H=R<HL$dH3 %(uHifHHH5dH%(HD$1HT$D$\1tt$H=;HL$dH3 %(uHHHH5dH%(HD$1HT$D$1tt$H=r;#HL$dH3 %(uH艛fSH賳H۲[HH6H?顫AUHHVH5ATUS1H(dH%(H$1HL$ ?tCֈLl$|$ LI'HHu?A$H),HH$dH3%(HH([]A\A]H=v8HpIHtX|$ HH蹻LHu͍LH貌HpL贍HH1(,H8Yl@苔H[ff.SH^HH(,H[fHH%,HH5!dH%(HD$1H߶1҅t-H$Hx t8H<$H/t^Hw',H8蟌HHt$dH34%(HuhH@H4$H=X3PuDH<$H/t"H(,HDHGP0HGP0H',H@Sff.SHH5GH H$,dH%(HD$1HL$LL$IH|$rH|$HeHH=H1aHHHx ̧uPHt$H=W3HH+H|$H/H|$H/txH',HMH&,H8)H|$H/uHGP0H|$H/uHGP0HtH+u HCHP01HL$dH3 %(H [@HGP0H&,H@HGP0H|$H/ZHCHP0H|$H/4D軑MfD蛦H|$H/ 5DHHH5dH%(HD$1HHL$11tJ$D$HHH HH!ʁH H HHH H!H Ht$dH34%(uH蕖DSHH[HATUSHdH%(HD$1H,H߾IL"t8&tDH $,H85T$4$H=1{HL$dH3 %(u_H[]A\fHHПH趆u<$11vx|$11ey<$y|$p1臕UHH5SHdH%(HD$1HHL$1҅t?$$H;\$}߃9\$HH#,HHHt$dH34%(HuH[]ff.HHH5ddH%(HD$1HT$1t|$資Hc[HL$dH3 %(uH联AWIHAVIAUAATIUSHLHüHHHH5V3HOHH3HHH$H$HHB06HHIcI\AuAHcMcIDKLHmtH*u9HBHH@0H[]A\A]A^A_HH+t!HtHmt+H[]A\A]A^A_fDHCHP0HtHmu11HEHT$HH $P0HT$H $HtH*uHBH $HP0H $HtH)uHAHH@0H[]A\A]A^A_1H+uHCHT$HH $P0H $HT$HmujMx{fI*Y fHT$I*H $XoH $HT$HHHmHEHH@0@1fLAfHL H*XoUHH  0HSHH8dH%(HD$(1HD$PHD$(P1LL$LD$ZYt"H|$ H;= ,tyHD$"Ht1H\$(dH3%(uH8[]@kHL$HT$Hŋ|$ t$HHVHx1HH=1fD#HL$1HH,H8AqUHLH5SH(dH%(HD$1HL$HLL$twHct$xv1oHD$Ht]落<$HcT$HHD$HL$Hp 貹HHwHxbHcD$H9uHHD$H\$dH3%(ufH([]@1@~H.,H8V@H|$H멐H|$H/uHGP0H,H8UHH5SH(dH%(HD$1HL$ HT$tyHct$ xx1YHD$Ht_z|$HcT$ HHD$Hp HHeHxpHcD$ H9uNHD$H\$dH3%(uwH([]f.1@}H,H8>@H|$H~fH|$H/uHGP0H,H8yՎDUHH5SH(dH%(HD$1HL$HT$LD$ ȫtLH|$ʦHHu5X|$T$ HHHHJHx-H͚1H\$dH3%(uH([]H,H89fUHH 0HSHH0dH%(HD$ 1HD$D$P1LL$ LD$^_L$tY茺|$ t$H H~D$tbH[,HHL$dH3 %(H([]@3|$ t$H辆H$~x0T$tr|$11ӄy|$1fz8&AH,H8gfD1Žff.HHH5dH%(HD$1HT$ĩt0|$藰D$tHcHL$dH3 %(u HÐ1WHHH5dH%(HD$1HT$T1t |$HL$dH3 %(uHfAUAATAUSHHH=mI3H߀HHdffH*CY}H* XoffH*CYYHEH*KXFH{ HE ٗH{(HE(̗H{0HE0迗H{8HE8貗H{@HE@襗H{HHEH蘗H{PHEP苗H{XHEX~H{`HE`qH{hHEhdH{pHEpWH{xHExJHH7HH$HH/IcHHD[H]1A\H=bA]fDHmu HEHP0H1[]A\A]fH=%责HHtHH50ݵHmHHG3t H?벐HEHP0H=G3H"@H,H8|UHH5SHdH%(H$1HT$HL$D$ 迦1t>bH\$T$|$Ht$ HHuHD$Izt$ |$HYH$dH3%(u Hĸ[]'ATHH5USHdH%(H$1HT$D$ 1t6赵H\$t$H|$ HILyt$ HډH$dH3 %(u Hİ[]A\耈AWAVAUATUSL$HH $L9uH(dH%(H$1HIr?L跖I=IHl$Dh1Hl$QH@HLlIHIu IGLP0HCHL9tQHHLIHu1H$dH3%(H([]A\A]A^A_HD$HD$fDHt$IcsH$,HfDH,H5DH8҈I/uIGLP0rDHI`fHi,H5RH8芈1:H),H5H8j1H,H8y蚆f.ATUSStD HrHHtHBD#[HH]A\@H9,H8t[yD#H[]A\H5ԇD#H[]A\fHSHHcwH3HHcWH~HHc7SE111HdH%(HD$1Ht$H$D$4uX<$11$}xW|$11}xFT$4$H=1躹HHL$dH3 %(HuNH[fDH,H8)x<$u|$1ۃtэÍ|$1ۃtфAWHH5AVAUAATA@USHdH%(HD$1HT$辡u DEIcH_?HHHH|$HH辺AƅHKr8=AuHp,H5E1H8辅HL$dH3 %(LH[]A\A]A^A_HIu IGLP0HݢI,$uID$LP0E1 ~IfD1)pIHHHRAŅuufAIcHHH9sHHHDLsƏAIHaHL蛱I8HIu IGLP0AEuH H,H8vIԂ@UfHLSHH /1HHĀdH%(HD$p1HD$D$HD$D$)D$()D$8)D$H)D$XHD$hPH3PHD$(PHPHD$0P1LL$PqH0tit$ HHD$HD$tnL$HT$@1LD$蹦HrxnH,HH|$`HtHD$`H/uHGP0HL$hdH3 %(HuDHx[]fDT$Ht$@1HL$+HqryHf,H8tHd@SfHH /HLH1H`dH%(HD$X1HzLL$D$HD$HD$ D$$AAAA(AA8PH<<P1$ZYtNn|$8t$ Ht{讒H|tvH,H8twHt$H%HfH|$PHtHD$PH/tHL$XdH3 %(HuEH`[fDHGP0H|$0nzHtH谌HCs1f.UfHH /SHL1HMHhdH%(HD$X1H7LL$D$HD$HD$D$$AAAA(AA8PHP1ӢZYtTh|$8Ht$HŃt_HXpxdH=,HH|$PHtHD$PH/uHGP0HL$XdH3 %(Hu?Hh[]H|$0~HoyH ,Ht$HH8|H~fUfHLSHH /1H+HpdH%(HD$`1HD$D$D$)D$)D$()D$8)D$HHD$XPH/PHD$ P1LL$0蘡H tX+|$ HŃtgT$Ht$0AiHoxgH ,HH|$PHtHD$PH/uHGP0HL$XdH3 %(Hu=Hh[]fDH|$0t$HnyH ,H8pH}UfHL]SHH "/1HHhdH%(HD$X1HLL$D$HD$HD$ D$D$ AAAA(AA8PHS.PHD$PHD$P1OH L$֩|$ HŃL$T$1Ht$0袕HmH ,1otHcHH|$PHtHD$PH/uHGP0HL$XdH3 %(HuWHh[]fH|$0T$1t$H2mzH" ,Ht$H1H8賚념1v |ff.fAWAVAUIATUSH8dH%(HD$(1HHxHH9uHI虵HD$H[IHT$ 11HT$HIEHLH@hPIHtHt$H*yu6I/@I.H|$HHD$f.HT$HcHHD$HD$ L`ILHL$HHH|$ 迩HL$LHH9H|$ H/uHGP0I/u IGLP0IHcH9HT$HHT$(dH3%(HD$uFH8[]A\A]A^A_tI/ IGLP0ftHD$;zff.AWHH5AVAUATUSH8dH%(HD$(1HL$ HT$%*H|$ 裦IH@=IHHA@LtIHtIW|L近I/Hu IGLP0HHHcH9HHL9sHLHHI qtIHuImu IELP0|$LLYXLH ,HI4sImu IELP0E1Ht$(dH34%(L3H8[]A\A]A^A_f.MD@MHcHH9~HHT$ԚHT$HIH?1HHH HHL$~LLLCLM(HL$IH,H5H81I/u IGLP0L>HuH",H5_H8cyH,H5[H8KyH,H8jL蒖qqwSHH5.HdH%(HD$1Hu}<$Ht$}uDH=93@lHHtXHc|$莃Ht9HCHL$dH3 %(Hu6H[@H,H8iH@H+u HCHP01vAWfHH /AVHL`HgAUATUSHdH%(H$1HELL$`D$hHD$`HD$@D$tAAAA(AA8PHD$@P1iZYH|$8HGH萄H|$@HD$H1eH|$8Ht$HHD$(HHl$@HOH$HHxHH9HrHHH^nIHH IHID$\IFKH<$HD$P1Ld$HD$HD$XHD$ Lt$Ht$ LrtH|$P蹣H|$XI謣IHD$XHpHD$PHpHIH蒮IHHL1MHLLm}H|$PN|H/uHGP0H|$XH/uHGP0L9,$LH|$H%H|$HIIMtHtHt$Lq Ld$Lt$HI,$u ID$LP0I.u IFLP0Ht"H, HH}fHEH9uHfH|$(Ht$H4H$HuZ1H$dH3 %(Hĸ[]A\A]A^A_DH+H5rH8tH$HtHDŽ$H/uHGP0fH+H5ZH8t[mCfDHi+H5ZHH81@Ld$Lt$mH|$PH/uHGP0H|$XHHHHHHGP0zLd$Lt$H|$PH$Ld$Lt$L,I.u IFLP0I,$u ID$LP0$IExWHt$(HʃH,H$L$H8菐Hu 9@II<$4dID$L9uDHt$(H$H{I,$ID$LP0IH3qf.UHH5[SH(H=+dH%(HD$1HLD$xH<$H|$HHGHtnHD$HH|$Ht$HHHHHt$HhH<$H/uHGP0H+H8cH5H)+H5JH8JrH<$H/uHGP0f1HT$dH3%(Hu3H([]@H<$H/uHGP0DH5H+3pHHH5dH%(HD$1HT$4u1HL$dH3 %(uHË|$`off.AUIATIU1SHH5G23£Ht>HxHaI$Ht7H{ ·IEHt4H+u HCHP0H[]A\A]fˆHu@軆1H@UfHH ]/SHL1HHhdH%(HD$X1HLL$D$HD$HD$ D$ AAAA(AA8PHP1ZYtV蘛|$ HŃtdHt$01`H_ubHk+HH|$PHtHD$PH/uHGP0HL$XdH3 %(Hu=Hh[]DH|$0N\H$_tH+Ht$HH8謌HnfATUSHdH%(H$1HƚHIqL^H=.3bHHH艘Ht|HCH}AwHtjHC HbHtUHC(HMHt@HC0H8Ht+HC8H$dH3%(HuGHĐ[]A\DH+t"1fDH+H8)`H@HCH1P0lff.fUHH5SHH+dH%(HD$1H݉1t9H<$lHtHHmHHcn]H<$H/t$HxHt$dH34%(uH[]DHGP0BlfUfH VHSHLHdH%(H$1H)D$ LL$HD$HHT$`HHL$HL$hH /D$D$)D$x)$)$HDŽ$HD$pHD$A)A A)A0IA@PHPHD$$P1RHAP褎H08H|$0H|$xH+H5"1H8lH|$PHtHD$PH/H$HtHDŽ$H/HH$dH3%(Hĸ[]@H|$(tH$i脗t$HŃtXH$H|$0VHl[uhHQ+H@HGP0l@HGP09@H$H|$0Nmf.11fH+H$Ht$HH8HiUfHH /SHL1HHhdH%(HD$X1HLL$D$HD$HD$ D$ AAAA(AA8PHP1裌ZYtY8|$ HŃtlHt$0[H#ZugH+HH|$PHtHD$PH/uHGP0HL$XdH3 %(HuBHh[]f.H|$0fHYtH+Ht$HH8DHhf.ATUSHH $HpfH /1LDdH%(H$h1LL$D$HHD$ HHvHD$HD$ AAAA(AA8PHJP1RZY|$ H\$`IăHt$0HxLHXHHD$HHHH@[HH|$PHtHD$PH/uHGP0H$hdH3 %(HucHp[]A\fH|$0H^LH3XHrH#+Ht$HH8超HzfD^HggfDUfHLSHH B/1H$HhdH%(HD$X1HD$LL$D$HD$HD$HD$AAAA(AA8PHPHD$ P1豉H tXD|$ HŃthT$Ht$0xH0WxhH+HH|$PHtHD$PH/uHGP0HL$XdH3 %(HuCHh[]H|$0t$WHVyH+Ht$HH8PHefDUfHHSLiHdH%(H$1HD$LL$D$HT$`HD$D$D$p$$$HD$HD$hHD$AAAA(AA8PHD$PH4PHL$$QH /P1RHDAP$H@HH|$0H|$xH)+H5Һ1H8XfH|$PHtHD$PH/H$HtHDŽ$H/HH$dH3%(Hĸ[]@H|$(tH$i|$T$HDD$ H$HD$0tREDEHHTu`H+H(HGP0\@HGP0)@uEtHH˖1!fHi+H$Ht$HH8dHWcAVAAUATE1U1SI#fDHH%kHuPPI܃8"uHLH聠HHuLSL9~H+[]A\H8A]A^UfLSEu#H蛍HH~[H]A\A]A^@HXaHH=ZH"f1DUfHHSH5HhL*+dH%(HD$X1HHL$D$HD$HD$ AA(A8P15+LL$ ZYH|$0T$ t$HHRxFH|$PHtHD$PH/uHGP0Hw+HH\$XdH3%(uGHh[]@Ha+Ht$HH8H|$PHtHD$PH/u HGP0@17aUfHLSHH /1HHXdH%(HD$H1IHeD$H$1AAAA(AA8D$tO蛍|$(HŃt_:HQudHu+HH|$@HtHD$@H/uHGP0HL$HdH3 %(Hu?HX[]H|$ 6`H,QtH!+Ht$8H8~H`f.AWIAVIֺAUIH ATUHSHRpHIIIDH}?lHHt_HuHLJt;H+u HCHP0HI9uHLLL[]A\A]A^A_鎌fDH+u HCHP0I,$u ID$LP0H[]A\A]A^A_fHH+HH5cH81!HAWfHLAVHH @/HYAUATUSHRHhdH%(HD$X1LL$D$HD$H\$D$,AAAA(D$@HD$AA8P1豁^_WL$8~ T$ H\$0HŽL5pAHHDL HHO|$8LHIŅD$ H߅TILNMK8"H+Ht$H1H8I|H|$PHtHD$PH/uHGP0fHOHL$XdH3 %(HJHh[]A\A]A^A_fZIeNIUHH|$PHtHD$PH/uHGP01fHIDOM&MH+Ht$HH8d{f+Wf1FHHtlNl%L9IHIM9A<$uLH)OIHt3HHvlI.Au IFLP0EuIL1H+uHCH1P0n"\fUfHHSHLһH ;/HdH%(H$1LL$D$HT$`D$ HH\$D$p$$$H\$hD$,HD$AAAA(AA8P1RHAP~H UL$8~ T$ ,|$8HŅD$ H$H|$0oHLH+HHH|$PHtHD$PH/uHGP0H$HtHDŽ$H/uHGP0H$dH3 %(HHĸ[]DH$THiKdHZ+Ht$HH8xHVD+'@H1/ |$8HŅ1PZ@AUfHHATLH /USHHdH%(H$1LL$D$HT$`D$HHD$D$p$$$H\$H\$hD$,HD$ AAAA(AA8P1RHAP|H L$8~ T$L%-H1PHD$Ht\HX ۅ|$8IŅD$H|$0HHH$HH9tH|$H>HfDH|$PHtHD$PH/H$HtHDŽ$H/HD$H$dH3 %(Hĸ[]A\A]fDH$HHEzHL IHQH|$H/uHGP0HD$E8"uII,$HH+Ht$HH8TvcSHfDHGP04@HGP0@HPT1dW@ATfHHUH-LSH /HdH%(H$1LL$D$HD$`D$H$HD$Hl$D$,)D$h)D$x)$)$HDŽ$)$)$)$)$)$HT$AAAA(AA8RHT$RH,SP1APyH0L$8~ T$ <'|$8IąD$ DD$H$H$H$H|$0%LFH+HHH|$PHtHD$PH/uHGP0H$HtHDŽ$H/uHGP0HIH$dH3 %(HH[]A\ÐDD$H$H$H$IL4FIH%+Ht$HH8sH;t@H1ف|$8IąuD1BT@UfHLSHHH(dH%(H$1HD$xLL$pH$HH$HH$HH$HH$HH$HHD$HD$ D$D$HDŽ$HD$x)D$H)D$XHD$hDŽ$HD$AAAA(AA8PHD$PHPHD$8PHD$8P1vH0H|$H\$HH;=c+}HHM+H9GH+H5 H8TH$HtHDŽ$H/uHGP0H$dH3%(H7H([]HWH+H9CH_+H5Щ1H8~T|fۄHNHD$1HT$0Ht$ D$@Hxs9HD$1HT$8Ht$(Hx sHD$ HD$HHD$0HD$PHD$(HD$XHD$8HD$`fDHHH8HD$H\$@D$@HSHsHx+tHD$HS HsHx uE1fD1fH+H5*1H8XSVD$@T$H$H $$t T$ u4~HËD$ uQ|$D$@H$1҅tMT$L$H=$|HT$dH3%(u&H(Ha+H5H8I1YGfUHH H5S1HdH%(HD$1HT$IFdt244$|$HXHuUu+HcSHHL$dH3 %(HuH[]fDH+H89Ff.UH4 3SHH9Gt)H+H5H8#H1H[]f.HH^HHt+HH9w1]H[]f.]H1HuHQ+H5UH8G1zff.AWAVAUATUSHHGHt$HHŁIInIHu 1YH9v;II.LHIIMI7UxHkL9s L@H+H5*H8F1H[]A\A]A^A_fH+H5ʜH8FH1[]A\A]A^A_f+]HT$H[]A\A]A^A_IGHL$ff.H/ff.H@/ff.H/{ff.H9+H8a7ATUHSrx0 qIL5x$H+H[]A\@[1]A\f[]A\f.HH5b+HH5+HH5:+mff.fH(HH5dH%(HD$1HT$`1t|${Ht.H5pHUHL$dH3 %(u1H(f.H+H5*HD$H:DHD$ CfUL tHH5lSLH(dH%(HD$1HD$HPHD$P1LD$ _Z1Yt7o<$L$HT$Ht$HwHw3u+H\+HH\$dH3%(Hu(H([]fD#0H:+H8b5H8BUL HH5SLH(dH%(HD$1HT$HHD$P1LD$ _Z1Yt4n|$HT$Ht$HTZH2u&H+HHL$dH3 %(Hu#H([]Ð[/Hr+H84HpAUHH H5SH(dH%(HD$1HT$ LD$f^1҅t/ n|$ Ht$HfH2x,H+HHL$dH3 %(Hu"H([]H+H83H@SHHdH%(HD$1wÃt@HruOT$4$H=1tHL$dH3 %(u;H[WH1HuHrtH$+H8L3%@DH +H813UHH5SHdH%(HD$1HT$]1҅t*l|$HHH0x-H+HHL$dH3 %(HuH[]kH?ATHLH5,USHpdH%(HD$h1H\$HT$LL$Hl\1t@lHL$HT$ Ht$|$IXLH/H3Hx$HJHL$hdH3 %(uHp[]A\H+H81>fAWAVAUATUHSH(HT$DD$y)H8IH(L[]A\A]A^A_@LcHALHCxHEHtKH4HHuJD8HDIIFL;t$IH|$LDt$FIHhH}/D$t+AF1LdIH;HHPa1I9uH;I/HIEuIELP0E1H}Y/j@AUHH5ATUSH8dH%(HD$(1HL$HT$ YH|$G'H|$5KHT$Ht$ H|$AHHXiHt$|$ HcHIJ-H|$Ld$ .~(ELHHIlP@HHP40H9uLg.MxJLG Hy+H5"H8=1HL$(dH3 %(u!H8[]A\A]DH+H8.;fATHH5yUSHpdH%(HD$h1H\$HT$ HX1t>Hl$ FhHt$|$ HI"3LH7,HO/Hx*HGHL$hdH3 %(u#Hp[]A\fH+H8!.:f.UHLaH5SH(dH%(HD$1HT$HL$ LL$W1҅t3g|$HT$t$ H!cHw+x+H\+HH\$dH3%(Hu!H([]fDHA+H8i-H?:ff.@H+H8A-HHH5dH%(HD$1HHL$!W1҅tt$<$?dx+H+HHt$dH34%(HuH{H9HHH5dH%(HD$1HT$V1t|$#RxHcEHL$dH3 %(uHf49@HHH5%dH%(HD$1HHL$1V1҅tt$<$ojx+H+HHt$dH34%(HuHH8HBxHx+HHH/ff.@HHH5pdH%(HD$1HT$tU1t|$sD$x#Hc7HL$dH3 %(uHfD+ff.HHH5dH%(HD$1HT$D$ HtXHA+H5H8#u9D$t8/H+HHL$dH3 %(u%Hf.1@Hc=/,:e*DAWfAVAUIATIUSHLHdH%(H$1HSH$HDD$Lt$HO&O&|$O&D$(H$L|$`HD$8D$HD$hD$x$$D$D$ H\$H\$`H$DŽ$O&:HD$ MLPHLMLPH /HT$RHP1AWAPLH0a|$u 1|$ @H|$0H|$xH{+H1H5H81\H|$PHtHD$PH/H$HtHDŽ$H/H$dH3 %(HH[]A\A]A^A_fH|$(tH$WTUIąuUH$H|$0VLAumH&+H8DHGP0g@HGP04@H$T$ Ht$0|$.Yf.1$fHɵ+H$Ht$HH8JH'HHֺ1҅t-M<$t$HUGHx'HЯ+HH\$dH3%(HuH[]fH SHH51HdH%(HD$1HT$=t|$`DHHt(HPKHHL$dH3 %(HuH[@H9+H8a: f.AVHLHAUH T/HyATUS1HhdH%(HD$`1H HD$ HD$HHD$(HD$HD$0HD$8D$@HD$HHD$PHD$XD$ D$D$PHD$PHD$PHPHD$(P1LL$@BH0td\$Dt$ l$D,$LIăH|$0EHDL1@.HH|$PHtHD$PH/t!HL$XdH3 %(HuMH`[]A\A]A^ÐHGP01EH|$0ȀEpDIolff.UfHH~SH5HXdH%(HD$H1HHD$H$1AA(A8;;JH|$ HHxCH|$@HtHD$@H/uHGP0H+HHT$HdH3%(uDHX[]ÐH+Ht$8H8x)H+HHt$dH34%(HuHfDHq+H8 Hoff.@SHH5{H dH%(HD$1HT$ HL$D$V71tLFT$|$ Ht$HDH߉D$ Hc|$ t6\$e&H=yHƉ1RNH\$dH3%(uH [@H+H8 fAUHH5?{ATUSH8dH%(HD$(1HL$HT$ 6H|$H|$'HT$E1Ht$ H|$HiHEHt$|$ H HI H|$Ld$ > ~+ELHHIlPHHP H9uL MxJLz$ H+H5qH8:1HL$(dH3 %(u!H8[]A\A]DHQ+H8y RfUfHL xSHyHH /HyHxdH%(HD$h1LL$ D$(HD$ D$$H\$(D$<HD$$AAAA(AA8PHD$(PHPHD$4P5+HD$@P15+:H@g|$D$Ht  L$u#ND|$HHÃuZT$|$L$t$HD$@E1H/HH߉t4H +Ht$XH85)T$t$;CHuHƥ+HH|$`Ht HD$`H/uHWHD$R0HD$HL$hdH3 %(Hx[]DAPH6HѢ+HH5mH81mI1tfDH=x1Q1qfH9 f.t`>Hd"@USH(dH%(HD$1HT$Ht$H|$ -xV|$|$H|$ HHHH=:H1IHL$dH3 %(uH([]cLff.UHH5vSHdH%(H$1HL$HT$D$ LD$ *2A|$L$ HT$t$HNHD$ u9H+HH$dH34%(HHĨ[]f.H=2 HHt\Hc|$ |$$HCHc|$HC Hc|$(HC( Hc|$HC0 HC8+HkH+t31[fH+H8H;fHCH1P0!f.HHHHt;H@USH(dH%(HD$1HT$Ht$H|$ xV|$e|$HY|$ HMHHH=H1vGHL$dH3 %(uH([]ff.AUATUHH=2SHH}HH}HCH}HC YHH}HC(}HC0} HC8H}0HC@HMPHUHHHCHLm`Lep}HUXLH߾}HUhLH߾ ~}H}8uH}@HeH}(HUH9)HHH[]A\A]fH+u HCHP0H1H[]A\A]ATHH5VsUSHdH%(H$1HT$ .1t4->H\$t$ HIT!Lu.H^H$dH3 %(u$Hİ[]A\H+H8 fAWAVAUAATAUSHHHodH%(H$1H o G(AփtE@Ņ~ @S=s(IǃupHs A:@EE1EHHADHALA Et2H5/H=X2H2HQH2HVbHՕ/`N)H5w/H=p2H!/H.bH[/&HVH5/H=Y2Hj2H2H5aHH2(H@2HH5aH.2i(H2HH5aHp2K(H5aHH2H2-(H*aH5/H=X2H/\H5aHH32'HEaH5/H=2H/H2H5aH'HH2HH5'dH62'ʚ;H2Ht{1DIHtlH-r/HL%r/4HL5 uAHmu HEHP0II,$HHH1H5HHuf1H[]A\A]A^f Hm)HEHP0ID$LP0LHL"' Hĸ2LH5_Hv&2iAUIHATIUSH6%HcHHHtHuHtEH+t5H[]A\A]HHLr&HHLd&H+uHCHP0HtHmuHEHH@0H[]A\A]ATH=/USGH HI-HHHw Hn HH5pH4T HpHH2HHHtpqHHHdp*HHHZpuHHHJp-HHH;pr3HHH-p[=HHHpDHHHp-&HHHo HHHoHHHoKHHHoDHHHoHHHoWHHHo'HHHouiHHHo^GHHHroGBHHHbo0wHHHSo HHHDo(HHH4oHHH#oHHHoHHHoZHHHnaHHHnx5HHHnapHHHnJ`HHHn3\HHHnHHHn HHHnMHHHnIHHHynjHHHjn7HHH[nlHHHKn{,HHH>ndPHHH.nM@HHHn64HHHn HHHmHHHHmHHHn1HHHm[HHHmHHHmHHHm~rHHHmgdHHHmPvHHHsm9 HHHdm"0HHHTm THHHDmHHH4mLHHH%mHHHm!HHHm6HHHloHHHljHHHlS]HHHl<HHHl%cHHHl+HHHlFHHHlEHHHlyHHHwl/HHHjlJHHHZlHHHKlmRHHH;lVHHH,l?CHHHl(fHHH lnHHHlHHHkHHHkzHHHk<HHHk9HHHk8HHHkpOHHHkYHHHkBHHHvk+#HHHekkHHHVkYHHHHkQHHH>k%HHH/kxHHHkgHHHkeHHHkstHHHj\?HHHjE HHHj.XHHHjVHHHjHHHj"HHHjSHHHj.HHHjhHHHojbHHHcjv_HHHWj_NHHHKjH HHHHHHi;HHHi#HHHimHHHiyHHHibHHHiKsHHHi4HHHiAHHHi{HHHzi|HHHmi}HHHbi~HHHUiHHHEiHHH:i|HHH/ieHHH%iNHHHi7HHHi }HHHh _HHHhHHHhHHHhH+uHCHP0L[]A\@E1L[]A\f.UHH=2SHHH}HH}H}HCHgHC }}HC(H}HC0H9HC8H} H#HC@H}(HtVHCHHu\HH[]fHy+H}HCHHhHy+HC H]Hy+HCHH<HtH+tA1HH[]DHy+HC@H]@Hqy+HC8H/@HCH1P0fU1SHOHHt;r%HxHHt@HHEu!H+tcHu\ HH[]fH+u HCHP0Hmt4 1HH[]HEH1P0 DHCHP0ff.UHH5^fSH(dH%(HD$1HT$b t~H|$HHtlHt$1H1tH|$HHtLHlHH+t#HL$dH3 %(HuGH([]fHCHP0@1@Hv+HT$H5fH81@UHH5eSHHu+dH%(HD$1HL${tw|$>HHt&HHHT$dH3%(HuH[]Ð|$HHt_HH%v+H5,eH81DHmu=HEHP0릐Hiv+H8atHu+H5dH81D1n@SH=/HtUHË2u!H5q/H=2x1g2HHͰ2H5dH2H[@1H[fw HNofL eH9s|HOA wFIcL>H9v4HGHDH)HvH @HH9twD9r1@H9vHH9vHy@HH9wfH9vHifHH)HvH$RH9vH9=@HHBH)HH9oH< DAWHDL=^dAVAUIATUHSHHH$H9wDL9HCxw1PIcL>@I9vLH)HIHH91H[]A\A]A^A_I9vLH)HIH9wHI9vHPpI9vHX ;pwHtHH1tAFHI9vHX:yfI9gHH;$RfI9GHfDI9/LH)HH9HSH\I9HPHI9HP I9HxʃʃV%H9`I9LH)HIHH9tL[H4L\ABA4LABII9/HH9 I9DpLH)EFHI9DHAvAvH9v <Ht HxHLD$VLD$JlI9HH9TI9H8 6uDI9gLH)HIH9OLCM9LD$=P2H4HxHLD$AFII9w|I9LH)HIH9HI9HPpI9HX ;pHtHH5AFHI98HX;zf.HI9)@XfDHE1AL9/I9&LSH)HIHH9 H HtHH~AD$HI9;HCI9LSH)HHH9HCHTM[I\HswK(gI9WHPpI9GHxH؉H)HH9.LHLH)HH9t.97FHWHDfDH9rH9uL Ht HxHUAFHI9LH)HIH9HXH4HHyAFH(ff.BfHHl+H5hH81Hff.HHQl+H5jH8r1Hff.HH!l+H5hH8B1Hff.HHk+H5hH81Hff.SHH HtH/t9H{HtH/tH{(H/uHGP0H[0HGP0HGP0H@HyHm+Hff.HG(H@(Ht Hw@HyHm+Hf.HHHtHf.HDm+Hff.AWAVAUATUSHGHD8H|$uDD$߃ DD1IHH^6+L HI9tSkDtH; IHcHLIuHIu IFLP0HA!I9uEtODH=h1HH HLwHHHuHCHP0fLH~sH=IP7 HHLHPH+HHHD$HH=@hHp01HmHu0HEHP0$f.HD$H= hHp01HI,$u ID$LP0HH[]A\A]A^A_HHuHCHP01@HCHP0HS1@HIuIFL1P0fSH@HtLH{0HtH/tMH{ HtH/t.H{(HtH/tH[fDHGP0H[HGP0HGP0SHcH[ff.@wfff.fHHH5dH%(HD$1HL$Hat}D$4$u: uNw Hc40H=z1HT$dH3%(uDHw҉9DH=z191AVIAUIATIUSHHHGtsW xS HCIC AEA$ uHCHH[]A\A]A^fDHC0HH@HDH[]A\A]A^@1LL{ugHEIHEAEA$HuH0f+H5beHD$H:lHHEHD$gf1^fH f+H5eH8*18H XSHcH>[[Ha[[HPf_[ ЃDRH0a[@wHa[DH`[@XH`[ÐH`[@H`[fGHb+[f.7Hb+<[@Y{< _[… f. t}1[Ð[y[-GHPf1_[!fHy_[ЃfDtes 1_[!f[y[1ff.HtJHt,HtHgb+H5_H8HAb+H5_H8fff.ATH/IUSHGHHhH/HH|PHH5/HT-HJHHI$IL$HkLcK1MxL9t$0LHN|$01MxL9l$0LHNt$0SPHcT$ HC HщSTHHHHHC0E8HK(I$Lc8H{@HsH H!HHEHkYbHO+H5MH8HtLHD$H+uHCHP01HL$8dH3 %(Hu^HH[]A\A]A^A_@H9HcDHAHKDH O+H5MH8*[pUSH!HtSHH5NH:H+Ht)Ht3H5Q+H=Hmt&H[]HCHP0HuH1[]HUHD$HR0HD$H[]DAWAAVAALAUAAE0ATAAH AUAIH-@SIHL JH(;H{w.HcDH>9sw9ssRH ;H{vfE17wF<'u&H$@{w/CHcH>DAH(D[]A\A]A^A_f9stHkfAH]@CHwF+@IIIFLGDL$_EHT$t$LT$D $LT$D $H ,>Ht$L:GHT$B_@DL$HT$LT$4$DL$HT$LT$4$H,I+HI+<4$DL$HT$LT$4$!4$4$}4$_LT$HT$H =L!FDL$DL$HT$LT$4$4$LT$H <HT$DL$LETx4$LT$H <HT$DL$LE%4$LT$H n<HT$DL$LwE4$LT$H ?<HT$DL$LHEDDL$HT$LT$4$ DL$HT$LT$4$aff.AWAVIAUATUSHHHLgH/LH)HH9~HDH9LE;H;HcH>f[I9wHI9}A9uHH VDI9Dwu HI9wHHH)[H]A\A]A^A_@I)LHHH[]A\A]A^A_I9GHCLt$Ls;LHD$I@E.H\$DEEEADE0AIL I;H{w-IcL>D;kr D;kH ;H{vLLt$I+.HHH[]HA\A]A^A_HD;kH늋CHAwF#AIIIBuVHHPfDAwB?u4H$2{wCH=:HcH>fD5IL9#[I9wHI9 }A9tSI99UHfD9HI9wf.SI9v`;Uu[HfD9HI9wfH"1HLKHII9w}1DDD$8HL$0LL$(T$ Ht$PHt$T$ L9LL$(HL$0DD$83@DDD$8HL$0LL$(T$ Ht$PL8Ht$T$ LL$(HL$0DD$8DL8Ht$T$ LL$(HL$0DD$8D2L_8Ht$T$ LL$(HL$0DD$8DL08Ht$T$ LL$(HL$0DD$8VA_LDDHt$DD$8HL$0LL$(T$ hL7Ht$DL7Ht${DpL7Ht$_D$L7Ht$CA_9T$ LL$(HL$0DD$8fDAHB+<7AHA+fDDDD$8HL$0LL$(T$ Ht$DDD$8HL$0LL$(T$ Ht$EHL$0LL$(T$ DD$_Ht$8LL$(Ht$8Lu6HDD$T$ HL$0BDELL$ Ht$DD$8HL$0T$(:LL$ Ht$L6HBA_T$(HL$0DD$88fDAHG>AH>D$@AaH=PAH=D$[@AH=rA`H=D$ @AHW="AH/=DDD$8HL$0LL$(T$ Ht$ЪDD$8HL$0L4LL$(T$ Ht$sDDD$8HL$0LL$(T$ Ht$_DDD$8HL$0LL$(T$ Ht$ f.AWAVIAUATUHSH(HGHT$ H$HIHH)HGD$ HHE1LUHHMDHHCLsC@A>LSAF tH$L)HH9rsAFÃIHCAAHsLv>LsxH 3HcH>HEHL)HI9DL1L5)4L+MgHsLIt9LK)H w(Ic4L>f. VHH(H[]A\A]A^A_f.AHt/MsHC8Kt9HpHL`LHuHC Hs8MHHHCHE0DHH\$YHcЅbHLD$DHvHC8HHCHE^fDHOH{(HC8HsLS H}HH{0HH}@HxHuDGM9| AH;pLHL)Hw(HL$L$yLK)HC8HPHIHLUL`HC8LLPHL)HGHHL$.L$ LLUK)HP8@@K!HHLrL+MHCI C@LsfDH{8HT$L$HGH{LL$HT$MfHHC(HSMMIHEHHC0HE@HC HkHHC rH97MT$H$L9v A|$8A9:t'IHMT$ID$ H9~1H9MT$HLUML)HGLHHK9HID$L3HCL4AD$@LsC@fDHHCHs(LPHC LSHHC HuHHs0Hu@HsvH9IUHHCHsHL$HEH vHHNHLL$LHHC(HCHC LsHEHHC0HE@fHC8HyH"HC(HHI)LMvH 1M`DHHCA̋HHCfHC8Kt9HpHL`LHnHC(H~CHLH}PL$H)HHC(LL$HI)LH{ HHEHHC0HWL)HE@HC8HHSHUi f.HSH$D~H)HH9UHUV HHDd$HLL$O$)IT$ID$ LIT$MT$rH9N2H4 L]HM\$(L]@M\$0LHLUL)HGLHHK9HID$L+MHC L4AD$@LsC@LKH$DVL)HH9ULMHC AA<HEHLHC(HE@HC0AFt 1H9C HLSL)LUHG( HLHHHJ>HAL+MM4B@HC LsC@~ L{FH=,HcH>fDLSFD1LLH+}HH9]HI)HLUL)HGHLJ:HHIHL+MHC LsC@aLSFDLH+UHH9b HLI)HLUL)HGHLJ"HHIHL+MHC LsC@s@DHCLt 1H9E[HEM Dd$L$HHC8HSHHH@LHPLSHpHHLUL)HGt HLHHHJ'HL+ML4F@HCLsC@DHU@HEHDHS0HHC(HS8H~PHtKL$HHH)I9HHHuPLL$AOL$u.HT$Hct$HT$HD4pfA_A A1I9s+E?AuIcHPfA_ ЃA9AEL;}IcDH=&.HEHMH91I9vIcGH=v&H1I9sIcHU&HE1H9AkHELuL9I9AWT$HcL$HHu _M9!E?AAmIcHPA_fDE1L9}AL;}IcG E1L9}AHUHEH9E1I91I9A9AEdHEHMH91I9vIcGH= %H1I9sIcH$HE1H9AHHL$L$}HHLUIJ4/HVSHS(Ht+H~&HLH}PL$H)LHS(L$HC0HUHHE@LsAM4LsL9$vA~A9:HHDd$HHHL$LLsAFH9oHS HHSHHH9~HDXHLPDHHH9uHUHT$ HCt H9EHELHHL$4L$LIHLUK)LELHL$L$HIHJ(HE<1H{8LsHC(HfHI)VHSHwHHL$}L$[HIHJ.HDLsLULsJHL$+L$ HILJ(HE>L1LLsHHHL$L$HHLUIJ<.HW8&wLM4At$8Hs8H~H9HS8HLULrH~LsHvLHL$=L$xHILJ(HEHc"M9E?EA;HHL$L$xLIHLUK1LE謒L1ҋL$VHHS8H IcH= A藸L;}ApA?r(AWt7HEALLULLHA裮uAFuA uE1A_HEAqHL~A?YA?A?1A?_A1AA趾AuE1A_AL;}W8A?ʭA?jA?*1A?_@AWIAVAUIATUSH8LgH/LH)H9~H9HLEA?AHHcH>AG9LH)H8[]A\A]A^A_@HH NI9DxuHI9uI9IL MML L@DmHAEDEAK 6I;H{w4IcL>D;kr D;kH ;H{vMHI+EH8[]A\A]A^A_AHD;ktVH@CH[HLHu.HHXD{wCIcL>DAEkHI9LI+xB?uH$AO1SI9J:M?H D8*HI9uf.A_I9}A9HI9uLI+EH8[]A\A]A^A_fDA_I9}A9HI9uf.H#1LLHwIEjI9w`fDI9_:MTH82HI9u!fDL\$(Ht$ HL$T$LD$@LD$T$L LeHL$Ht$ L\$(9DDL\$(Ht$ HL$T$LD$8L LLD$T$HL$Ht$ L\$(D蒩L wLLD$T$HL$Ht$ L\$(ZD L ALLD$T$HL$Ht$ L\$($DL LtLD$T$HL$Ht$ L\$(A_5fDL\$(Ht$ LD$HL$T$0LD$Ht$ L LL\$(D蓨LD$Ht$ L nLL\$(DLD$Ht$ L ALL\$(DLD$Ht$ L L{L\$(`A_VT$HL$@AH=+D<DAH=w+DDL\$(Ht$ HL$T$LD$萧cDL\$(Ht$ HL$T$LD$`;ADH=+DADH=lDAJDH=D6DADH=DADH=DA|DH=sDADH=;DA,DH=|&DL\$(Ht$ HL$T$LD$ L\$(Ht$ LKHL$T$L LD$DL\$(Ht$ HL$T$LD$HL$LD$L HLT$Ht$ L\$(iL\$ Ht$HL$LD$T$(CHL$LD$L .HLHt$L\$ pA_fT$(1DL\$(Ht$ HL$T$LD$虥TDL\$(Ht$ HL$T$LD$tff.@AWAVIAUATUHSH(HGHT$ H$HIHH)HGD$ HHE1HuHHMDHHCLsC@A>HsAF t H$H)H9roAFÃIHCAAH{Lw?LsTH wHcH>HEHL)HqI9@DL1L5L+MgHsLIt1HJ/H w Ic4L>f蛽bHH(H[]A\A]A^A_f.A&Ht/M{HC8Jt?HpHL`LHuHC Hs8MHHHCHE8DHH\$HcЅbHLD$.DHvHC8HHCHE^fDHOLC(Hs8HCLS LEHLC0HLE@LFHEEHM9| AH;FHHLL)Hw(HL$(L$5HJ(HS8HrHH4HHuL`HC8LHpHL)HGHHL$軵L$HHuJ(J HB8HHL+HCLp @H{8HT$L$HGHLL$HT$M~HHS(HH{MMIHUHHS0HU@HS HkHHS DGI9It$L $H)DI9v >A;|$8t'HH<It$I|$ I9~1I9It$HHuML)HGLJ8HBHHID$L3HCL4AD$@LsC@fDHHCLC(HpHC HsHHC LEHLC0LE@LCE@L9HILHHCHsHL$HEH HHVHLL$LHHC(HCHC LsHEHHC0HE@Hs8HAH2HC(H%HI)LMH 1MxDHHCA̋HHCfHC8Jt?HpHL`LHnHC(H~CHLH}PL$H)H}HC(LL$HI)LHS HHEHHC0HL)HE@HC8HHSHUI f.HCH$DwH)H9qHEW HwHDd$nHHHL$N$(I|$It$IT$ DOHIt$I9DMF A L]HM\$(L]@M\$0APLHHuL)HGLJ8HBHHID$L+MHC L4AD$@LsC@@HsL $DWI)L9qHurHC AA<HEHLHC(HE@HC0AFt 1H9C ,HHsL)HuHG HLHHHJ?HAL+MM4B@HC LsC@6@ L{GHHcH>fDHsGD1LIL+MI9H)HHuL)HGHLJ:HHIHL+MHC LsC@HsGDHH+UH9V H)LHHuL)HGHLJ"HHIHL+MHC LsC@fs@DHCLt 1H9EHEu Dd$衇L$HHC8}HSHHH@LHpHsHPHHHuL)HGL LLHHHK!HL+ML4G@HCLsC@/DHU@HEHDHS0HHC(HS8H~PHtKL$HHH)I9oHHHuPLL$LLsL$AuAVHs! LHHuL)HGlHLHHHJ'HHBL+MLpB@HC LsC@2HCH;$0觨HCHC.HCH;$z8AHC8A9tXWHШt HHHE@HEHH9 HCHHDPH{HDHC8HMLpHHsLHENHHuL)HS L9lHHGHLHJ'HHHL+HCB@I MLsC@f.HDHC8HLHHHsLHEQHHuL)HS L9<HHGHLHHHJ"Mq HG@L+MHCLsC@Tf.HCH;$;WHHH{HCOHCH;$0H&HCHCHHCfDHCH;$Z8HKHyڽu9GIHCHCH;$;WP GHH9UH'HHHPPH@XH9HHH H{dfDGHH9UHHHLxPH@XI9HD$HMvL;|$HCH;$r.\@HCIHHCL9|$H;$38A?AA9tGHH9UHHHHHXHPPH9@H@HH9s[HCH;$0@82H4$H)HH)HH9DD8HHHCH9uHH{ @HCH;$RxH <:HHCDHCH;$rHCH;$ 8AHC8A9R@H0@GIHCfHEHUH9I9, I9E1A?詝 ADEwLsILs fDEVL9+A!H@HHGHLHHHLrJ&HuHB@L+MHCLsC@eHUHH@HS(HU@HS0HHGvHLHHHJ"HG@L+MHCLsC@f.HHDd$NL$[ HHINt*Hu@HHL$L$ HHHuINt*+DHHL$迦L$HHHuIJ/LrLsfDAAIHC;HHL$\L$iHIHHuJ/HDaHHL$L$)HHHuIJ<*LwQHHL$֥L$HHHuIfJ<*LO8MIHHL$茥L$HI7J/HHr8LvHuH94$Y6I~ L$L$.Hs,H;u3HUHIT$(HU@IT$0DH;pHHEHHU@HC(HS0H~KL4I9HJ< LHuPL$rLHLL$ML)H{HHS8HRJ HHS8HuL`HLL)HrHGHLILrHHJ'HAA@I L+MHCLsC@HEHUH9E1I9v8AOHT$L$薵t$HT$HD4pfA@_A A1I9s$eE?HAPfA_ ЃA9AEHEHUH9E1I9v8AOHT$L$ t$HT$HD4pfA@_A AI9״E?HAPA_E1L9}AL;}AH qHEHMH91I9vAGxHH1I9sAxHHE1H9AHUHEH9kE1I9'1I9A9AEL;}AG8(E1L9}AHEHMH91I9vAGxHH1I9sAxHHE1H9A5DHHL$wL$LHHuIK<)HW{HHS(Ht+H~&HLH}PL$H)HӊHS(L$HC0HUHHE@LsAM4LsH94$vA;VHwHDd$HH/HL$LLsAFH9HS HSMT$ HCt H9E>HELDHHH9~HDXHLPDHHH9uHUH HHL$L$HIHHuJ<(LE:LHL$ȟL$HIHJ(HE^1H{8LHC(HHI)HSHHHL$OL$\HIHJ.HD%LsHuLsdHL$L$ HILJ(HEPL1LHHL$谞L$HHHuIN /IQ8DLsHArLM4At$8NLsHH{8LOHNHS8HHuLrHLHL$L$xHILJ(HE!HccHHL$ΝL$xHIHHuJ<0LElL1ҋL$HHS8I=AH  mA舒L;}AA?bAFHEALHuLLHH A?臈NA?&=A?,1A?_A1$AB*AA螥E1A_AL;}A?A?葘A?P1A?_H A訇AFAE1A_HEA`AWAVAUIATUSHHHLgH/LH)HH9~HDUH9LE;HHcH>f.C9LH)HHH[]A\A]A^A_f.HH I9DfwuHI9wfDI9oHCLl$LsMHD$I@EuH\$DDEEAADHIL 0Ƀ;H{w1IcL>DD;sr D;sH ;H{vLLl$I+mHHH[]HA\A]A^A_HD;st}H@3{LAHHHAuPHI;NAwB?u4H$6{wCH=HcH>fD=IM9+K1&I9f;MHDf9HI9wf[I9wHI9}A9t[I9wkHI9}A9uwH#1HL{HYIEII9w?fDI9f9MHfDf9HI9wDL$8LL$0T$(Ht$ LD$bLD$T$(LHt$ LL$0L$8ifDDL$8LL$0T$(Ht$ LD$LnLD$Ht$ T$(LL$0L$8DSL@LD$Ht$ T$(LL$0L$8sDՓLLD$Ht$ T$(LL$0L$8EDwLLD$Ht$ T$(LL$0L$8A_ fDLD$L$8LL$0T$(Ht$ LLD$PD腂LrLD$4DLVLD$D͟L:LD$A_Ht$ T$(LL$0L$8^AH=*D<:DAH=*DDL$8LL$0T$(Ht$ LD$詁@DL$8LL$0T$(Ht$ LD$y@LL$0T$(Ht$ L$LD$8HSAF tH4$H)HHH9rqAFA̓IHCAAH{Lw?LsVH HcH>HEHL)HI9fDDLE1L5L#MoHSLIt8HJ&H w'IcL>f諗XIH(L[]A\A]A^A_f.AMt/MtHC8JT>HPHLhLMuHC HS8MHHHCHE1DHH\$Lc؅bHLL$DIvHC8HHCHE^fDMOHC(HS8H{LC HEHHC0HHE@HBH}@t I9H;z HLL)Hw(HL$=L$nHJ&HC8HPHHHHULhHC8LHPHL)HGHHL$ЏL$HHUJ&J.Hp8@@HHLvL#MHCI C@LsH{8L\$L$HGH#oLL$L\$MoMHC(H{MMIHEHHC0HE@HC HkHHC H9-IUL$I9v D E;M8t%HHIUIE H9}E1H9IUHHUML)HGLHHJ>HIEL30HCL4AE@LsC@f.MHCH{(HPHC HSHHC H}HH{0H}@H{H9ISMHCHsHL$HEH fIH^HLL$LHHC(HCHC LsHEHHC0HE@fHC8MyH2HC(H%HI)LMM E1Mp@MHCA͋HHCfHC8JT>HPHLhLMnHC(H~CHLH}PL$H)HvHC(LL$HI)LHs HHEHHC0HVL)HE@HC8HHSHUa f.HSH$DwH)HH9fHUW HwHDl$HnHL$N,&I}IUIE DGHBIUI9TDMFA L]HM](L]@M]0ALHHUL)HGLHHJ>HIEL#M0HC L4AE@LsC@LCH$DWL)HH9nLEHC AA<HEHLHC(HE@HC0AFt E1H9C )HHSL)HUHG HLHHHJ?HAL#MM4F@HC LsC@* L{GH5HcH>fDHSGDE1LHH+uHH9~HH)HHUL)HGHLJ>HHIHL#MHC LsC@HSGDHH+uHH9c HLH)HHUL)HGHLJ.HHIHL#MHC LsC@s@DHCLt E1H9E{HEAl Dl$aL$HHC8HsHHH@LHPHSHpHHHUL)HG| LLHHHK(HL#ML4G@HCLsC@DHU@HEHDHS0HHC(HS8H~PHtKL,HHH)I9HHHuPLL$qLLsL$AAvHSI LHHUL)HGtHLHHHJ/HHFL#MLpF@HC LsC@HCH;$0跂HCHC$HCH;$r8AHC8A9tPWHШt HHHE@HEHH9 HCHHDPH{HDHC8HLpH0HSLHEFHHUL)Hs L9H0HGzHLHHHJ/I HF@L#MHCLsC@f.HDHC8HL@H0HSLHEPHHUL)Hs L9TH0HGjHLHHHJ.Mp HG@L#MHCLsC@Df.HCH;$;WHHH{HCEHCH;$0H6~HCHCHHC fDHCH;$R8HsH~u1GIHCHCH;$;WPGHH9UHHHHPPH@XH9HHH H{ZfDGHH9UHHHLxPH@XHHD$I9wMnL;|$HCH;$r.T@HCIHHCL9|$H;$+8A?AA9t GHH9UHHHTHJXHBPH9@H@HH9sIHSH;$0f92t"H;$60f92*HHH9wHSHH{@HCH;$ZfwH5Z@HHCHCH;$"8AHC8A9r@HCH;$rfI8@GIHCdHEHUH9I9k I9E1A?wj ADEwLsILs fDDHSLE1Wf.EVL9#AH@HHGHLHHHLrJ.HB@L#HUMHCLsC@=HuHH@Hs(Hu@Hs0HHGHLHHHJ.HG@L#MHCLsC@fHHDl$NL$ HHI*Nt&HU@HHL$L$8 HHHUINt&!DHHL$迀L$HHHUIAJ4'LvLsfDAAIHC!HHL$\L$HIHHUJ4'HDYHHL$L$MHIJ4'HHV8LrHUIHHL$L$HHHUIJ<&LwHHL$L$HHHUI[J<&LG8M@YH9$y2I~ L$L$PHS$H;U^HEHIE(HE@IE01DH;PH0HU@HEHHS0HC(H~KL4L9HJ<(LHuPL$rhLHLL$ML)HHHS8HRJ(HHs8HULhHLL)HVHGHLILvHHJ/HA@@I L#MHCLsC@|HELuL91I9v1AOuL$藏L$Hpu 1f_1M9s6E7AuT$\A΋T$H0Nu 1fA_E19AL;}AffH5oPHEHMH9?1I9vAGfwH56H1I9sAfwHHE1H9AiHEHUH9E1I9v>AOu)L$AHT$bL$HT$Hpu E1f_AI9 E?Au'AHPDfA_DDE1L9}AL;}AGf$E1L9}AHUHEH9E1I91I9A9AE\HEHMH91I9vAGfwH5H1I9sAfwHHE1H9ADHHL$O{L$LHHUIK< HwKHS(Ht(H~#HH}PL$I)LdHS(L$HC0HUHHE@LsAfDM4LsH9$v2A;vHwHDl$IHHL$LLsAFL9L[ ML[@HHH9~HDXHLPDHHH9uHUH T$ HCt H9EHELAHHL$yL$HIHHUJ<&LELHL$yL$HIHJ HE3E1H{8LHC(HuHI)eHsHmHHL$+yL$\HIHJ&HD LsHULs6HL$xL$ HILJ HE,LE1LHHL$xL$HHHUIN'Ip8LsHgARLMAU8HS8HHLrHU{LsH{H{8LGHLHL$wL$xHILJ HELc/HHL$wL$xHIHHUJ<6LEzFLE1ۋL$IHs8IAfBH5Z,AaltzL;}A~A??lA#l HEALI0HULALAibtAsbAPE1fA_AL;}A?bIA?r8A?v'1fA?_3A?aA?urtA?4c1fA?_A1ZHHAaArA~E1fA_HEAff.@AVH .AUATIHHUHSH@dH%(H$81HHD$HD$ HD$HD$HD$PHD$(P1LL$(LD$lZYHt$H|$Hu!H_HH$t H @H *H5JH8*IH$HtHq;1H$8dH3%(H@[]A\A]A^HkH$0@H*H5 H8HH_H$0@CHHKHFff.HG(HHATUHoSHHW`HWXHLJHHt8HC(HǃHCHC1HHǃHǃHpXCTtjI]H1Hu"H{LHqMtHSH;S(t HS([]A\@H;S0uBHC([]A\DH*H@IfD#IfDHcKTHff.@AVH .AUATIHHUHzSH@dH%(H$81HHD$HD$HD$ HD$HD$ PHD$ P1LL$ LD$衏H [HH$t H7H|$PHt H/uHGP0H$Ht5HDŽ$HHLHDŽ$HDŽ$>n>@H*H5H8DH$HtH61H$8dH3%(H@[]A\A]A^H)gH$0@H*H5H82DH[H$0@H1HδHABAWAVAUATIUHSHHGL9 E1E|$AL9ALM9LkD:;uL$H]LmE.1It$H߱HxL$LM9reDE|$AT$Mt$NI8LH)HI9,L9#H$LLL)ML ILIAC H9H;CuH9fDMCD%H L,A<9;uHI9t&HH9LLHHDI@J I1LLLL$ L\$L$LT$L$H6HH9'ILL$ L\$L$LT$L$7H4$>IL$$IML9HH]1LHH]覉Ht@E;l$r E;l$I xDE;l$I_@AD$I$AwE,EIMIB ukHL$IDAwB 7ufDt%I_H4$1LI謈LiHHKL$$fDDT$DL$8Ht$0LT$(L$ \LT$uDrSLT$jDdLT$ODpLT$4A_*L$ LT$(Ht$0DL$8jAH*<0D;AHw*0fDDL$8Ht$0LT$(L$ T$RLT$L$ LT$(Ht$0DL$8fDDL$8Ht$0LT$(L$ T$a1DDL$8Ht$0LT$(L$ T$[LT$L$ LT$(Ht$0DL$8VDQLxT$L$ LT$(Ht$0DL$8(DmbLJT$L$ LT$(Ht$0DL$8DoA_LT$L$ LT$(Ht$0DL$8ef.AH0D$L@A)Hg0kAYH?0DDL$8Ht$0LT$(L$ T$/DL$8Ht$0LDLT$(L$ T$fDDDL$8Ht$0LT$(L$ T$qP@EHt$0LT$(L$ DL$WT$83vLT$(T$8LǾHDL$L$ Ht$0BzA_pEZLT$ T$DL$8Ht$0L$(uLT$ LcT$HBA_L$(Ht$0DL$8AH0AH0D$|@AYH0HAHo0D$,@A HG0KA?"IMMHH]1LHH]HL9r@F D~LډH)HH9mLHH)HH9HGAT$I H $Au(H $AzL$$fDAT$EL$IL$LHVLE1H)HH9~fICDIEH9uL9H$ANDMMMIHLAA@ H9wHf;CuH9dDMC.H:L4A4f93uHPL9HH9HF DvLىH)H9LH)HH9HGAT$M@E;l$r E;l$I ƃIE;l$t|IC A|$M$DHLHEuLHM$;r@AwDu,I$VA|$wAD$H=HHcH>ftH]H4$1HH]HLHDDD$E;MrE;MvwI fDIE;Mt]I@AEMA}HHHEu2HM,8fA}wAEH=³HcH>@tI\$1LLI$sH HDuI$!DHL$0L\$(DT$ t$HT$DL$!DL$HT$t$DT$ L\$(HL$0ufDHL$0L\$(DT$ t$HT$DL$KDL$HT$t$DT$ L\$(HL$0D^BDL$HT$t$DT$ L\$(HL$0DRDL$HT$t$DT$ L\$(HL$0rD_DL$HT$t$DT$ L\$(HL$0EA_;Dωt$DL$HL$0L\$(DT$ HT$KDL$t$]DADL$t$DD)RDL$t$+D^DL$t$A_HT$DT$ L\$(HL$0@AnH=ϴ*DȀ<FAuH=*D)DHL$0L\$(DT$ t$HT$DL$@DHL$0L\$(DT$ t$HT$DL$@AEDH=ȱ1ADH=ADH=ADH=_AADH=<CA9DH=AsDH=_ADH=ӰDHL$0L\$(DT$ t$HT$DL$rHL$0L\$(DT$ t$HT$DL$iL\$(t$HL$0DT$ HT$DL$dL\$(t$HBDL$A_HT$DT$ HL$02HL$0L\$(DT$ t$HT$DL$dL\$(DL$HHT$t$DT$ BHL$0f.XDDL$8Ht$0LT$(L$ T$>DDL$8Ht$0LT$(L$ T$>H9}DDD$DDD$L9DHL$0L\$(DT$ t$HT$DL$;>DHL$0L\$(DT$ t$HT$DL$>ff.HG(HHATUHoSHHW`HWXHLJHHt)HC(HǃHCHCHHǃHǃHpX`I=H1Hu"H{LHPMt HSH;S(tHS([]A\H;S0u"HC([]A\DH!*H@HcKTHff.@AVH 3.AUATIHHUH'SH@dH%(H$81HHD$HD$ HD$HD$HD$PHD$(P1LL$(LD$GZYHt$H|$H\RHHD$HHl$01HHHt$(Ll$ LHHL$HLt$HHD$xHD$pIHW$AL$H)1MxL9t$(LHN|$(1MxL9l$(LHNt$(T$hHcT$HD$8HщT$lHHHHHD$HAD$8HL$@HH\$PH|$XHt$` BHKCH$0It$XHH\$!H$Ht HWH|$PHt H/uHGP0H$HtnHDŽ$HDŽ$HDŽ$e:HuPHHLNBHQ*H5H8r$H$HtHf1H$8dH3%(u_H@[]A\A]A^HFH$0@Hٮ*H5RH8#H:H$0'"AWH .AVAUATUSHHHH2HXdH%(H$H1HHD$HD$0HD$ HD$ HD$(PHD$8P1LL$8LD$(DAXAYXHt$ H|$H1XOIHD$H1Hl$@1Ll$0HHT$Ht$8Lt$(HLHLHL$H$H$vFH+T$KHN1MxL9t$8LHN|$81MxL9l$8LHNt$8T$xHcT$HD$HHщT$|HHHHHD$XC8HL$PI$Ld$`H|$hHt$p HA@H$@1Ld$M IHHD$PH9D$XHCXIHD$H$L$L$HDŽ$8HtSHDŽ$HD$PHHt$HDŽ$HDŽ$HD$@I07H/M>H{HaH4IHH{E1LHHDPHLTXMLc\$|L)HIHLL)HIT$x~fDH *H9OuHu H;G,H)I<1HHHtUK|IL9kRH|$H;=*LL$HtKD-H9$DT$x11uH\HHuI/u IGLP0I,$u ID$LP0H$t HoH|$`Ht H/uHGP0H$HtE1H$HdH3%(LHX[]A\A]A^A_Hq*H5H8L$MtHE1@H9BH$@C@H!*H5H8BI@LL-I/Au IGLP0EHD$@H;D$PHD$PH9D$XH$t H:H|$`Ht H/H$HPL|$L;=̫*H|$HH$ H$HH$HLcL$|H)HIHHȋL$xH)HIfH *I9OuHu I;GH)HHIMDHL$HHD$PLcD$||$xH)L|$HIHHD$@H)HItTHu*I9WuHu I;G`H)H<1HI@HL$x118LH YIRDHcT$|HBH)4H$@HGP0Z)LDH$t HVH|$`Ht H/uHGP0H$H@AWH .AVAUIHHATH3USHpdH%(H$`1HD$@HD$8HD$@HD$HP1LL$PLD$@=AZA[Ht$8H|$0H6]HHHD$0HdHl$P1HHT$(Ht$HHLHHHL$,H$H$?HjT$(AMH<HL$HHD$X$HcT$,HHNH׉$HHHHHD$hAE8H|$`HH\$pHt$xH$ H_9H$P1H\$0kHH8IEXLd$`HD$IHD$HEPHD$HD$@H;D$ HH$L$L$HDŽ$HHtU HDŽ$HD$`HHt$HDŽ$HDŽ$HD$PI20HueM~LHD$`Hc$H;D$P HT$hH9BL99HHD$@HL$`H;D$59LAfDH+u HCHP0H$t HA H|$pHt H/uHGP0H$HtX 1HH$XdH3%(Hh[]A\A]A^A_f.HA*H5H8bH$HtH1 DH H0[@HWHD$R0HD$DHtH/u HGP0fD17UHH5%SHxdH%(HD$h1H\$HL$HD$H!1t,Ht$ HT$H|$ HHHt$ HH\$hdH3%(uHx[]SHH5H0dH%(HD$(1HL$ HT$HD$ H|$sHHD$Hx xH|$xVHt$ H_HH%H|$H/tH\$(dH3%(u>H0[@HWHD$R0HD$DHtH/u HGP0fD1UHH5ySHxdH%(HD$h1H\$HL$HD$H1t,Ht$ HT$H|$UHHZHt$ HMH\$hdH3%(uHx[]!SHH5<H0dH%(HD$(1HL$ HT$HD$ H|$HHD$Ht~x x H|$xRH_iHHH|$H/tH\$(dH3%(u?H0[DHWHD$R0HD$DHtH/u HGP0fD1?ff.@UHH5jSHdH%(HD$x1HL$HT$HD$!H|$HGtG xH|$HHwH\$xdH3%(ufHĈ[]H\$ 1H&1uHl$0HT$H|$ Hr'HHgHHD$ZHD$17USHH5AHdH%(HD$x1Hm*HD$H8ux1HL$HT$HH57tYH|$HGtg xH|$x3Ht$ Ht$HHt$ H9|D1HL$xdH3 %(HĈ[]H\$ 1H$1uHl$0H|$ HHH,HHD$HD$HT$HHHZHHmfDUHH5BSHxdH%(HD$h1H\$HL$HD$H1t,Ht$ HT$H|$eHHzHt$ HmH\$hdH3%(uHx[]ASHH5͊H0dH%(HD$(1HL$ HT$HD$ 5H|$HHD$Ht~x x+H|$xRH_yHHH|$H/tH\$(dH3%(u?H0[DHWHD$R0HD$DHtH/u HGP0fD1_ff.@UHH5SHdH%(H$1H\$Hl$0HD$ HL$ LL$IHD$D$D$LD$(Ht$@HH|$0HT$ Ht$(LE4HHHtfL$HT$(1HH=_ /H+t&H$dH3%(u7HĘ[]fHSHD$HR0HD$f.17UHH5SHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ tmD$ LD$Ht$0HL$H|$ HT$Ht$LE3HHHt+Ht$HHT$xdH3%(uHĈ[]@1_ff.@UHH5*SHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ )tmD$ LD$Ht$0HL$H|$ HT$Ht$LE3HHHt+Ht$HHT$xdH3%(uHĈ[]@1ff.@UHH5aSHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ ItmD$ LD$Ht$0HL$H|$ HT$Ht$LE#2HHHt+Ht$HHT$xdH3%(uHĈ[]@1ff.@SHH5H0dH%(HD$(1HL$ HT$HD$ H|$cHHD$Hx xwH|$x^Ht$ H_HHH|$H/tH\$(dH3%(uAH0[HWHD$R0HD$DHtH/u HGP0fD1ff.@SHH5H0dH%(HD$(1HL$ HT$HD$ H|$c HHD$Hx xwH|$x^Ht$ H_HHH|$H/tH\$(dH3%(uAH0[HWHD$R0HD$DHtH/u HGP0fD1ff.@SHH5H0dH%(HD$(1HL$ HT$HD$ LD$D$xH|$V HHD$Hx xjH|$xYT$Ht$ H_HHH|$H/tH\$(dH3%(u=H0[HWHD$R0HD$DHtH/u HGP0fD1UHH5҃SHdH%(H$1H\$Hl$0HD$ HL$ LL$IHD$D$^D$LD$(Ht$@HH|$0HT$ Ht$(LEV-HHHtfL$HT$(1HH=L(H+t&H$dH3%(u7HĘ[]fHSHD$HR0HD$f.1wUHH5ʂSHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ ItmD$ LD$Ht$0HL$H|$ HT$Ht$LEC,HHHt+Ht$HHT$xdH3%(uHĈ[]@1ff.@UHH5SHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ itmD$ LD$Ht$0HL$H|$ HT$Ht$LEc+HHHt+Ht$HHT$xdH3%(uHĈ[]@1ff.@UHH58SHdH%(HD$x1H\$ HL$HD$LD$ HD$D$ tmD$ LD$Ht$0HL$H|$ HT$Ht$LE*HH(Ht+Ht$HHT$xdH3%(uHĈ[]@1ff.@SHH5lH0dH%(HD$(1HL$ HT$HD$ H|$HHD$Hx xH|$x^Ht$ H_+HHPH|$H/tH\$(dH3%(uAH0[HWHD$R0HD$DHtH/u HGP0fD1ff.@SHH5H0dH%(HD$(1HL$ HT$HD$ H|$HHD$Hx xH|$x^Ht$ H_+HHPH|$H/tH\$(dH3%(uAH0[HWHD$R0HD$DHtH/u HGP0fD1ff.@SHH5~H0dH%(HD$(1HL$ HT$HD$ LD$D$ H|$HHD$Hx xH|$xYT$Ht$ H_HHDH|$H/tH\$(dH3%(u=H0[HWHD$R0HD$DHtH/u HGP0fD1UHH5}SHdH%(HD$x1H\$ HL$HD$LD$ HD$ tmD$ HL$Ht$0H|$ HT$Ht$HEHHUHt0Ht$HCHT$xdH3%(uHĈ[]f1SHH5|H0dH%(HD$(1HL$ HT$HD$ H|$HHD$Hx xH|$xVHL$ H_11HHH|$H/tH\$(dH3%(u:H0[HWHD$R0HD$DHtH/u HGP0fD1UHH5 |SHdH%(HD$x1H\$ HL$HD$LD$ HD$ tmD$ HL$Ht$0H|$ HT$Ht$HEHHHt0Ht$HHT$xdH3%(uHĈ[]f1GSHH5P{H0dH%(HD$(1HL$ HT$HD$ 5H|$HHD$Hx x'H|$x^HT$ H_H5NHHH|$H/tH\$(dH3%(u?H0[DHWHD$R0HD$DHtH/u HGP0fD1Off.@SHH5azH dH%(HD$1HT$HL$IH$31t&H\$H|$E11H$HHHH\$dH3%(uH [f.SHH5yH Hu*dH%(HD$1HLD$HD$.H$HXHH9H41HD$HHp H1H$T '\    J^\xH=rz*HHfNуLA NHVH9uHD$H|$H H)uIH|$H<@\HVHH99Hv*H5xH81H|$dH3<%(uZH [fA\tHfDNA\nHfDFH\rHf~hfH(HH5"xdH%(HD$1HHT$LD$H$HD$t7H4$Ht6HT$H|$/!HL$dH3 %(u%H(f.1@HH$%DH(HH5wdH%(HD$1HHT$LD$H$HD$ t7H4$Ht6HT$H|$HL$dH3 %(u%H(f.1@cHH$DHHH5vdH%(HD$1H1t H<$%HL$dH3 %(uH+ff.HHuHt*HH@1HÐHHH5svdH%(HD$1Ht2H<$x%Ht*HHL$dH3 %(u HÐ1H(HH5vdH%(HD$1HL$HT$t;Ht$H|$|u(Ht*HHt$dH34%(uH(1H=.f.H(HdH%(HD$1LL$LD$HD$H5]Ll1҅tHt$H|$HHL$dH3 %(HuH(gHFHH~$HH<HHtHD1HD$H|$Ht1HÐUSHHFHH~NHH;kHHHt'HH~HHH4HHHHR0H9uH[]DH1[]{ff.UH=O.SH%HHtiH-s*H5HHEH_HEHHH5$tHHIt*H5'tHH.Hop*H5tHHHH[]f.ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.SHHHtHCH/t1H{HtHCH/t 1[fDHGP01[DHGP0HHH α.HdH%(HD$1H[sIl1t%H=. HtH$HHPH@HL$dH3 %(uHDSH D.HHHHrHdH%(HD$1I1t)H=i. HtHSHHPH$HHPHL$dH3 %(uH[,ff.AVAUAATUSHHH=ګ1H.H9FHkLsLfHMCHHHE1HLI$HhL` XH+Ht?HtjH5[1DHHmuHUHD$HR0HD$H[]A\A]A^HCHP0HuHl*H5qH8101H[]A\A]A^Ð1Ht$Ht$HHͪ11Hp*H5ߐH81H1[]A\A]A^ÐSHHH/uHGP0H{HtH/tH[HGP0H[ATHUH5pSH(dH%(HD$ 1HD$HD$P1LL$LD$ZYHD$HtHH<$ IH>iHHDHH~HH>HHteLHHHT$H1HHHH|$1HHD$HuH+u HCHP0H|$Ht H/uHGP0I,$t3E1HL$dH3 %(LH []A\HD$.fDID$LP0[HuH+u HCHP0H|$taI,$u ID$LP0Ld$H.j*H;u$H|$HaH/WHGP0NH;H5doHi*H5woH8PAUATUSHH~HnHIIHrH10HHtwHhLHHE7HCHMtUL HC Ht$HC0HC(HH[]A\A]fDH+u HCHP01HH[]A\A] fHh*H5n1H8HH[]A\A]f.Hh*H5n1H8oH+HC t1ySHHH5nH0dH%(HD$(1HL$HT$LL$ LD$H{Ht H/H{Ht H/H{ HtH/t|H{(HtH/t]H|$Ht$HL$HT$ H:j*H{HsHK H9tqHS(HHHHHHt$(dH34%(u]H0[HGP0HGP0x@HGP0Y@HGP06@HC(fD1ff.@HHG(Ht/HHWHwPLO 1LGHH=kH@HIi*AUIATIUSHHHHHI|$ H;= i*HHMtLHI|$HH H+Iu HCHP0Hmu HEHP0HL[]A\A]@H~u1HHI|$ H;=vh*lI|$Mt.IEL@SHH1E11H H+IuHCHP0tfDH+uHCHP0fDH+u HCHP0HmuHEHE1P0-ff.@AWAVAUATIH=~7USH8dH%(HD$(1HtoIT$HHD$LjM~z1L5j DHD$HHD$L9}]IT$HHTH1LH+Hu HCHP0Hu1HL$(dH3 %(H8[]A\A]A^A_HI|$ H;=f*twHD$Lt$ Ll$H\$L=diDHL$ HT$1HLHmuHUHD$HR0HD$HlI|$ HLLH_uID$IT$HH=iHp1Hm(HUHD$HR0HD$CSH#H{0tHdH{HtH/tuH{HtH/tVH{ HtH/t7H{(HtH/tHCH[H@HGP0HGP0HGP0HGP0ATIUHSHHHt HՅu=H{Ht LՅu+H{ Ht LՅuH{(1Ht[LH]A\f[]A\ff.ATH=Υ.USH.H dH%(HD$1H$HD$HtzIH0fH{.HHHLHpH]Ht!HyI,$u/ID$LE1P0HL$dH3 %(LuH []A\DE1VfDHHHtH1DHHHtH1DATIUHSHHHt HՅuH{ 1Ht[LH]A\fD[]A\ff.ATUSH~H=F.HIHHt[HEHHCMtI$Lc HUHHCHtHH[]A\H+u HCHP01H[]A\fDH`*1H5gH8H[]A\H(HdH%(HD$1LL$LD$H5l1҅tHD$H9D$t#H\c*HHL$dH3 %(HuH(Ha*fH(HdH%(HD$1LL$LD$H5Tl1҅tHD$H9D$t#HHL$dH3 %(uH(D@H(HdH%(HD$1LL$LD$H5[1tHt$H|$HL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H54[e1tHt$H|$HL$dH3 %(uH(d@H(HdH%(HD$1LL$LD$H5Z1tHt$H|$HL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5dZ1tHt$H|$HL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5Y1tHt$H|$HL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5Y1tHt$H|$HL$dH3 %(uH(褿@H(HdH%(HD$1LL$LD$H52Y51tHt$H|$HL$dH3 %(uH(4@H(HdH%(HD$1LL$LD$H5X1tHt$H|$HL$dH3 %(uH(ľ@H(HdH%(HD$1LL$LD$H5kXU1tHt$H|$HL$dH3 %(uH(T@H(HdH%(HD$1LL$LD$H5X1tHt$H|$NHL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5Wu1tHt$H|$NHL$dH3 %(uH(t@H(HdH%(HD$1LL$LD$H53W1tHt$H|$nHL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5V1tHt$H|$HL$dH3 %(uH(蔼@H(HdH%(HD$1LL$LD$H5aV%1tHt$H|$>HL$dH3 %(uH($@HHHcHtHfD1HÐH(HdH%(HD$1LL$LD$H5U1tHt$H|$HL$dH3 %(uH(脻@H(HdH%(HD$1LL$LD$H5cU1tHt$H|$HL$dH3 %(uH(@H@Ht@Ht@Hd@H(HdH%(HD$1LL$LD$H5Te1tHt$H|$HL$dH3 %(uH(d@H(HdH%(HD$1LL$LD$H5TT1tHt$H|$nHL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5S1tHt$H|$~HL$dH3 %(uH(脹@H(HdH%(HD$1LL$LD$H5S1tHt$H|$NHL$dH3 %(uH(@H(HdH%(HD$1LL$LD$H5"S1tHt$H|$^HL$dH3 %(uH(褸@H(HdH%(HD$1LL$LD$H5R51tHt$H|$.HL$dH3 %(uH(4@Hd@H(HdH%(HD$1LL$LD$H5@Rt9Ht$H|$Ht$HHT$dH3%(uH(1蟷ff.@H(HdH%(HD$1LL$LD$H5Q%t9Ht$H|$Ht$HHT$dH3%(uH(1ff.@H(HdH%(HD$1LL$LD$H50Qt9H|$Ht$貼HcHt!dHT$dH3%(uH(1ff.@HHHcHtHfD1HÐAVHA*AUIATUSHH9Ft[]A\A]A^hLvHM~H1HLI9t%ItH/H+Iu HCHP0Mu[L]A\A]A^IfDAUATIHH58PUSHMl$dH%(HD$1I>tWI|$~LHHt;M~81DHDHI9t!ID$H<$HtHuHmt#1HT$dH3%(Hu5H[]A\A]HEH1P0fID$H<$HpHĴ@H(HdH%(HD$1LL$LD$H5NUt9Ht$H|$貶t%HFC*HHT$dH3%(uH(D1?ff.@H0HdH%(HD$ 1HD$H5|NP1LL$LD$ZYt?HT$Ht$H<$tt'HB*HHL$dH3 %(uH(1蟳ff.@H$@SH=/.*HH=:.H袿HH .H5MH.LH=e.pxTHHR.H5MHC.H=.Bx&HH.H5nMHu.H[1H[ÐSHOLWL_ HHG(HW0H?HHH~J1fIu M1HHuM=HH9H#A*H[ff.fHGAWAVIAUIATIUSHHoL H_(L9t\H=(fDH|Ht LAԅuDHH>uM~ H1L9ufDI|Ht LAԅu HI9^0}1H[]A\A]A^A_ÐH HHtH1DSHH(HtHC(H/tH2A*H[H@0HGP0ATIUHSHH(Ht HՅuH@*LHH[]HA\[]A\ff.SHH(HtHC(H/tH@*H[HDHGP0ff.@UHH=.SHgHHt1HE HHCHE0HCHE8HEHC(HEHk HC0讯HH[]@UHH=Ѫ.SHHHt1HEHHCHE(HCHE8HEHC(HEHk HC0NHH[]@HW Hw1HJH+O0H=}Hff.H0SH !B!HOHO(H=HHH< H?HH)H HP@HHOH9HuLG(HWJDHHAH9I !B!L_(M3LILH?N II)LHL)HI)HHH9~^HWIIMtfHHHuJDHDHH]>*H5KH81HJLHIH H?HW HH)L)HHDHHHuJDHÐLG0HW JDHff.SHH HtH/t H[HGP0H[ШAWAVIAUATIUSHHo(HtHFHuo1HHE1Hj=*LLHMl$((H+At%HtHmtqHD[]A\A]A^A_HCHP0@L~M~wLnL[t?HL׶HHtkMmIEc@HEHP0@L;-;*uFHL菶HHu!DHLpHHA0H8*H5JH8ݐAVL53;*AUIATUSHw(L9t1Ht,1HHu'E1[L]A\A]A^f1HHtH`H5s.L1HHHIHIuIM1LHڿMI,$ItCHmt$H+mHCHP0[L]A\A]A^@HEHP0H+?fID$LP0Hmu@Hmu HEHP0H+HCHE1P0ff.H:*ATIUSPXHI|$(HHthxvH= HI|$(]HtX1HH=GHԓHmIu HEHP0H+u HCHP0L[]A\I|$(H뚐H+u HCHP0E1[]LA\DH=<5DHoff.ATH5s.UHSHHIHHHM@HuHtKMHH=G1'HI,$u ID$LP0H+u HCHP0H[]A\f.H i8*MH1H=FտH軸HsHHt]HM@HuHtHH=B1蜿HHH=kF1HeI,$u ID$LP01UAWHAVH5,FAUATUSH8dH%(HD$(1LL$LD$ {H|$YIHuIHHD$ H5.Hx2HS8*H5.HHH5b.IHD$ HxH5J.HIH&L9MI9 L@HHH|$ H藵HHLH蠜HHH|$ HH4Hmu HEHP0H+uHCHP0L¢HHuf.I,$uID$LP0fDMtImu IELP0蝾HuH6*H1HL$(dH3 %(H8[]A\A]A^A_H|$ H5$.IHs1LIH1HL1LH5LHHD$mHT$HH*u HBHP0HH|$ HHHmu HEHP0H+L耡HHlI,$u ID$LP0fI.u IFLP0MI/IGLP0fDH|$ LHX5E1E1I,$u ID$LP0H+u HCHP0HtHmu HEHP0Mal@1@HCHP0Lff.H@Ht DH4*Hff.HW0Ht[HG Hw(H9p8uUHOHwHHDHHW0HOHuH HHHG=HWH@1DHH0*HG0H5CH8.1HUHH.H5ASH(dH%(HD$1HL$LD$HD$ tyH|$HHtgH|$~61H(u HPHR0HH9\$~HHuH}0uHL$dH3 %(Hu(H([]Hmt 1HEH1P0虣fHw(H1HHt 1SH5I2*1BfATIUHSH(H;='2*tEHt@11ǘHHtHLHyH+tF1H[]A\fDL1HHtHH0*H8臝H+uHCHP0DHSH9PHm1Ht$HHym1Hm1HH[fVHHuɜH0*H5 A1H8fDS10Ht^1HdHt?HCHC HHC(HC0HCHC8HCHHC@[fH+u HCHP01H[fAW1AVAUATUSHLILIHHH9HHIHH9HJ:H9HOMnIV 1I^(Mf0IF8HHgL It$HH9HNH9HNHI)H)H)HHLLILI4H4HuIu HHA=H}DI=A=J<LL)HA>MLI)HI9LOI9LOH1LMLfI4H4HI9uH>u LM1HxHH xk1H H5k1HH1H Vk1MnIV I^(Mf0H[]A\A]A^A_HHH9HHIHH9kL)q@HtMLA>IEI1|HtFH>IHH1LHT$HT$Hu?LHT$HT$HuHHT$菑1HT$ 1VATUSH t,x[H=tH[]HtCHh1HH gH Ph1Hu M1IL9l$t-I|H4$tH1[]A\A]A^A_E1HL[]A\A]A^A_DH"*H54H8躗HO@HHHtE1H51銩f.1H551pAWAVAUAATIUH-.SHHHH9tHMI|$H9tH5ԑ./gHSID$A$AuL9#H9\HHHyLIHuaSLXIHLHH蜢AƅH+u HCHP0I/u IGLP0AHHHuHHLޏHID$I/D$u IGLP0ӫHAAH3JcH>fL9tKH9H+"*HH[]A\A]A^A_H*HH[]A\A]A^A_fDH#*HH[]A\A]A^A_fDHmu HEHP0H1[]A\A]A^A_fDAHmu HUHR0I,$u IT$LR0AtEuHm!*H=@DLHH+AtI/uIWLR0HSHR0E1HAsE1I9AdE1I9AUDt$JE1MA;Dt$0HD$MDH+tD$D$3HCHP0D$D$fHG Hw(H9p8u^HW0HHOHwHHDHHW0HOH>uH H@HHGHWHHH*HG0H50H8螓1H1ff.fUHH!.H5"/SH(dH%(HD$1HL$LD$HD$mtyH|$_HHtgH|$~61H(u HPHR0HH9\$~HHuH}0uHL$dH3 %(Hu(H([]Hmt 1HEH1P0fUSHHOHHH HHS0HDHHKHS0HC8HtH[]Ht;H[1H/H kH d[1Hkff.SHfD1HVH(tH{u[HPHR0@SHHHH*H0dH%(HD$(1HL$LL$IH RH$HD$H~*HD$1HD$HD$ !zH|$HtH;=x*tљHtkHy n@HHC@H H4$HtHlHtWH(t!1H\$(dH3%(uFH0[fHPHR0@苣HuHo*H5)H8谍@HH*HHSHH{HtH{H{t/HEHV1H{H HHuI]HtIEH+t [1]A\A]A^fHCHP0@IAL9|EuHHtIUIM(IE0HH9|L9~EuIM[]A\A]A^Me[]A\A]A^IAI9Etaff.ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{ 1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{ 1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{ 1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{(1Ht[LH]A\fD[]A\ff.UHSHHHHtHEH/t!Hr*H]HHH[]HGP0ff.@ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{1Ht[LH]A\fD[]A\ff.ATIUHSHHHt HՅuH{ 1Ht[LH]A\fD[]A\ff.HHHtH1DHGHt~HHGHGH1ff.fUHSHHH0HtHE0H/t!H*H]0HHH[]HGP0ff.@SHHH5H dH%(HD$1HL$HLD$hH{(HtHC(H/H$H{0HC(HHtHC0H/tbHD$H{ HC0HHtHC H/t.HD$HC HH*HHt$dH34%(u:H [HGP0HGP0HGP0_@1跁SHHH5_UH dH%(HD$1HL$HT$HD$RH{HtHCH/tkHD$H{HCHHtHCH/t7HD$HCHtHH*HHt$dH34%(u.H [@HGP0HGP01πff.@SHHH5mH dH%(HD$1HL$ HT$HD$btnH{HtHCH/tGHD$HCHtHT$ 1C H *HHt$dH34%(u H [fDHGP01SH.HHH5H dH%(HD$1HL$LD$ 褟thT$ 9wgH{HtHCH/t8HD$HCHHl*SHHt$dH34%(u?H [HGP0T$ 1@H *H5H811AWAVAUATUSHLwG(Lg M~gHMkI<$LoI_HxrILITHHHH9Bt&@IDITHIDH;BHBI|IDHIDH/uHGP0HHuE(E1HL[]A\A]A^A_DLȒHtHE I_M1ILHHLHI9uI,$tRI'f.HDIHHzHBH/t I$tHGP0I$`IT$HD$LR0HD$IE11LIH HE M~IVHz1ITHzHRHITHI9uPI,$jI:fAWAVAUATUSH(G8LwHoLo(L0IMMNMjI}Lg I_HNH4I4HHHudJIyLTLfL\5HD5H9}HPHHPH9uLMH)HI4HIHHItI)HJDHHHHI9~4fDHDI|IDHIDH/uHGP0HI9uIEH(L[]A\A]A^A_H|$LLL$ILD$HtOMI@(I_LL$1ILHHLHI9uImt{If.A@8E1sE1kH|$LˏLD$HItI@(M?1HTITHITHI9uIULD$LHD$LL$R0HD$LL$LD$IImtIAWAVAUATUSHHwG0Ho Lw(Lf;IH7H}LoI^Hx+IDIT$H9t.fDIDH9uHHuAG01GLxLd I9~,fH|M|I$LdH/uHGP0HI9uHEHH[]A\A]A^A_LH4$LHtMIG I^H4$1HLHHLHI9uHmtHf.HUHD$HH4$R0HD$H4$H@1`LH4$čHHIG M5H4$HVM$H 1DHTHI9uIHHmkHoAWAVAUATUSHG0LwLoHo Lg(IHH}IvM|$MxQKTL)HI 7HH9IGIT"H H4IHH9uIHHHuA@01tHI M9~)KDKLf.HpHHVHPH9uL9}4fDIDH|IDHHDH/uHGP0HI9uHEHH[]A\A]A^A_H<$LHt$L$HHJMI@ M|$Ht$1fDHLHHLHI9uHmt HfHELD$HHH4$P0H4$LD$@1TH<$L脋L$HHI@ M%1DITITHHTHI9uHLHHmeH ff.fUHH=.SHwyHHt"HEHHHCEHC CuHH[]UHH=5.SH+yHHt @HH@ HEHhuHH[]fH(H 9*HH5dH%(HD$1HLL$LD$蕕tzH<$hHtlHT$HrH9AH~%Hz1fH HL(HHH9upHT$H9tHHtaH5o.HtsH|$I\$~L-J.IDHH9l${H1L1MHHuI,$uID$LE1P0JE1?HH+Ht/HHp뼐H))H5E1H8gtfHCHP0rff.@SHHco\HtcS~,zL@1 HHt(HI4HrH9uLC MtHSHsH1H=3[鄈@L*1[OHW1HwH=SHOHW1HwH=2fAUIATUSHHG Hx2HIM IHy~C11DHIDHcH;Y}#HDHu1Ht0IM IM0IuHL[H=[]1A\A]镇I,$u ID$LP0H1[]A\A]fDHOHW1HwH=RfHOHW1HwH=2fHOHW1HwH=fHOHW1HwLG H=ff.HOHW1HwLG H=龆ff.HOHW1HwDG H=X鎆ff.LGMt#HO Ht*HWHw1H=C T@HO L)HuH )SH賬HH[jfSH蓬H{H/uHGP0H{H/uHGP0H[jSHSH{Ht H/H{HtH/tqH{ HtH/tRH{(HtH/t3H{0HtH/tHCH[H@HGP0HGP0HGP0HGP0HGP0d@SH蓫H{HtH/tHCH[H@HGP0SHSH{ HtH/tTH{(HtH/t5H{0HtH/tHCH[H@DHGP0HGP0HGP0SHӪH{HtH/t4H{ HtH/tHCH[H@@HGP0HGP0SHsH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SHH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SH賩H{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SHSH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SHH{HtH/tHCH[H@HGP0SH賨H{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SHSH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SHH{HtH/t4H{HtH/tHCH[H@@HGP0HGP0SH蓧H{ HtH/tTH{HtH/t5H{HtH/tHCH[H@DHGP0HGP0HGP0HHdH%(HD$1IH5< 1t H<$ HL$dH3 %(uHiSH HtYH{HtHCH/t1[ÐHGP01[DSHsHH[dfAUATIUSHH_H{0tlHk(I|$HvH{(Hk0HC0HtHC(H/tHH[]A\A]DHGP0HH[]A\A]H{/dIHtGH{H;=)t*H11螃HHt6Hk(Lk0YfHHH1[H]A\A]ImuIELP0Wf.SH 4.HHHHrH dH%(HD$1H )LL$LD$HD$1UtH10HHtlH@ H|$H@(H@0HD$HCH荔HCHtHL$dH3 %(Hu%H [H+uHCHP01gATH ~.IHUHHSH0dH%(HD$(1LL$ LD$TtZH|$HHtHH|$ ޓHHt&1LA$0HtDHXHhf.H+u HCHP01HL$(dH3 %(uEH0[]A\DH+uHSHD$HR0HD$HmHD$uHUHR0HD$f@ATH s}.UHHHSHH0H6)dH%(HD$(1LL$ LD$H\$ StnH|$IHt\1H0HtSfDImu IELP01HL$dH3 %(*H([]A\A]A^A_fHH)H5YH82ZH<SIL9H<:IMtwHtr1HtfDIHH9u1Ht@HH)IHH9u1LA$0Ht31H9LhLxLp H@(Hh0P86RMt LJMLJfoHH)H5H8H@[]A\A]A^DHH=]~jH|$(E1IH9CTIHLH?H ЄfDH1)H5ZH8rH1UADIE1f]HtUH|$(H9tSHu@]HtUH)H5H8G1@HmHD$HUHR0HD$Fff.@UHSHH8dH%(HD$(1HY{.H91LL$ LD$HH5{[tgH|$ ]rHHtU1H0Ht5HT$HHPHhH@ HL$(dH3 %(uUH8[]DHmHD$t,@1@HH=^ |Q1DHUHR0HD$EfUHSHH8dH%(HD$(1H{.H91LL$ LD$HH5{ZtgH|$ ]qHHtU1H0Ht5HT$HHPHhH@ HL$(dH3 %(uUH8[]DHmHD$t,@1@HH=j {Q1DHUHR0HD$DfATUHSHH dH%(HD$1H|.H91LD$HH5~YtbH|$`pHHtP1-IHt)1H0HtqHhL`@ "HmuHEHP01HL$dH3 %(ugH []A\DHH=fyCHmuHUHD$HR0HD$I,$HD$uIT$LR0HD$Bf.AWAVAUIATUSHLgID$L[fH;=i)tdH11[]IHt{HbI/Hcu IGLP0Ht@H+u HCHP0Hx>LAHHt0I}H;=)uHaHcHuHH[]A\A]A^A_Ð1@H+uHCH1P0@AWAVAUATUSHLgLoID$LIEHHD$QLHD$HHt^H6aH+Au HSHR0At&Hmu HUHR0ExLAHHu1HH[]A\A]A^A_DHmuHEH1P0ff.SHH`xHHC H)H[f1[ff.AUATIUSHI|$ HtSHGHHtAI|$H11p[HHtpH0`HmLct&ItH+t:Mt%D1HH[]A\A]HEHP0@ID$ DHCHP0MuH+uHCH1P0@SHH_xHHC H)H[f1[ff.AWAVAUATIUSHLoIELaf.I|$ t_I|$H11WZHHt_H_HmLcu HEHP0MtVH+u HCHP0MxLAHHu1HH[]A\A]A^A_H+uHCH1P0@ID$ ff.fATIUSHHHGHHH)H9CtjHlH+HtIHt\I|$1HEnHmtH[]A\DHUHD$HR0HD$H[]A\HCHP0@HH1[]A\ff.fUSHHH{[DsUHtH)H8?Ets6MH{-aHt`H{jHHtOHCC H{H(tJ8HHtC u(H{HMtHmuHEHP0D1HH[]@HPHR0FfATIUHSHHHt HՅuMH{Ht LՅu;H{ Ht LՅu)H{(Ht LՅuH{01Ht [LH]A\[]A\ff.AUIATIUHSHHHt HAԅuNE1ۅ~$DHcH|(Ht LAԅu)9]H} 1HtHLL[]A\A]@H[]A\A]ff.fSH1H0HtHXH@H[fH+uHSHD$HR0HD$@SHHhHt HH[f1[ff.UHTl.HSHHH9t$H\hHt*HHH[]FfDHH=QruH1[]@ATIUHSHH Ht HՅu-H{Ht LՅuH{1Ht[LH]A\@[]A\ff.ATIUHSHH Ht HՅu-H{(Ht LՅuH{01Ht[LH]A\@[]A\ff.ATIUSHc_Ho8~1H] HtoHHmu HEHP0AD$HI\$19]~"HcHD(HA\$[]A\fH}w5Ht'EHD(A\$fH}HHE Hu[1]A\Il$kf.HG HOHWHwHt/LG(Mt&LO0MtHH=P1PHDH=1Of.HOHWHwHxH=>1ODH=1Of.HWHwHH9tH=1wOHO HW1H=ZOf.HWHwHt/HOHtH=71(OH=)1OfH=1OfHHt 4DHH)H5H8:1HHWHwHtH=1p!H=1b!fG(H HWAUATUHSHLjLyLIHt81M@IDHI9t*HEHHEHHEHfHHu4H<$HtHT$Ht$|HD$dH3%(u0H([]A\A]A^A_DHGP0D@HGP0 g)HC-HpH1HH#-HpHH)HHS,HHHpgH;[>ff.ATIUS,P~JH1 f9]~9HUHcHHtH8LH6x,tH}ރ9]HX)H[]A\[1]A\ÐH?1HuH )HHHHÐUH=?m.SH?HtHHH+HH HEaHEHtH=>HH[]1HH[]f.fSJOHHtH9u[>H‰HuHʵ)H5H8)[@SHH dH%(HD$1ø-tWd@tJlt=b`t0c t#pt?sDD$%ໃrD$%ඃwD$؃@ൃxD$؃ ໃrD$؃ඃwD$؃sD$؃ໃrD$؃ඃwD$؃t?tD$H|$ ZHL$dH3 %(uTH [ÃsD$FൃxD$@ൃxD$k =H1HuD$?r}%ff.fSHÃt[MfD`H57H"H5#HH5HH5HH5Hr1H5HY1H5H@1H5H'gH5H KH5H /H5{H H5gH H5SH H5?H @H5,Hc H5HG H5H+ kH5H O@H5H 38H5H  H5H H5H H5H H5xHg H5dHK H5PH/ oH5<H SH5(H 7H5H H5H H5H H5H  H5Hk H5HO H5H3 sH5H WH5H ;H5H  H5rH 1H5eH H5QH H5<Hr H5'HV H5H: u~H5H" ufH5H uNH5H u6H5H u H5H tfD1H[ÐSHH5)H dH%(HD$1HL$HHD$':H$:H|$H;=)ttHt$H|$KH$HHHH}H1S.H|$HHtH/tPHL$dH3 %(Hu~H [HD$1H=0H5B1fHGP0H|$HtH/tH)H8!|@HGP0f.H(HH5dH%(HD$1HT$HL$LD$81tHt$H|$T$1HE-HL$dH3 %(uH(kff.H(HH5AdH%(HD$1HT$HL$_81tHt$H|$1H,HL$dH3 %(uH(ff.@HHH5S}dH%(HD$1H71tH4$11HT,HL$dH3 %(uHzf.AUHH5VATUSH(dH%(HD$1HT$n7H|$Ht$BHHHD$HxHH|$H9wnHSIHt]HT$HH=H9D$w-LhLJ4 HHtbLHHI HL~ HL 1H HL$dH3 %(HuH([]A\A]1@Lff.ATHH50USH dH%(HD$1HL$HT$;6tgH|$1@HHtSH|$1@IHt/HH HcL%HH L H 1H\$dH3%(Hu H []A\}ff.fH8HH5idH%(HD$(1HL$ HT$HD$ f5tjHt$ |$Ht,o=HtZ1H)HT$(dH3%(u_H81A=HuH=0H5HD$HD$D1@H=0H5˿HD$XHD$ff.H(HH5ƿdH%(HD$1HT$HL$41҅t$Ht$H|$9HD$Hu(H)HHt$dH34%(HuH(D1H(H@SHH5:1HdH%(HD$1H4t"H<$HH$Ht*1Hp(HHL$dH3 %(HuH[@Hy)H8 zf.SHH5HdH%(HD$1HT$s3|$tWH@o)H9zt?HZHuHg)H5YH8HL$dH3 %(Hu9H[3HtHHD1H{'HfD1AW1AVAUATUSH<u @эQHct<uHcIHϻ>IHu%E@HLL.uNAEt)<t%LcO,&I}!HHuI/tOE1HL[]A\A]A^A_f.HmuHEHP0I/u1fIGLE1P0륐8fDATUS;HJH 1H8I%&HHHH5H7HEHHEu HEHP0I|$1%HHHH5HHEHHEI|$9HHHH5HHEWHHEu HEHP0I|$1O%HHCHH5HaHE HHEGI|$ 1 %HHHH5HHEHHEu HEHP0I|$(1$HHHH5HHEHHEu HEHP0I|$01w$HHkHH5JHHE5HHEu HEHP0I|$8HH#HH5HAHEHHEu HEHP0I|$@1#HHHH5׺HHEHHEu HEHP0I|$H1#HHHH5HHEYHHEu HEHP0I|$PHHFHH5`HdHEHHEu HEHP0I|$QHHHH5HHEHHEu HEHP0I|$RHHHH5޹HHE~HHEu HEHP0I|$S7HHkHH5HHE5HHEu HEHP0I|$THH"HH5iH@HEHHEu HEHP0I|$UHHHH5.HHEHHEu HEHP0I|$V\HHHH5HHEx^HHEu HEHP0I|$WHHtOHH5HmHExHHEu=HEHP01HHEuHEHP0@H+u HCHP01H[]A\fDHEHP0.HEHP0ATH=d.US&HHHC1HIH5HIHMt I,$$H5HIHuMt I,$H5HIHFMt I,$H5HIHMt I,$gH5tHIHMt I,$(^H5QHIHMt I,$/H5-HIHMt I,$H5{HIH[MtI,$tg11H=/H5۶HHNf)HHl0H5HcSHHHsHuH[]A\ID$LP0ID$LP0NID$LP0ID$LP0ID$LP0ID$LP0JID$LP0 ID$LP0HStFHxHtH@H/uHWHD$R0HD$HxHtH@H/uHGP01Hf.ATIUHSt/HxHHt LՅuH{Ht[LH]A\D1[]A\ÐAWHHH϶AVAUATUSHxdH%(H$h1HqHDŽ$H$H$HH$HPH$H;H$H,H$H7H$H0H$HH$Hș)D$0HD$@HHD$HHD$@D$4HD$PHD$XHD$`PHD$fD$I|< H(ADH9r\$ Ƅ$bxH$bHAtrHEtwHD$EtaHDT$Et+HDL$Et=$D H)HL$(H5H8CSl$HL$(Dd$ D#d$yD$ D$*DD$Et&H|$PH\$XHH|$`LL$@DD$41H5HT$8H=Ι)HHH|$H4IHHD$11H5W.H%LT$HHLT$ HD$o HT$LT$ HH*uHD$ HBHLT$P0Ht$ LT$L$0My<=p|$I*uOIBLP0CfDI|<D$ f HDH)LH5ɲ1H81{:H$hdH3%(HHx[]A\A]A^A_AjDD$ XD$H$9@D$(S6HT)HT$8H5 H819fD1FH$bH11H5p}.HLT$L$(D$0 #LT$HHLT$ HD$HT$LT$ IċL$(H*uHBL$HP0LT$ L$I,H$DLT$ L$!L$LT$ H$HT$0ẢH$)H5>L$H8aL$DHT$xHt$pL$H|$h01H5'|.1H"HT$xHt$pH|$hH&)HL$tHmuHEL$HP0L$H+uHCL$HP0L$MkI*aIBL1P0Ha)H5H8HF)H51H8eH))H51H8hHH )H5 1H8K+H)H51H8.HҐ)H51H8t$H$D t$ D +qH=ؒ)1HH5L$KL$HHcH+uHCHP0L$L$t9I*Hw#Ht$ LT$>Ht$ LT$HL$HH1ATH=)H5DLL$pLD$hHL$`HXZHL$HmuHEHP0L$LH5z.HL$ L$|H)H5YL$H8L$lH=)H=ٔ)D$0LT$ L$UL$LT$ H+HH)HT$HH5KL$H815L$1AUIATIUSH8HHHHHt:H+tHH[]A\A]fDHCHP0HH[]A\A]HtH_)HH2tKMt&ID$H5:LHP14}HHHHIOHIff.fH;=e)ATIUStLH0ŅtNH)HH0HtI$[]A\fD1Hu@HHCH5HPH)H814[]A\fHH=)HtHHt HDH)H5bH8Z1HUHSHHHt?H_H;_)HtH~HHHH[]@HEH/uHGP0H=HHt71H-"HEHtHH[]f.H+u HCHP01HH[]@AWAVAUATUSHH=)HHH H5jHHH)H=)HPH5^LH΋)H1HEHfHHH5Ha,9H)H5HHH<,L%M)LU I$LH5H,.L%_)L I$LH5QH+L-))L IELH5%H+L5K)L [ILH5He+L=v)LMw ILH5H)+L%)LM$: I$LH5DZH*H=) L%@)LM$ I$LH5@H*L%)LM$ RI$LH5ӴH[*L%)LM$l I$LH5H*EL%)LM$. I$LH51H)L%)LM$I$LH5H)L%j)LM$ZI$LH5Hc)L%\)L|$I$LH5:H-)UL%v)I<$L%)I<$L%)I<$RL%p)I<$"L%)I<$L%Č)I<$*L%:)I<$L%)I<$L%)I<$L%)I<$jL%)I<$:L%Љ)I<$ L%)I<$L% )I<$L%‰)I<$L%)I<$]L%>)I<$-L%,)I<$L%)I<$L%)I<$L%)I<$mL%)I<$L%„)I<$rL% )I<$BL%)I<$L%d)I<$L% )I<$E-I/uIGLP0fDH}HtH/t1H+t1HH[]A\A]A^A_HCHP0@HGP0H+uI,$uID$LP0ImuIELP0I.IFLP0pH=&YT&I$HdR1I$H911I$HH=V&I$HzH=%I$HJH=%I$HH=¤%I$HH=%I$HH=l%I$HjH=[N%I$HZLH=ڭ0%I$H*.11,I$HH=M$I$HH=ò$I$HuH=W$I$HEH=$I$HH=$I$H}H=a$I$H_H=C$I$HeAH=1%$I$H #H=$I$HH=#I$HH=#I$H}H=#I$HMH=$1 -ff.fAVAUI1ATL%ԎUSHH LL1H5t.7 HHt_H;})H@H{tbHHH+Au HCHP0EyHmu$HEH1P0fsHmt<1H[]A\A]A^fDH+uHP0H]y)HH8'HHmuHEHP0H[]A\A]A^f.H}tH(uH@HP0Hmu HEHP0H+u HCHP0H8z)H5H8YH@ATUSHHH5HdH%(HD$1HH$ H4$H1;HHHH-x)H1H01VHHtHH;{)t?Hny)HH0SH$IH+ItLHLHHHmu HEHP0HL$dH3 %(HulH[]A\f L$$HtHmu HEHP01@H1H5lq.1 HHCHP0L$$I\AH]x)ATUHSH0v"HtHH H+At%Eu/H;-{)Hz)tH[]A\HCHP0EtH2x)H5)H8s1ff.@SH5T{)H|HtHH[ff.HH5!{)LHt Hpy)HHSH5z)HHtHH[ff.AVAUIHH5ATUSHdH%(HD$1HH5z)LHH<$IHfDLHHt_L%w)twI4$1HL1HHtHmH+uHCHP0LHHuHI}HIu IFLP0Hx)H"Hmu HEHP0I.t:f1HL$dH3 %(Hu=H[]A\A]A^HEHP0^IFLP0HIuIFLP0fSH8y)HCHP0H[fHs)SH1H01HtH;x)uH9t"[H(t*H=n1[f.H+u[HPHR0H=:1fDH}w)SH1H01HtH;yx)uH9t"[H(t*H=S1[f.H+u[@HPHR0H=1fDHr)SH1H01HtH;w)uH9t"[H(t*H=n1[f.H+u[@HPHR0H=:1fDUH5n.SHHwtHv)HH[]ÐHx)1HH01HSw)H5m.HHQxHt.HmuHEHP0DHtHmu HEHP01fDHUu)HHEu)HHH5Am.uHu)HHHYs)H5PH81fDH?u!H1HSHxwHCHSHH{HCHCHHSHBHCtHH{HtHCH/tHCH[H@fDHGP0HCtH[DH10HtP@H@ pPHf.H HHtH1DHG HtHG H(t1fHHPHR01Hff.WуtHMHBHDDtHGrH*HDfDHtHHxHDHHGH5HPHrq)H811HÐHSHH@lff.HcH?Off.@USH(dH%(HD$1Gx HG@u&H/s)HHL$dH3 %(uxH([]@HHT$Ht$HkHu)HHH81KuHT$Ht$H<$fHo)H8!tH!ff.SHWHtHxHH511[fAWAVIAUATUSHdH%(H$11nAvHT$ HHP 11HL$HD$HL$HH9'HvxHHHHHD$H9X|IHIA~H)HD$Ht( LIM&LH9HwH H HBHD$HH9X}H|$HlD1H$dH3 %(WH[]A\A]A^A_DA_H|$H/uHGP0Ht$PHHH9H?HHH)H9tHHrHm)H5H815HD$H9h#H|$H HD$fHyo)H52H8.HD$ u%HH(u HPHR0Ho)HH(u HPHR0Hn)H81ff.AUATUSHH(dH%(HD$1GHD$KGHp)H1HL$H5Ht$H1HHD$H IHT$Hu {IoLHHH9\$tH|$HgHD$H=HT$dH3%(H([]A\A]DHm)A$H8D1@HfDH|$A$H/uHGP0 uHn)HHk)H5TH81_H|$HtHD$H/{HGP011SHGx{HCHSHH{HCHCHHSHBHCtHH{ HtHC H/tHCH[H@f.HGP0[ff.AUATAUSHHHH~H5h)H9tUuLHDHlHuM HމDILHHx:HH[]A\A]@H9j)H5ZH8ZH1[]A\A]DHk)H8H[]A\A]1zAUATUSHodH %(HL$1H$GHHH5H1Nt9H<$H;=k)tUHtPH?IgHHtoH<$H/1HL$dH3 %(HH[]A\A]D1jHH$Hu@H=H[ ICLLIu=H$m@HGP0[@Hh)H5\1H8<H<$H/uHGP0Hj)H8ff.HH5h)H5H8v1Hff.@x1Yfff.Hcx fDATU1Sy []A\DIxL[]A\L(HHi)+H8[]A\ÐAWAVAUATUHHSHHL%i)dH%(H$1H{HD$(Ld$0HD$8D$xC@CHD$0H s.HPH‹HD$$P1LL$HLD$0Y^HD$ H5e)HxH9 AƅH|$ E1 AŅeHT$81E11HHtHD$(Lx g@Hc)H5H8QLd$@DLPD$L|$ Dk1C ЈCLDuD$X%=@tsL|$ LH5r.HxuC{1lHtWH(HPHR0fDHc)H5ZH8"8LHXd)H8CvH{A8  1L%c) H5H1I<$ I<$HHH+Hm HEHP0fDDLI1NLC{Hd)x1>.DkL|$ ELd$@Vf.LX CI,$uID$LP0{x1Hza)H5H8YHb)Ht$ H8HFa)H5GAH8IAff.ATHHtH5m.USHH0H=f)dH%(HD$(1HC@LcH{u4LHL$(dH3 %(HH0[]A\@HHHH(u HPHR0LHuHT$ Ht$D$ H|$D$ y1Cx@HmuHEH1P0\HT$ Ht$H|${bLjaGx@D[ff.Gx@fD+ff.OxUGx HS1HHt1H(u HPHR0CσC[ac1ff.Gx5USHHG{HlHBHHc[]@[ff.SHH dH%(HD$1GD$ xMHHT$HL$ 1H51t{T$ Ht$Ht$dH34%(u#H [H^)H5܂H8R1fAVAUATUSHH`dH%(HD$X1GGIH11LH5ot[IHT$H4${ILHLEu HyhA uJH-_)HEfDHL$XdH3 %(HujH`[]A\A]A^H= HH^)EuH8HXHH\)H51H8^ff.AWAVAUATUSHHhdH%(HD$X1GGIH11LH5-tYL|$I跽H4$L{I?LHLEuHykA uMH-^)HEHL$XdH3 %(HurHh[]A\A]A^A_fDH=^HHY])EuH8mHHH[)H5\1H8{fDGxmUH5j.SHHHHthH`HH=H1Hmt H[]fDHUHD$HR0HD$H[]DH=S1麷f.Ha_)H8t-HsHH=*H[1]vfD1tfGDH0HHtH1DHG0HtHG0H(t1fHHPHR01Hff.HGHh@fHHHtH1DSHHHtHCH/tHCH[H@HGP0S10HHt1HCHt H[fDH+u HCHP0[jf.HHtHG(HHHSHH0dH%(HD$(1HGD$HHHL$HT$ 1H5tH|$ T$HxNtqHy HD$ 1H{Ht$(dH34%(H0[DuHX)HH5KH81!1DHHSH)H9(HH|$ HHS H)H9~HZ)H5H8d1^D1RHW)H5zHD$H:5HD$,HW)H5H81p1 T@USHH(H-Z)dH%(HD$1HGHl$HH1HT$H5h~t|H|$HGunH9uIHSHC H)HHIH{HHHSoHL$dH3 %(H([]@HPHW)H5~H811HHt"HSHC H)HxH9~zHY1|HV)H5yHD$H:HD$Tff.USHH(H-X)dH%(HD$1HGHl$HRH1HT$H5 }H|$HGH9H{HK E1HHCHHH9? Hu NfD: tCHH9rH)H H9}>Et9HHCH\$dH3%(H([]fHf.HKHHPHeU)H5>}H811 HHt/H{HK IHCIHI?HH95H1PH1QfDHT)H5wHD$H: HD$&1GAWAVAUATUSHHH-W)LgdH%(HD$1H,$MH1H5j{H,H<$HGFH9I1諱IH1DH{Hs HSHHH9? Hu8 HH9uH)HIHSHtTLIHHLMItHIu IGLP0LMnI9eDHL$dH3 %(LH[]A\A]A^A_fHpiHPHLS)H5%{H81E1HIu IGLP0I,$uID$LE1P0IHHHR)H5uH8GJf.U1HSHHtBHHHH+tH[]HSHD$HR0HD$H[]DH1[]SHGHHWHH@HGHGHHWHBHG~HO)H5zH81H{Ht 辷HCH{0HtHC0H/t'H{8tH耵HCH[H@HGP0ff.@SH_Ht*HAHK HSHE1HxHC@[HC@1[ff.@HtHR)HfHIT)H@HHP)H5sH8&1Hff.@HtH^R)Hfff.HtHR)Hf{ff.HtHS)HfKff.Ht H@#ATUSHHxHIHHH9s+HZI<$HcHtvH]I$1[]A\1H9wffH*YLHH*f/rHHHH HHH\HnQ)H5vH8cff.USHH(H-Q)dH%(HD$1HGHl$HH@H1HT$H58vyH|$HGuWH9HkHx]H9k ~Hk Hs(H{Hx_HHL$dH3 %(H([]@cHHuHu HiN)HH5uH81D1@HAM)H5BH81fDHPH=N)H5vH811^DHM)H5pHD$H:5HD$4vfDAUATUSHHhHodH%(HD$X1H2H@IHLHl$Hu:HHLHL$XdH3 %(HHh[]A\A]DHCL,$H(H;S(wfHK H{H9|{HHLHCHHCH;C ~HC H{1fHK)H5rA1H8dHs(H{xHCHK H{H9}H)H1HH{HCh1fHiL)H5`oH8SHHHHsH0dH%(HD$(1H~sHL$HD$HD$LD$1HD$Ht$HC HCHt.H;5ON)t%HHtPH(t*HC1fD1HL$(dH3 %(u-H0[HPHR0HC1f.@AUATUSHHoHIHIHu,pHLUH+Hu HCHP0Ht]HmtvLHHuI,$u ID$LP0HuH-SM)HEHH[]A\A]H1[H]A\A]I,$uID$LP0HH[]A\A]HEHP0{HzJ)H5qmH8軿fUSHHHFH~HH@!HG HvHG@HH(}H} HGxHHHu(H-EL)HCH9t'HF H{0H9xAHEHH[]fDHPHR0tHPH5qH~I)H811H[]HHHCH5qHPHNI)H81H1[]HHs0vHH)H5=H8BH1[]fHuHH)H5qH81gfHPH5q;HGHtHw H׳ff.UHSHHttH}0HHtMHtSHUH1HH=o+H+uHD$HSHR0HD$H[]f.HyJ)HH+HD$tH1[]ff.HWHtaHw HOHHH9vK: Hu .fD8 t#HH9uH)HHOHtH˲HpH)HHOHu1mff.fHtuU1SHHHE)H0HHtBHHHX¬Hmt H[]@HUHD$HR0HD$H[]DH1[]ff.SH@,HHHt 蓬HCHI)H[fDHE)H5;H8»1[ff.ATUSHHpdH%(HD$h1HGHLd$H1LH5k;tgHsHC Hl$ H)H9BH|$HsHHkL蕭HMHL$hdH3 %(uGHp[]A\@HHIf1@HE)H5hHD$H:ݺHD$!ATIUHSHHHt HՅuH1Ht[LH]A\[]A\ff.SHGHHtHCH/t:HHtHǃH/t 1[fHGP01[DHGP0H HHtH1DSHHHtHCH/tYH{HtHCH/t2H{ HtHC H/t 1[HGP01[DHGP0HGP0ff.@SHWHt HxHF1[fH=bH=jnH=nH=lHHGH5,hHPHC)H8181HÐH8t HGxHHff.ATUSHHH5mlH`dH%(HD$X1HH1҅t{HL$HH-41H5.HHH@thLcHT$L9H<$Hs L~HfH+u HCHP0LHHL$XdH3 %(HuuH`[]A\H+uHP0HB)H59eH8覷H1f.H9B)LH5H81H+uHCHP0讵ff.GtEHHtD)HHDH)D)H@HPHR0HD)HHfDkfHA)ATI1USH01H"HtmHHCA)HH0H+HtHxIl$0H[]A\DHCHP0Hu"HB)HH5IlH81HSHHxHHC8Ht H螦H{x%HC8HH{hHtHChHtrHCxHCpHPHt @HuHHHEH1Ht[f @)H5kH8\H?)H5:iH8?뫐SHHHH.iH0dH%(HD$(1HL$ILD$H4HCHD$HhHD$1HD$ H$ RH5B)H|$蹬HH{HtHCH/tiHD$HHHCH$HC HCxDxpHCP1HGA)H9St9CC,1HL$(dH3 %(uDH0[HGP0HD$HC)H9P4@AUIHATUSHHHcH腾HHHHOC)E1HI}H01 H+ItRHmt;Mt~H>)LH0I,$HtBHxfI]0HH[]A\A]HEHP0@HCHP0HmuDID$LP0H+u HCHP0HHuH.?)HH5hHH81&pSHG(HCHSHHHCHCHHSHBHCCtHH{HtHCH/t]H{8Ht ߢHC8H{hHt HChHHtHǃH/t,HCH[H@HGP0H{8HufDHGP0[fDSHGHHWHH(HGHGHHWHBHGtH{HtHCH/tcH{HtHCH/t)H|$虪HH{HtHCH/tyHD$HHHCHHC H$HCxxzHCX1H?)HC`HC@H9St3CC,1HL$(dH3 %(u>H0[ÐHGP0{@HD$HD?)H9P@UHHH5cSH(dH%(HD$1HL$HLD$HD$ H?=)H<$HCHH|$HMHHL$H$H5:1H=;)vHEHteHL$HT$H5:1H=>)NHEHt1H\$dH3%(u2H([]H}HtHEH/u HGP0fD̬ff.USHHHHbH8dH%(HD$(1HL$ILD$HsHCHD$H%bHD$1HD$ H$ H-;)H|$H襥HH|$HߥHH|$HHH{HtHCH/HD$HHHCH$HCxHHC JHHCXHt=)HCPHC`1HC@H9St4CC,1HL$(dH3 %(u?H8[]ÐHGP0o@HD$H<)H9P$@HHu7)WHtHH5a謬1HDHH5b葬1Hf.G~H.:)H1H01ޟfDfDG~H;)H1H01鮟fDSG~H4)H1H01~fD#G~H8)H1H01NfDG~H^4)H1H01fDG~H:)H1H01fDG~UH:)S1HH01辞Ht H(t#HHCHCHs[HPHR0@+ff.w~USHHtNK t'H{Pt HSHHx HK@H)HH[̴@S$tH{`u1[@G~HH5zx.uDff.G~HH5*x.ED[ff.G~H4)HH0f+ff.HHtHT4)H0t@HH4)H5F`H8趩1Hff.@UH5w.HSHHtRHHEH=]HHp1H+tH[]fHSHD$HR0HD$H[]DH3)H8t%踶HEH=]HpH1[]|@1@ATUSHopHH9H6)L H{hHMt\1Ҿ@B耫HAAu []A\HH=F_1HH[]A\vH艗[]A\fH2)H1H5\H81[]A\ff.SHO~THu2)HH0HHt`HH+t H[DHSD$ HR0D$ H[HY2)WHtHH5[萧뮸HH5]sff.USHH(WdH%(HD$1H$XHh1EHHHCp{(HCpH{hSHL6)1HH01MH{h1HߡHCpHeHmH[0)H{1H01H{8HHt HC8H<$HtUHT$Ht$bHtHmuHEHP0@1(@H81!@H-A3)HEHCpH{hkHL$dH3 %(HH([]DH0)H8Ct/H5 Z1蹥H1@H5[1芥HEHP0HHHt@H(bHPHR0SHT$Ht$Hf軲"aW 1tHWPHtHH+G@H9}H2)HDUHSHHH@H{8ǚHtHk@H[]ATUSHHtSHIHHt`LH%H+tH[]A\fDHSHD$HR0HD$H[]A\H.)H5ZH8:1fDHa3)HuH81fUHHSHH5r.H(HdH%(HD$1H$%H|H(tVH}HH5Hr.H<$HHtHT$Ht$HtH+t-1HL$dH3 %(Hu?H([]ÐHPHR0@HCHP0@HT$Ht$Hs脡@HHH5Np.ifHHH5np.IfHHH5.q.)fHHH5o. fHHH5o.fHHH5p.fHHH5.p.fHHH5o.fUHHSHH5Jp.HH]H;f.)t H[]DH(u HPHR0H}HHH5p.[]ff.@USHHҍH-0)IH XH5@V1H} HtH}HHyH+t H[]@HCHH@0H[]DATUSH dH%(HD$1H=j0Hw-)H8跦u#HL$dH3 %(H []A\fDLd$Hl$HLHHuHHL7Ht$H~@HtH5Bj0訬$Ht$HT$H<$豎1wf.H<$H/uHGP0H|$H/uHGP0H|$Ht H/uHGP0)@Hi0mff.fAWHIAAVHA1AUATIUSHxdH%(HD$h1H\$HKIHHH5ɋL5R+)IDSAEI61HI|$1HHtEuHmH;,)H))HH0ٍH+tSHI9HtIT$0HtHIT$0HL$hdH3 %(Hx[]A\A]A^A_fDHSHD$HR0HD$f.Hmu@HEHP0HHEHP0?HH*)LH5UH81HdH+u HCHP0EuHD蘜G$HW`HHwXH9USHHHOHH@HH)HɹHHHH)HHtA@H)HHs8HtZHtMHCXHCXHCHtx?HsXHS`H9H*)HCXHC`HH[]D1H1[]H*)H@H)HH)]HxH)kHHsXHS`f.SHHtjH(tLS t4H{Pt^HCH1HxHs@H)ƺHHCPHt)H))H[@HPHR0S uD1[@C$1tH{`uff.USHHOdH%(HD$1H))H$H1H5+NH蹷H{h1FIHCpC$tHHH(H&)H{1H$H01XHHHHHCpH{hHL$dH3 %(HH[]HZ1@H&)SH8tH5O1IH5Q12HPHR0.1_f諨LQUSHHOG,uaueH{h1uHߎHHCpHCpH{hHHH[]DHwtH%)H5 O1H8VHH[]@H$)SH8tH5N1)H5yP11zfATUSHH odH%(HD$1D$ 6HHL$ HT$1H5yN3?T$ D[,EHyH{H5q'),HH $)H|$H0ϊHH|$ DS EHC0HHSPHHK@HH)HDD$ HEu LCHLH)MALIHH)LIII9H9H49H)Hs@HHH1H{華H+#)H5ZMH8l1HL$dH3 %(HH []A\f.HxDK EH{h1=@{$HCpT$ HH HIHLcHHHC tLcPHCpH{h5HA")[H8tgH5K1y @Hx苋{$HCpKHHt7H(HCXHC`H5yM1D1Ls t)H{Pt"HCHHHK@H)HfDK$H{`ufkH`1DHA!)H5TK1H81fHPHR0,謔ff.AUATUSHHdH%(HD$x1GLl$ H1LH57舱`Dc,E[H\H{h1uHk HCpKH{P@H{@HCxHT$0H)H9H?HHH({ ~s$tH{`tHCHHx Hs@H9*Ld$01@HT$0Ht$ HH)HHfHHI)IL9cx|S 8HCPMgHCXLc`Lc@HCPL9}HtLcP@HCHdH{菫H+)H5nI1H8jL†HD[$EugHC@1HCHH)DkH8Eu}H5J1HL$xdH3 %(HNHĈ[]A\A]H{`EH{PrH@HP0{ ]fH5 H1袓Ht$ H{8DS$HS`HC@EtyHtsH9CXmDHl$0DK HHC@EtHKPHtH9H9~HC`HOHHCpH{h苵LsfDHCXfHSxL9kHt$ H{8HRHCxK HCHHC@tHSPH9~ HtHCPHC`H<(1u1fH|$HT$Ht$H|$HBH!)H0O&Ld$HT$H|$L`ItDC EtHCPHsXH{8HS`H)H肸HS`H{XHCXH){HHH){@H)H{xIHC`I)L9d$0vHT$0Ht$ H{`H{8/Hl$0Hk`Hk@vDM;HCXLc`Lc@fD#fDHCP/Ht$ H{8LHLC Lc`HCXLc@rH|$HHT$H|$:DH)ƺHHHLHkHL1AHC8Ht$ LH8Lc`LLc@ff.AVE1IHAUHA 1ATIUSHpdH%(HD$h1H\$H.HOHHL-)f.I|$Iu1H1莃HHtHmH;$)H)HH0|~H+tNHI9}HtIT$0HtHIT$0HL$hdH3 %(Hp[]A\A]A^HSHD$HR0HD$fHmu@HEHP0HHEHP0LHH)LH5FH81HqHHPHHHWHSHD$HR0HD$>5DUSHHG t@HoPHHt3HSxHs8HH)H~ HHkPHkHH[]f11f.AWAVAUATUHSHHO,HXKHE@Lu8U IƅtyLmPItoI)H3I9*Hھ L躘HL)LHpHIHt HE@HDHE@HL[]A\A]A^A_E1L9H}h1ɈuH1HEpuIHME$EILmPHrIHHHxH9LLH}8J7H9s&? HwuDH~ RH9uLIHL9FHL5IHI}HL)HHIMFfLL腂IHIHLΚIHItHLm@L)HHIIGLP0HL)HHI@HHH(HPHR0fDL L萖HfHEpH}h/E1HH)H袁IHtjH]@LLI/u IGLP0H)LH8qIHEpH}h轭I,$hID$LP0XfE1HLIH7H]@.H)H5@E1H8IFLP0}IHIuIGLE1P0WHIxIFLE1P08ff.SHHWdH%(HD$1H$~EH)HH1H57躥1t H4$HHT$dH3%(u>H[H)H8CtH5X>1H5A@܉1#SOHGH;)tcH;)tZH)1H01}HHt/H@uFHPH)H5XAH81ƺH+t61H[fHHHtH{tH[H+uHCH1P0@H)WHtH5`=H1@H5I?H1߈ff.fUSHHdH%(HD$1H$`K,HHz1HH5=HH{h1vuHZm|S$HCpt!H HH(u HPHR0C tHsPHtH{@H)HHCPHHHHC@H{8HDH}HHCpH{hHL$dH3 %(HH[]H{wH)H5<1H8R1@1@H)sH8tH5;1!{@H5q=1 dDH{8|H=:f.AVAUATIUSH`dH%(HD$X1IHH5:1L#AT$ vMl$PIgIt$@I)MVHT$It$8H<$L9L跙Ml$@I|$h1V5fDSzID$pAD$$qID$PHl$ID$@L)HCDH4$HLL6HHtnHuMcHZH)IH~OI9l$x|LHH~H9H<$It$@HOIt$8LHH)II\$@HLxHID$pI|$h貧LwHL$XdH3 %(HH`[]A\A]A^fDI|$h1E1!L1DH)AL$H8tH5&91迄DH5;1誄kDLxHt9H(xHPHR0if.1/fHt&1軗H|$I|$@\HH])Hoff.@USHH(dH%(HD$1HD$oH1HT$H59IIH|$S,u^HHt$HsC tDHCPHt:H+C@H~1H9HHOHt$MH{G19yHD$HH{h1@~t|GwHCPHT$HHCpHD$Hp UHCpH{hHQHtKHHDH9l$HD$HL$dH3 %(H([]HtH|$H/u HGP0fD1@H )KH8tH56S1H58<1wDH|$Hp[fD1xN@H )H5b7H81-H )H5%7H8ҁ1 fDAWAVAUATUSHH(DOdH%(HD$1HD$EH&)H1HL$H56H|$4{,umH5Ht$HHH;J)HHL$dH3 %(H$H([]A\A]A^A_f.H{חHy )DCH8EYH551諀fHI )H55H8芀1sH(u H@HP0H{h1{u HittS Ll$E1HCpHD$tHCPE1HtH+C@ILM941 vHD$H.L` M2E1C$HCPMLBfHL!HK44HHHPH*I)IMHHuHKxLHHHHf.H551R=DH{h1]zuHATss HD$HCpLcPIH{@I)qK$tHHH(H- )H{HCPHuHuH{11rHH6H; )H@4MH|$IE1HEHt H/MtI.u IFLP0Mt_ImuXIELP0LE1MH|$Lk{H|$Ht H/uHGP01HCpH{h.f1eIHEHl$Ht3LHH|$HtHD$H/uHGP0H )H{1H01pHHD$HHH;a )H@WHEHHS0IHdHHC0HYf.HHHPHR0Hs@LHs8LM)Ls@H|$IME1+H{8LtrHD$HLc@lDH|$HyH/lE1E1HGP0fH)H5:41H8|H{xHC@HCHHCPKoH@HHs@K<4Hs8M9}7LM)ML{@M~0HCxH9CP}&HIHuLLk@@Hl$fDHE1MH)LH8OH|$HIHfDHH'H(!HPHR0fD1fH|$HI0}H|$HE1H)H5@(H8zH|$HtH/uE11^HC@HCHHCPHgM^H|$H/uHGP0Hu)HmH)H5/H8&zH|$Ht+H/u IE11Hm-IE11HmHEH1P0 xH)HSHHHtHCH/tAH{HtHCH/tHCH[H@fHGP0HGP0SHGH HtHC H/H{(HtHC(H/gH{0HtHC0H/<H{8HtHC8H/H{@HtHC@H/H{xHtHCxH/HHtHǃH/HHtHǃH/t]H{HHtHCHH/t6HHtHǃH/t 1[DHGP01[DHGP0HGP0HGP0j@HGP09@HGP0@HGP0@HGP0@HGP0@HGP0bff.SH#x2HHtHǃH/t 1[fDHGP01[fDSH'Ht HxHw1[fH=2H=H=e,H=*HHGH5%HPH)H811HÐSHHHHC0HPdH%(HD$H1HAHL$ HD$HD$ HHHD$0HBHD$8HD$@HD$ P1LL$LD$ 豗ZYtkHD$HCHHD$HtH -Hw1H5-H=--DH=-鬟@H=v霟@HvH5u-1H=@H=^-l@HN-H5E-1H=U鼧@H.-H5kv1H=5霧@H)Hff.UHSH(HdH%(HD$1H;=)Hs)1H01gHHHHL$HT$1H5,~Ht$HH+taHD$HHT$E t HHT$H=1֦HL$dH3 %(uZH([]H= 1HHD$HCHP0HD$Ht$HfDH+u HCHP01qAUATUSHHHH+HxdH%(HD$h1HpNHL$0HD$`HD$0HHD$8H?HD$@HHD$HHv+HD$PHy+HD$XHD$ HD$HD$ HD$(D$D$ PHCHD$PHD$8PHD$8P1LL$8LD$0@H {HT$(Ht1t*< < Bt< zH{ HtHC H/>H{(HtHC(H/H{0HtHC0H/HH{8HtHC8H/H{@HtHC@H/H{xHtHCxH/HHtHǃH/HHtHǃH/H{HHtHCHH/HHtHǃH/H|$HChHǃHǃHǃ,HC(HHOHHD$HH5)bHHH|$ HHHCHHT$D$ HC H|$(H0?SXCYC[CZHC@HEHT$(KZH:ˆS\u3H螗HCPHHƹH=q[H|$1H5V.1辋IHHI,$AAAH|$1H5ZU.1sIHH词I,$Au ID$LP0A`A.Hmu HEHP0H|$HGH{ HH;U(H;(H;i(1H5"U.1ۊHHHHmAEDc_H|$H5U.Dc]ף{]CpC^H{0H(H|$Cp1H01/bHHt~L%(HI4$zHmAu HEHP0ExMu4H{0I$Cp1H(H01aHt'H(u HPHR0C1DHmt)HL$hdH3 %(Hx[]A\A]DHEHP0IHtH|$1H5]U.1vHHHHmAu HEHP0A$D܆HHC(HSHPSHC(H(iH|$DH|$螗HC(HH|$9HGP0@HGP0@HGP0-@HGP0@HGP0@HGP0@HGP0k@HGP0:@HGP0@HGP0@H=H|$ CYSXfCZC\-ID$LP0THt$ HsHC8H{ZDK[H=(H1H51WeIHH{8HtHC8H/uHGP0Lc8DHCPH{(HHC(H/pHGP0dDzH'(H5#H81Ɯ8@H5!R.\HHHH; (rH(uHQ0H|$@H|$H1(H8p xHC(HH|$HLlHH H (H1HH5Q.EHC(HHmuHEHP0H{(HHW[HC(H/uR0H{(f.H3H|$HHr(H5#H8jfDHEHP0fR0H{(HI|$vofHH|$tH(H89oh,wH=HHC(4@+H4DHt$ H苐HC0HH5'P.H?IHH@t8H5K.Ht,L%K.II4$HtLۄuID$HChImMIELP0>@H(H8QnDvH|$_H(H8+nSvf f.HHwHHH 鄆@HHwHHH d@HHwHHH 4Q@HHwHHH Q@HHwHHH 9QfHHwHHH ɃfHHwHHH [fSHHWdH%(HD$1H(H$GuH1H5%H賂t_H(1HH01ZHtDH(u HPHR0H(H{ 1H$H01iZHL$dH3 %(uKH[1@Hq(H5 H8f1fDHQ(H5H8f1dfATUSHLMI$HHLJHLJI$HH(LH8aff.ATIUHSHH Ht HՅH{(Ht LՅH{0Ht LՅH{8Ht LՅH{@Ht LՅH{xHt LՅuoHHt LՅuZHHt LՅuEH{HHt LՅu3HHt LՅuH1Ht[LH]A\@[]A\ff.g HH;=(tH(1H01(UHHSHtHH(1H01THHtOH1HPHHt [DHGP0[DHi(1HH}(H01TH묻@HH(H5^H8`1Hff.@W~uSGHuJH3(1H017THtH(tHC CHC [HPHR0@H)(H5rH8j`1[fDKff.HLcǃu+09wtH9tLu0fD1DH)Hjf.Ht_SHGHt* y1[{HyH+u HCHP0[HPH(H5H81H+u˃G~HHH ؉[ff.SHHH5H dH%(HD$1HL$HT${itwLD$C DƒILD$ ЈC HCH;-(t;HL$H1HH5D.zHt$dH34%(u"H [Hf.1\SAЅuHtSH Hn1H5LD.'zHHtGH1HPHHt[f.HGP0[DHI(1H01QH봻ÐW~MGuH 1H51E.1yf.HH(H5H8]1HW~MGuH 1H51C.1Jyf.HH5(H5~H8v]1HSW~MGuH 1H5C.1xf.HH(H5H8]1HW~MGuH 1H5B.1xf.HHu(H5H8\1HW~MGuH 1H5D.1*xf.HH(H5^H8V\1H3W~EGuH H5C..fDHH(H5H8[1Hff.HOHpHHq t 1HzHyHOHpHHq t 1HDHDAUATUSHHL-(WIEDgEu`HHIHHtH~!HCHD[]A\A]DpHu=I}H5kA[HD[]A\A]fH5HAZAH5-HAZff.fW~=GuHdDHH5(H5~H8vZ1HSSWGuYH8Ht8H1(H0юHHt H[@HQ(H8_tgH1(HH[H(H51H8YfDHy(H5"1H8YfDW~EGuH(H H0+HH-(H5vH8nY1HKff.ATUSH0WdH%(HD$(1yGHK1dHHHwHmAt6Et;H(HHL$(dH3 %(~H0[]A\HEHP0@HD${`11H5@.H:tH H(u HPHR0H{ 1H5T@.1 tH|$HoHT$ Ht$HD$KzHD$HtH(19fH{ 1HH2H5?.sHH(DHPHR05fHy(H5H8W1HY(H5H8W1HPHR01HT$ Ht$H|$dUfUSHWGHH^(H9Gt@H5 (4HtZC]H߈C_pxGH{ H11[H5H>.]rfHHt,m~Hd(H5[H8VH1[]@1HHHtH~tHmtGy̐H(H5bH8ZVH(H5 H8:VHUD$ HR0D$ ff.AWAVAUATUSHWdH%(H$1Ƅ$HDŽ$HDŽ$DŽ$GIH(H9GH5(跃HA]A_PL11H5<.LpHH(I 1H5:.1pHHZI8QICHkH$H+ojHHH$IHL$PHD$(H5:'1H$^HD$PH@H)$IHD$HHb(I81H01GHD$0HfHD$PI8H*D$AYH H,HHL$LH\$8AHHL$HL$`HL$HL$XHL$ L)MHi$H$%I81IHH H5S;.NoHII.Mnu IFLP0I8L9l$|H](1H01FIHLD$HL$H1HT$ H5% }]I,$u ID$LP0HD$`H|H)I8AHHiUH|(H5sH8RD1H$dH3 %(HHĨ[]A\A]A^A_f.HPHR0?HCHP0!hHH1LHHtH6pH+IgHa(H5 1H8REH(H5 1H8Q%H=Y 1DHi(H51H8QHSD$HR0D$]D$LL)l$H\$8H$$HD$I8$HHT$PHJHB HHHL$ H98HD$`Lt$LH\$8E1HD$HD$XH\$HD$Lt$1AHH H58.lHII.Mnu IFLP0H(I81M샄$H01DIHLD$HL$H1HT$H5e ZLImu IELP0H|$`LL9H\$I8Lt$0HH55.1LkILHHQHL$IHuIFP0H7H+u HCHP0D$$H|$(jH fH\$8HT$xHt$pH|$hGyLt$0I81HXH5^5.L6kHT$xHt$pH|$hHqIHQHL$IHu H|$0HGP0HHmHEHP0v@Hc$H$L)E1DŽ$D$L$I8L9#HH9l$ H\$H\$81AH ˫HH5i6.djHHLeHmu HEHP0Ƅ$L9d$I8:H\$8$H$D$I81퉄$I,$H\$8nID$LP0^ImH\$8NIELP0?E17LH0(H5H8MH\$fAWAVAUATUSHHHdH%(HD$81GD$oHHL$HT$1H5(h2H(H9CH5B(Hj{H H|$H{]T$!L%)(I4$1XVHF(1HH01G@H.H(u HPHR0H|$KIHE1Ht$ HǺ|I$_HI$u ID$LP0Ld$ D$4Dl$(D|$,LLct$0D$XVHHHD$H{ 1H(H01?LD$I(HhH(u HPHR0H{xHtHCxH/uHGP0HHCxHǃHtHǃH/uHGP0H{8HtDLEH{ DHz1H52.gIHH@LDH=n1}HHH{8DD$L1H'6H52.fHILH{xHtHCxH/uHGP0L{xLHǃwTI9pLH{0Ht!Mu 1E@HspHl$@fDHH KaH(H5H8-JD1HL$8dH3 %(HHH[]A\A]A^A_L%)(I4$UX11H5G1.HeH6H(u HPHR0H{xHtHCxH/uHGP0HHCxHǃHtHǃH/uHGP0H{8Ht)11H5}/.dHH(u HPHR0H{ A11H/tH5#/.dH|$HHmHD$H/ZHGP0HtNH{0I4$HTxH{0HspHmuHEHP0fDH|$HZH/PHG1P0Df.H (H5R1H8HHH=f1HvIHHfI,$f.L%(I4$SCMH|$H/H1H5b-.1[cHHD$HmDH9(H51H8xGMH(H5H81xIT$D$LR0D$1HGP0f@IPHD$LR0HD$H=)_H(HT$H5H81+x6fDHDH=1xyHHHZfH=DHPH4(H5H81wI/IGLP0I/Hw(H5H8FHI$uID$LP0e@DAVAUATUSHH dH%(HD$1G DgE5H1HT$H5aGH|$ (H(H9CH5p(HsHH{0Hl$HE{\LmH{P 1AL H|H{\Hl$tDLCPMt;H1H FHLH51+.`H|$HH/HtuHl$1{X{YAAA@HH[H$(H5H8eD1,f1HL$dH3 %(6H []A\A]A^D{XE1{YAHChH&HHCpHH|$H/uHGP0HtHHpHH%R%HEHHmu HEHP0HCH9E tOH/Et:H(H{ 1H016H H(uHPHR0f.HHtHǃH/uHGP0H{8Ht)11H58).^HH(u HPHR0LMDE11HHHZH`Hm7 :f.H)(H5rH8jB11*HH!Hǃif{YCXHl$EAHM1HA E1yHl$HAH(H{0H1H01F5HfDHa(H5 H8A1MHm=HEHP0.fDH=<HUD$HR0D$fHGP0jE1@HmHD$HUHR0HD$O?ff.@HtkUHSHHHWH6HH)Hx-H9|(HH9~EHe|HtH]H[]DHHHHH1sH@SHG`qx{HHCHSHHHCHCHHSHBHCtH.HHtHǃH/uHGP0HCH[H@f[ff.H(HH(HAWAVAUATUSH(HoHH;-(IgH (Ha(HHE1H012HHKBL}U MAD$ ?g_у HE0LmH@LEMAL$ DM AAAAAAEAuCEѾ LL$MDD$D $LLT$LID $DD$HL$1Au3DAD w t) I9~0HHQuAD < w uAL9} AuAAD$ E AAA ED$ H(H[]A\A]A^A_@H (d@ADMf ky@utEMoL5wIHP  $IN0I~H@HE<< M LH LE0HuH@IEHPHmu HEHP0Ad$ AV MM@Lу u@tzЃ< <=UHu,HED@HEB< tBIW1HDxHHHm9S AL$ HL{у PfL}JLmHPtjA| AHQ@HHH 1f.ELT$Ef.fA|U @`HEHHB<8 N4fDHmuHEH1P0ATA| 1fAD $Is11D $HIuR@t{AD  , I9:AAu2fAPHfHHquAD ǃ vfA<HDAHADMǃ w- u fA PAHAAufA5cH+u HCHP0Hg(LH8DHHtKI,$SID$LP0CHL6bI/Hu IGLP0HxMI,$E1fDH{xHtHCxH/uHGP0HHCxHǃHtHǃH/uHGP0HMt^HL:4HmHEHP0ILH+T$Hmu HEHP0I,$=1 IHuI,$I#MH(HHff.@SHHWdH%(HD$1H$~eGu>HHH5J1j@1t H4$HHL$dH3 %(u@H[Hi(H5H8$1fDHI(H5H8$1"USHWGHG_H(H9GHQ(1H01HHthH@{ H{t HH[]ÐH+u HCHP0HHtHDžH/uHGP0E]E_1HH[]fHtHHt׀{ H* o1DH!(H5j1H8`#PH(H51H8@#0HPH}(H5H81|TH+MHCH1P0HhHHtH1DHGhHtHGhH(t1fHHPHR01Hff.S10HHt1ZHCHt H[fDH+u HCHP0[ f.ATLg8UHLS5E0HtALH&u"HL*uHE0[]A\@H+u HCHP01H[]A\fDSHH dH%(HD$1HD$ HHL$ HT$1H5={IT$ H|$Hx>ubtgu H{ H|$H{n+Ht$dH34%(H [@Hq(H5bH8!1fDHuۃuH{H|$1@H(H5:H8 1fDHq(H5<H8 1]HQ(H5H81Q1;fH)(HH5 H81Q1fAVAUATUSHHo dH%(HD$1HGH9HWHH)L,HxH9HOHMdHSXMHD$E4$MA$sJ{KPRVE4$ZLHYHHHCHBHL$dH3 %(uH[]A\A]A^@117YSHGHHWHHGHGHHWHBHGGHHHt HCH{8+.H{XHtHCXH/H{`HtHC`H/tqH{PHtHCPH/tJH{hHtHChH/t#H{ptHL HCH[H@HGP0HGP0HGP0HGP0\ff.HH(H5H8F1Hff.@H~>IuHy(H@HH(H5H81HfDH~>IuHɫ(H@HHe(H50H81H3H~>IuHy(H@HH(H5H8V1HH~>IuH)(H@HHŧ(H5H81HATUHSHHHHIHH9s;HZH?H9wpI<$H4!HtwH]I$1[]A\1H9wffH*YğH*f/rHHHH HHH\DH(H5 H82ff.@SHw(1HGIH1҅x\H{8*H{XHtHCXH/tgH{`HtHC`H/t@H{PHtHCPH/tHʨ(HHH[fDHGP0HGP0HGP0ff.@ATUHH8SG.HtzL`Hu(H}HL-xIHu1LHH4HHt3HP1HHt []A\HCHP0[]A\HHHu HCHP0ATIUSHHPH HS`IHHt'H(HLH0'1I,$HH'} TLeHCHL)H9{0HK :IH9HsH9@HS(1H4HH)+3HLcLcL;c ~Lc HEHXH]Hu/HEHP0H[]A\DID$LP0?1H[]A\fDHs(H{x5HCHK HsH9ZDH(H5H8:Hmu HEHP0HH[]A\f.HS`HHH} HH9tCHuHCHK fH)H<1HHCHsDH{8H !Jff.@AVAUATUSHHHHH0dH%(HD$(1HL$LL$IHHD$ HD$HHD$1H$HD$9H|$L%(L9HHGt?HHH$L9tHtH@ZCHLk8Lx&H{XHtHCXH/uHGP0H{`HtHC`H/uHGP0H{PHtHCPH/uHGP0HHmAHCXH}CKˆSJ} u HC`HSJH<$HC HkLs(HtL9t H1LHL C0HC1fSHHL$(dH3 %(8H0[]A\A]A^@H-@1fCJH=(LH5=1HCPH%D널1LHxC0H4$HHCH;f< < t,HM(HT$H5cH81FDE< uĀ}@KK-HPH5H (H81F6HPH5l}kiff.fUSHHHFt_~ Hy.{IupHnH~ HHx(HH[]@HHt$;Ht$tH1[]fHPHE(H56H81EfH (H5H8JH(H5H8*USHHH-<(dH%(HD$1HH,$H1H5HZ/{IH<$AH$H9ufHkHH9k ~*{0t H=xaHs(H{HxMHk HHL$dH3 %(H[]fDH@H5HPH(H81D1@H(H<$H0HHV(HuH(HH5H81;D1k@Hy(H5"H81JHY(H5$H81*ff.USHHH-(dH%(HD$1HH,$H1H5H-t|{Iu`{0t HxdH<$?uaH$H9HHHL$dH3 %(H[]f.Hy(H5DH81fDHI(H<$H0=HHuO'Ht1fDH)(H5H8j1nH@H5HPH(H81B1D@USHHH-L(dH%(HD$1HH,$.H1H5Hj,{I(H<$>H$H9u~HKHC H)HHIS0t?uHHCHH4HHK3HL$dH3 %(H[]H9u HHx&HKH@H5HPH(H81A1@H(H<$H0HHHKHC H)H1H94#fDHy(H5"H815HY(H5$H81H;HS HSfD3%H1 ff.SHIH0t x]H(H9CtXH!(H1H01HHt2H@H{t H[DH+u HCHP01H[ÐHHaHHu1DHI(H51H8fDH)(H51H8hHPH(H5H81?H+h1mH~^Iu0HPHtH(H0BH)(H@HH(H5`H8 1HcH~HI@CAUATUSHIHFHHQH~F1H%IH1HHI$zHI$u ID$LP0LmLIHMmHs(H{LH{JLE LmH}(Lk HGthCHHHu0H-ř(HCH9t'HF +H{hHx1HEHH[]A\A]fHPH5uH(H81=1H[]A\A]HHHCH5HPH֖(H81\=H1[]A\A]H(H5\H8 1fDHHshVHI$vID$LP01fK!HNH+(H5H8l 3L1HPH5H~>IuHGHHŕ(H5H8 1HH~VIu(0tHW Hw-kHH](H5(H8 1H+ff.UHSH~HH}hHHtQd7IHtlHUXHMHtO1HH=7HHtpH} HIHt4H+u HCHP0H<$H/uHGP0H}L_@DH(HH8vH+uHCHP0fDH<$H/uHGP01HL$dH3 %(|H[]A\Äu\HGHfH[1]@11H=J1ff.H5T(=C/ff.S1H dH%(HD$1H$HD$HD$HtJ5-u{HL$dH3 %(H [ÐKH|$HtHD$H/uHGP0H|$Ht1H5XH|$H<$HtHD$@HI-E1E11PH 9T(jHQ(6HD$ZYHfH=/H=&/詬H=r/H$IH<$.H<$H5HF=/17H|$H 3H-MH56/1/H5/H57/ H5y/H=/ /Ha/H@J-uH+Q(HfDHgHQ(HH -uHP(HfDHB=̍/1%HP(HHDSH dH%(HD$1-tPHVHFHH=ۍ/@HEVH=g/HH?H=/u%H6P(HHL$dH3 %(uH [@H|$1<%DAUATIUHSHLn~HtyI|$HHtWHCI|$ LHtAHC H}HH+tH[]A\A]fHSHR0@H+u HCHP0H[]A\A]ËZ-S1ۃKH5Ό/1wÉ/H=i/#H-E1E11SHlO(1H jE1E11H/X1H ZSHjY^SjH P(E1E1H"N(1H/wH=/_H/AXH=w/HH=e(|H/HH=/1~H/H=`/^/`/HQ/H9/-[fDH4/HHJ(H5H8+뺻HJ(H5H8RHL(H8豱ff.@AUATUSH8dH%(HD$(1+-E-;-H=/L%/HcH[H4/H/HHH5/H1HD$L-.HGHD$H4$Ll$H1JHSLHD$HoHD$Ll$L$$H޿H5(/H4$H޿=G/1O-HT$(dH3%(u+H8[]A\A]f1ֽ耷@HHH5;dH%(HD$1HH$tWH<$HGH= w*Ex>HK(HHL$dH3 %(u'HÐHH( H5H811zf.AWAVAUATIUHSH(HM/dH%(HD$1CyHLhCMu0WC-C9MmM,HLH@LfDIHt'ML$HPHL!IH2H0HHHuIL9uID$PH[]A\A]A^fD\H,H?&I\$[]A\A]A^HЃfHH H*XfAWE1AVIHAUATUHSHH$HL$AV IIL`IFM!JHu!f.HIHHL9kuHHAV(tHMIH<$InHtHT$HsHAVPIFHxofH*IHxfH*^ 1Zf/v$LH[]A\A]A^A_fD1H[]A\A]A^A_HƒfHH IH*XHyHƒfHH H*XlIVJH1H9~fAWIAVIAUATUHSH(HD$hLD$LL$HHL`Ht$XIHHt$Hf.HH9wHHHT$IEIEImHT$HIEtx1H莶HD$M} Mu(IE0HD$I]HIE8HD$`MePIE@H(L[]A\A]A^A_ÐL%A>(H:(7DifLE1ADHHE1HjE1jHfAUATUSHHGHHHGH@HlXtDHt?IE1ID$JHtf.H{AT$@HHHuIM9,$wHH[]A\A]@AUIATIHUSHAT$ IT$HI$HH!HHu6fDHHt(H9kuHLAT$(tHH[]A\A]DH1H[]A\A]AWIAVIAUATUSHHHHt$S IHHL!IHCHxSHHHt$LhLHxHHpLHCJHHUH(HCHHCx?fH*HHxOfH*1^/}w_H[]A\A]A^A_HƒfHH HH*XHyHƒfHH 1H*X^/|vHH1[]A\A]A^A_øff.@UHSHH{H1HtHHHH[]fDw11cH?t[AVE1AUIATIUHSIEJHu #HHtLHՅt[]A\A]A^IM9uw[1]A\A]A^1AVAUATUHSH?t\HWE1@N4J2HHt,@HE8L#HtH{HLUPMuHUJ2HIL9mwHE[H]A\A]A^AUATUHSHH}HtBE1JHt+HE8L#HtH{HLUPMuH}IL9mwUPHEPHH[]A\A]ff.AVAUATUHSHHO(HW dH%(HD$1HEHHLM8LE0HuPu@舲ZYIHH}t~E1IHEJHu6H{H$HtIHMHsLLfu2HHtZHE0HuHMHsHSL=tfLE1EHT$dH3%(Lu"H[]A\A]A^DIL9uUf.UHH5eySH(H :(dH%(HD$1HLL$LD$HT$H=VHH=VHt~HֹH=WuoH<$Ht$AH|$HH/uHGP0HtwHkH{@HEUHH\$dH3%(Hu\H([]fH)5(H52yH8jH|$H/uHGP01@O艨fSH=|5(迴H=;-HHH5 H趔H5wH袔H5wH莔H5wHz H5wHf@H5wHRH5wH>H5wH*1H5wHH5wHH5wHH5xwHݓH5twHɓH5 H赓H5YwH術H5UwH荓H5vHyH5=wHe H5.wHQH5$wH=(HtH+u HCHP01H[f.fH8(SH(x C(1[ø[DHM6(SH(x C(1[ø[DSHHH5wHdH%(HD$1HT$t,D$C(H4(HHL$dH3 %(uH[@1ǥSHHH5vHdH%(HD$1HT$pt,D$C(H^4(HHL$dH3 %(uH[@1WSHH56vH dH%(HD$1HL$HT$D$LD$tU蘟HHt$H|$AHt4H(tFl$yjfH)H*^衰 1H\$dH3%(uH [HPHR0菤ff.@Hc(S1HHH5Vu7tHc{([ɰf1[ff.S1HHH5utHc{([鉰f1[ff.ATIUHSHUHt$Ht;Ht&HEHhI$L` HHX([]A\Hy2(H-i2(HufSHl3(H= -H-豯H5(H=K-HD-華H= -HHtnH=-bx^H=-RxNH-H5;tHH-x,Hu-H5sHHc-y f.1H[HH:%s%s%s, %.20s, %.9s17:08:22Apr 17 2024no mem to build parser accelerators XXX too high nonterminal number!no mem to add parser accelerators XXX too many states!XXX ambiguity!NT%d%.32s(%.32s)invalid label%s s_push: parser stack overflow no mem for bitsetMSTARTRULERHS ALTITEMATOM8 Calculate FIRST set for '%s' Left-recursion for '%s' Left-recursion below '%s' FIRST set for '%s': { }Adding FIRST sets ...Re-calculating FIRST set for '%s' ??? no mem for new sym in calcfirstsetno mem to resize sym in calcfirstsetno mem for new grammarLabel @ %8p, %d: %s Label %d/'%s' not found grammar.c:findlabel()Translating label %s ... Label %s is non-terminal %d. Label %s is terminal %d. Label %s is a keyword Can't alloc dest '%s' Unknown OP label %s Can't translate label '%s' no mem to resize dfa in adddfano mem to resize state in addstateno mem to resize arc list in addarcno mem to resize labellist in addlabelCan't translate NAME label '%s' Can't translate STRING label %s out of memSubset DFA %s Subset %d (finish) { %d Arc to state %d, label %s no mem for new nfa grammarno mem for new nfaDump of NFA for '%s' ... Making DFA for '%s' ... %c%2d%c -> %2d %sbefore minimizingRename state %d to %d. after minimizingCompiling (meta-) parse tree into NFA grammarNFA '%s' has %d states; start %d, finish %d no mem for xx_state in makedfaError: nonterminal '%s' may produce empty. input line too longcan't re-enter readline/builddir/build/BUILD/Python-3.4.10/Parser/myreadline.c!=<>with Barry as BDFL, use '<>' instead of '!='isisOOOutf-8iso-8859-1utf-8-iso-latin-1iso-8859-1-iso-latin-1-encoding problem: %sencoding problem: %s with BOMENDMARKERNAMESTRINGNEWLINEINDENTDEDENTLPARRPARLSQBRSQBCOLONCOMMASEMIPLUSMINUSVBARAMPERLESSGREATERPERCENTLBRACERBRACEEQEQUALNOTEQUALLESSEQUALGREATEREQUALTILDECIRCUMFLEXLEFTSHIFTRIGHTSHIFTDOUBLESTARPLUSEQUALMINEQUALPERCENTEQUALAMPEREQUALVBAREQUALCIRCUMFLEXEQUALLEFTSHIFTEQUALRIGHTSHIFTEQUALDOUBLESTAREQUALDOUBLESLASHDOUBLESLASHEQUALRARROWELLIPSISNon-UTF-8 code starting with '\x%.2x' in file %U on line %i, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for detailstok_backup: beginning of buffer%U: inconsistent use of tabs and spaces in indentation -///-.///(.P./././///////////h...///////////////////////////////./////////////////////////////------.------------.--!4 4444444444 4144444444444444444444444444 4 4444444444444444444444444444null argument to internal routineunsupported operand type(s) for %.100s: '%.100s' and '%.100s'unsupported operand type(s) for ** or pow(): '%.100s' and '%.100s'unsupported operand type(s) for pow(): '%.100s', '%.100s', '%.100s'/builddir/build/BUILD/Python-3.4.10/Objects/abstract.cissubclass() arg 1 must be a classissubclass() arg 2 must be a class or tuple of classesisinstance() arg 2 must be a type or tuple of types'%.100s' does not support the buffer interfaceexpected an object with a writable buffer interfaceboth destination and source must have the buffer interfacedestination is too small to receive data from sourcebad operand type for unary -: '%.200s'bad operand type for unary +: '%.200s'bad operand type for unary ~: '%.200s'bad operand type for abs(): '%.200s''%.200s' object cannot be interpreted as an integer__index__ returned non-int (type %.200s)__index__ returned non-int (type %.200s). The ability to return an instance of a strict subclass of int is deprecated, and may be removed in a future version of Python.cannot fit '%.200s' into an index-sized integercan't multiply sequence by non-int of type '%.200s'__trunc__ returned non-Integral (type %.200s)int() argument must be a string, a bytes-like object or a number, not '%.200s'__float__ returned non-float (type %.200s)PyNumber_ToBase: index not intobject of type '%.200s' has no len()'%.200s' object can't be concatenated'%.200s' object can't be repeated'%.200s' object does not support indexingsequence index must be integer, not '%.200s''%.200s' object is not subscriptable'%.200s' object is unsliceable'%.200s' object does not support item assignment'%.200s' object doesn't support item deletion'%.200s' object does not support item deletion'%.200s' object doesn't support slice assignment'%.200s' object doesn't support slice deletion while calling a Python objectNULL result without error in PyObject_Call'%.200s' object is not callableattribute of type '%.200s' is not callable__length_hint__ must be an integer, not %.100s__length_hint__() should return >= 0Type %.100s doesn't define __format____format__ method did not return string'%.200s' object is not iterableiter() returned non-iterator of type '%.100s'argument of type '%.200s' is not iterablesequence.index(x): x not in sequenceObject is not writable.|^<<>>//%|=^=&=<<=>>=-=//=+=%=*= in __instancecheck__ in __subclasscheck__o.keys() are not iterableo.items() are not iterableo.values() are not iterablecount exceeds C integer sizeindex exceeds C integer size__bases____class____trunc____length_hint__TrueFalse|O:booly*y*:maketransmaketrans arguments must have same lengthB.maketrans(frm, to) -> translation table Return a translation table (a bytes object of length 256) suitable for use in the bytes or bytearray translate method where each byte in frm is mapped to the byte at the same position in to. The bytes objects frm and to must be of the same length.B.swapcase() -> copy of B Return a copy of B with uppercase ASCII characters converted to lowercase ASCII and vice versa.B.capitalize() -> copy of B Return a copy of B with only its first character capitalized (ASCII) and the rest lower-cased.B.title() -> copy of B Return a titlecased version of B, i.e. ASCII words start with uppercase characters, all remaining cased characters have lowercase.B.upper() -> copy of B Return a copy of B with all ASCII characters converted to uppercase.B.lower() -> copy of B Return a copy of B with all ASCII characters converted to lowercase.B.istitle() -> bool Return True if B is a titlecased string and there is at least one character in B, i.e. uppercase characters may only follow uncased characters and lowercase characters only cased ones. Return False otherwise.B.isupper() -> bool Return True if all cased characters in B are uppercase and there is at least one cased character in B, False otherwise.B.islower() -> bool Return True if all cased characters in B are lowercase and there is at least one cased character in B, False otherwise.B.isdigit() -> bool Return True if all characters in B are digits and there is at least one character in B, False otherwise.B.isalnum() -> bool Return True if all characters in B are alphanumeric and there is at least one character in B, False otherwise.B.isalpha() -> bool Return True if all characters in B are alphabetic and there is at least one character in B, False otherwise.B.isspace() -> bool Return True if all characters in B are whitespace and there is at least one character in B, False otherwise.(O(Ns)N)(O(y#)N)(O()N)|i:__reduce_ex__GC object already trackedbytearray(bstr() on a bytearray instancean integer is requiredbyte must be in range(0, 256)bytearray index out of rangeN(O)nN(N)subsection not foundcan't concat %.100s to %.100sn:zfill |O:strip|i:splitlines|O:rstripempty separatory*y*|n:replacereplace string is too longreplace bytes is too long|O:lstripcan only join an iterablejoin() result is too long|i:expandtabsresult too long|On:rsplit|On:splitn|c:rjustn|c:ljustn|c:center|Oss:bytearraynegative counttranslatevalue not found in bytearray|n:poppop from empty bytearraypop index out of rangenO:insertU:fromhextabsizemaxsplitkeependsbytearray_iterator__setstate____alloc____sizeof__appendcapitalizecopyendswithextendisalnumisalphaisdigitislowerisspaceistitleisupperjoinremovereverserfindrindexrpartitionstartswithswapcase/builddir/build/BUILD/Python-3.4.10/Objects/bytearrayobject.cbytearray object is too large to make reprdeallocated bytearray object has exported buffersExisting exports of data: object cannot be re-sizedComparison between bytearray and stringstartswith first arg must be bytes or a tuple of bytes, not %sendswith first arg must be bytes or a tuple of bytes, not %sNegative size passed to PyByteArray_FromStringAndSizesequence item %zd: expected a bytes-like object, %.80s foundsequence changed size during iterationbytearray indices must be integersencoding or errors without sequence argumentstring argument without an encodingencoding or errors without a string argumenttranslation table must be 256 characters longcannot add more objects to bytearraynon-hexadecimal number found in fromhex() arg at position %zdcan't set bytearray slice from %.100sbytearray indices must be integercan assign only bytes, buffers, or iterables of ints in range(0, 256)attempt to assign bytes of size %zd to extended slice of size %zd|\XXXstartswithfind/rfind/index?repeated bytes are too long(y#)substring not foundbyte string is too largebyte string is too longexpected bytes, %.200s foundexpected bytes with no nullstr() on a bytes instance%ld%lu%zu%u%iTrailing \ in stringstrictignore|Oss:bytes__bytes__bytes_iterator__getnewargs__Comparison between bytes and string/builddir/build/BUILD/Python-3.4.10/Objects/bytesobject.cNegative size passed to PyBytes_FromStringAndSizereplacement bytes are too longbyte indices must be integers, not %.200sbytes object is too large to make reprPyBytes_FromFormatV(): %c format expects an integer in range [0; 255]invalid \x escape at position %ddecoding error; unknown error handling code: %.400scannot convert unicode object to bytesbytes must be in range(0, 256)__bytes__ returned non-bytes (type %.200s),d|<<<<<<<cell_contentsȜ/builddir/build/BUILD/Python-3.4.10/Objects/cellobject.c__doc__O(ON)self must not be Nonefree PyMethodObjectinstancemethodgetattr__func____self____name__/builddir/build/BUILD/Python-3.4.10/Objects/classobject.cfirst argument must be callablethe function (or other callable) implementing a methodthe instance to which a method is boundnon-string found in code slotiiiiiSO!O!O!UUiS|O!O!:codeco_argcountco_kwonlyargcountco_nlocalsco_stacksizeco_flagsco_codeco_constsco_namesco_varnamesco_freevarsco_cellvarsco_nameco_firstlinenoco_lnotabname tuples must contain only strings, not '%.500s'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz/builddir/build/BUILD/Python-3.4.10/Objects/codeobject.ccode: argcount must not be negativecode: kwonlyargcount must not be negativecode: nlocals must not be negative__complex__ should return a complex objectcan't take floor of complex number.can't convert complex to floatcan't take floor or mod of complex number.complex() can't take second arg if first is a stringcomplex() arg is a malformed stringcomplex() second arg can't be a stringcomplex() argument must be a string or a number, not '%.200s'float(r) didn't return a float0.0 to a negative or complex powerthe real part of a complex numberthe imaginary part of a complex numbercan't convert complex to intcan't mod complex numbers.|OO:complexU:__format__(dd)(%s%s%sj%sabsolute value too largecomplex division by zerocomplex modulocomplex exponentiationrealimag__complex__conjugate???mappingproxy(%R)O(OO)|OOOO:propertyOOOO%S.%SO:mappingproxycan't delete attributecan't set attributeunreadable attributefgetfdeldoc__qualname____isabstractmethod__setterdeletermethod-wrapper__objclass____text_signature__D.keys() -> list of D's keyswrapper_descriptorgetset_descriptormember_descriptorclassmethod_descriptordescriptor '%V' for type '%s' needs either an object or a typedescriptor '%V' for type '%s' needs a type, not a '%s' as arg 2descriptor '%V' for type '%s' doesn't apply to type '%s'descriptor '%V' of '%.100s' object needs an argumentdescriptor '%V' requires a '%.100s' object but received a '%.100s'descriptor '%V' requires a type but received a '%.100s'descriptor '%V' requires a subtype of '%.100s' but received '%.100swrapper %s doesn't take keyword argumentsdescriptor '%V' for '%s' objects doesn't apply to '%s' objectdescriptor '%V' for '%.100s' objects doesn't apply to '%.100s' objectattribute '%V' of '%.100s' objects is not writableattribute '%V' of '%.100s' objects is not readable.__name__ is not a unicode object.__objclass__.__qualname__ is not a unicode objectmappingproxy() argument must be a mapping, not %s/builddir/build/BUILD/Python-3.4.10/Objects/descrobject.cD.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.D.values() -> list of D's valuesD.items() -> list of D's (key, value) pairs, as 2-tuplesD.copy() -> a shallow copy of DPXphO|O:enumeratereversedreversed()O(On)O(O)nO(())__reversed__argument to reversed() must be a sequence%s%R%S (%U, line %ld)%S (%U)%S (line %ld)O!O!nnO!O!OnnO!args may not be deletedstate is not a dictionary[Errno %S] %S: %R -> %R[Errno %S] %S: %R[Errno %S] %SOSErrorcharacters_writtenprint exec tuple index out of range%.200s attribute not set__cause__ may not be deletedsu#nnssy#nnsBaseExceptionTypeErrorStopIterationGeneratorExitSystemExitKeyboardInterruptEnvironmentErrorEOFErrorRuntimeErrorNotImplementedErrorNameErrorUnboundLocalErrorAttributeErrorSyntaxErrorIndentationErrorTabErrorIndexErrorKeyErrorValueErrorUnicodeErrorUnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateErrorAssertionErrorArithmeticErrorFloatingPointErrorOverflowErrorZeroDivisionErrorSystemErrorReferenceErrorBufferErrorMemoryErrorUserWarningPendingDeprecationWarningSyntaxWarningRuntimeWarningFutureWarningImportWarningUnicodeWarningBytesWarningResourceWarningConnectionErrorBlockingIOErrorerrmap insertion problem.BrokenPipeErrorChildProcessErrorConnectionAbortedErrorConnectionRefusedErrorConnectionResetErrorFileExistsErrorFileNotFoundErrorIsADirectoryErrorNotADirectoryErrorInterruptedErrorPermissionErrorProcessLookupErrorTimeoutError%U (%s: %S)Buffer error.Out of memory.Assertion failed.Unicode translation error.Unicode decoding error.Unicode encoding error.exception encodingexception objectexception startexception endexception reasonUnicode related error.Mapping key not found.Sequence index out of range.Base class for lookup errors.Improper indentation.Invalid syntax.exception msgexception linenoexception offsetexception textexception print_file_and_lineAttribute not found.Name not found globally.Unspecified run-time error.Read beyond end of file.Timeout expired.Process not found.Not enough permissions.Interrupted by signal.File not found.File already exists.Connection reset.Connection refused.Connection aborted.Broken pipe.Child process error.Connection error.I/O operation would block.POSIX exception codeexception strerrorfilename2second exception filenameexception messagemodule pathProgram interrupted by user.generator return valueInappropriate argument type.__suppress_context____traceback____context__exception context__cause__exception causewith_traceback'%U' codec can't decode byte 0x%02x in position %zd: %U'%U' codec can't decode bytes in position %zd-%zd: %U'%U' codec can't encode character '\x%02x' in position %zd: %U'%U' codec can't encode character '\u%04x' in position %zd: %U'%U' codec can't encode character '\U%08x' in position %zd: %U'%U' codec can't encode characters in position %zd-%zd: %Ucan't translate character '\x%02x' in position %zd: %Ucan't translate character '\u%04x' in position %zd: %Ucan't translate character '\U%08x' in position %zd: %Ucan't translate characters in position %zd-%zd: %U__traceback__ may not be deleted__traceback__ must be a traceback or NoneMissing parentheses in call to 'print'Missing parentheses in call to 'exec'%.200s attribute must be bytes%.200s attribute must be unicodeexception cause must be None or derive from BaseException__context__ may not be deletedexception context must be None or derive from BaseExceptionexceptions bootstrapping error.Module dictionary insertion problem.Cannot allocate map from errnos to OSError subclassesCould not preallocate MemoryError objectCannot pre-allocate RuntimeError instance for recursion errorsmaximum recursion depth exceededcannot allocate argument for RuntimeError pre-allocationcannot allocate tuple for RuntimeError pre-allocationinit of pre-allocated RuntimeError failedBase class for warnings about resource usage.Base class for warnings about bytes and buffer related problems, mostly related to conversion from str or comparing to str.Base class for warnings about Unicode related problems, mostly related to conversion problems.Base class for warnings about probable mistakes in module importsBase class for warnings about constructs that will change semantically in the future.Base class for warnings about dubious runtime behavior.Base class for warnings about dubious syntax.Base class for warnings about features which will be deprecated in the future.Base class for warnings about deprecated features.Base class for warnings generated by user code.Base class for warning categories.Weak ref proxy used after referent went away.Internal error in the Python interpreter. Please report this to the Python maintainer, along with the traceback, the Python version, and the hardware/OS platform and version.Second argument to a division or modulo operation was zero.Result too large to be represented.Floating point operation failed.Base class for arithmetic errors.Inappropriate argument value (of correct type).Improper mixture of spaces and tabs.Local name referenced but not bound to a value.Method or function hasn't been implemented yet.Operation only works on directories.Operation doesn't work on directories.Base class for I/O related errors.Import can't find module, or can't find name in module.Request to exit from the interpreter.Request that a generator exit.Signal the end from iterator.__next__().Common base class for all non-exit exceptions.Common base class for all exceptionsgenerator already executingthrowgeneratorsendgi_framegi_runninggi_code/builddir/build/BUILD/Python-3.4.10/Objects/genobject.ccan't send non-None value to a just-started generatorgenerator ignored GeneratorExitthrow() third argument must be a traceback objectinstance exception may not have a separate valueexceptions must be classes or instances deriving from BaseException, not %scannot create 'stderrprinter' instances/builddir/build/BUILD/Python-3.4.10/Objects/fileobject.cobject.readline() returned non-stringnull file for PyFile_WriteStringfileno() returned a non-integerargument must be an int, or have a fileno() method.file descriptor cannot be a negative integer (%i)backslashreplaceisisssi(i)EOF when reading a linewriteobject with NULL filefilenostderrprinterTrue if the file is closedEncoding of the fileString giving the file modeflushss:__setformat__doubleunknownIEEE, little-endianIEEE, big-endian(d)float divmod()-0x0.0p+0-0x%sp%c%dfloat division by zerofloat modulo|O:floata float is required%s0%se%dfree PyFloatObjectfrexp() result out of range__round__as_integer_ratiois_integer__getformat__sys.float_infomax_expmax_10_expmin_expmin_10_expDBL_DIG -- digitsmant_digepsilonradixFLT_ROUNDS -- addition rounds__setformat__() argument 1 must be 'double' or 'float'__setformat__() argument 2 must be 'unknown', 'IEEE, little-endian' or 'IEEE, big-endian'can only set %s format to 'unknown' or the detected platform value__getformat__() argument must be string, not %.500s__getformat__() argument 1 must be 'double' or 'float'insane float_format or double_formathexadecimal string too long to converthexadecimal value too large to represent as a floatinvalid hexadecimal floating-point stringCannot pass infinity to float.as_integer_ratio.Cannot pass NaN to float.as_integer_ratio.pow() 3rd argument not allowed unless all arguments are integers0.0 cannot be raised to a negative powerfloat() argument must be a string or a number, not '%.200s'could not convert string to float: %Rnb_float should return float objectrounded value too large to representfloat too large to pack with f formatfloat too large to pack with d formatcan't unpack IEEE 754 special value on non-IEEE platformReturn self, the complex conjugate of any float.Return the Integral closest to x between 0 and x.Return the Integral closest to x, rounding half toward even. When an argument is passed, work like built-in round(x, ndigits).Return True if the float is an integer.DBL_MAX -- maximum representable finite floatDBL_MAX_EXP -- maximum int e such that radix**(e-1) is representableDBL_MAX_10_EXP -- maximum int e such that 10**e is representableDBL_MIN -- Minimum positive normalizer floatDBL_MIN_EXP -- minimum int e such that radix**(e-1) is a normalized floatDBL_MIN_10_EXP -- minimum int e such that 10**e is a normalizedDBL_MANT_DIG -- mantissa digitsDBL_EPSILON -- Difference between 1 and the next representable floatFLT_RADIX -- radix of exponent@\[x\P\h\0\  0@@0C?<C?C`AApA>p>0>lineno must be an integerlineno out of rangeXXX block stack overflowXXX block stack underflowfree PyFrameObject__builtins__f_localsf_linenof_tracef_backf_codef_builtinsf_globalsf_lastif_lineno can only be set by a line trace functionline %d comes before the current code blockline %d comes after the current code blockcan't jump to 'except' line as there's no exceptioncan't jump into or out of a 'finally' blockcan't jump into the middle of a blockcannot clear an executing frame/builddir/build/BUILD/Python-3.4.10/Objects/frameobject.cco_varnames must be a tuple, not %s__code__ must be set to a code object%U() requires a code object with %zd free vars, not %zd__qualname__ must be set to a string object__name__ must be set to a string object__annotations__ must be set to a dict object__kwdefaults__ must be set to a dict object__defaults__ must be set to a tuple objectuninitialized staticmethod objectuninitialized classmethod objectarg 3 (name) must be None or stringarg 4 (defaults) must be None or tuplearg 5 (closure) must be None or tuple%U requires closure of length %zd, not %zdarg 5 (closure) expected cell, found %s/builddir/build/BUILD/Python-3.4.10/Objects/funcobject.cnon-dict keyword only default argsexpected tuple for closure, got '%.100s'classmethodstaticmethodO!O!|OOO:functionarg 5 (closure) must be tuplenon-tuple default argsnon-dict annotationsargdefsclosure__code____defaults____kwdefaults____annotations____closure____globals____module__iter index too largeN(())N(OO)callable_iterator/builddir/build/BUILD/Python-3.4.10/Objects/iterobject.c/builddir/build/BUILD/Python-3.4.10/Objects/listobject.ccannot add more objects to list while getting the repr of a listmust use keyword argument for key functionlist assignment index out of rangemust assign iterable to extended sliceattempt to assign sequence of size %zd to extended slice of size %zdlist indices must be integers, not %.200scan only concatenate list (not "%.200s") to listO|O&O&:index%R is not in listlist index out of rangeargument must be iterable|O:list[...], |Oi:sortlist modified during sortfree PyListObjectcan only assign an iterablelist.remove(x): x not in listpop from empty listlist_reverseiteratorlist_iterator__getitem__zodY /builddir/build/BUILD/Python-3.4.10/Objects/longobject.can integer is required (got type %.200s)__int__ returned non-int (type %.200s)__int__ returned non-int (type %.200s). The ability to return an instance of a strict subclass of int is deprecated, and may be removed in a future version of Python.intermediate overflow during divisioninteger division result too large for a floatinteger division or modulo by zerocannot convert float infinity to integercannot convert float NaN to integerPython int too large to convert to C longPython int too large to convert to C intPython int too large to convert to C ssize_tcan't convert negative value to unsigned intPython int too large to convert to C unsigned longcan't convert negative value to size_tPython int too large to convert to C size_tint has too many bits to express in a platform size_tbyte array too long to convert to int'signed' is a keyword-only argumentbyteorder must be either 'little' or 'big'can't convert negative int to unsignedlength argument must be non-negativepow() 2nd argument cannot be negative when 3rd argument specifiedpow() 3rd argument cannot be 0int() arg 2 must be >= 2 and <= 36int string too large to convertinvalid literal for int() with base %d: %.200Rint() base must be >= 2 and <= 36int() can't convert non-string with explicit basehuge integer: number of bits overflows a Py_ssize_tint too large to convert to floatnon-integer arguments in divisionsize in bytes of the C type used to represent a digitthe numerator of a rational number in lowest termsthe denominator of a rational number in lowest termsReturns self, the complex conjugate of any int.Truncating an Integral returns itself.Flooring an Integral returns itself.Ceiling of an Integral returns itself.Rounding an Integral returns itself. Rounding with an ndigits argument also returns an integer.Returns size in memory, in bytesint too large to formattoo many digits in integernegative shift countOU|O:from_byteslittleint too big to convertnU|O:to_bytes|OO:intint() missing string argumentbyteordersignedbasesys.int_infobits_per_digitsize of a digit in bitssizeof_digitnumeratordenominatorbit_length__floor____ceil__p```A%X?P ^4@%s(%R)free PyDictObject{...}fromkeysdict mutated during updatesetdefaultThis object has no __dict__intersection_updatesymmetric_difference_update__missing__ typedict_valuesdict_itemsisdisjointdict_keysdict_itemiteratordict_valueiteratordict_keyiterator__contains__popitem/builddir/build/BUILD/Python-3.4.10/Objects/dictobject.c%s() requires a dict argument, not '%s'dictionary changed size during iterationpopitem(): dictionary is emptycannot convert dictionary update sequence element #%zd to a sequencedictionary update sequence element #%zd has length %zd; 2 is requiredNot enough memory to allocate new values arrayXHؓindex out of boundscannot delete memorymemoryview: invalid slice key@?@d@f@N@n@Q@q@L@l@I@i@H@h@B@b@c@PO|Omemoryview: internal errorstructStructunpack_fromO:memoryviewshapetobytestolistcast__enter____exit__objnbytesreadonlyitemsizendimstridessuboffsetsc_contiguousf_contiguousmanagedbuffermemoryview has %zd exported buffer%s_memory_release(): negative export countoperation forbidden on released memoryview objectmemoryview: underlying buffer is not writablememoryview: underlying buffer is not C-contiguousmemoryview: underlying buffer is not Fortran contiguousmemoryview: underlying buffer is not contiguousmemoryview: underlying buffer requires suboffsetsmemoryview: cannot cast to unsigned bytes if the format flag is presentmemoryview: invalid type for format '%s'memoryview: invalid value for format '%s'memoryview: format %s not supportedmemoryview assignment: lvalue and rvalue have different structuresmemoryview: unsupported format %scannot modify read-only memoryinvalid indexing of 0-dim memorymemoryview assignments are currently restricted to ndim = 1memoryview slice assignments are currently restricted to ndim = 1memoryview: internal error in richcomparememoryview: number of dimensions must not exceed 64cannot hash writable memoryview objectmemoryview: hashing is restricted to formats 'B', 'b' or 'c'memoryview: format argument must be a stringmemoryview: casts are restricted to C-contiguous viewsshape must be a list or a tuplememoryview: cast must be 1D -> ND or ND -> 1Dmemoryview: source format must be a native single character format prefixed with an optional '@'memoryview: cannot cast between two non-byte formatsmemoryview: length is not a multiple of itemsizememoryview.cast(): elements of shape must be integersmemoryview.cast(): elements of shape must be integers > 0memoryview.cast(): product(shape) > SSIZE_MAXmemoryview: product(shape) * itemsize != buffer sizememoryview: destination format must be a native single character format prefixed with an optional '@'memoryview: cannot cast view with zeros in shape or stridesmulti-dimensional sub-views are not implementedmulti-dimensional slicing is not implementedPyMemoryView_FromBuffer(): info->buf must not be NULLmemoryview: %.200s object does not have the buffer interfaceunderlying buffer is not writablewritable contiguous buffer requested for a non-contiguous object.PyBuffer_ToContiguous: len != view->lenP p pp p 8 X X $4L\$$4L@0( p0lllllllllllllll44444444444444444hh@@@@hh@@@@,,U,,,,,:,,~,c,H-,,,,,,,,,,,,,,,,,,,,p,,,W(Px(P-------------------------------q-a--QUww8wwwww2-wwwwwwwwwwwwwwwwwwwwwYwSNww.wwwddddddddddddddddddddddddddddddddddVl++++VVl+++1J>X11J>%.200s() takes no arguments (%zd given)%.200s() takes exactly one argument (%zd given)Bad call flags in PyCFunction_Call. METH_OLDARGS is no longer supported!%.200s() takes no keyword arguments.__class__.__qualname__ is not a unicode object/builddir/build/BUILD/Python-3.4.10/Objects/methodobject.c%S.%sO(Os)free PyCFunctionObjectbuiltin_function_or_method# destroy %S __package____loader____spec__U|O:module.__init___module_reprnameless modulemodule filename missing__file__# clear[1] %s # clear[2] %s __dir__moduledef/builddir/build/BUILD/Python-3.4.10/Objects/moduleobject.cPython import machinery not initializedPython C API version mismatch for module %.100s: This Python has API version %d, module %.100s has version %d.module functions cannot set METH_CLASS or METH_STATIC%.200s.__dict__ is not a dictionary__dir__() -> list specialized dir() implementationnamespace%s(...)%S=%R%s(%S)types.SimpleNamespaceno positional arguments expecteddeallocating Nonedeallocating NotImplementedNoneType takes no arguments<%s object at %p>NULL object : in comparisonunhashable type: '%.200s'assign tocannot delete __dict__Can't initialize type typeCan't initialize weakref typeCan't initialize bool typeCan't initialize 'str'Can't initialize list typeCan't initialize None typeCan't initialize super typeCan't initialize object typeCan't initialize range typeCan't initialize dict typeCan't initialize set typeCan't initialize str typeCan't initialize slice typeCan't initialize complex typeCan't initialize float typeCan't initialize int typeCan't initialize tuple typeCan't initialize StdPrinterCan't initialize code typeCan't initialize frame typeCan't initialize method typeCan't initialize wrapper typeCan't initialize capsule typeCan't initialize cell typeNotImplementedTypeNoneType==Py_ReprNotImplementedType takes no argumentsPyObject_CallFinalizerFromDealloc called on object with a non-zero refcount__repr__ returned non-string (type %.200s)/builddir/build/BUILD/Python-3.4.10/Objects/object.c while getting the str of an object__str__ returned non-string (type %.200s)str() or repr() returned '%.100s' type : %s refcount: %ld address : %p unorderable types: %.100s() %s %.100s()attribute name must be string, not '%.200s''%.50s' object has no attribute '%U''%.100s' object has no attributes (%s .%U)'%.100s' object has only read-only attributes (%s .%U)'%.100s' object has no attribute '%U''%.50s' object attribute '%U' is read-only__dict__ must be set to a dictionary, not a '%.200s'dir(): expected keys() of locals to be a list, not '%.200s'object does not provide __dir__Can't initialize callable weakref proxy typeCan't initialize weakref proxy typeCan't initialize bytearray typeCan't initialize NotImplemented typeCan't initialize traceback typeCan't initialize static method typeCan't initialize frozenset typeCan't initialize property typeCan't initialize managed buffer typeCan't initialize memoryview typeCan't initialize enumerate typeCan't initialize reversed typeCan't initialize builtin function typeCan't initialize function typeCan't initialize dict proxy typeCan't initialize generator typeCan't initialize get-set descriptor typeCan't initialize method wrapper typeCan't initialize ellipsis typeCan't initialize member descriptor typeCan't initialize namespace typeCan't initialize long range iterator typeCan't initialize instance method typeCan't initialize class method descr typeCan't initialize method descr typeCan't initialize call iter typeCan't initialize sequence iterator type%d %ss * %zd bytes each%48s %5u %6u %11zu %15zu %13zu # arenas allocated total# arenas reclaimed# arenas highwater mark# arenas allocated current%zu arenas * %d bytes/arena# bytes in allocated blocks# bytes in available blocks%u unused pools * %d bytes# bytes lost to pool headers# bytes lost to quantizationTotalSmall block threshold = %d, in %u size classes. class size num pools blocks in use avail blocks ----- ---- --------- ------------- ------------ # bytes lost to arena alignment"PyCapsulePyCapsule_New called with null pointerPyCapsule_GetPointer called with invalid PyCapsule objectPyCapsule_GetPointer called with incorrect namePyCapsule_GetName called with invalid PyCapsule objectPyCapsule_GetDestructor called with invalid PyCapsule objectPyCapsule_GetContext called with invalid PyCapsule objectPyCapsule_SetPointer called with null pointerPyCapsule_SetPointer called with invalid PyCapsule objectPyCapsule_SetName called with invalid PyCapsule objectPyCapsule_SetDestructor called with invalid PyCapsule objectPyCapsule_SetContext called with invalid PyCapsule objectPyCapsule_Import could not import module "%s"PyCapsule_Import "%s" is not validrange()(O(OOO))N(N)iN(N)Orangeiter()%R is not in rangerange(%R, %R, %R)range(%R, %R)longrange_iteratorstopsteprange() arg 3 must not be zerorange too large to represent as a range_iteratorlll;rangeiter() requires 3 int argumentsrange object index out of rangerange indices must be integers or slices, not %.200sSet changed size during iteration/builddir/build/BUILD/Python-3.4.10/Objects/setobject.cpop from an empty setfrozenset()%s()%s({%U}){%U}frozensetintersectionissubsetissupersetsymmetric_differenceuniondiscardset_iterator8ȣӣEllipsisO(OOO)slice(%R, %R, %R)slice step cannot be zerolength should not be negative(NNN)indicesellipsisEllipsisType takes no argumentsslice indices must be integers or None or have an __index__ method(O(OO))O|O:structseqn_unnamed_fieldsn_fieldsn_sequence_fieldsunnamed fieldIn structseq_repr(), member %d name is NULL for type %.500sconstructor requires a sequence%.500s() takes a dict as second arg, if any%.500s() takes an at least %zd-sequence (%zd-sequence given)%.500s() takes an at most %zd-sequence (%zd-sequence given)%.500s() takes a %zd-sequence (%zd-sequence given),)free %d-sized PyTupleObject|O:tupletuple_iteratortuple.index(x): x not in tuple/builddir/build/BUILD/Python-3.4.10/Objects/tupleobject.c while getting the repr of a tupletuple indices must be integers, not %.200scan only concatenate tuple (not "%.200s") to tupletuple assignment index out of rangeSI?5]) -- can't set %s.%scan't delete %s.%s<%U.%U object at %p>__setattr__, NULL>object() takes no parameters__delattr__|O!O:supersuper(): no current framesuper(): no code objectsuper(): no argumentssuper(): arg[0] deletedsuper(): bad __class__ cellsuper(): empty __class__ cellcan't pickle %s objects_reduce_ex|i:__reduce__(nO)__len__() should return >= 0bases must be typesinvalid slot offsettype() takes 1 or 3 argumentsUO!O!:type__slots__ must be identifiers__weakref__duplicate base class %Uduplicate base class__eq__copyreg__newobj___slotnames__slotnames____getstate____getnewargs_ex____newobj_ex__mro__repr____str____getattr____iter____next____get____set____delete____del____add____radd____sub____rsub____mul____rmul____mod____rmod____divmod____rdivmod____pow____rpow____neg____pos____abs____bool____invert____lshift____rlshift____rshift____rrshift____and____rand____xor____rxor____or____ror____int____float____iadd____isub____imul____imod____ipow____ilshift____irshift____iand____ixor____ior____floordiv____rfloordiv____truediv____rtruediv____ifloordiv____itruediv____index____slots__bases__thisclass__the class invoking super()__self_class____getattribute____hash____lt____le____ne____gt____ge____new____neg__($self, /) -- -self__pos__($self, /) -- +self__len____setitem____delitem__helper for pickle__subclasshook__default object formatterthe object's class__subclasses____prepare____abstractmethods____basicsize____itemsize____flags____weakrefoffset____base____dictoffset____mro__Cannot create a consistent method resolution order (MRO) for basestype_traverse() called for non-heap type '%.100s'non-empty format string passed to object.__format__This object has no __weakref__PyArg_UnpackTuple() argument list is not a tupleexpected %d arguments, got %zdcan't apply this %s to %s objectcan only assign string to %s.__qualname__, not '%s'can only assign string to %s.__name__, not '%s'__name__ must not contain null bytes__get__(None, None) is invalid%s assignment: '%s' deallocator differs from '%s'%s assignment: '%s' object layout differs from '%s'can't delete __class__ attribute__class__ must be set to a class, not '%s' object__class__ assignment: only for heap types, <%s object>>Out of memory interning slotdef namesCan't instantiate abstract class %s with abstract methods %Uobject.__init__() takes no parameterstype.__init__() takes no keyword argumentstype.__init__() takes 1 or 3 arguments/builddir/build/BUILD/Python-3.4.10/Objects/typeobject.c%.200s.__slotnames__ should be a list or None, not %.200scopyreg._slotnames didn't return a list or None__slotsname__ changed size during iteration__new__() called with non-type 'self'%s.__new__(): not enough arguments%s.__new__(X): X is not a type object (%s)%s.__new__(%s): %s is not a subtype of %s%s.__new__(%s) is not safe, use %s.__new__()cannot create '%.100s' instancessuper(type, obj): obj must be an instance or subtype of typesuper(): __class__ is not a type (%s)super(): __class__ cell not foundmetaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its basescan't set attributes of built-in/extension type '%s'__getnewargs_ex__ should return a tuple, not '%.200s'__getnewargs_ex__ should return a tuple of length 2, not %zdfirst item of the tuple returned by __getnewargs_ex__ must be a tuple, not '%.200s'second item of the tuple returned by __getnewargs_ex__ must be a dict, not '%.200s'__getnewargs__ should return a tuple, not '%.200s'must use protocol 4 or greater to copy this object; since __getnewargs_ex__ returned keyword arguments.__bool__ should return bool, returned %s__init__() should return None, not '%.200s'__hash__ method should return an integerthis __dict__ descriptor does not support '%.200s' objectsmethod cannot be both class and statictype '%.100s' is not dynamically allocated but its base type '%.100s' is dynamically allocatedtype '%.100s' participates in gc and is a base type but has inappropriate tp_free slotType %.100s defines tp_reserved (formerly tp_compare) but not tp_richcompare. Comparisons may not behave as intended.type '%.100s' is not an acceptable base typemultiple bases have instance lay-out conflictnonempty __slots__ not supported for subtype of '%s'__slots__ items must be strings, not '%.200s'__dict__ slot disallowed: we already got one__weakref__ slot disallowed: either we already got one, or __itemsize__ != 0%R in __slots__ conflicts with class variabletype __qualname__ must be a str, not %sCannot extend an incomplete type '%.100s'mro() returned a non-class ('%.500s')mro() returned base with unsuitable layout ('%.500s')can only assign tuple to %s.__bases__, not %scan only assign non-empty tuple to %s.__bases__, not ()%s.__bases__ must be tuple of classes, not '%s'a __bases__ item causes an inheritance cycletype object '%.50s' has no attribute '%U'the instance invoking super(); may be Nonethe type of the instance invoking super(); may be None__repr__($self, /) -- Return repr(self).__hash__($self, /) -- Return hash(self).__call__($self, /, *args, **kwargs) -- Call self as a function.__str__($self, /) -- Return str(self).__getattribute__($self, name, /) -- Return getattr(self, name).__setattr__($self, name, value, /) -- Implement setattr(self, name, value).__delattr__($self, name, /) -- Implement delattr(self, name).__lt__($self, value, /) -- Return selfvalue.__ge__($self, value, /) -- Return self>=value.__iter__($self, /) -- Implement iter(self).__next__($self, /) -- Implement next(self).__get__($self, instance, owner, /) -- Return an attribute of instance, which is of type owner.__set__($self, instance, value, /) -- Set an attribute of instance to value.__delete__($self, instance, /) -- Delete an attribute of instance.__init__($self, /, *args, **kwargs) -- Initialize self. See help(type(self)) for accurate signature.__new__(type, /, *args, **kwargs) -- Create and return new object. See help(type) for accurate signature.__add__($self, value, /) -- Return self+value.__radd__($self, value, /) -- Return value+self.__sub__($self, value, /) -- Return self-value.__rsub__($self, value, /) -- Return value-self.__mul__($self, value, /) -- Return self*value.__rmul__($self, value, /) -- Return value*self.__mod__($self, value, /) -- Return self%value.__rmod__($self, value, /) -- Return value%self.__divmod__($self, value, /) -- Return divmod(self, value).__rdivmod__($self, value, /) -- Return divmod(value, self).__pow__($self, value, mod=None, /) -- Return pow(self, value, mod).__rpow__($self, value, mod=None, /) -- Return pow(value, self, mod).__abs__($self, /) -- abs(self)__bool__($self, /) -- self != 0__invert__($self, /) -- ~self__lshift__($self, value, /) -- Return self<>value.__rrshift__($self, value, /) -- Return value>>self.__and__($self, value, /) -- Return self&value.__rand__($self, value, /) -- Return value&self.__xor__($self, value, /) -- Return self^value.__rxor__($self, value, /) -- Return value^self.__or__($self, value, /) -- Return self|value.__ror__($self, value, /) -- Return value|self.__int__($self, /) -- int(self)__float__($self, /) -- float(self)__iadd__($self, value, /) -- Return self+=value.__isub__($self, value, /) -- Return self-=value.__imul__($self, value, /) -- Return self*=value.__imod__($self, value, /) -- Return self%=value.__ipow__($self, value, /) -- Return self**=value.__ilshift__($self, value, /) -- Return self<<=value.__irshift__($self, value, /) -- Return self>>=value.__iand__($self, value, /) -- Return self&=value.__ixor__($self, value, /) -- Return self^=value.__ior__($self, value, /) -- Return self|=value.__floordiv__($self, value, /) -- Return self//value.__rfloordiv__($self, value, /) -- Return value//self.__truediv__($self, value, /) -- Return self/value.__rtruediv__($self, value, /) -- Return value/self.__ifloordiv__($self, value, /) -- Return self//=value.__itruediv__($self, value, /) -- Return self/=value.__index__($self, /) -- Return self converted to an integer, if self is suitable for use as an index into a list.__len__($self, /) -- Return len(self).__getitem__($self, key, /) -- Return self[key].__setitem__($self, key, value, /) -- Set self[key] to value.__delitem__($self, key, /) -- Delete self[key].__mul__($self, value, /) -- Return self*value.n__rmul__($self, value, /) -- Return self*value.__contains__($self, key, /) -- Return key in self.__iadd__($self, value, /) -- Implement self+=value.__imul__($self, value, /) -- Implement self*=value.__new__($type, *args, **kwargs) -- Create and return a new object. See help(type) for accurate signature.object() -- The most base type__sizeof__() -> int size of object in memory, in bytes__dir__() -> list default dir() implementationmro() -> list return a type's method resolution order__subclasses__() -> list of immediate subclasses__prepare__() -> dict used to create the namespace for the class statement__instancecheck__() -> bool check if an object is an instance__subclasscheck__() -> bool check if a class is a subclass__dir__() -> list specialized __dir__ implementation for types__sizeof__() -> int return memory consumption of the type objectlist of weak references to the object (if defined)dictionary for instance variables (if defined) x(`P8pH@X0h0P0x@x(H8XH@wstrlegacy asciilegacy latin1legacy UCS2legacy UCS4unexpected '{' in field nameunmatched '{' in format specMissing ']' in format stringO|UU:maketranssurrogateescapesOnnscharacter maps to string index out of rangesurrogates not allowedordinal not in range(256)ordinal not in range(128)xmlcharrefreplace&#%d;expected str, got %ssize must be positiveinvalid kindpadded string is too longn|O&:rjustn|O&:ljustnew string is too longn|O&:centerrepeated string is too longinvalid widening attemptOO|n:replacecharacter out of rangeutf-32-leutf-32-beutf-32utf-16-leutf-16-beutf-16utf8iso8859-1charmapidentifier not ready%s arg must be None or strunexpected special characterutf7unterminated shift sequenceunexpected end of datainvalid start byteinvalid continuation byteembedded null charactersOnnOembedded NUL charactersy#nnOwidth too bigprecision too bigtruncated dataillegal encodingillegal UTF-16 surrogatetruncated \xXX escapetruncated \UXXXXXXXX escapetruncated \uXXXX escapeillegal Unicode charactermalformed \N character escape\ at end of stringunicodedata.ucnhash_CAPItruncated \uXXXXrawunicodeescape\Uxxxxxxxx out of rangetruncated inputunicode_internaldecoding str is not supported|Oss:strMax string recursion exceededformat requires a mappingincomplete format key* wants intprecision too large%c arg not in range(0x110000)%c requires int or charincomplete formatCan't initialize 'unicode'Can't create empty stringcould not ready string _stringstring helper moduleformatter_field_name_splitformatter_parserstr_iteratorcasefoldisdecimalisnumericisidentifierisprintableformat_mapfieldnameiteratorformatteriteratorEncodingMapSingle '}' encountered in format stringSingle '{' encountered in format stringend of string while looking for conversion specifierexpected ':' after conversion specifierexpected '}' before end of stringcharacter mapping must be in range(256)character mapping must return integer, bytes or None, not %.400sToo many decimal digits in format stringcannot switch from manual field specification to automatic field numberingcannot switch from automatic field numbering to manual field specificationOnly '.' or '[' may follow ']' in format field specifierEmpty attribute in format stringfirst maketrans argument must be a string if there is a second argumentthe first two maketrans arguments must have equal lengthif you give only one argument to maketrans it must be a dictstring keys in translate table must be of length 1keys in translate table must be strings or integersdeletion of interned string failedImmortal interned string died.Inconsistent interned string state.only 'strict' and 'surrogateescape' error handlers are supported, not '%s'not enough arguments for format stringCannot modify a string currently usedcharacter mapping must be in range(0x%x)character mapping must return integer, None or strinvalid maximum character passed to PyUnicode_NewNegative size passed to PyUnicode_Newcharacter U+%x is not in range [U+0000; U+10ffff]/builddir/build/BUILD/Python-3.4.10/Objects/unicodeobject.cCannot write %zi characters at %zi in a string of %zi charactersCannot copy %s characters into a string of %s charactersstring is longer than the bufferOn;encoding error handler must return (str/bytes, int) tupleposition %zd from error handler out of boundsencoded result is too long for a Python stringstring is too long to generate reprchr() arg not in range(0x110000)Can't convert '%.100s' object to str implicitly'in ' requires string as left operand, not %sstrings are too large to concatendswith first arg must be str or a tuple of str, not %sstartswith first arg must be str or a tuple of str, not %sThe fill character cannot be converted to UnicodeThe fill character must be exactly one character longImpossible unicode object state, wstr and str should share memory already.'%.400s' decoder returned '%.400s' instead of 'str'; use codecs.decode() to decode to arbitrary types'%.400s' encoder returned '%.400s' instead of 'str'; use codecs.encode() to encode to arbitrary typesABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/encoder %s returned bytearray instead of bytes; use codecs.encode() to encode to arbitrary types'%.400s' encoder returned '%.400s' instead of 'bytes'; use codecs.encode() to encode to arbitrary typesO!n;translating error handler must return (str, int) tupleinvalid decimal Unicode stringseparator: expected str instance, %.80s foundsequence item %zd: expected str instance, %.80s foundjoin() result is too long for a Python stringfill character is bigger than the string maximum characterCan't compare %.100s and %.100sstring indices must be integersO!n;decoding error handler must return (str, int) tupleexception attribute object must be bytespartial character in shift sequencenon-zero padding bits in shift sequenceNegative size passed to PyUnicode_FromStringAndSizewcstombs() encountered an unencodable wide characterencoder failed to return bytesmbstowcs() encountered an invalid multibyte sequencecharacter argument not in range(0x110000)PyUnicode_FromFormatV() expects an ASCII-encoded format string, got a non-ASCII byte: 0x%02xcode point in surrogate code point range(0xd800, 0xe000)code point not in range(0x110000)unknown Unicode character name\N escapes not supported (can't load unicodedata module)illegal code point (> 0x10FFFF)unicode_internal codec has been deprecatedcoercing to str: need a bytes-like object, %.80s founddecoder failed to return unicodecharacter mapping must be in range(0x%lx)Format string contains positional fieldsUnknown conversion specifier %cUnknown conversion specifier \x%xautomatic int conversions have been deprecatedstring too large in _PyBytes_FormatLong%%%c format: a number is required, not %.200sunsupported format character '%c' (0x%x) at index %zdnot all arguments converted during string formattingCan't initialize encoding map typeCan't initialize field name iterator typeCan't initialize formatter iter typereleasing %zd interned strings total size of all interned strings: %zd/%zd mortal/immortal split the argument as a field nameparse the argument as a format stringReturn the size (in bytes) of this objectʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲʲPʲʲʲʲʲʲʲʲʲʲʲʲʲIݮʲʲʲʲݮʲʲʲʲʲʲʲʲʲݮʲʲݮ,(((((((((((((((((((((((@((((@((((((((((((((((((((((((((((((((((((((((((@((((@@(((@(((((((@(((@(@@(TTTd$4tXllHlllllll8l0ll >>>>>>>>>>>>>>>>>>>>>>>>9>>>>>>>>>99>>>   !"#$%&'(()*+(,-./0.1234445567877779:;9:;9:;<=9:;>?@ABCDDEFGHIJKLMMNOMPQRSTUTVWXYZZZ[\\]^7_________```````__````````````_____``a`b222cdddeffghiiijklmmnopqqqrstuvwxyz@@@{{{{{{{{{{{{{{{{||||||||||||||||}~`77777777777777777777777777777777777777777777777777777777777777`7777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777``77 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777777```7777777777777777777777```7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 `7777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777 777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777` 777777777777777777777777777777777777` 77777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777 7777777777777777777777777777777777777777777`7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777`7  77777777777777777777777777777777777`7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777777777777777777777777777  `777777777777777777777777777777777777777777777777777777 77777777777777777777777777777777 77777777777777777777777777777777777777777777777777777777777777777777777777777777 777 777777777777777777777777777777``````7777777777_____________________________________________________________________________________________________wz_______________qqqqqqqqqqqqqqqqqqqqq7777qqq     __77777777777777777777777777777777777777777777777777777777`7777777777777777777777777777777777777777777777777777777777777777777777777777777`7``````777777777777777777777777777777777777777777777777777777777777777777777777777777777777777``7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777```7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777`777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777``````777777777777`7777777777777777 777`7777777777777777777777777777777777777777777777777777777777777777777777`````````_`__7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 7777777 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777` 7777777777777777777777777777777777777777777777777777 7777777777777777`7777777777777777777777777777777777777777777777777777777777777777777`777777777777``7777777777777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 !77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777""""""77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"""7"7""7"7"7"7"777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 7777777777`777777777777777777777777777777777777777777777##777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%777777777777777777777777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777777777777777777777 777777777777777777777777777777777777 7777777777777777777777777777777777777777777777777777 7777777777777777777777777777777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777`````````````77qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq     777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777  !""#$%&'"""()*+,-./0123456789:;<=>?@@@ABC@@@@DE@@@@@@FGHIJKLM@NOPQRST@@UV""""""W"""""X""""""""""""""""""""""""""""""""""""YZ[\"""]"""^_"""""`"""a""""""""""bcd""""""ef""""""""g""""""""""""""h""""""""i""""e""""""""""""""""""""h""""""j""""""""""""""""kl"""""""""""""""""mn"""""""""""""""""op""""""""q""rstuvwxyz{|}"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""~"GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG""""""GGGGGGGGGGGGGGGGGGGGGGGG""""""""GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG""""GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAGGGGGGGGGGGGGGGGG"""""""""""""""W""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"""GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGյssSSSsi0InNsSj J Ee5R5h1H1tTw W y Y aAa`ssPRTVBB           (!)"*#+$,%-&.'/ (!)"*#+$,%-&.'/`haibjckdlemfngo`haibjckdlemfngopEEBBBBBEtEEBBBBBEBBBBBBBB|EEBBBBBEffFFFffiFIFiflFLFlffiFFIFfifflFFLFflstSTStstSTSttvDFDvteD5DetkD;Dk~vNFNvtmD=Dm 0   ' ' '   g   gyy '' '   g '  g' g ''''O''''aa ''' '' '''''88 ''A' ' '  g''~'+*']'(*'?*?* '='E'G'** '** '** '.. '22 '33 '66 '55 '11 '(( 'DD '// '-- ')) ')) '++ '** ')) '&& ' ''' ' '%% ' 7v 4&'%'@'?'!0! g ' '($0( g-+- g ' ''0.0 g313 g'646 g979 g '<:< g?=? g ''B@B g'P' '' '0' 'FC H g`'  ' 'MJ M gRO R gWT W g\Y \ ga^ a gece gif ig ''mj m gso0s gzv0z g}0 gJJ 'VV 'dd ' 'pp '~~ '  g  g  g  g  g  g  g  g Ag Ag Ag Ag Ag Ag Ag Ag  g  g  g  g  g  g    g  g Ag Ag#  %Ag)& +Ag/, 1Ag52 7Ag;8 =AgA> CAgGD I gMJ O gSP U gYV [ g_\ a geb g gkh m gqn s gwt yAg}z Ag Ag Ag Ag Ag Ag Ag  g  g  g  g0 g' Ag g  g  g  g  g0 g' Ag0 g0 g    g 0 g'0 g0 g$! $ g)& ) g/+0/ g'52 7 g<9 > gB? D gIF I gOK0R g''XU ZAg       'A''' '//$$ ''' ' '''''' 'u'Z'Z'^[ ` geb g gli n gtp0w g~z0 g  g  g  g  g  g  g  g(' '࿚??UUUUUU???UUUUUU?$I$I??qq?$@Y@@@@j@חAmB&@@(@*@@,@.@@1@!@2@3@UUUUUU??4@i@@@@5@^ A6@7@8@9@:@;@<@=@@???333333??>@r@p@L@?@@@@@A@A@B@B@C@C@@?D@y@@@@D@E@E@^AF@F@G@G@H@H@@@??I@@@@j@@N@@p@L@@ @?Q@@X@@ @T@@@@@"@@V@ @@@:__call__weak object has gone awayweakcallableproxyweakproxy__callback__cannot create weak reference to '%s' objectweakly-referenced object no longer exists/builddir/build/BUILD/Python-3.4.10/Objects/weakrefobject.calwaysunknown action'registry' must be a dictfiltersshowwarningonce:%d: lost sys.stderr OOUi|OOO:warn_explicit__warningregistry____main__O|On:warn_onceregistry_defaultactioncategorystacklevelmodule_globals_warnings_filters_mutated_warnings.filters must be a list_warnings.filters item %zd isn't a 5-tuple_warnings.defaultaction not foundUnrecognized action (%R) in warnings.filters: %Rwarnings.showwarning() must be set to a callable/builddir/build/BUILD/Python-3.4.10/Python/_warnings.ccategory is not a subclass of Warningunknown operator foundunknown expr_context foundeither 0 or s(O){sOss}_astO()O()O_attributesModuleInteractiveExpressionSuiteFunctionDefClassDefReturnDeleteAugAssignForWhileWithRaiseTryAssertImportImportFromGlobalNonlocalExprPassBreakContinueBoolOpBinOpUnaryOpLambdaIfExpDictSetListCompSetCompDictCompGeneratorExpYieldYieldFromCompareCallNameConstantAttributeSubscriptStarredListTupleexpr_contextDelAugLoadAugStoreParamExtSliceIndexboolopMultModPowLShiftRShiftBitOrBitXorBitAndFloorDivunaryopInvertUAddUSubcmpopNotEqLtLtEGtGtEIsIsNotNotInexcepthandlerExceptHandleraliaswithitemunknown boolop foundunknown unaryop foundunknown cmpop foundinvalid integer value: %Rfield test is required for Iffield n is required for Numfield s is required for Strfield s is required for Bytesfield id is required for Namefield arg is required for argPyCF_ONLY_ASTexpected %s node, got %.400scontext_exproptional_varsasnameannotationcol_offsetvarargkwonlyargskw_defaultskwargtargetifsdimseltsctxfunckeywordsstarargskwargsopseltgeneratorsorelseoperandhandlersfinalbodyexctargetsdecorator_listreturns_ast.AST ,'yield' outside functioninvalid subscript kind %dtoo many annotations'return' outside function__future__'break' outside loopno symtablesuite should not be possible.@@`Pj\T,,dTD  \\ |l< $$| H 0X8h X 8h  S43n,'%L&&&L'' ()<***,+\+l,.,','0,'%,0ghi|}~ >?BA@789;CKLONM 'continue' not supported inside 'finally' clause'continue' not properly in loop(Nn)%s with '%s' codec faileddecodingincrementaldecoderincrementalencoderhandler must be callableencodingsargument must be callableunknown encoding: %sOscodecs.encode()codecs.decode()(Cn)_is_text_encodingstrict_errorsignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorssurrogatepass0123456789abcdefdon't know how to handle %.200s in error callbackencoder must return a tuple (object, integer)decoder must return a tuple (object,integer)/builddir/build/BUILD/Python-3.4.10/Python/codecs.ccan't initialize codec error registrycan't initialize codec registryno codec search functions registered: can't find encodingcodec search functions must return 4-tuples'%.400s' is not a text encoding; use %s to handle arbitrary codecsunknown error handler name '%.400s'codec must pass exception instanceImplements the 'strict' error handling, which raises a UnicodeError on coding errors.Implements the 'ignore' error handling, which ignores malformed data and continues.Implements the 'replace' error handling, which replaces malformed data with a replacement marker.Implements the 'xmlcharrefreplace' error handling, which replaces an unencodable character with the appropriate XML character reference.Implements the 'backslashreplace' error handling, which replaces an unencodable character with a backslashed escape sequence.RQQPR8RSSvSZSSRUNNING_ON_VALGRIND/builddir/build/BUILD/Python-3.4.10/Python/errors.cexception %R not a BaseException subclassOut of memory and PyExc_MemoryError is not initialized yetbad argument type for built-in operation%s:%d: bad argument to internal functionbad argument to internal functionPyErr_NewException: name must be module.class(iOOiO)(iOO)(iO)sOOException ignored in: rbout of memory PYTHONINSPECTPYTHONUNBUFFEREDPython %s %s __main__ not frozenUnable to decode the command line argument #%i nested_scopesdivisionabsolute_importwith_statementprint_functionunicode_literalsbarry_as_FLUFLbracesnot a chancefuture feature %.100s is not definedUnmatched left paren in format stringUnmatched right paren in format stringinteger argument expected, got floatstr without null characters or Nonemust be %d-item sequence, not %.50smust be sequence of length %d, not %zdunsigned byte integer is less than minimumunsigned byte integer is greater than maximumsigned short integer is less than minimumsigned short integer is greater than maximumsigned integer is greater than maximumsigned integer is less than minimum(unknown parser marker combination)string or unicode or text buffer(encoder failed to return bytes)encoded string without NULL bytesinvalid use of 'w' format character%s%s takes at most %d argument%s (%zd given)Invalid format string (| specified twice)Invalid format string ($ before |)Invalid format string ($ specified twice)Function takes %s %d positional arguments (%d given)More keyword list entries (%d) than format specifiers (%d)Argument given by name ('%s') and position (%d)Required argument '%s' (pos %d) not foundmore argument specifiers than keyword list entries (remaining format:'%s')'%U' is an invalid keyword argument for this functiontoo many tuple nesting levels in argument format string%.200s%s takes at least one argumentold style getargs format uses new featuresnew style getargs format but argument is not a tuple%.150s%s takes %s %d argument%s (%ld given)/builddir/build/BUILD/Python-3.4.10/Python/getargs.ckeyword arguments must be strings%s expected %s%zd arguments, got %zdunpacked tuple should have %s%zd elements, but has %zd%s does not take keyword arguments%s does not take positional argumentsimpossiblebytes or buffercontiguous bufferread-only pinned buffer%.200s() argument %zd, item %d %.256sstr or Nonestr without null charactersis not retrievableintegermust be %.50s, not %.50sintegera byte string of length 1a unicode charactersize does not fit in an intbytes without null bytes(unicode conversion error)(buffer is NULL)(AsCharBuffer failed)(encoding failed)(buffer_len is NULL)(buffer overflow)(unspecified)read-write bufferat mostexactly%s: '%s'at leastexcess ')' in getargs formatmissing ')' in getargs format%.200s%s takes no argumentsbad format string: %.200sat least at most Dl܊pX З0ȚPHx(Д@X@X [GCC 8.5.0 20210514 (Red Hat 8.5.0-20)]Copyright (c) 2001-2019 Python Software Foundation. All Rights Reserved. Copyright (c) 2000 BeOpen.com. All Rights Reserved. Copyright (c) 1995-2001 Corporation for National Research Initiatives. All Rights Reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All Rights Reserved.3.4.10%.80s (%.80s) %.80sbreakcontinueraiseglobalnonlocalassertelifexceptsingle_inputfile_inputeval_inputdecoratordecoratorsdecoratedfuncdeftypedargslisttfpdefvarargslistvfpdefsimple_stmtsmall_stmtexpr_stmttestlist_star_expraugassigndel_stmtpass_stmtflow_stmtbreak_stmtcontinue_stmtreturn_stmtyield_stmtraise_stmtimport_stmtimport_nameimport_fromimport_as_namedotted_as_nameimport_as_namesdotted_as_namesdotted_nameglobal_stmtnonlocal_stmtassert_stmtcompound_stmtif_stmtwhile_stmtfor_stmttry_stmtwith_stmtwith_itemexcept_clausesuitetest_nocondlambdeflambdef_nocondor_testand_testnot_testcomp_opxor_exprand_exprshift_exprarith_exprtermfactorpoweratomtestlist_comptrailersubscriptlistsubscriptsliceopexprlisttestlistdictorsetmakerclassdefarglistcomp_itercomp_forcomp_ifencoding_declyield_expryield_arg(0p%P>(0p%P> P>  (0p%P> pP> P>  @ @%  pP> P> P> P> @ P> P> P> P>U:is_frozen_packageU:get_frozen_objectU:is_builtinUO&|O:load_dynamicU:is_frozenO!U:_fix_co_filenameCan't backup builtins dictmeta_pathpath_importer_cachenot holding the import lock# clear builtins._ # clear sys.%s # restore sys.%s # cleanup[2] removing %U # cleanup[3] wiping %U # cleanup[3] wiping sys # cleanup[3] wiping builtins _RAW_MAGIC_NUMBERU:init_builtin__path__U:init_frozenEmpty module namemodule name must be a stringlevel must be >= 0package must be a string'__name__' not in globals__name__ must be a string_call_with_frames_removed{OO}OOOOiunable to get sys.path_hooks# installing zipimport hook zipimport# can't import zipimport # installed zipimport hook initializing zipimport failedreload_handle_fromlist_find_and_load_lock_unlock_module_initializing_fix_up_module_get_sourcefile_impextension_suffixeslock_heldacquire_lockrelease_lock__stdin____stdout____stderr__ps1ps2last_typelast_valuelast_traceback__interactivehook__No such frozen object named %RExcluded frozen object named %RCan't initialize import variablesinitializing sys.meta_path, sys.path_hooks, or path_importer_cache failedPyImport_ReInitLock failed to create a new lock/builddir/build/BUILD/Python-3.4.10/Python/import.cPyImport_GetModuleDict: no module dictionary!import: deleting existing key insys.modules failedLoaded module %R not found in sys.modulesimport %U # previously loaded (%R) Cannot re-init internal module %RPyImport_ExecCodeModuleWithPathnames: no interpreter!frozen object %R is not a code objectParent module %R not loaded, cannot perform relative importattempted relative import beyond top-level packageimport of %R halted; None in sys.modules%R not in sys.modules as expected# can't import zipimport.zipimporter dynamic module does not define init function (PyInit_%s)initialization of %s raised unreported exceptioninitialization of %s did not return an extension moduletoo many objectsmarshal data too shortEOF read where not expectedrecursion limit exceededy*:loadsunmarshallable objectO|i:dumpsOO|i:dumpmarshalread() returned too much data: %zd bytes requested, %zd returnedbad marshal data (index list too large)EOF read where object expectedbad marshal data (long size out of range)bad marshal data (unnormalized long data)bad marshal data (digit out of range in long)bad marshal data (string size out of range)bad marshal data (unicode size out of range)bad marshal data (tuple size out of range)NULL object in marshal data for tuplebad marshal data (list size out of range)NULL object in marshal data for listbad marshal data (set size out of range)NULL object in marshal data for setbad marshal data (invalid reference)bad marshal data (unknown type code)XXX readobject called with exception set NULL object in marshal data for objectf.read() returned not bytes but %.100sobject too deeply nested to marshal|    $  < l  <   |< dunmatched paren in formatUnmatched paren in formatmodule '%s' has no __dict__\\\\\\\\T\\\\\\\\\\\\\\\\\\\\\\T\\T\\T\,D\\T\\\\\\\\\\\\\T\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,\D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,\D!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Dl!!!!D!tt!!!t!!!!!! !!!!!!D ! !DD! !!!!!!!!!TNULL object passed to Py_BuildValuebad format char passed to Py_BuildValuePyModule_AddObject() needs module as first argPyModule_AddObject() needs non-NULL value@(  UUUUUUUU?33333333*$I$I$qqqE]tEUUUUUUU;;I$I$I8885P^Cy 0 0 0 袋. ,d! p= ףp= ؉؉ %^B{ $I$I$ =B!B|PuPuPqqunexpected binary operation %d on a constantunexpected unary operation %d on a constant 7 7|333 73335535555553333333333333333333333333333333333555553333333333333333D5333333333T433333333 6 6 633333T4|2|2T4T4T4333T4T4T4T433333333333333333333T41)8887777c7888888888888888888888888888888888888r8Q8B75  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*@ @@@AAxApAsiphash24PyThreadState_Delete: NULL tstatePyThreadState_Delete: NULL interpCouldn't create autoTLSkey mapping/builddir/build/BUILD/Python-3.4.10/Python/pystate.cCan't initialize threads for interpreterPyState_AddModule: Module Definition is NULLPyState_AddModule: Module already added!PyState_RemoveModule: Module index invalid.PyState_RemoveModule: Interpreters module-list not acessible.PyState_RemoveModule: Module index out of bounds.PyThreadState_Clear: warning: thread still has a frame PyThreadState_Delete: tstate is still currentPyInterpreterState_Delete: invalid interpPyInterpreterState_Delete: remaining threadsPyThreadState_DeleteCurrent: no current tstatePyThreadState_Get: no current threadCouldn't create thread-state for new threadauto-releasing thread-state, but no thread-state for this threadThis thread state must be current when releasingCould not allocate TLS entry File "%U", line %d ^ unexpected indentinvalid tokenunexpected EOF while parsingexpression too longunknown decode errorunknown parsing errorexpected an indented blockinvalid syntaxunexpected unindenterror=%d (sO)sNwbOsssOisiOOOiencodings.utf_8encodings.latin_1OpenWrapperPYTHONIOENCODINGPYTHONHOMEFatal Python error: %s CODESET is not set or emptycan't create __main__ moduleBuiltinImporterError in sys.excepthook: Original exception was: sys.excepthook is missing _frozen_importlibimport imp # builtin import sys # builtin _install>>> ... __cached__.pyc.pyoSourcelessFileLoaderBad magic number in .pyc fileBad code object in .pyc fileSourceFileLoadersysmodules???PYTHONDEBUGPYTHONVERBOSEPYTHONOPTIMIZEPYTHONDONTWRITEBYTECODEPYTHONHASHSEED_shutdownrawexcepthook The above exception was the direct cause of the following exception: During handling of the above exception, another exception occurred: TypeError: print_exception(): Exception expected for value, EOF while scanning triple-quoted string literalEOL while scanning string literalinconsistent use of tabs and spaces in indentationunindent does not match any outer indentation leveltoo many levels of indentationunexpected character after line continuation characterinvalid character in identifiermultiple statements found while compiling a single statement/builddir/build/BUILD/Python-3.4.10/Python/pythonrun.cPy_Initialize: Unable to get the locale encodingFailed to retrieve builtins moduleFailed to initialize __main__.__builtins__Failed to retrieve BuiltinImporterFailed to initialize __main__.__loader__Py_EndInterpreter: thread is not currentPy_EndInterpreter: thread still has a framePy_EndInterpreter: not the last threadPy_Initialize: can't import _frozen_importlibimport _frozen_importlib # frozen Py_Initialize: couldn't get _frozen_importlib from sys.modulesPy_Initialize: can't import impPy_Initialize: can't save _imp to sys.modulesPy_Initialize: importlib install failedFailed to import the site module python: Can't reopen .pyc file python: failed to set __main__.__loader__ Py_NewInterpreter: call Py_Initialize firstPy_Initialize: can't set preliminary stderrPy_Initialize: can't initialize sys standard streamsPy_Initialize: can't make first interpreterPy_Initialize: can't make first threadPy_Initialize: can't init framesPy_Initialize: can't init longsPy_Initialize: can't init bytearrayPy_Initialize: can't init floatPy_Initialize: can't make modules dictionaryPy_Initialize: can't initialize unicodePy_Initialize: can't initialize structseqPy_Initialize: can't initialize builtins modulesPy_Initialize: can't initialize builtins dictPy_Initialize: can't initialize sysPy_Initialize: can't initialize sys dictPy_Initialize: can't initialize faulthandlerPy_Initialize: unable to load the file system codecPy_Initialize: can't import signalPy_Initialize: can't initialize tracemalloc'import warnings' failed; traceback: WWT8VVXVVVVVWWWWWWpython3gettimeofday()ftime()timestamp out of range for platform time_tư>MbP?eA.Anegative argument not allowedgetentropy() failedPYTHONHASHSEED must be "random" or an integer in range [0; 4294967295]bad memberdescr typereadonly attributeTruncation of value to charTruncation of value to shortTruncation of value to intbad memberdescr type for %sxhX@؟ ȟ؞0Ȟ$\T<4ģcan't delete numeric/char attributeattribute value type must be boolTruncation of value to unsigned charTruncation of value to unsigned shortWriting negative value into unsigned fieldTruncation of value to unsigned intduplicate argument '%U' in function definitionname '%U' is parameter and globalname '%U' is nonlocal and globalname '%U' is parameter and nonlocalnonlocal declaration not allowed at module levelno binding for nonlocal '%U' foundimport * only allowed at module levelmaximum recursion depth exceeded during compilationname '%.400s' is assigned to before global declarationname '%.400s' is used prior to global declarationname '%.400s' is assigned to before nonlocal declarationname '%.400s' is used prior to nonlocal declaration/builddir/build/BUILD/Python-3.4.10/Python/symtable.cthis compiler does not handle Suites(Oii)genexprlistcompsetcompdictcomp.%d_[%d]unknown symbol table entrysymtable entrysymbolsoptimizednested,ܿ̿ľD\̼<ܻ,,,,,|$|LXX@ OO!:call_tracingU:interncan't intern %.400si:setrecursionlimitd:setswitchintervali:setcheckintervali:setdlopenflags|i:_getframecall stack is not deep enoughlost builtins moduleno mem for sys.path insertionsys.path.insert(0) failed... truncatedO|O:getsizeofcan't create sys.pathcan't assign sys.pathno mem for sys.argvcan't assign sys.argv__displayhook____excepthook__hexversionCPython(szz)_mercurialdont_write_bytecodeapi_versioncopyrightplatformexecutablebase_prefixbase_exec_prefixmaxsizemaxunicodebuiltin_module_namesabiflags_xoptionsfinalcache_tagimplementationfloat_repr_stylewarnoptionsc_callc_exceptionc_returncpython-34cpythonsys.version_infoMajor release numberMinor release numbermicroPatch release numberreleaselevelserialSerial release numbersys.flags-dinspect-iinteractive-O or -OO-Bno_user_site-sno_site-Signore_environment-Everbose-vbytes_warning-bquiet-qhash_randomization-Risolated-Icallstats_clear_type_cache_current_framesexc_infogetdefaultencodinggetdlopenflagsgetallocatedblocksgetfilesystemencodinggetrefcountgetrecursionlimitgetcheckintervalgetswitchintervalsetprofilegetprofilesettracegettrace_debugmallocstatssys.hash_infowidthmodulusinfnanhash_bitsseed_bitsseed size of hash algorithmcutoffsys.getcheckinterval() and sys.setcheckinterval() are deprecated. Use sys.getswitchinterval() instead.filesystem encoding is not initializedrecursion limit must be positiveswitch interval must be strictly positivesys.getcheckinterval() and sys.setcheckinterval() are deprecated. Use sys.setswitchinterval() instead./builddir/build/BUILD/Python-3.4.10/Python/sysmodule.cType %.100s doesn't define __sizeof____sizeof__() should return >= 0Python error: is a directory, cannot continue 'alpha', 'beta', 'candidate', or 'release'width of the type used for hashing, in bitsprime number giving the modulus on which the hash function is basedvalue to be used for hash of a positive infinityvalue to be used for hash of a nanmultiplier used for the imaginary part of a complex numbername of the algorithm for hashing of str, bytes and memoryviewsinternal output size of hash algorithmsmall string optimization cutoff-c-mtb_linenotb_lastitb_nexttb_frame[ssss]\x\u\U ... File , line in tracebacklimit File "%U", line %d, in %U Current thread 0xThread 0x (most recent call first): Stack (most recent call first): /builddir/build/BUILD/Python-3.4.10/Python/traceback.cTraceback (most recent call last): unable to get the thread head state----help--version-J is reserved for Jython Unknown option: -%c Argument expected for the -%c option %+.02dINFNANcould not convert string to float: %.200svalue too large to convert to float: %.200s/builddir/build/BUILD/Python-3.4.10/Python/pystrtod.c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@InfinityNaN}ؗҜ<3#I9=D2[%Cod(h7yACnF?O8M20HwZ Could not find platform dependent libraries Consider setting $PYTHONHOME to [:] Not enough memory for dynamic PYTHONPATHor home =os.pyLibrbPYTHONPATH:plat-linux/opt/alt/python34lib64/python3.4pyvenv.cfglib64/python00.zipModules/Setuppybuilddir.txtlib64/lib-dynloadrunpy_run_module_as_main/pythonX.XPython %s PYTHONNOUSERSITEPYTHONWARNINGS,Python %s on %s PYTHONSTARTUPCould not open PYTHONSTARTUP unable to get sys.pathCould not import runpy module Could not access runpy._run_module_as_main Could not convert module name to unicode Could not create arguments for runpy._run_module_as_main Failed calling sys.__interactivehook__ not enough memory to copy -c argumentusage: %ls [option] ... [-c cmd | -m mod | file | -] [arg] ... Try `python -h' for more information. Options and arguments (and corresponding environment variables): -b : issue warnings about str(bytes_instance), str(bytearray_instance) and comparing bytes/bytearray with str. (-bb: issue errors) -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x -c cmd : program passed in as string (terminates option list) -d : debug output from parser; also PYTHONDEBUG=x -E : ignore PYTHON* environment variables (such as PYTHONPATH) -h : print this help message and exit (also --help) -i : inspect interactively after running script; forces a prompt even if stdin does not appear to be a terminal; also PYTHONINSPECT=x -I : isolate Python from the user's environment (implies -E and -s) -m mod : run library module as a script (terminates option list) -O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x -OO : remove doc-strings in addition to the -O optimizations -q : don't print version and copyright messages on interactive startup -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE -S : don't imply 'import site' on initialization -u : unbuffered binary stdout and stderr, stdin always buffered; also PYTHONUNBUFFERED=x see man page for details on internal buffering relating to '-u' -v : verbose (trace import statements); also PYTHONVERBOSE=x can be supplied multiple times to increase verbosity -V : print the Python version number and exit (also --version) -W arg : warning control; arg is action:message:category:module:lineno also PYTHONWARNINGS=arg -x : skip first line of source, allowing use of non-Unix forms of #!cmd -X opt : set implementation-specific option file : program read from script file - : program read from stdin (default; interactive mode if a tty) arg ...: arguments passed to program in sys.argv[1:] Other environment variables: PYTHONSTARTUP: file executed on interactive startup (no default) PYTHONPATH : '%c'-separated list of directories prefixed to the default module search path. The result is sys.path. PYTHONHOME : alternate directory (or %c). The default module search path uses %s. PYTHONCASEOK : ignore case in 'import' statements (Windows). PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr. PYTHONFAULTHANDLER: dump the Python traceback on fatal errors. PYTHONHASHSEED: if this variable is set to 'random', a random value is used to seed the hashes of str, bytes and datetime objects. It can also be set to an integer in the range [0,4294967295] to get hash values with a predictable seed. not enough memory to copy PYTHONWARNINGSType "help", "copyright", "credits" or "license" for more information.Unable to decode the command from the command line: %ls: '%ls' is a directory, cannot continue %ls: can't open file '%s': [Errno %d] %s bBc:dEhiIJm:OqRsStuvVW:xX:?__main__hP@0ȩuncollectablecollected{snsnsn}(iii)gc: %s <%s %p> gc: done, %.4fs elapsedgarbage collection{sisnsn}i:set_debuginvalid generationi|ii:set_thresholdgarbageDEBUG_STATSDEBUG_COLLECTABLEDEBUG_UNCOLLECTABLEDEBUG_SAVEALLDEBUG_LEAK %s disableisenabledget_debugget_countget_thresholdcollectget_objectsget_statsis_trackedget_referrersget_referentsgc: collecting generation %d... gc: objects in each generation:gc: done, %zd unreachable, %zd uncollectablegc couldn't create gc.garbage listunexpected exception during garbage collectiongc: %zd uncollectable objects at shutdowngc: %zd uncollectable objects at shutdown; use gc.set_debug(gc.DEBUG_UNCOLLECTABLE) to list them/builddir/build/BUILD/Python-3.4.10/Modules/gcmodule.cUnhandled exception in thread started by can't specify a timeout for a non-blocking calltimeout value must be strictly positiveInternal lock count overflowedCouldn't get thread-state dictionaryInitialization arguments are not supportedsize must be 0 or a positive valuesetting stack size not supportedcannot release un-acquired lockoptional 3rd arg must be a dictionary/builddir/build/BUILD/Python-3.4.10/Modules/_threadmodule.cblockingtimeout|id:acquiretimeout value is too large<%s owner=%ld count=%lu>thread.local.%pcan't allocate lockrelease unlocked lock|n:stack_sizesize not valid: %zd bytesno current thread identkl(kl):_acquire_restorecouldn't acquire lockstart_new_threadfirst arg must be callable2nd arg must be a tuplecan't start new threadTIMEOUT_MAXLockType_localdummy_destroyedstart_newallocate_lockexit_threadinterrupt_mainget_ident_set_sentinel_thread._localThread-local data_thread._localdummyThread-local dummy_thread.RLock_is_owned_release_save_thread.locklocked_lock쵠ƠBException ignored when trying to write to the signal wakeup fd: signal number %ld out of rangesignal only works in main threadsignal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable objectset_wakeup_fd only works in main threaderrno associated with this signalreal user ID of sending processOO:sigtimedwaittimeout must be non-negativeO:sigwaitiO:signalsignal number out of rangei:alarmi:set_wakeup_fdinvalid fdi:getsignalO:sigwaitinfoii:siginterrupti:getitimerid|d:setitimerSIG_DFLSIG_IGNNSIGSIG_BLOCKSIG_UNBLOCKSIG_SETMASKdefault_int_handlerSIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGIOTSIGABRTSIGFPESIGKILLSIGBUSSIGSEGVSIGSYSSIGPIPESIGALRMSIGTERMSIGUSR1SIGUSR2SIGCLDSIGCHLDSIGPWRSIGIOSIGURGSIGWINCHSIGSTOPSIGTSTPSIGCONTSIGTTINSIGTTOUSIGVTALRMSIGPROFSIGXCPUSIGXFSZSIGRTMINSIGRTMAXITIMER_REALITIMER_VIRTUALITIMER_PROFsignal.ItimerErroriO:pthread_sigmaskli:pthread_killpausesigpendingsignal.struct_siginfosi_signosignal numbersi_codesignal codesi_errnosi_pidsending process IDsi_uidsi_statusexit value or signalsi_bandband event for SIGPOLLuid should be integer, not %.200sgid should be integer, not %.200sargument should be %s, not %.200s%s%scan't specify None for %s argument%s%sillegal type for %s parameter%s%sembedded NUL character in %ssetgroups argument must be a sequenceunable to determine login namecould not allocate a large enough CPU setexpected an iterator of ints, but iterator yielded %Rexecve: argv must be a tuple or listexecve: environment must be a mapping objectenv.keys() or env.values() is not a listexecv() arg 2 must be a tuple or listexecv() arg 2 must not be emptysymlink: src and dst must be the same typelink: src and dst must be the same type%s: cannot use fd and follow_symlinks togetherutime: you may specify either 'times' or 'ns' but not bothutime: 'times' must be either a tuple of two ints or Noneutime: 'ns' must be a tuple of two ints%s: can't specify dir_fd without matching path%s: can't specify both dir_fd and fdLoad averages are unobtainablemust have a sched_param objectconfiguration names must be strings or integersunrecognized configuration namestrerror() argument out of rangereadv() arg 2 must be a sequencestat_float_times() is deprecated%s: src and dst must be the same type%s: cannot use dir_fd and follow_symlinks together%s%s%s unavailable on this platformwritev() arg 2 must be a sequencewidth of the terminal window in charactersheight of the terminal window in charactersSC_THREAD_DESTRUCTOR_ITERATIONSCS_XBS5_ILP32_OFFBIG_LINTFLAGSCS_XBS5_LPBIG_OFFBIG_LINTFLAGSelapsed time since an arbitrary point in the pastname of machine on network (implementation-defined)integer time of last modificationtime of last access in nanosecondstime of last modification in nanosecondstime of last change in nanosecondsuid is less than minimumuid is greater than maximumgid is less than minimumgid is greater than maximumfd is greater than maximumfd is less than minimumO:sched_paramO&:minorO&:majori:get_inheritablei:WIFEXITEDi:WIFSIGNALEDi:WIFSTOPPEDi:WCONTINUEDi:WCOREDUMPstring, bytes or integeri:WSTOPSIGi:WTERMSIGi:WEXITSTATUSO&:confstrO&:unsetenvO&O&:putenv%s=%sii:makedev(ii)ii:closerangei:isattyiiOn:sendfileiiO&:preadii:readiOi:lseekii|i:dup2i:dupi:device_encodingresourceNiNii:wait4i:wait3too many groupsgroups must be integersi:sched_getaffinityO&|iO&$O&:mknodO&O&:pathconfO&O&:truncateO&|i$O&:mkfifoO&i|i$O&:openiO:sched_setaffinitynegative CPU numberCPU number too largei:sched_getparamO&OO:execveO&O:execvi:_exitO&|$O&:unlinkO&:systemsrcdstO&O&|i$O&:symlinkO&|$O&:rmdirO&|$O&:readlinkO&|i$O&:mkdirO&O&|O&O&p:linkO&O&O&:lchownO&:chdir|O&$p:listxattrO&O&|$p:removexattrO&O&|$p:getxattrO&O&y*|i$p:setxattrfollow_symlinksO&|O$OO&p:utimei:fstatvfsO&:statvfsii:set_inheritableO&:sysconfO&O&O&:setresgidO&O&O&:setresuidn:urandomdddiO&:fpathconfsched_priority out of rangei:strerroriO&O&i:posix_fadviseiO&O&:posix_fallocateiO&:ftruncatei:closeiy*O&:pwriteiO:readviy*:writeiiO&:lockfii:tcsetpgrpi:tcgetpgrpii:setpgidi:getsidiiiNii:getpgidO&O&:initgroupsO&:setgidO&O&:setregidO&:setegidO&:seteuidO&:setuidii:killpgii:kill(Ni)iiO&:sched_setscheduleriO&:sched_setparami:sched_rr_get_intervali:sched_getscheduleri:sched_get_priority_mini:sched_get_priority_maxi:umask|i:stat_float_timesrenamei:nice|O&:listdiriO&O&:fchownii:fchmodi:ttynameO&i|$O&pp:accessO&:chrootO&i|$O&p:chmodO&O&:setreuidii:waitpidiO:writevO&O&O&|$O&p:chowniii:waitidi:fstatO&|$O&:lstatO&|$O&p:statsO&:getgrouplistF_OKR_OKW_OKTMP_MAXWNOHANGWUNTRACEDO_RDONLYO_WRONLYO_RDWRO_NDELAYO_NONBLOCKO_APPENDO_DSYNCO_RSYNCO_SYNCO_NOCTTYO_CREATO_EXCLO_LARGEFILEO_PATHO_TMPFILEPRIO_PROCESSPRIO_PGRPPRIO_USERO_CLOEXECO_ACCMODESEEK_HOLESEEK_DATAO_ASYNCO_DIRECTO_DIRECTORYO_NOFOLLOWO_NOATIMEEX_OKEX_USAGEEX_DATAERREX_NOINPUTEX_NOUSEREX_NOHOSTEX_UNAVAILABLEEX_SOFTWAREEX_OSERREX_OSFILEEX_CANTCREATEX_IOERREX_TEMPFAILEX_PROTOCOLEX_NOPERMEX_CONFIGST_RDONLYST_NOSUIDST_NODEVST_NOEXECST_SYNCHRONOUSST_MANDLOCKST_WRITEST_APPENDST_NOATIMEST_NODIRATIMEST_RELATIMEPOSIX_FADV_NORMALPOSIX_FADV_SEQUENTIALPOSIX_FADV_RANDOMPOSIX_FADV_NOREUSEPOSIX_FADV_WILLNEEDPOSIX_FADV_DONTNEEDP_PIDP_PGIDP_ALLWEXITEDWNOWAITWSTOPPEDCLD_EXITEDCLD_DUMPEDCLD_TRAPPEDCLD_CONTINUEDF_LOCKF_TLOCKF_ULOCKF_TESTSCHED_OTHERSCHED_FIFOSCHED_RRSCHED_BATCHSCHED_IDLESCHED_RESET_ON_FORKXATTR_CREATEXATTR_REPLACEXATTR_SIZE_MAXRTLD_LAZYRTLD_NOWRTLD_GLOBALRTLD_LOCALRTLD_NODELETERTLD_NOLOADRTLD_DEEPBINDconfstr_namessysconf_namesposix.times_resultposix.waitid_resultos.stat_resultos.statvfs_resultposix.sched_paramposix.uname_result_have_functionspathconf_namesenvironeffective_idssrc_dir_fddst_dir_fdtarget_is_directorystruct_rusagefd2devicesched_priorityHAVE_FACCESSATHAVE_FCHDIRHAVE_FCHMODHAVE_FCHMODATHAVE_FCHOWNHAVE_FCHOWNATHAVE_FEXECVEHAVE_FDOPENDIRHAVE_FPATHCONFHAVE_FSTATATHAVE_FSTATVFSHAVE_FTRUNCATEHAVE_FUTIMENSHAVE_FUTIMESHAVE_FUTIMESATHAVE_LINKATHAVE_LCHOWNHAVE_LSTATHAVE_LUTIMESHAVE_MKDIRATHAVE_MKFIFOATHAVE_MKNODATHAVE_OPENATHAVE_READLINKATHAVE_RENAMEATHAVE_SYMLINKATHAVE_UNLINKATHAVE_UTIMENSATctermidgetcwdgetcwdbgetprioritysetpriorityunamesched_yieldopenptyforkptygetegidgeteuidgetgidgetgroupsgetpidgetppidgetuidgetloginsetgroupssetsidpipepipe2fchdirfsyncfdatasyncWIFCONTINUEDabortgetloadavggetresuidgetresgidget_terminal_sizecpu_countos.terminal_sizecolumnsSC_2_CHAR_TERMSC_2_C_BINDSC_2_C_DEVSC_2_C_VERSIONSC_2_FORT_DEVSC_2_FORT_RUNSC_2_LOCALEDEFSC_2_SW_DEVSC_2_UPESC_2_VERSIONSC_AIO_LISTIO_MAXSC_AIO_MAXSC_AIO_PRIO_DELTA_MAXSC_ARG_MAXSC_ASYNCHRONOUS_IOSC_ATEXIT_MAXSC_AVPHYS_PAGESSC_BC_BASE_MAXSC_BC_DIM_MAXSC_BC_SCALE_MAXSC_BC_STRING_MAXSC_CHARCLASS_NAME_MAXSC_CHAR_BITSC_CHAR_MAXSC_CHAR_MINSC_CHILD_MAXSC_CLK_TCKSC_COLL_WEIGHTS_MAXSC_DELAYTIMER_MAXSC_EQUIV_CLASS_MAXSC_EXPR_NEST_MAXSC_FSYNCSC_GETGR_R_SIZE_MAXSC_GETPW_R_SIZE_MAXSC_INT_MAXSC_INT_MINSC_IOV_MAXSC_JOB_CONTROLSC_LINE_MAXSC_LOGIN_NAME_MAXSC_LONG_BITSC_MAPPED_FILESSC_MB_LEN_MAXSC_MEMLOCKSC_MEMLOCK_RANGESC_MEMORY_PROTECTIONSC_MESSAGE_PASSINGSC_MQ_OPEN_MAXSC_MQ_PRIO_MAXSC_NGROUPS_MAXSC_NL_ARGMAXSC_NL_LANGMAXSC_NL_MSGMAXSC_NL_NMAXSC_NL_SETMAXSC_NL_TEXTMAXSC_NPROCESSORS_CONFSC_NPROCESSORS_ONLNSC_NZEROSC_OPEN_MAXSC_PAGESIZESC_PAGE_SIZESC_PASS_MAXSC_PHYS_PAGESSC_PIISC_PII_INTERNETSC_PII_INTERNET_DGRAMSC_PII_INTERNET_STREAMSC_PII_OSISC_PII_OSI_CLTSSC_PII_OSI_COTSSC_PII_OSI_MSC_PII_SOCKETSC_PII_XTISC_POLLSC_PRIORITIZED_IOSC_PRIORITY_SCHEDULINGSC_REALTIME_SIGNALSSC_RE_DUP_MAXSC_RTSIG_MAXSC_SAVED_IDSSC_SCHAR_MAXSC_SCHAR_MINSC_SELECTSC_SEMAPHORESSC_SEM_NSEMS_MAXSC_SEM_VALUE_MAXSC_SHARED_MEMORY_OBJECTSSC_SHRT_MAXSC_SHRT_MINSC_SIGQUEUE_MAXSC_SSIZE_MAXSC_STREAM_MAXSC_SYNCHRONIZED_IOSC_THREADSSC_THREAD_ATTR_STACKADDRSC_THREAD_ATTR_STACKSIZESC_THREAD_KEYS_MAXSC_THREAD_PRIORITY_SCHEDULINGSC_THREAD_PRIO_INHERITSC_THREAD_PRIO_PROTECTSC_THREAD_PROCESS_SHAREDSC_THREAD_SAFE_FUNCTIONSSC_THREAD_STACK_MINSC_THREAD_THREADS_MAXSC_TIMERSSC_TIMER_MAXSC_TTY_NAME_MAXSC_TZNAME_MAXSC_T_IOV_MAXSC_UCHAR_MAXSC_UINT_MAXSC_UIO_MAXIOVSC_ULONG_MAXSC_USHRT_MAXSC_VERSIONSC_WORD_BITSC_XBS5_ILP32_OFF32SC_XBS5_ILP32_OFFBIGSC_XBS5_LP64_OFF64SC_XBS5_LPBIG_OFFBIGSC_XOPEN_CRYPTSC_XOPEN_ENH_I18NSC_XOPEN_LEGACYSC_XOPEN_REALTIMESC_XOPEN_REALTIME_THREADSSC_XOPEN_SHMSC_XOPEN_UNIXSC_XOPEN_VERSIONSC_XOPEN_XCU_VERSIONSC_XOPEN_XPG2SC_XOPEN_XPG3SC_XOPEN_XPG4CS_GNU_LIBC_VERSIONCS_GNU_LIBPTHREAD_VERSIONCS_LFS64_CFLAGSCS_LFS64_LDFLAGSCS_LFS64_LIBSCS_LFS64_LINTFLAGSCS_LFS_CFLAGSCS_LFS_LDFLAGSCS_LFS_LIBSCS_LFS_LINTFLAGSCS_PATHCS_XBS5_ILP32_OFF32_CFLAGSCS_XBS5_ILP32_OFF32_LDFLAGSCS_XBS5_ILP32_OFF32_LIBSCS_XBS5_ILP32_OFF32_LINTFLAGSCS_XBS5_ILP32_OFFBIG_CFLAGSCS_XBS5_ILP32_OFFBIG_LDFLAGSCS_XBS5_ILP32_OFFBIG_LIBSCS_XBS5_LP64_OFF64_CFLAGSCS_XBS5_LP64_OFF64_LDFLAGSCS_XBS5_LP64_OFF64_LIBSCS_XBS5_LP64_OFF64_LINTFLAGSCS_XBS5_LPBIG_OFFBIG_CFLAGSCS_XBS5_LPBIG_OFFBIG_LDFLAGSCS_XBS5_LPBIG_OFFBIG_LIBSPC_ASYNC_IOPC_CHOWN_RESTRICTEDPC_FILESIZEBITSPC_LINK_MAXPC_MAX_CANONPC_MAX_INPUTPC_NAME_MAXPC_NO_TRUNCPC_PATH_MAXPC_PIPE_BUFPC_PRIO_IOPC_SOCK_MAXBUFPC_SYNC_IOPC_VDISABLEPC_ALLOC_SIZE_MINPC_REC_INCR_XFER_SIZEPC_REC_MAX_XFER_SIZEPC_REC_MIN_XFER_SIZEPC_REC_XFER_ALIGNPC_SYMLINK_MAXuser timesystem timechildren_useruser time of childrenchildren_systemsystem time of childrenthe scheduling prioritysysnameoperating system namenodenameoperating system releaseoperating system versionmachinehardware identifierf_bsizef_frsizef_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flagf_namemaxst_modeprotection bitsst_inoinodest_devst_nlinknumber of hard linksst_uiduser ID of ownerst_gidgroup ID of ownerst_sizetotal size, in bytesinteger time of last accessinteger time of last changest_atimest_mtimetime of last modificationst_ctimest_atime_nsst_mtime_nsst_ctime_nsst_blksizeblocksize for filesystem I/Ost_blocksnumber of blocks allocatedst_rdevdevice type (if inode device)& .>errorcodeENODEVENOCSIEHOSTUNREACHENOMSGEUCLEANEL2NSYNCEL2HLTENODATAENOTBLKENOSYSEPIPEEINVALEOVERFLOWEADVEINTREUSERSENOTEMPTYENOBUFSEPROTOEREMOTEENAVAILECHILDELOOPEXDEVE2BIGESRCHEMSGSIZEEAFNOSUPPORTEBADREHOSTDOWNEPFNOSUPPORTENOPROTOOPTEBUSYEWOULDBLOCKEBADFDEDOTDOTEISCONNENOANOESHUTDOWNECHRNGELIBBADENONETEBADEEBADFEMULTIHOPEUNATCHEPROTOTYPEENOSPCENOEXECEALREADYENETDOWNENOTNAMEACCESELNRNGEILSEQENOTDIRENOTUNIQEPERMEDOMEXFULLECONNREFUSEDEISDIREPROTONOSUPPORTEROFSEADDRNOTAVAILEIDRMECOMMESRMNTEREMOTEIOEL3RSTEBADMSGENFILEELIBMAXESPIPEENOLINKENETRESETETIMEDOUTENOENTEEXISTEDQUOTENOSTREBADSLTEBADRQCELIBACCEFAULTEFBIGEDEADLKENOTCONNEDESTADDRREQELIBSCNENOLCKEISNAMECONNABORTEDENETUNREACHESTALEENOSRENOMEMENOTSOCKESTRPIPEEMLINKERANGEELIBEXECEL3HLTECONNRESETEADDRINUSEEOPNOTSUPPEREMCHGEAGAINENAMETOOLONGENOTTYERESTARTESOCKTNOSUPPORTETIMEEBFONTEDEADLOCKETOOMANYREFSEMFILEETXTBSYEINPROGRESSENXIOENOPKGENOMEDIUMEMEDIUMTYPEECANCELEDENOKEYEKEYEXPIREDEKEYREVOKEDEKEYREJECTEDEOWNERDEADENOTRECOVERABLEERFKILLENOTSUPU:getpwnamO&:getpwuidgetpwuid(): uid not foundgetpwuid(): uid not found: %Sgetpwallpwd.struct_passwdpw_nameuser namepw_passwdpasswordpw_uiduser idpw_gidgroup idpw_gecosreal namepw_dirhome directorypw_shellshell programgetpwnam(): name not found: %sAAAAAAApAAAAAA`HtT̝Tll̜,L4ԨdTtܿĿ, (A"Ha ,>=T=>>@4GZGZGZGZGZGZGZGZGGFFZGZGZGZGZGZGZGFZGZGZGZGZGZGFFKJJJJjJGJ$JIVI-IHHH$HDGF9KLLLLLLLLLLLlLLLLLLLL\LLLLLLLTL?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cannot deepcopy this match objectcannot deepcopy this pattern objectcannot copy this pattern objectmaximum recursion limit exceededinternal error in regular expression engineArgument given by name ('%s') and position (1)The '%s' keyword parameter name is deprecated. Use 'string' instead.Required argument 'string' (pos 1) not foundregular expression code size limit exceeded<%s object; span=(%d, %d), match=%.50R>can't use a string pattern on a bytes-like objectcan't use a bytes pattern on a string-like objectcannot copy this match object0x%xre.compile(%.200R, %S)re.compile(%.200R)expected string or bufferBuffer is NULLspanno such groupOiO!|nOOinvalid SRE code_expand|O:groupdict|O:groups|Onn$O:scanner|Onn$O:fullmatchpattern|Onn$O:match|Onn$O:search|Onn$O:findall|On$O:split_subxNnOO|n:subnOO|n:subMAGICCODESIZEMAXREPEATre.TEMPLATEre.IGNORECASEre.LOCALEre.MULTILINEre.DOTALLre.UNICODEre.VERBOSEre.DEBUGre.ASCIIendposreplgetcodesizegetlower_sre.SRE_Scanner_sre.SRE_Matchlastindexlastgroupregs__copy____deepcopy___sre.SRE_Patterngroupindexfinditers:lookup_errorOns*|z:readbuffer_encodeU:charmap_buildy*|zO:charmap_decodeO|zO:charmap_encodey*|z:ascii_decodeO|z:ascii_encodey*|z:latin_1_decodeO|z:latin_1_encodeO|z:raw_unicode_escape_encodeO|z:unicode_internal_decodeO|z:unicode_internal_encodes*|z:unicode_escape_decodeO|z:unicode_escape_encodey*|zii:utf_32_ex_decodeOniy*|zi:utf_32_be_decodey*|zi:utf_32_le_decodey*|zi:utf_32_decodeO|z:utf_32_be_encodeO|z:utf_32_le_encodeO|zi:utf_32_encodey*|zii:utf_16_ex_decodey*|zi:utf_16_be_decodey*|zi:utf_16_le_decodey*|zi:utf_16_decodeO|z:utf_16_be_encodeO|z:utf_16_le_encodeO|zi:utf_16_encodey*|zi:utf_7_decodeO|z:utf_7_encodey*|zi:utf_8_decodeO|z:utf_8_encodes#|z:escape_decodeO!|z:escape_encodestring is too large to encodeO|ss:decodeO|ss:encodes:lookups:_forget_codecsO:register_errorraw_unicode_escape_decodes*|z:raw_unicode_escape_decodeReferenceTypeCallableProxyTypegetweakrefcountgetweakrefsWeak-reference support module.O:cmp_to_keyO:KreduceO(O)(OOOO)%U, %R%U, %U=%R%s(%R%U)mycmpfunctools.KeyWrapperfunctools.partialother argument must be K instancereduce() arg 2 must support iterationreduce() of empty sequence with no initial valuetype 'partial' takes at least one argumentthe first argument must be callableValue wrapped by a key function.function object to use in future partial callstuple of arguments to future partial callsdictionary of keyword arguments to future partial callsmethodcaller needs at least one argument, the method nameattribute name must be a stringcomparing strings with non-ASCII characters is not supportedunsupported operand types(s) or combination of types: '%.100s' and '%.100s'Buffer must be single dimensiontruth(a) -- Return True if a is true, False otherwise.contains(a, b) -- Same as b in a (note reversed operands).indexOf(a, b) -- Return the first index of b in a.countOf(a, b) -- Return the number of times b occurs in a.is_not(a, b) -- Same as a is not b.index(a) -- Same as a.__index__()floordiv(a, b) -- Same as a // b.truediv(a, b) -- Same as a / b.lshift(a, b) -- Same as a << b.rshift(a, b) -- Same as a >> b.a = iadd(a, b) -- Same as a += b.a = isub(a, b) -- Same as a -= b.a = imul(a, b) -- Same as a *= b.a = ifloordiv(a, b) -- Same as a //= b.a = itruediv(a, b) -- Same as a /= ba = imod(a, b) -- Same as a %= b.a = ilshift(a, b) -- Same as a <<= b.a = irshift(a, b) -- Same as a >>= b.a = iand(a, b) -- Same as a &= b.a = ixor(a, b) -- Same as a ^= b.a = ior(a, b) -- Same as a |= b.concat(a, b) -- Same as a + b, for a and b sequences.a = iconcat(a, b) -- Same as a += b, for a and b sequences.getitem(a, b) -- Same as a[b].setitem(a, b, c) -- Same as a[b] = c.delitem(a, b) -- Same as del a[b].a = ipow(a, b) -- Same as a **= b.is_notis_itemgetter()attrgetter()op_getitemO|n:length_hintOO:compare_digestop_geop_gtop_neop_eqop_leop_ltipowop_iconcatop_concatop_iorop_ixorop_iandop_irshiftop_ilshiftop_imodop_itruedivop_ifloordivop_imulop_isubop_iaddop_or_op_xorop_and_op_rshiftop_lshiftop_modop_truedivop_floordivop_mulop_subop_addcountOfindexOfop_containsop_delitemop_setitemoperator.methodcalleroperator.attrgetteroperator.itemgettertruthis_(a, b) -- Same as a is b.add(a, b) -- Same as a + b.sub(a, b) -- Same as a - b.mul(a, b) -- Same as a * b.mod(a, b) -- Same as a % b.negneg(a) -- Same as -a.pos(a) -- Same as +a.abs(a) -- Same as abs(a).invinv(a) -- Same as ~a.invertinvert(a) -- Same as ~a.not_not_(a) -- Same as not a.and_(a, b) -- Same as a & b.xor(a, b) -- Same as a ^ b.or_(a, b) -- Same as a | b.pow(a, b) -- Same as a ** b.lt(a, b) -- Same as ab.ge(a, b) -- Same as a>=b._compare_digestdeque index out of rangedefaultdict(%U, %U)O(O)O(OO)OO(On)O_count_elementsO!|ndeque(%R, maxlen=%zd)deque(%R)pop from an empty deque|n:rotatemaxlen|OO:dequemaxlen must be non-negative_deque_reverse_iteratordefault_factorycollections.defaultdict_collections._deque_iteratorappendleftextendleftpopleftcollections.dequefirst argument must be callable or Nonedeque mutated during iterationcannot add more blocks to the dequedeque mutated during remove().deque.remove(x): x not in dequeFactory for default value called by __missing__()._collections._deque_reverse_iteratormaximum size of a deque or None if unboundedtiZK= 0O(ONO)O(())(Oi)ONOO(OO)lO(O)(Oi)O|O:groupbyOO:compressO|O:accumulateO|n:repeat|n:productrepeat argument too larger must be non-negativeOn:combinationsinvalid argumentsO|O:permutationsExpected int as rO!O!fillvalue|OO:counta number is requiredfilterfalse()starmap()islice()takewhile()dropwhile()cycle()chain()O(OO)(OOO)O(n)O()(OO)O()(O)len() of unsized objectrepeat(%R)repeat(%R, %zd)OONO(()n)O(On)(NN)O(Nn)nO(OnNn)nO(On)Ncount(%zd)count(%R)count(%R, %R)selectorsitertools.zip_longestitertools.repeatitertools.countitertools.filterfalseitertools.compressitertools.accumulateitertools.permutationsitertools.combinationsitertools.productfrom_iterableitertools.chainitertools.starmapitertools.isliceitertools.takewhileitertools.dropwhileitertools.cycleitertools._teeitertools._tee_dataobjectitertools._grouperitertools.groupbyrepeat argument cannot be negativeOn:combinations_with_replacementzip_longest() got an unexpected keyword argumentzip_longest argument #%zd must support iterationStop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.Indices for islice() must be None or an integer: 0 <= x <= sys.maxsize.Step for islice() must be a positive integer or None.itertools.combinations_with_replacementregister() takes at least 1 argument (0 given)Error in atexit._run_exitfuncs: _clear_run_exitfuncs_ncallbacksmode out of rangeS_IFDIRS_IFCHRS_IFBLKS_IFREGS_IFIFOS_IFLNKS_IFSOCKS_IFDOORS_IFPORTS_IFWHTS_ISUIDS_ISGIDS_ISVTXS_ENFMTS_IREADS_IWRITES_IEXECS_IRWXUS_IRUSRS_IWUSRS_IXUSRS_IRWXGS_IRGRPS_IWGRPS_IXGRPS_IRWXOS_IROTHS_IWOTHS_IXOTHUF_NODUMPUF_IMMUTABLEUF_APPENDUF_OPAQUEUF_NOUNLINKUF_COMPRESSEDUF_HIDDENSF_ARCHIVEDSF_IMMUTABLESF_APPENDSF_NOUNLINKSF_SNAPSHOTST_MODEST_INOST_DEVST_NLINKST_UIDST_GIDST_SIZEST_ATIMEST_MTIMEST_CTIMES_ISDIRS_ISCHRS_ISBLKS_ISREGS_ISFIFOS_ISLNKS_ISSOCKS_ISDOORS_ISPORTS_ISWHTS_IMODES_IFMTfilemodezsizsU:strxfrmUU:strcolli|z:setlocaleunsupported locale settinglocale query failedszi:nl_langinfounsupported langinfo constantint_curr_symbolcurrency_symbolmon_decimal_pointmon_thousands_sepmon_groupingpositive_signnegative_signint_frac_digitsp_cs_precedesp_sep_by_spacen_cs_precedesn_sep_by_spacep_sign_posnn_sign_posnLC_CTYPELC_TIMELC_COLLATELC_MONETARYLC_MESSAGESLC_NUMERICLC_ALLlocale.Errorlocaleconvdgettextdcgettextbindtextdomainbind_textdomain_codesetABDAY_1ABDAY_2ABDAY_3ABDAY_4ABDAY_5ABDAY_6ABDAY_7ABMON_1ABMON_2ABMON_3ABMON_4ABMON_5ABMON_6ABMON_7ABMON_8ABMON_9ABMON_10ABMON_11ABMON_12RADIXCHARTHOUSEPCRNCYSTRAM_STRPM_STRCODESETT_FMT_AMPMERAERA_D_FMTERA_D_T_FMTERA_T_FMTALT_DIGITSYESEXPRNOEXPR_DATE_FMTdomain must be a non-empty stringnewlineclosefdO|sizzziO:openinvalid file: %Rinvalid mode: '%s''U' mode is deprecatedOsiOinvalid buffering sizeunknown mode: '%s'Osssi_bootlocaleDEFAULT_BUFFER_SIZEUnsupportedOperations(OO){}newlinesreadallresetseekabletellcan't use U and writing mode at oncecan't have text and binary mode at oncemust have exactly one of create/read/write/append modebinary mode doesn't take an encoding argumentbinary mode doesn't take an errors argumentbinary mode doesn't take a newline argumentcan't have unbuffered text I/Ocannot fit '%.200s' into an offset-sized integerinteger argument expected, got '%.200s'could not find io module state (interpreter shutdown?) KJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHHJJJJJJJJJJJKKJJJJJJJJJJJJJJJPHJJJJJpJ|O&:readlines|O&:readlineread() should return bytes|n:readI/O operation on closed file.O:writelines_finalizing_io._RawIOBase_io._IOBase_checkClosed_checkSeekable_checkReadable_checkWritable__IOBase_closedpeek() should have returned a bytes object, not '%.200s'read() should have returned a bytes object, not '%.200s'File or stream is not seekable.File or stream is not readable.File or stream is not writable.xb+xbab+rb+cannot serialize '%s' objectunclosed file %RFile not open for %sI/O operation on closed file|O&writingO|siO:fileionegative file descriptorinvalid mode: %.200s(is)expected integer from openerO|iy*w*<_io.FileIO [closed]><_io.FileIO fd=%d mode='%s'>_dealloc_warn_io.FileIOunbounded read returned more bytes than a Python bytes object can holdMust have exactly one of create/read/write/append mode and at most one plusCannot use closefd=False with file name<_io.FileIO name=%R mode='%s'>True if the file descriptor will be closed by close().n|i:seeknegative seek value %zdnew position too large|O:read|O:readline|O:readlinesnew buffer size too large|O:truncatenegative size value %zdinitial_bytes|O:BytesIO(OnN)_io._BytesIOBuffer_io.BytesIOgetbuffergetvalueTrue if the file is closed.invalid whence (%i, should be 0, 1 or 2)integer argument expected, got '%s'deallocated BytesIO object has exported buffers%.200s.__setstate__ argument should be 3-tuple, got %.200ssecond item of state must be an integer, not %.200sposition value cannot be negativethird item of state should be a dict, got a %.200sdetachw*:readintocan't allocate read lockbuffer_sizeO|n:BufferedReaderO|n:BufferedWriterOO|n:BufferedRWPairO|n:BufferedRandomraw stream has been detached<%s><%s name=%R>reentrant call inside %Risnflush of closed fileO|i:seekwhence value %d unsupportedseek of closed filewrite to closed filereadline of closed filepeek of closed file|n:peekn:read1read length must be positiveread of closed file|O&:readreadall() should return bytes_io.BufferedRandom_io.BufferedRWPair_io.BufferedWriter_io.BufferedReader_io._BufferedIOBaseRaw stream returned invalid position %zdbuffer size must be strictly positiveI/O operation on uninitialized objectthe BufferedRWPair object is being garbage-collectedcould not acquire lock for %A at interpreter shutdown, possibly due to daemon threadswrite could not complete without blockingraw write() returned invalid length %zd (should have been between 0 and %zd)raw readinto() returned invalid length %zd (should have been between 0 and %zd)readline() should have returned a bytes object, not '%.200s'read length must be positive or -1 sss(OK)line_bufferingwrite_throughO|zzzii:fileioillegal newline value: %scodecs.open()<_io.TextIOWrapper name=%R mode=%R%U encoding=%R>((OK))((yi))y#(y#i)yinegative seek position %RiyU:writenot writableO|i:IncrementalNewlineDecodernot readable|n:readline_CHUNK_SIZE_io.IncrementalNewlineDecoder_io._TextIOBasegetpreferredencodingOi|O:IncrementalNewlineDecodercould not determine default encodingunderlying buffer has been detacheddecoder should return a string result, not '%.200s'a strictly positive integer is requiredunderlying stream is not seekabletelling position disabled by next() callcan't reconstruct logical file positioncan't do nonzero cur-relative seekscan't do nonzero end-relative seeksinvalid whence (%d, should be 0, 1 or 2)underlying read() should have returned a bytes object, not '%.200s'can't restore logical file positionIncrementalNewlineDecoder.__init__ not calledunderlying %s() should have returned a bytes object, not '%.200s'decoder getstate() should have returned a bytes object, not '%.200s'readline() should have returned an str object, not '%.200s'D$Invalid whence (%i, should be 0, 1 or 2)Can't do nonzero cur-relative seeksnewline must be str or None, not %.200sinitial_value must be str or None, not %.200sstring argument expected, got '%s'%.200s.__setstate__ argument should be 4-tuple, got %.200sthird item of state must be an integer, got %.200sfourth item of state should be a dict, got a %.200sNegative seek position %zdinitial_value|OO:__init__illegal newline value: %RNegative size value %zd(OOnN)_io.StringIOOlllllllnegative data sizecan't read Zip file: %Rbad local file header in %Uzipimport: can't read datazlib# zipimport: zlib %s availableU:zipimporter.get_data%U%sU:zipimporter.is_packagecan't find module %RU:zipimporter.get_source%U%c__init__.py%U.py# trying %U%c%U bad pyc data# %R has bad magic # %R has bad mtime U:zipimporter.get_filenameU:zipimporter.get_codeU:zipimporter.load_module%U%c%U%U[N]%U%U%cU|O:zipimporter.find_moduleO[]O[O]cp437can't open Zip file: %Rnot a Zip file: %R%U%c%UNhllnhhlzipimporter()O&:zipimporterarchive path is emptynot a Zip filezipimport.ZipImportError_zip_directory_cachedecompresszipimport.zipimporterarchivefind_loaderzipimport: can not open file %Ucan't decompress data; zlib not availablecompiled module %R is not a code objectzipimport: no memory to allocate source bufferimport %U # loaded from Zip %U /builddir/build/BUILD/Python-3.4.10/Modules/zipimport.cbootstrap issue: python%i%i.zip contains non-ASCII filenames without the unicode flag# zipimport: found %ld names in %R unable to raise a stack overflow (allocated %zu bytes on the stack, %zu recursive calls)file.fileno() is not a valid file descriptorsignal %i cannot be registered, use enable() insteadunable to get the current thread statetimeout must be greater than 0Timeout (%lu:%02lu:%02lu.%06lu)! unable to start watchdog thread/builddir/build/BUILD/Python-3.4.10/Modules/faulthandler.ccould not allocate locks for faulthandlerenable(file=sys.stderr, all_threads=True): enable the fault handlerdisable(): disable the fault handleris_enabled()->bool: check if the handler is enableddump_traceback(file=sys.stderr, all_threads=True): dump the traceback of the current thread, or of all threads if all_threads is True, into filedump_traceback_later(timeout, repeat=False, file=sys.stderrn, exit=False): dump the traceback of all threads in timeout seconds, or each timeout seconds if repeat is True. If exit is True, call _exit(1) which is not safe.cancel_dump_traceback_later(): cancel the previous call to dump_traceback_later().register(signum, file=sys.stderr, all_threads=True, chain=False): register an handler for the signal 'signum': dump the traceback of the current thread, or of all threads if all_threads is True, into fileunregister(signum): unregister the handler of the signal 'signum' registered by register()_read_null(): read from NULL, raise a SIGSEGV or SIGBUS signal depending on the platform_sigsegv(release_gil=False): raise a SIGSEGV signal_sigabrt(): raise a SIGABRT signal_sigfpe(): raise a SIGFPE signal_sigbus(): raise a SIGBUS signal_sigill(): raise a SIGILL signal_fatal_error(message): call Py_FatalError(message)_stack_overflow(): recursive call to raise a stack overflowy:fatal_error|i:_read_nullunable to get sys.stderrsys.stderr is NoneFatal Python error: i:unregisteri|Oii:register|Oi:enable|Oi:dump_tracebackd|iOi:dump_traceback_laterTimeout (%lu:%02lu:%02lu)! PYTHONFAULTHANDLERall_threadssignumis_enabledcancel_dump_traceback_later_sigsegv_sigabrt_sigfpe_sigbus_sigill_fatal_error_stack_overflowBus errorIllegal instructionFloating point exceptionAbortedSegmentation faultcannot allocate lock|n:startPYTHONTRACEMALLOCis_tracingclear_traces_get_traces_get_object_tracebackget_traceback_limitget_tracemalloc_memoryget_traced_memorythe tracemalloc module has been unloadedthe number of frames must be in range [1; %i]PYTHONTRACEMALLOC: invalid number of frames-X tracemalloc=NFRAME: invalid number of frames?sO&s:symtableDEF_GLOBALDEF_LOCALDEF_PARAMDEF_FREEDEF_FREE_CLASSDEF_IMPORTDEF_BOUNDTYPE_FUNCTIONTYPE_CLASSTYPE_MODULEOPT_IMPORT_STAROPT_TOPLEVELGLOBAL_EXPLICITGLOBAL_IMPLICITCELLSCOPE_OFFSCOPE_MASKsymtable() arg 3 must be 'exec' or 'eval' or 'single'Return symbol and scope dictionaries used internally by compiler.i:setstateOS|i:getstatebenchxxsubtype.spamdictgetstate() -> statesetstate(state)xxsubtype.spamlistclassmethclassmeth(*args, **kw)staticmethstaticmeth(*args, **kw)an int variable for demonstration purposes__hello____phello____phello__.spamc@sdZdZddZddZdd Zd d Zd d ZddZddZddZ ddZ dddZ ddZ ddZ ee jZGdddZiZiZGdd d eZGd!d"d"ZGd#d$d$ZGd%d&d&Zd'd(Zd)d*Zd+d,Zd-jd.d/d0Zejed/Z d1Z!d2gZ"d3gZ#d4gZ$d5d6d7Z%d8d9Z&d:d;Z'd<d=Z(d>d?d@dAZ)dBdCZ*dDdEZ+dFdGZ,dHdIZ-dJdKZ.d5d5d5dLdMZ/d5d5d5dNdOZ0dPdPdQdRZ1dSdTZ2dUdVZ3GdWdXdXZ4GdYdZdZZ5d[d5d\d5d]d^Z6e7Z8d5d_d5d`e8dadbZ9d5d5dcddZ:GdedfdfZ;d5dgdhZ<GdidjdjZ=GdkdldlZ>GdmdndnZ?GdodpdpZ@Gdqdrdre@ZAGdsdtdtZBGdudvdveBeAZCGdwdxdxeBe@ZDgZEGdydzdzZFGd{d|d|ZGGd}d~d~ZHGdddZIGdddZJGdddZKddZLddZMd5ddZNddZOdZPePdZQddZRddZSd5dPddZTddZUddZVddZWd5d5fdPddZXddZYddZZddZ[d5S)aSCore implementation of import. This module is NOT meant to be directly imported! It has been designed such that it can be bootstrapped into Python as the implementation of import. As such it requires the injection of specific modules and attributes in order to work. One should use importlib as the public-facing version of this module. wincygwindarwincCs1tjjtr!dd}n dd}|S)NcSs dtjkS)z5True if filenames must be checked case-insensitively.s PYTHONCASEOK)_osZenvironrr _relax_casesz%_make_relax_case.._relax_casecSsdS)z5True if filenames must be checked case-insensitively.Frrrrrr"s)sysplatform startswith_CASE_INSENSITIVE_PLATFORMS)rrrr_make_relax_cases r cCst|d@jddS)z*Convert a 32-bit integer to little-endian.llittle)intto_bytes)xrrr_w_long(srcCstj|dS)z/Convert 4 bytes in little-endian to an integer.r )r from_bytes)Z int_bytesrrr_r_long-srcGstjdd|DS)zReplacement for os.path.join().cSs%g|]}|r|jtqSr)rstrippath_separators).0partrrr 4s z_path_join..)path_sepjoin) path_partsrrr _path_join2srcCsttdkr4|jt\}}}||fSxEt|D]7}|tkrA|j|dd\}}||fSqAWd|fS)z Replacement for os.path.split().Zmaxsplit)lenr rpartitionrreversedrsplit)pathZfront_tailrrrr _path_split8s  r&cCs tj|S)z~Stat the path. Made a separate function to make it easier to override in experiments (e.g. cache stat results). )rZstat)r#rrr _path_statDsr'c Cs:yt|}Wntk r(dSYnX|jd@|kS)z1Test whether the path is the specified mode type.Fi)r'OSErrorst_mode)r#modeZ stat_inforrr_path_is_mode_typeNs   r+cCs t|dS)zReplacement for os.path.isfile.i)r+)r#rrr _path_isfileWsr,cCs"|stj}nt|dS)zReplacement for os.path.isdir.i@)rgetcwdr+)r#rrr _path_isdir\sr.icCsdj|t|}tj|tjtjBtjB|d@}y<tj|d}|j |WdQXtj ||Wn;t k rytj |Wnt k rYnXYnXdS)zBest-effort function to write data to a path atomically. Be prepared to handle a FileExistsError if concurrent writing of the temporary file is attempted.z{}.{}iZwbN) formatidrZopenZO_EXCLZO_CREATZO_WRONLY_ioFileIOwritereplacer(Zunlink)r#datar*Zpath_tmpZfdfilerrr _write_atomiccs !  r7cCs_xEddddgD]1}t||rt||t||qqW|jj|jdS)z/Simple substitute for functools.update_wrapper. __module____name__ __qualname____doc__N)hasattrsetattrgetattr__dict__update)ZnewZoldr4rrr_wrapys rAcCstt|S)N)typer)namerrr _new_modulesrDc@s:eZdZdZddZddZddZdS) _ManageReloadz?Manages the possible clean-up of sys.modules for load_module().cCs ||_dS)N)_name)selfrCrrr__init__sz_ManageReload.__init__cCs|jtjk|_dS)N)rFrmodules _is_reload)rGrrr __enter__sz_ManageReload.__enter__c GsPtdd|DrL|j rLytj|j=WqLtk rHYqLXndS)Ncss|]}|dk VqdS)Nr)rargrrr sz)_ManageReload.__exit__..)anyrJrrIrFKeyError)rGargsrrr__exit__s # z_ManageReload.__exit__N)r9r8r:r;rHrKrQrrrrrEs   rEc@seZdZdS)_DeadlockErrorN)r9r8r:rrrrrRs rRc@sReZdZdZddZddZddZdd Zd d Zd S) _ModuleLockzA recursive lock implementation which is able to detect deadlocks (e.g. thread 1 trying to take locks A then B, and thread 2 trying to take locks B then A). cCsFtj|_tj|_||_d|_d|_d|_dS)N)_threadZ allocate_locklockwakeuprCownercountwaiters)rGrCrrrrHs    z_ModuleLock.__init__cCsXtj}|j}x<tj|}|dkr7dS|j}||krdSqWdS)NFT)rU get_identrX _blocking_onget)rGmetidrVrrr has_deadlocks     z_ModuleLock.has_deadlockcCstj}|t|.cb)rmrOrUrfrS_weakrefZref)rCrVrnr)rCrris    ric CsGt|}tjy|jWntk r8Yn X|jdS)aRelease the global import lock, and acquires then release the module lock for a given module name. This is used to ensure a module is completely initialized, in the event it is being imported by another thread. Should only be called with the import lock taken.N)rirjrkrarRrb)rCrVrrr_lock_unlock_module%s   rpcOs |||S)a.remove_importlib_frames in import.c will always remove sequences of importlib frames that end with a call to this function Use it instead of a normal call in places where including the importlib frames introduces unwanted noise into the traceback (e.g. when executing module code) r)frPZkwdsrrr_call_with_frames_removed9srri r s Z __pycache__z.pyz.pycz.pyoNc Cs|dkrtjj n|}|r.t}nt}t|\}}|jd\}}}tjj} | dkrt dndj |r|n||| |dg} t |t | S)aGiven the path to a .py file, return the path to its .pyc/.pyo file. The .py file does not need to exist; this simply returns the path to the .pyc/.pyo file calculated as if the .py file were imported. The extension will be .pyc unless sys.flags.optimize is non-zero, then it will be .pyo. If debug_override is not None, then it must be a boolean and is used in place of sys.flags.optimize. If sys.implementation.cache_tag is None then NotImplementedError is raised. N.z$sys.implementation.cache_tag is NonerrT) rflagsoptimizeDEBUG_BYTECODE_SUFFIXESOPTIMIZED_BYTECODE_SUFFIXESr&r implementation cache_tagNotImplementedErrorrr_PYCACHE) r#Zdebug_overridedebugsuffixesheadr%baseseprestZtagfilenamerrrcache_from_sources    +rcCstjjdkr!tdnt|\}}t|\}}|tkrltdjt|n|jddkrtdj|n|j dd}t ||t dS)ayGiven the path to a .pyc./.pyo file, return the path to its .py file. The .pyc/.pyo file does not need to exist; this simply returns the path to the .py file calculated to correspond to the .pyc/.pyo file. If path does not conform to PEP 3147 format, ValueError will be raised. If sys.implementation.cache_tag is None then NotImplementedError is raised. Nz$sys.implementation.cache_tag is Nonez%{} not bottom-level directory in {!r}rtrszexpected only 2 dots in {!r}rT) rryrzr{r&r| ValueErrorr/rY partitionrSOURCE_SUFFIXES)r#rZpycache_filenameZpycacheZ base_filenamerrrsource_from_caches    rc Cst|dkrdS|jd\}}}| sQ|jdddkrU|Syt|}Wn(ttfk r|dd }YnXt|r|S|S) zConvert a bytecode file path to a source path (if possible). This function exists purely for backwards-compatibility for PyImport_ExecCodeModuleWithFilenames() in the C API. rTNrtrZpyr)rr lowerrr{rr,) bytecode_pathrr$Z extension source_pathrrr_get_sourcefiles#rc Cs<yt|j}Wntk r-d}YnX|dO}|S)z3Calculate the mode permissions for a bytecode file.i)r'r)r()r#r*rrr _calc_modes    r verbosityrcGsQtjj|krM|jds.d|}nt|j|dtjndS)z=Print the message to stderr if -v/PYTHONVERBOSE is turned on.#import z# r6N)rr)rruverboser printr/stderr)messagerrPrrr_verbose_messages rcs&dfdd}t||S)zDecorator to verify that the module being requested matches the one the loader can handle. The first argument (self) must define _name which the second argument is compared against. If the comparison fails then ImportError is raised. NcsS|dkr|j}n(|j|kr@td|d|n||||S)Nzloader cannot handle %srC)rC ImportError)rGrCrPrl)methodrr_check_name_wrappers   z(_check_name.._check_name_wrapper)rA)rrr)rr _check_names rcs#fdd}t||S)z1Decorator to verify the named module is built-in.cs:|tjkr-tdj|d|n||S)Nz{!r} is not a built-in modulerC)rbuiltin_module_namesrr/)rGfullname)fxnrr_requires_builtin_wrapper"s z4_requires_builtin.._requires_builtin_wrapper)rA)rrr)rr_requires_builtin s rcs#fdd}t||S)z/Decorator to verify the named module is frozen.cs:tj|s-tdj|d|n||S)Nz{!r} is not a frozen modulerC)rj is_frozenrr/)rGr)rrr_requires_frozen_wrapper-s z2_requires_frozen.._requires_frozen_wrapper)rA)rrr)rr_requires_frozen+s rcCsW|j|\}}|dkrSt|rSd}tj|j|dtn|S)zTry to find a loader for the specified module by delegating to self.find_loader(). This method is deprecated in favor of finder.find_spec(). Nz,Not importing directory {}: missing __init__rT) find_loaderr _warningswarnr/ ImportWarning)rGrloaderportionsmsgrrr_find_module_shim6s  rcCs]t||}t|}|tjkrOtj|}|j|tj|S|jSdS)zLoad the specified module into sys.modules and return it. This method is deprecated. Use loader.exec_module instead. N)spec_from_loader _SpecMethodsrrIexecload)rGrspecmethodsmodulerrr_load_module_shimGs    rc Csi}|dk r||d||dr#r  zbad magic number in {!r}: {!r}z{}z+reached EOF while reading timestamp in {!r}z0reached EOF while reading size of source in {!r}mtimezbytecode is stale for {!r}sizel) MAGIC_NUMBERr/rrrEOFErrorrrOr) r5 source_statsrCr#Z exc_detailsZmagicZ raw_timestampZraw_sizer source_mtime source_sizerrr_validate_bytecode_headerWsL             rcCsstj|}t|trNtd||dk rJtj||n|Stdj|d|d|dS)zzz) r>r<r Exception__spec__AttributeErrorrr9__file__r/)rrrrCrrrr _module_reprs.           rc@s4eZdZddZddZddZdS)_installed_safelycCs||_|j|_dS)N)_moduler_spec)rGrrrrrHs z_installed_safely.__init__cCs&d|j_|jtj|jj.zimport {!r} # {!r}F) rrNrrIrCrOrrr)rGrPrrrrrQs  z_installed_safely.__exit__N)r9r8r:rHrKrQrrrrrs   rc@seZdZdZddddddddZdd Zd d Zed d Zej dd ZeddZ eddZ e j ddZ dS) ModuleSpecaThe specification for a module, used for loading. A module's spec is the source for information about the module. For data associated with the module, including source, use the spec's loader. `name` is the absolute name of the module. `loader` is the loader to use when loading the module. `parent` is the name of the package the module is in. The parent is derived from the name. `is_package` determines if the module is considered a package or not. On modules this is reflected by the `__path__` attribute. `origin` is the specific location used by the loader from which to load the module, if that information is available. When filename is set, origin will match. `has_location` indicates that a spec's "origin" reflects a location. When this is True, `__file__` attribute of the module is set. `cached` is the location of the cached bytecode file, if any. It corresponds to the `__cached__` attribute. `submodule_search_locations` is the sequence of path entries to search when importing submodules. If set, is_package should be True--and False otherwise. Packages are simply modules that (may) have submodules. If a spec has a non-None value in `submodule_search_locations`, the import system will consider modules loaded from the spec as packages. Only finders (see importlib.abc.MetaPathFinder and importlib.abc.PathEntryFinder) should modify ModuleSpec instances. originN loader_state is_packagecCsO||_||_||_||_|r0gnd|_d|_d|_dS)NF)rCrrrsubmodule_search_locations _set_fileattr_cached)rGrCrrrrrrrrHs     zModuleSpec.__init__cCsdj|jdj|jg}|jdk rO|jdj|jn|jdk rz|jdj|jndj|jjdj|S)Nz name={!r}z loader={!r}z origin={!r}zsubmodule_search_locations={}z{}({})z, ) r/rCrrappendr __class__r9r)rGrPrrrre"s zModuleSpec.__repr__c Cs|j}yk|j|jkor|j|jkor|j|jkor||jkor|j|jkor|j|jkSWntk rdSYnXdS)NF)rrCrrcached has_locationr)rGothersmslrrr__eq__,s  zModuleSpec.__eq__c Cs|jdkr|jdk r|jr|j}|jttrpyt||_Wqtk rlYqXq|jttr||_qqn|jS)N) rrrendswithtuplerrr{BYTECODE_SUFFIXES)rGrrrrr8s  zModuleSpec.cachedcCs ||_dS)N)r)rGrrrrrFscCs.|jdkr#|jjddS|jSdS)z The name of the module's parent.NrtrT)rrCr )rGrrrparentJszModuleSpec.parentcCs|jS)N)r)rGrrrrRszModuleSpec.has_locationcCst||_dS)N)boolr)rGvaluerrrrVs) r9r8r:r;rHrerpropertyrsetterrrrrrrrs # rrrcCst|drS|dkr+t|d|S|r7gnd}t|d|d|S|dkrt|dry|j|}Wqtk rd}YqXqd}nt||d|d|S)z5Return a module spec based on various loader methods. get_filenameNrrrFr)r<spec_from_file_locationrrr)rCrrrZsearchrrrr[s    rrrc Csn|dkrOd}t|drOy|j|}WqLtk rHYqLXqOnt||d|}d|_|dkrxOtD]=\}}|jt|r|||}||_PqqWdSn|t kr&t|dr/y|j |}Wntk r Yq#X|r#g|_ q#q/n ||_ |j gkrj|rjt |d}|j j |qjn|S)a=Return a module spec based on a file location. To indicate that the module is a package, set submodule_search_locations to a list of directory paths. An empty list is sufficient, though its not otherwise useful to the import system. The loader must take a spec as its only __init__() arg. Nz rrTrrT)r<rrrr_get_supported_file_loadersrrr _POPULATErrr&r) rClocationrrr loader_classr~rZdirnamerrrrts<         rc5Cs|y |j}Wntk r!YnX|dk r2|S|j}|dkrly |j}Wqltk rhYqlXny |j}Wntk rd}YnX|dkr|dkry |j}Wqtk rd}YqXq|}ny |j}Wntk rd}YnXyt|j}Wntk r5d}YnXt ||d|}|dkr]dnd|_ ||_ ||_ |S)NrFT) rrr9rrZ_ORIGIN __cached__list__path__rrrr)rrrrrCrrrrrr_spec_from_modulesH                      rc@seZdZdZddZddZdddd d d Zd d ZddZddZ ddZ ddZ ddZ dS)rzMConvenience wrapper around spec objects to provide spec-specific methods.cCs ||_dS)N)r)rGrrrrrHsz_SpecMethods.__init__cCs|j}|jdkrdn|j}|jdkrh|jdkrRdj|Sdj||jSn2|jrdj||jSdj|j|jSdS)z&Return the repr to use for the module.Nrz zzz)rrCrrr/r)rGrrCrrrrs   z_SpecMethods.module_repr _overrideF _force_nameTc;CsK|j}|s-|s-t|dddkrUy|j|_WqUtk rQYqUXn|sst|dddkr|j}|dkr|jdk rtjt}|j|_ qny ||_ Wqtk rYqXn|st|dddkr#y|j |_ Wq#tk rYq#Xny ||_ Wntk rDYnX|sct|dddkr|jdk ry|j|_Wqtk rYqXqn|jrG|st|dddkry|j|_Wqtk rYqXn|s t|dddkrG|jdk rDy|j|_WqAtk r=YqAXqDqGndS)aSet the module's attributes. All missing import-related module attributes will be set. Here is how the spec attributes map onto the module: spec.name -> module.__name__ spec.loader -> module.__loader__ spec.parent -> module.__package__ spec -> module.__spec__ Optional: spec.origin -> module.__file__ (if spec.set_fileattr is true) spec.cached -> module.__cached__ (if __file__ also set) spec.submodule_search_locations -> module.__path__ (if set) r9Nr __package__rrr)rr>rCr9rrr_NamespaceLoader__new___pathrrrrrrrrrr)rGrrrrrrrrinit_module_attrssX               z_SpecMethods.init_module_attrscCse|j}t|jdr0|jj|}nd}|dkrTt|j}n|j||S)zReturn a new module to be loaded. The import-related module attributes are also set with the appropriate values from the spec. create_moduleN)rr<rrrDrCr)rGrrrrrcreateKs   z_SpecMethods.createcCs|jjj|dS)zDo everything necessary to execute the module. The namespace of `module` is used as the target of execution. This method uses the loader's `exec_module()` method. N)rr exec_module)rGrrrr_execbsz_SpecMethods._execc Cs|jj}tjt|tjj||k r_dj|}t |d|n|jj dkr|jj dkrt dd|jjn|j |dd|S|j |ddt |jj ds|jj j|n |j|WdQXtj|S)z3Execute the spec in an existing module's namespace.zmodule {!r} not in sys.modulesrCNzmissing loaderrTr)rrCrj acquire_lockrgrrIr]r/rrrrr< load_moduler)rGrrCrrrrrls    z_SpecMethods.execcCs|j}|jj|jtj|j}t|dddkrly|j|_Wqltk rhYqlXnt|dddkry;|j |_ t |ds|jj dd|_ nWqtk rYqXnt|dddkry ||_ Wqtk rYqXn|S)NrrrrtrTr)rrrrCrrIr>rrr9rr<r r)rGrrrrr_load_backward_compatibles*       z&_SpecMethods._load_backward_compatiblec Cs|jjdk r4t|jjds4|jSn|j}t|T|jjdkr|jjdkrtdd|jjqn |j |WdQXt j |jjS)Nrzmissing loaderrC) rrr<rrrrrrCrrrI)rGrrrr_load_unlockeds   z_SpecMethods._load_unlockedcCs1tjt|jj|jSWdQXdS)zReturn a new module object, loaded by the spec's loader. The module is not added to its parent. If a module is already in sys.modules, that existing module gets clobbered. N)rjrrgrrCr)rGrrrrs z_SpecMethods.loadN) r9r8r:r;rHrrrrrrrrrrrrrs   P    rc Cs|jd}|jd}|sf|r6|j}qf||krTt||}qft||}n|st||d|}ny,||d<||d<||d<||d)r/r9)rrrrrszBuiltinImporter.module_reprNcCs:|dk rdStj|r2t||ddSdSdS)Nrzbuilt-in)rjZ is_builtinr)clsrr#targetrrr find_specs  zBuiltinImporter.find_speccCs)|j||}|dk r%|jSdS)zFind the built-in module. If 'path' is ever specified then the search is considered a failure. This method is deprecated. Use find_spec() instead. N)rr)r rr#rrrr find_modules zBuiltinImporter.find_modulec Cs;t|ttj|}WdQX||_d|_|S)zLoad a built-in module.Nr)rErrrjZ init_builtinrr)r rrrrrrs    zBuiltinImporter.load_modulecCsdS)z9Return None as built-in modules do not have code objects.Nr)r rrrrget_codeszBuiltinImporter.get_codecCsdS)z8Return None as built-in modules do not have source code.Nr)r rrrr get_sourceszBuiltinImporter.get_sourcecCsdS)z4Return False as built-in modules are never packages.Fr)r rrrrrszBuiltinImporter.is_package)r9r8r:r; staticmethodr classmethodrrrrrrrrrrrr s    r c@seZdZdZeddZeddddZedddZed d Z ed d Z ee d dZ ee ddZ ee ddZdS)FrozenImporterzMeta path import for frozen modules. All methods are either class or static methods to avoid the need to instantiate the class. cCsdj|jS)zsReturn repr for the module. The method is deprecated. The import machinery does the job itself. z)r/r9)mrrrr/szFrozenImporter.module_reprNcCs*tj|r"t||ddSdSdS)NrZfrozen)rjrr)r rr#r rrrr8szFrozenImporter.find_speccCstj|r|SdS)z]Find a frozen module. This method is deprecated. Use find_spec() instead. N)rjr)r rr#rrrr?szFrozenImporter.find_modulecCs_|jj}tj|s9tdj|d|nttj|}t||j dS)Nz{!r} is not a frozen modulerC) rrCrjrrr/rrget_frozen_objectrr?)rrCrrrrrHs   zFrozenImporter.exec_modulecCs t||S)z_Load a frozen module. This method is deprecated. Use exec_module() instead. )r)r rrrrrQszFrozenImporter.load_modulecCs tj|S)z-Return the code object for the frozen module.)rjr)r rrrrrZszFrozenImporter.get_codecCsdS)z6Return None as frozen modules do not have source code.Nr)r rrrrr`szFrozenImporter.get_sourcecCs tj|S)z.Return True if the frozen module is a package.)rjZis_frozen_package)r rrrrrfszFrozenImporter.is_package)r9r8r:r;rrrrrrrrrrrrrrrr&s    rc@syeZdZdZdZdZdZeddZeddZ ed d d d Z ed d d Z d S)WindowsRegistryFinderz>Meta path finder for modules declared in the Windows registry.z;Software\Python\PythonCore\{sys_version}\Modules\{fullname}zASoftware\Python\PythonCore\{sys_version}\Modules\{fullname}\DebugFc CsCytjtj|SWn%tk r>tjtj|SYnXdS)N)_winregZOpenKeyZHKEY_CURRENT_USERr(ZHKEY_LOCAL_MACHINE)r keyrrr_open_registryys z$WindowsRegistryFinder._open_registrycCs|jr|j}n |j}|jd|dtjdd}y.|j|}tj|d}WdQXWnt k rdSYnX|S)NrZ sys_versionrr) DEBUG_BUILDREGISTRY_KEY_DEBUG REGISTRY_KEYr/rversionrrZ QueryValuer()r rZ registry_keyrZhkeyfilepathrrr_search_registrys     z&WindowsRegistryFinder._search_registryNcCs|j|}|dkrdSyt|Wntk rEdSYnXxNtD]C\}}|jt|rPt||||d|}|SqPWdS)Nr)r r'r(rrrr)r rr#r rrr~rrrrrs    zWindowsRegistryFinder.find_speccCs-|j||}|dk r%|jSdSdS)zlFind module named in the registry. This method is deprecated. Use exec_module() instead. N)rr)r rr#rrrrrs z!WindowsRegistryFinder.find_module) r9r8r:r;rrrrrr rrrrrrrms rc@s4eZdZdZddZddZeZdS) _LoaderBasicszSBase class of common code needed by both SourceLoader and SourcelessFileLoader.cCsXt|j|d}|jddd}|jdd}|dkoW|dkS)zConcrete implementation of InspectLoader.is_package by checking if the path returned by get_filename has a filename of '__init__.py'.rrtrTrsrH)r&rr"r )rGrrZ filename_baseZ tail_namerrrrsz_LoaderBasics.is_packagecCsP|j|j}|dkr9tdj|jntt||jdS)zExecute the module.Nz4cannot load module {!r} when get_code() returns None)rr9rr/rrrr?)rGrrrrrrs   z_LoaderBasics.exec_moduleN)r9r8r:r;rrrrrrrrr!s   r!c@sjeZdZddZddZddZddZd d Zd dd dZddZ dS) SourceLoadercCs tdS)zOptional method that returns the modification time (an int) for the specified path, where path is a str. Raises IOError when the path cannot be handled. N)IOError)rGr#rrr path_mtimeszSourceLoader.path_mtimecCsi|j|d6S)aOptional method returning a metadata dict for the specified path to by the path (str). Possible keys: - 'mtime' (mandatory) is the numeric timestamp of last source code modification; - 'size' (optional) is the size in bytes of the source code. Implementing this method allows the loader to read bytecode files. Raises IOError when the path cannot be handled. r)r$)rGr#rrr path_statss zSourceLoader.path_statscCs|j||S)zOptional method which writes data (bytes) to a file path (a str). Implementing this method allows for the writing of bytecode files. The source path is needed in order to correctly transfer permissions )set_data)rGrZ cache_pathr5rrr_cache_bytecodeszSourceLoader._cache_bytecodecCsdS)zOptional method which writes data (bytes) to a file path (a str). Implementing this method allows for the writing of bytecode files. Nr)rGr#r5rrrr&szSourceLoader.set_datacCsi|j|}y|j|}Wn:tk r^}ztdd||WYdd}~XnXt|S)z4Concrete implementation of InspectLoader.get_source.z'source not available through get_data()rCN)rget_datar(rr)rGrr#rexcrrrrs zSourceLoader.get_source _optimizerc Cstt||dddd|S)zReturn the code object compiled from source. The 'data' argument can be any object type that compile() supports. r dont_inheritTrv)rrcompile)rGr5r#r*rrrsource_to_codeszSourceLoader.source_to_codec +Cs|j|}d}yt|}Wntk r?d}YnXy|j|}Wntk rgYnXt|d}y|j|}Wntk rYnjXy"t|d|d|d|}Wnt t fk rYn-Xt d||t |d|d|d|S|j|}|j ||} t d |tj r|dk r|dk rt| |t|}y$|j|||t d |Wqtk rYqXn| S) zConcrete implementation of InspectLoader.get_code. Reading of bytecode requires path_stats to be implemented. To write bytecode, set_data must also be implemented. NrrrCr#z {} matches {}rrzcode object from {}z wrote {!r})rrr{r%r#rr(r(rrrrrr-rdont_write_bytecoderrr') rGrrrrstr5 bytes_datarZ code_objectrrrrsN            zSourceLoader.get_codeNr) r9r8r:r$r%r'r&rr-rrrrrr"s    r"cspeZdZdZddZddZddZefdd Zed d Z d d Z S) FileLoaderzgBase file loader class which implements the loader protocol methods that require file system usage.cCs||_||_dS)zKCache the module name and the path to the file found by the finder.N)rCr#)rGrr#rrrrH7s zFileLoader.__init__cCs"|j|jko!|j|jkS)N)rr?)rGrrrrr=szFileLoader.__eq__cCst|jt|jAS)N)hashrCr#)rGrrr__hash__AszFileLoader.__hash__cstt|j|S)zdLoad a module from a file. This method is deprecated. Use exec_module() instead. )superr1r)rGr)rrrrDs zFileLoader.load_modulecCs|jS)z:Return the path to the source file as found by the finder.)r#)rGrrrrrPszFileLoader.get_filenamecCs)tj|d}|jSWdQXdS)z'Return the data from path as raw bytes.rN)r1r2Zread)rGr#r6rrrr(UszFileLoader.get_data) r9r8r:r;rHrr3rrrr(rr)rrr12s     r1c@s@eZdZdZddZddZdddd Zd S) r z>Concrete implementation of SourceLoader using the file system.cCs$t|}i|jd6|jd6S)z!Return the metadata for the path.rr)r'st_mtimeZst_size)rGr#r/rrrr%_s zSourceFileLoader.path_statscCs"t|}|j||d|S)N_mode)rr&)rGrrr5r*rrrr'ds z SourceFileLoader._cache_bytecoder7ic Cs5t|\}}g}x6|rPt| rPt|\}}|j|qWxt|D]v}t||}ytj|Wq^tk rw^Yq^tk r}zt d||dSWYdd}~Xq^Xq^Wy!t |||t d|Wn5tk r0}zt d||WYdd}~XnXdS)zWrite bytes data to a file.zcould not create {!r}: {!r}Nz created {!r}) r&r.rr!rrZmkdirFileExistsErrorr(rr7) rGr#r5r7rrrrr)rrrr&is& zSourceFileLoader.set_dataN)r9r8r:r;r%r'r&rrrrr [s   r c@s.eZdZdZddZddZdS)rz-Loader which handles sourceless file imports.cCsL|j|}|j|}t|d|d|}t|d|d|S)NrCr#r)rr(rr)rGrr#r5r0rrrrszSourcelessFileLoader.get_codecCsdS)z'Return None as there is no source code.Nr)rGrrrrrszSourcelessFileLoader.get_sourceN)r9r8r:r;rrrrrrrs  rc@seZdZdZddZddZddZedd Zd d Z d d Z ddZ eddZ dS)ExtensionFileLoaderz]Loader for extension modules. The constructor is designed to work with FileFinder. cCs||_||_dS)N)rCr#)rGrCr#rrrrHs zExtensionFileLoader.__init__cCs"|j|jko!|j|jkS)N)rr?)rGrrrrrszExtensionFileLoader.__eq__cCst|jt|jAS)N)r2rCr#)rGrrrr3szExtensionFileLoader.__hash__c Cst|ttj||j}WdQXtd|j|j|}|r|t|d r|t|jdg|_ n||_ |j |_ |s|j j dd|_ n|S)zLoad an extension module.Nz!extension module loaded from {!r}rrTrt)rErrrjZ load_dynamicr#rrr<r&rrr9rr )rGrrrrrrrs    zExtensionFileLoader.load_modulecs0t|jdtfddtDS)z1Return True if the extension module is a package.rc3s|]}d|kVqdS)rHNr)rsuffix) file_namerrrMsz1ExtensionFileLoader.is_package..)r&r#rNEXTENSION_SUFFIXES)rGrr)r;rrszExtensionFileLoader.is_packagecCsdS)z?Return None as an extension module cannot create a code object.Nr)rGrrrrrszExtensionFileLoader.get_codecCsdS)z5Return None as extension modules have no source code.Nr)rGrrrrrszExtensionFileLoader.get_sourcecCs|jS)z:Return the path to the source file as found by the finder.)r#)rGrrrrrsz ExtensionFileLoader.get_filenameN) r9r8r:r;rHrr3rrrrrrrrrrr9s       r9c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)_NamespacePatha&Represents a namespace package's path. It uses the module name to find its parent module, and from there it looks up the parent's __path__. When this changes, the module's own path is recomputed, using path_finder. For top-level modules, the parent module's path is sys.path.cCs4||_||_t|j|_||_dS)N)rFrr_get_parent_path_last_parent_path _path_finder)rGrCr# path_finderrrrrHs  z_NamespacePath.__init__cCs5|jjd\}}}|dkr+dS|dfS)z>Returns a tuple of (parent-module-name, parent-path-attr-name)rtrrr#r)zsyszpath)rFr )rGrdotr^rrr_find_parent_path_namess z&_NamespacePath._find_parent_path_namescCs&|j\}}ttj||S)N)rCr>rrI)rGZparent_module_nameZpath_attr_namerrrr>sz_NamespacePath._get_parent_pathcCst|j}||jkrx|j|j|}|dk rl|jdkrl|jrl|j|_qln||_n|jS)N)rr>r?r@rFrrr)rGZ parent_pathrrrr _recalculates  z_NamespacePath._recalculatecCst|jS)N)iterrD)rGrrr__iter__sz_NamespacePath.__iter__cCst|jS)N)rrD)rGrrr__len__sz_NamespacePath.__len__cCsdj|jS)Nz_NamespacePath({!r}))r/r)rGrrrresz_NamespacePath.__repr__cCs||jkS)N)rD)rGitemrrr __contains__sz_NamespacePath.__contains__cCs|jj|dS)N)rr)rGrHrrrrsz_NamespacePath.appendN) r9r8r:r;rHrCr>rDrFrGrerIrrrrrr=s       r=c@sjeZdZddZeddZddZddZd d Zd d Z d dZ dS)rcCst||||_dS)N)r=r)rGrCr#rArrrrH sz_NamespaceLoader.__init__cCsdj|jS)zsReturn repr for the module. The method is deprecated. The import machinery does the job itself. z)r/r9)r rrrrrsz_NamespaceLoader.module_reprcCsdS)NTr)rGrrrrrsz_NamespaceLoader.is_packagecCsdS)Nrr)rGrrrrrsz_NamespaceLoader.get_sourcecCstdddddS)Nrzrr+T)r,)rGrrrrrsz_NamespaceLoader.get_codecCsdS)Nr)rGrrrrr!sz_NamespaceLoader.exec_modulecCstd|jt||S)zbLoad a namespace module. This method is deprecated. Use exec_module() instead. z&namespace module loaded with path {!r})rrr)rGrrrrr$sz_NamespaceLoader.load_moduleN) r9r8r:rHrrrrrrrrrrrr s      rc@seZdZdZeddZeddZeddZedd Zed d d Z ed d d dZ ed ddZ d S) PathFinderz>Meta path finder for sys.path and package __path__ attributes.cCs:x3tjjD]"}t|dr|jqqWdS)z}Call the invalidate_caches() method on all path entry finders stored in sys.path_importer_caches (where implemented).invalidate_cachesN)rpath_importer_cachevaluesr<rK)r finderrrrrK5szPathFinder.invalidate_cachesc Cs^tjstjdtnx;tjD],}y||SWq&tk rQw&Yq&Xq&WdSdS)zqSearch sequence of hooks for a finder for 'path'. If 'hooks' is false then use sys.path_hooks. zsys.path_hooks is emptyN)r path_hooksrrrr)r r#Zhookrrr _path_hooks=s   zPathFinder._path_hooksc Csa|dkrtj}nytj|}Wn.tk r\|j|}|tj|.rtrNr)r_loadersr# _path_mtimeset _path_cache_relaxed_path_cache)rGr#loader_detailsZloadersr~r)rrrHs$   zFileFinder.__init__cCs d|_dS)zInvalidate the directory mtime.rNr)rY)rGrrrrKszFileFinder.invalidate_cachescCs;|j|}|dkr%dgfS|j|jp7gfS)zTry to find a loader for the specified module, or the namespace package portions. Returns (loader, list-of-portions). This method is deprecated. Use find_spec() instead. N)rrr)rGrrrrrrs  zFileFinder.find_loadercCs(|||}t||d|d|S)Nrr)r)rGrrr#rr rrrrrVszFileFinder._get_specNcCsd}|jdd}y"t|jp1tjj}Wntk rUd }YnX||jkr{|j||_nt r|j }|j }n|j }|}||kr3t |j|}xg|jD]M\} } d| } t || } t| r|j| || |g|SqWt|}nx~|jD]s\} } t |j|| } tdj| dd|| |kr=t| r|j| || d|Sq=q=W|rtd j|t|d} |g| _| SdS) z}Try to find a loader for the specified module, or the namespace package portions. Returns (loader, list-of-portions).FrtrsrrHz trying {}rNzpossible namespace for {}r)r r'r#rr-r6r(rY _fill_cacherr\rr[rrXr,rVr.rr/rr)rGrr Z is_namespaceZ tail_modulerZcacheZ cache_moduleZ base_pathr:rZ init_filenameZ full_pathrrrrrsD"              zFileFinder.find_specc Cs|j}ytj|p!tj}Wn!tttfk rKg}YnXtjj dspt ||_ not }xZ|D]R}|j d\}}}|rdj ||j}n|}|j|qW||_ tjj tr dd|D|_ndS)zDFill the cache of potential modules and packages for this directory.rrtz{}.{}cSsh|]}|jqSr)r)rZfnrrr *s z)FileFinder._fill_cache..N)r#rZlistdirr-FileNotFoundErrorPermissionErrorNotADirectoryErrorrrr rZr[rr/raddr r\) rGr#ZcontentsZlower_suffix_contentsrHrCrBr:Znew_namerrrr^ s"     zFileFinder._fill_cachecsfdd}|S)aA class method which returns a closure to use on sys.path_hook which will return an instance using the specified loaders and the path called on the closure. If the path called on the closure is not a directory, ImportError is raised. cs.t|s!tdd|n|S)z-Path hook for importlib.machinery.FileFinder.zonly directories are supportedr#)r.r)r#)r r]rrpath_hook_for_FileFinder6s z6FileFinder.path_hook..path_hook_for_FileFinderr)r r]rdr)r r]r path_hook,s zFileFinder.path_hookcCsdj|jS)NzFileFinder({!r}))r/r#)rGrrrre>szFileFinder.__repr__)r9r8r:r;rHrKrrrrVrr^rrererrrrrWs    - rWc@s.eZdZdZddZddZdS)_ImportLockContextz$Context manager for the import lock.cCstjdS)zAcquire the import lock.N)rjr)rGrrrrKHsz_ImportLockContext.__enter__cCstjdS)z= 0z__package__ not set to a stringz=Parent module {!r} not loaded, cannot perform relative importzEmpty module nameN) rrS TypeErrorr/rBrrrI SystemError)rCrgrhrrrr _sanity_checks rozNo module named z{!r}c Cs4d}|jdd}|r|tjkr>t||n|tjkrXtj|Stj|}y |j}Wqtk rtdj||}t|d|YqXnt ||}|dkrttj|d|nt |j }|r0tj|}t ||jdd|n|S)NrtrTz; {!r} is not a packagerCrs) r rrIrrrr_ERR_MSGr/rrlrrr=)rCimport_r#rZ parent_modulerrrrrr_find_and_load_unlockeds*       rrc Cs$t|t||SWdQXdS)z6Find and load the module, and release the import lock.N)rgrr)rCrqrrr_find_and_loads rscCst||||dkr1t|||}ntj|tjkrWt|tStj|}|dkrtjdj |}t |d|nt ||S)a2Import and return the module based on its name, the package the call is being made from, and the level adjustment. This function represents the greatest common denominator of functionality between import_module and __import__. This includes setting __package__ if the loader did not. rTNz(import of {} halted; None in sys.modulesrC) rorirjrrrIrs _gcd_importrkr/rrp)rCrgrhrrrrrrts         rtcCst|drd|krYt|}|jdt|drY|j|jqYnx|D]}t||s`dj|j|}yt||Wqtk r}z5t |j t r|j |krw`qnWYdd}~XqXq`q`Wn|S)zFigure out what __import__ should return. The import_ parameter is a callable which takes the name of module to import. It is required to decouple the function from assuming importlib's import implementation is desired. r*__all__z{}.{}N) r<rremoverrvr/r9rrrrSr _ERR_MSG_PREFIXrC)rfromlistrqrZ from_namer)rrr_handle_fromlists"       rzcCsN|jd}|dkrJ|d}d|krJ|jdd}qJn|S)zCalculate what __package__ should be. __package__ is not guaranteed to be defined or could be set to None to represent that its proper value is unknown. rNr9rrtrT)r]r )globalsrgrrr_calc___package__s    r|cCs7ttjf}ttf}ttf}|||gS)z_Returns a list of file-based module loaders. Each item is a tuple (loader, suffixes). )r9rjextension_suffixesr rrr)Z extensionsZsourceZbytecoderrrr s  rc Cs|dkrt|}n6|dk r-|ni}t|}t|||}|s|dkrzt|jddS|s|St|t|jdd}tj|jdt|j|Snt||tSdS)aImport a module. The 'globals' argument is used to infer where the import is occuring from to handle relative imports. The 'locals' argument is ignored. The 'fromlist' argument specifies what should exist as attributes on the module being imported (e.g. ``from module import ``). The 'level' argument represents the package location to import from in a relative import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). rTNrt)rtr|rrrrIr9rz) rCr{localsryrhrZglobals_rgZcut_offrrr __import__ s   #(rcCsDtj|}|dkr.td|nt|}|jS)Nzno built-in module named )r rrrr)rCrrrrr_builtin_from_name5 s   rc Cs|a|atjjr!tantatt}xtjj D]y\}}t ||rC|tj krvt }ntj |rCt}nqCt||}t|}|j|qCqCWtjt}xIdD]A} | tjkrt| } n tj| } t|| | qWddgfdddgff} x| D]~\} } td d | Dslt| d }| tjkrtj| }PqAyt| }PWqAtk rwAYqAXqAWtd t|d |t|d|t|ddj| ytd}Wntk r2d}YnXt|d|td}t|d|| dkrtd}t|d|nt|dttjtj| dkrtjddtkrdt_ qndS)zSetup importlib by importing needed built-in modules and injecting them into the global namespace. As sys is needed for sys.modules access and _imp is needed to load built-in modules, those two modules must be explicitly passed in. r1rbuiltinsrZposix/nt\css!|]}t|dkVqdS)rN)r)rrrrrrMi sz_setup..rTzimportlib requires posix or ntrrrrrUNroZwinregrrz.pywz_d.pydT)z_ioz _warningszbuiltinszmarshal)!rjrrurvrxrrwrBrIitemsrrr rrrrrr9rr=allrdrrr r<rr}rrrr) sys_module _imp_moduleZ module_typerCrrrrZ self_moduleZ builtin_nameZbuiltin_moduleZ os_detailsZ builtin_osrrZ os_moduleZ thread_moduleZweakref_moduleZ winreg_modulerrr_setup= sl          !              rcCst||t}tjjtj|gtjjt tjjt t j dkrttjjt ntjjtdS)z2Install importlib as the implementation of import.rN)rrrrOrrWrerkrr rrr9rrJ)rrZsupported_loadersrrr_install s  r)zwinrr)\r;r r rrrr&r'r+r,r.r7rArDrB__code__rrErmr\rcrRrSrfrgrirprrrrrrZ_RAW_MAGIC_NUMBERr|rrwrxrrrrrrrrrrrrrrrrrrobjectrrrrr r rrr!r"r1r rr<r9r=rrJrWrfrirjrlrorxrprrrsrtrzr|rrrrrrrrrs       D   r         7   $j  ?-FG?n)+99& (      #  W;|4},}ZZpZX[D}[X}[l}d\}_}T`$~t`8~4a\~db~b~c dXTdtDftffg0gLkkЀkk4l tl$l8lLpppq8$rXrsЂ$t$xTxyy{D}~܄$h|Ԋȅt,T|̆0ć؇4$L؈t$ė8ԗL`xdԙԉT0dDtXěĜԝ@؋@lԯȌD@dThd|tȍ0DDX$lЎ4D|4@$`TdА`T,dDXl4̒td<x$ȓ$,D@dTh|,@4TTht|̕,$@`t8xtؗt84l$Șܘ4D$@44șD Ht$tDT4TȜ  t8L`tD$dLt`ܞt(Lpܟt4h4T4t |d̢4<4tȣ`tDTdܤd,Tdԥd4D\|tԦdD($<P4 d x!D!!T"ȧ"ܧ4$D$(T$<$P$dD&d&Ĩt&ب&'$'$T'8'L'`'t(D(t($)ԩ)d*<t*PD+t+$.Ъt.. $/(/H/`t00T33457̬<@lDH 4M\P$P4PЮTPdQ4RhtTTȯTUU WpdYZ]Tndqr<dshww̲yztz@|tt}@4Դ\$pD4D|ğ,dXdD$dPD4IJйTdԺԶ4$T8tLp$4dԻt0ԻP|Լtdl$ 4\TtH$ t@h4TdTdX$ d t,`T$4D$ #L#`#$t$$T%T-d.$3D7:\>A$BDB0BHBh4C4DD$EtEE4F<TFPFpFDG$H4H$HPKKLL4M MNNO0$P\Q4QTQQQQdRS4TSLtTTU$V8WdWXdZ_4bcTTdde4eef Df$tf<fTfln$oDoo0p`dqstt4tdtDuLDvdwxydyyz,{@4{T$~D @tdxԂ$D<dPdxą4TԆ0$Ttp$Dd $04DDXTldtdĎ0pĒԒTHtԔt0lԗ4TĘ$DDDhT$8lDtԞğ0d\Ԡ D`Ԥ|DĦdħ@TDhĩ$T$D`$tTdt@į\T4(D<dt ĶHt4(`44d@x$d4l$($X$  L$D<txTD d t4Th$$ 4H\p$4DTdPdt(<PTpDT dT 8$,@,D$X4lDtd<#D$4$l&4'''(D(\)x+4+2T7td77T8t;4=X$>T@@@@DA 4B,DB@tBTCxCCHTJDK4L8$M\OQDR tSDWWtXXXX[P^4`b4bcc0d|teflT4mtooDpdp4tpHsTttu<v\Dv|wwwx x $x44xHxhytyzTzz@d{d{x{}}(4LxTd8Tdp44d`$tԉTԊ 8ċPt|dT <ԎP$T 4< l  d ԓ , D\ Tp   $   , tL 4  t  dL T $ t h | D   D,$XTl$t0LdpDddT tXT$8p4t$L`4$P4pd0H`$xdtTD<P4dDxd<Pth4tTdDdXl$  D t D 8 T h | @XtPT lD!!D"#0%t&&')H$,4-D.$ .X /l / 1 $4d>t|>>>T>>$?p????D?@$@D8@tL@`@t@@4@d@ A\AA$AB4B4BBD8CC$C DDD@E$EE XFT F4 F F@GGTGGTH$hH4|HTHHHH8IXIxIIIDIIJ$J40JTDJ|JJJ K0KXKKKTKt!DL!lLD"L"Ld#L#$M$DMD$dMT(Mt(M(M(M$)N)PN,N,NT-O-TOD.OT.Od.Ot.O.O.O.PT/0Pd/DPt/XP/lP/P/P$0P0P0Q10Q$1DQ1tQ$4 R6LTt>lT>T>Td@U@LU$AUAUAUBUDBVTDLVdD`VtFVFV4GVGWDH?P@ABC@D|FGG0GDHldJLLdODOXPDQ4S0S\S`c@g4hditj,jpjTkln`qTqtqqq$r4s,sDvww\dxxdyD4$\44DԬL`D4`4d $ p T   DP   4 \  T  4P t|   D < d $ d @D|0D\$4Pt|T4D`d t\DD$DDpt TL$d h`d$HtHDUV8T\\]]$_H_ef0TfXfTgh4oopqDsx$twTzT 4 D`  !td!4!Ԥ ""4#X##4 &l&'40'$''(DL((((($)@)d\)x))T*Th**++$h++++$L,p,D,d,,,8---t..(.H.`.|..$.4.d/T4/4X/Tp//4////$0000T00t04 1P111 24 <2x223 3l333 4T44`4t44 5H5\5p5$545555T 6#\6d$|6$6%64&7&(7'`7)7+$8+88,L8,x8d-8$.8/$9T/@9/`909$09d09T191:1$:T3p:::Th;;;<d<D<<=0=T\===D>H>$>>?x?D?t?4@@d@ AlAAAHBBCC$DLD$D4 D E E+4F1F3Fd4 G7hGt8G8 H9$HD:8H=tHCHTDHD4ItElIFI4H JHPJHdJHxJIJKKKLKNKNK$OK4OKtO(LOo> pt?(p4@DpD@XpT@lpdApBpCqD@A$A DA4BP4C$FDFXGHHI$JX4KMN8OPOtdPdQRdTdTU4VV<dW`4ZZ4`LhD$tL$4dt0dT Lt<htt4d `T!t"T#4$%4&X'|(4)**$+P,t-./0 d18d2\245$666$747P7dD88$99:4t:X:t;<4=$T?d@ADBCDdEFFTGtG0GDG|H$IITJ$JHKhTK$L4P$Q@Q\$RUVVW W(XDX`Y|YYdZZD[[$$\@\\]xt]]T^^4__ `<`X`x$aaaaaaDbb8$cTcpdtddee4fdf0fgthi$ii4tjPjd$kDkkk$l0lXlm$mdmnnDp@qrsdwHw\4xtyDyydzz }lT~~$ x   $ TX ԅ|   $ Ԋ   d D   Ԑ T T, d  ԓ $ t(Ĕ`tTHD(DT4T$Ptt,xģd8`ħ|$Ԫ8ԫ$TԬ,4Hh4tԯ4,԰H4dtԲ4Dp$$4pTļ48Tt$DdlTDT@lD4d`0\$pT$ dp   D  !X!!$!d!!!D"t"t""@###D$p$4$$%4P%Th%%%d(&Dt&d&&&D&t'D'Dd'4't''''(T0(P(p((T(((t )0)DL)h)4)d)4)*,*4P*t** +4<+T+h++,h,,,-T&L-t&`-&x-&-&-'-'-$'-4'-T(,.t(D.(X.*.T*.-//P/d0/0/$1/T1/103D043`03044040T51d51t5,15H15`1616161$7171717 28 2$8428`2$9|2;2=3d>(34?3@3@3$A3DA4AH4G4DI4tI4I5$J$5tJP5Kt5TL5M6tNP6Nd6Nx6N6N6O6TO6O6O7TQ,7RX7dT7dV7V8W08WP8Xd8DX|8tX8X8X8X8Y84[$9\`9]9^9d`4:`H:4a|:a:Db:b:c,;cd;Dd;dd;d;e;$e;4e<De<Te,<eD<eX<g<g<4h<$i<tj =k\=l|=dm=n=o=q>q8>rL>4r`>drt>r>r>r>ds>s>t?4t$?dt8?tP?du?Dv?v@Dy<@yd@Dz@${@D{@d{@{A{$A{8A{LA|`A$|tA|A}AD~B\B4BԁBTBT$CXCCtCԏDԓTDxDDtDDE\ P A 0=5D=Hbe\>]pd>MH> FEB B(A0G8G@ 8D0A(B BBBB t?v?_0@cEAD  AAE OAA 0@~EDpX AF 8T AFBA D(Dj (A ABBG A 8AFBA D(D (A ABBG L4BFBB B(A0A8G 8A0A(B BBBF 0D>DDXDlEE E,E8E4DEFCD R ABF d ABI EE0EDEXElEEEEFF F4,FFHD R ABI d ABI 0FDF2XFiH_ I b F x,GiH_ I b F |GiH_ I b F GiH_ I b F (HE| G V B K E HIFED A(D0l (D ABBG N (D ABBI <PIAAD0| GAF ` CAD XGA\JFGA D(G0R (A ABBG C (A ABBO C(C ABB\JFLA D(G0R (A ABBJ s (A ABBG M (C ABBK 0P4KFAA D  AABI ,MES H [ E D L v J (NtECD F DAI N'NQdg 8O 4 4OEAD0r AAB f AAH @XOEAD0i AAK @ AAF | CAH @PEAD0r AAB M AAI n AAH @dQ EAD0f AAF M AAI  AAH 8$0RJAG0@ DAI `CADL`REAG o DAG J GAF g CAE V CAF PTSFAD D0F  AABG X  AABD `  CABJ 4SEAD0T DAE e AAA L<HT0EAD0} DAD ^ GAJ l AAB V FAA 4(UEAD0H FAG e AAA LUEAG o FAE J GAF l AAB V FAA 4PVwEAD0r AAB V AAH LLVFBA D(D@L (A ABBE V (A ABBD @WFAD D0H  AABE V  AABF @WJAI g DAH N DAE WDAD$ W#8 WQdgP 4X*d PX x LX @ HXuJGD0b AAG X AAF DCAH@ XFAA D0s  AABE V  AABA $!XKEd G J F J$>(><>P> d> E[0_ AA >8> FBA D(F0v (A ABBA >l#>'QU ?qN^ D uK,?ZEx C H?<`E@ K K(h?|ED { AK uC? Ad\<?XEAD ] QCE a NCN DCAD?FRB G(A0D4 0A(A BBBF L4@PFBB B(A0G8D? 8A0A(B BBBG L@LPDB H(A0A8G 8A0A(B BBBK L@fPDB H(A0A8G0 8A0A(B BBBG L$A PDH B(A0A8G 8A0A(B BBBD LtAPDH B(A0A8G| 8A0A(B BBBC LAFRB B(G0A8G 8A0A(B BBBA HBpFBE B(A0A8Jd 8A0A(B BBBG \`BFBA A(D0i (D ABBH  (A ABBG T(A ABBLBmBEB B(A0A8G 8A0A(B BBBC C 0$CCFAA Q0]  AABF $XC, ;EAG hDA$CD ;EAG hDA$C\ ;EAG hDAHCt FIB B(J0H8D`L 8A0A(B BBBA LD! FIB B(J0H8G? 8A0A(B BBBK LlDH+ FIB B(A0J8N 8A0A(B BBBB LD4FKB E(G0A8DV 8A0A(B BBBD  EX7 L ET72FFB B(A0A8J 8A0A(B BBBD LpEDF}FHB E(D0F8G 8A0A(B BBBI $EtI;EAG hDA0EIFHA T0  AABD $FhK;EAG hDA0DFKFAA JPD  AABF 8xF 8A0A(B BBBH |JeK A LJfFBE B(A0D8D 8A0A(B BBBB HJLkFBB B(A0A8G 8A0A(B BBBH <4K o=FGA G@  AABE THRPWHA@LtK r5FPB B(N0A8G  8A0A(B BBBH 8KvFLA A(DP (A ABBA 0LxyEAR N AAA LAA4LyHL y5dP`L4y`E@ K KLtyA\ dLyKLzA LzEG d AG LL{DlWM{hHo I 4M{EFDD a GBH AABTM{hM{?LM G ^M|?LM G ^0M<|iEHD m JJN DCAHMx|FBB B(A0A8D@ 8D0A(B BBBJ (N } (NDD J(T0B8A@AHAPAXA`AhApI ] ABJ N ABG l AEF (lTmFDA ^ABT̒TXTT.4TpAHD D DAJ V DAE  U%H\$U%H\EDG n(I0K8E@K h AAD 4@jEDG K(K0M(A Z AAH @xj!QAA  ABD WABFP LjPAG0P AAF X AAF hP0D CAH H k8'FAD GsSTAKI  AABK 4XkuFDD W GBB AAB4kd=FDD _ ABH AAB4kl=FDD _ ABH AABlt$4leFDD C ABL AAB4LluFDD U ABJ AAB4lFDD y ABF AAB4lxeFDD C ABL AABluEE N \(mEAD ~ AAF ,@mfFED C ABK (pm}EAD y AAK HmFBB B(A0A8D` 8A0A(B BBBA m9m%n!$n(8nD | H D(J0P8C@N 0dn@1FHD D`  AABH nLEKPp AG n89\\|n`BBB E(D0A8G@ 8A0A(B BBBF R 8F0A(B BBBA p 8F0A(B BBBG 8To(FBA D(G0M (A ABBI <oUAD  DAF DAAR oVDk A eo$p\D] G a G $p08p< Lp8$ET G ClpHpT"HYpl-pvHj F pp"HYp-q,vHj F $q8qLq`q tq(qEKG N CAG (qyEDG N CAF qT qP rL rH 40rDEKG G CAF K CAA 4hrwEDG D CAH K CAA r r r r rss,s @s Ts hs5HIO Ts5HIO Ts3HO [s (s<.FBB B(A0A8J 8A0A(B BBBF + 8A0A(B BBBK  8H0A(B BBBE \thHz F L<|tFBA D(G (A ABBH 4tEFDD a GBH AABtu0u'EEG  DAM DAAHPuBBE L(I0D8D@ 8D0A(B BBBA 4uh0FAA  ABB \AB u`ED0{ AK 4uADD o CAD ^ CAF 0vt Dv @Xv FBB A(D0DP 0A(A BBBG lv!$FBB B(A0D8Gk_MAJ 8A0A(B BBBD NTUA w&EG { AH 0wd'VDw'!HX\w'pw'w'w'(H_w'w' w'8w'FBA D(DP (A ABBD ((xL)LLAG ^DATxp)FEE E(D0J8DPkXF`BhBpLPP 8A0A(B BBBF X 8A0A(B BBBF D8C0A(B BBB0x)rFAA D0O  AABA 8y-:FBA A(D0 (C ABBH 4Ly.EAD0 AAE V AAA 4yp.#EAD a CAA  CAA Lyh/FBB A(A0 (A FBBF ~ (A BBBC  z80GLz,zh00@zt0FNC Dph  AABI tz0H0D D 0zt2H} K V J K E K E b F z`3Lzl3|FBB B(A0A8D  8A0A(B BBBA `({:FBB B(A0D8Gp 8A0A(B BBBH h 8A0A(B BBBF {>0{>cEJD y DAG DAA({?uAAG m AAH H|d?FBB B(A0A8Dp 8A0A(B BBBG L|8BHED@: AD (p|dDXEh C K E F J G(|D-EAD` AAG |FU|F |F }FlH y G _$}0GE F VD}H X}G( l}HED@ AC }I} I(},IEAD`# AAA }NpED@ AF ~\OED@ AA ,~(PED@ AE P~PED@ AA Dt~QFIB A(A0D 0A(A BBBJ (~HTEJD@ AAC L~,U?EAD0 AAE e AAI b AAD Q AAE 8V"H  E O A D\(WFBB A(A0J 0A(A BBBA pZH N J Y E ZH  H $[OEAD BAA [  [04[FAA G0^  AABG 0hL^FAA G@  AABH (axED  AG bED0 AG 0d$8LdlFEA A(D0 (A ABBA 4e2HHeBEI D(D0x (F BBBD h(C BBBHfBEE E(D0D8DPj 8A0A(B BBBG 8f_FBB D(D0E(A BBBLgFBB B(A0A8G 8A0A(B BBBF lxmREn E Y\mFBD A(D0 (A ABBI D (D ABBK T(A ABBo0pPEDG i CAC KCA4 pHIL(p H`$paFEE B(A0D8DPL 8D0A(B BBBD 8HsmFED C(G0u (A ABBD |sDEe F Ls@FBB A(A0\ (A BBBA D (A EBBB Tt$EU F Ctt)HM K DHt?FBB B(A0A8D`N 8A0A(B BBBF uGLzu u$u 8u Lu `uES P 4TvEFDD a GBH AAB lvYEt G J F ܅vES P 4wEFDD a GBH AAB 40wYEt G J F XlwEN E M K |w(x0YV|(xFBB E(A0D8Dp`xDKSBBIpX 8A0A(B BBBG xDKQDARp,hy @tyE K K M (dzELS0Q AAI (D{ELS0Q AAI {$4Ї{FDD  GBF AAB |mEr I M C ,|mEr I M C P$}uHB F l}uHB F }uHB F P~A\ d~Qt\Ԉ~DHa G O A DHa G O A 0$L(LFED D(D0 (D ABBD X (F ABBE x 4EXXs`FhFpFxHNPP AG ĉ <dW܉H<dWp<dW <dW($EAD K AAI PD<dW(hlEAD K AAI <dW(EAD F AAF ؊<dW(ąEAD K AAI H%E_8\%E_Tp4h|EFDD a GBH AAB(aEGD t AAJ @̋؆FAA x ABE Z AEH HABT`E@ K K 0yEO L K E ,TIFAA  ABG 0cEAD ] QCE PKC(LdEa J X H D L C0kEAD b JJH PKC(̉EG t AG uC,DpEDG0h AAF t ܊GH]FED D(D0j (A ABBI D(C ABB,8Xy^|,pqPD`E@ K K8d WDH O ABK `P 8BBA A(D0 (A ABBA $܎8dEAD UCAHTDFAA  ABD A DFA A ABE HdBBE B(D0E8DP 8D0A(B BBBH HBBE B(D0H8DP 8D0A(B BBBH 48GFDD f ABI ACBH4PsFBA A(D0G (C ABBA G(D ABB,4cEND@lHNPMHA@ AAE $HEDD uDA 8E[ H K(,ZEx C (DpzEGD E AAI pē((ED { AK uC]S|(ȑ̔\LAA m ABA PFBB A(D0b (A BBBH & (C BBBA H<;E[ H d`E[ e AJ 8BEA D(K0t (A ABBG Ē`}EQ0` AA CBE D(D0O(C BBBFP0w (L BFBE ^ (A BBBI PQ0w@|ؙFAD  ABK a DBI AAB&H]Hؓ̚FBB B(A0A8DV 8A0A(B BBBF H$@BFF J(A0A8D 8D0A(B BBBD Pp FBB B(A0A8G L!i 8A0A(B BBBD $ĔGEAD xCAȷ ķ8зHFAA  ABD Y ABL 4PBDA W CBM NABL<BBE E(D0D8G 8A0A(B BBBF 4ܼؕFAA ^ ABG WCB(42END0 AAE $<H}Ev E J F G I d8xFBG A(G`x (A ABBK (EAJP: AAD Ld[FG } AAA g AAA D CAE DAA40EAD  AAE D AAJ h<Af Q C0MEAD M AAG TQC0MEAD M AAG TQC7Z\ HT D L D ,Hw A H,?dZ`T?dZx|<dW?dZ oEw D J F mRZ0lzEAD P AAD UCA$,oTkAHX H Tah\q|l dBBB B(A0A8D` 8A0A(B BBBH  8C0A(B BBBD 0 TFNC Dph  AABI Th|l\l\bnPW I @lEAD z DAG V DAE K DAH 4HOAD w DAH \ DAG |4BBB B(A0A8DpU 8A0A(B BBBA  8C0A(B BBBA  8C0A(B BBBA IH w A LЛBBB E(A0A8GR 8A0A(B BBBA H (BEA A(G0 (A ABBG I(A ABBHlhBBB E(A0D8DPH 8A0A(B BBBJ LFBB B(A0A8D 8A0A(B BBBK dLBEE B(A0D8D`t 8C0A(B BBBI _ 8D0A(B BBBL p=0=\=@EDD o AAB V AAH D CAH 4(P"HP0hVGA X ABG pP[AYlH5tp Hl BEB B(A0A8G 8A0A(B BBBB `!BBE B(D0A8D@ 8D0A(B BBBJ ` 8C0A(B BBBL Xa4ptAAL y DAL DCAc I P`ȟgBBB E(A0D8GP 8C0A(B BBBG q 8A0A(B BBBE 8,BBD D(G`z (A ABBE h|uH I G ED0S AC uH I G 0ĠvEDI O AAE DDAL\FFA A(DP (A ABBE d (C ABBL @HEAD  DAC G IAG G DAD gH0v B lzH H H ,ġ-H D G I G A q G hrBB B(A0A8J@? 8D0A(B BBBH N 8A0A(B BBBH `d khBE B(A0A8GPPPf 8D0A(B BBBM  8C0A(B BBBH $H Hw A Q G a G $0 Hw A Q G a G 0<ED x AF X AG D AK pValEOMD A(I0 (A ABBA y(A ABBAP0Z (C ABBA D 2FID A(TX_`RXAP1 (A ABBG `TFBB E(A0C8DP 8C0A(B BBBA  8A0A(B BBBG @FIA D(TX_`RXAP (A ABBD  ]En E M K L4@VBA A(G0p (A ABBI P`08)FAA  ABF W DBK L FGB B(A0D8GR 8A0A(B BBBG 0 vEDI O AAE DDALD VBA A(G0p (A ABBI P`0!#X!^HA A(D@ (A ABBB G(E IBBW@0 #vEDI O AAE DDA 8l#ED0 AJ \%H l D 0x%ED x AF X AG D AK @8&EAD  DAC G IAG G DAD 'iH B F  (*L $(c FEB B(A0A8Dh 8D0A(B BBBA 0pD1FDD G0  AABG 81xFED A(D` (A ABBC <43YECD0a AAA X AAF DCA0 T3FJA DP  AABH 8T6wFBA A(GP (A ABBE D9H0i G (:GH k M FH̩X:FBB B(A0A8Dp 8A0A(B BBBA 8 =FBA N(D@ (A ABBI T>_E~ E Vt>W?? <? FIE D(D0O (A BBBF 4\@EFDD a GBH AAB0t@D@ X@IEe F K E |@0EV E K,@BFH  ABA 0̫8AEFD v DAF FDALAFOB B(A0A8D 8D0A(B BBBC PDdD(xC`BDA NDBd0DnBBB J(A0A8D@{ 8A0A(B BBBA  8C0A(B BBBA ( 8FEDG0e AAI 8FHLFFBB B(A0A8D`P 8A0A(B BBBD ,lHAD x AB D CI ȭ,Iܭ(I$I( IRh F Q G YG(0I Rs K Y G QG4\JEID  DAF l DAG p0LSAD D0  AABG [  AABA \  AABH L  AABH D AABH ME[@ AE ,OE[0 AE PO8(dOEDG0j AAD ,dPBDG  ABK 4Q@ԯ0QFBB A(F0Dp} 0A(A BBBF R1\,RFBA A(G0 (A ABBH ] (C ABBC g (A ABBC LhTBEA A(D0g (C ABBD O (C ABBA LܰTFED A(G0_ (A ABBD _ (A ABBK <,V|EDD r DAD N DAE VDA<lHV|EDD r DAD N DAE VDA<V|EDD r DAD N DAE VDA<V|EDD r DAD N DAE VDA<,WiEDD0p AAA X AAF DCAl8WqHW|BBB E(D0D8G` 8A0A(B BBBB (̲ZADG0{ AAG @<[LAD Q ABK y GBN IAB0<[FDA G0x  AABB p\,\,\,x\FBE B(A0A8D@ 8A0A(B BBBB d 8D0A(B BBBO D 8A0A(B BBBJ \(]B[FE B(A0A8Gp8D0A(B BBBHPp\aL[EF E(A0A8G`X8D0A(B BBBGP`HdFKB B(A0A8Dpx 8D0A(B BBBH $4hGEAD xCA\hph h/HX H F<hjBB D(A0 (A BBBE @jGHs E F8pjYFBA A(Dp (A ABBG 0@kiAD0EAAKH0(tlEAD0q AAC l,EW L C@lFBE A(A0G@H 0A(A BBBJ 4`myFAA ~ ABG c ABA 0<mFAA D0  AABJ pnXoWIA A(D0(A ABBBH0K(D ABBoHToHKo8$PpFBA A(DPB (A ABBJ L`pFBB B(D0A8D 8A0A(B BBBJ $DscL A r N `LظsFLB B(A0A8Q 8A0A(B BBBD H(vFBB B(A0A8DPk 8C0A(B BBBG |tpxFBB B(A0A8DPd 8A0A(B BBBH  8D0A(D BBBJ h 8F0A(B BBBI p{(l{AJN0A AAD 40|H,|1HhD`T|FAA  ABH A ABL W ABF } }Ad\4Ժ}EAD ] AAG U AAI 4 ~EAD ] AAG H AAF \D0kFBA A(D@s (A ABBI s (A ABBG U (C ABBC H@FBB B(A0A8DP 8A0A(B BBBB E[0d AA (UH G A D`1EW L H4daEGD0b AAD X AAF 0=EDJ N JAE DFA(мăEDJ@X AAC ((EW E F48XEGD0b AAD V AAA T`DH ^ J S4tEDD ] AAD n AAH xFBB B(G0A8DPx 8D0A(B BBBC N 8G0A(B BBBJ D 8D0A(B BBBG (\<hPtd x|IHK2ER I M,ľBAD D ABB @R B D W A ë/HX H F8܈/HX H FX;Eb I Jx BH  F $@]Ap G \ D Dx?Hi G 8ؿBDG D ABD N ABG 8BBA A(G@p (A ABBE PĐyE_ L tp$CBEB E(A0A8G` 8A0A(B BBBH ` 8A0A(B BBBF D8A0A(B BBBtBBE B(D0A8GEDAjM 8A0A(B BBBC 8A0A(B BBB`dQF{|\l\!D\"$qT\^|aHԔBDA D(G0L (C ABBJ N(F ABBH<XBAD P(K0G8F@I K ABJ w(D0H8C@I  %(%D%`%L|KEA D(G0J (D ABBA R(D ABBE(̖%<%P%d %x<%X%t%.l$FBB A(A0G 0A(A BBBC ADDvBAA\88lWBFD D(L@ (A ABBH 4tBAK  ABD vAB88OBED D(D (A ABBF HLEAD E DAD H AAN \ DAG WDAh4EBEE B(A0D8GDDBDG`C 8A0A(B BBBG LBIB A(H0e (A BBBF t (A BBBE H %BEB B(D0D8G` 8A0A(B BBBH \P?BBE B(D0D8Gp 8D0A(B BBBI d8J0D(B BBB8FAA N ABG  DBK HHfFBB B(A0A8G` 8A0A(B BBBC 8lUED  AE  AL ` AG [ AL [ AL k AL [ AL [ AL \ AK X IO \ AK O AH (DEADP AAE h(H  E r F i E [ E [ E [ E l E g E a E [ E [ E W E c E ] E TXFBE D(D0D@ 0A(A BBBE p 0A(A BBBH PBBE K(A0 (A BBBH w (A BBBB hFBB B(A0A8G` 8A0A(B BBBA HBAAGN8p5FAA  ABE f ABG @ED B AD ` CE T HL X AG ZCT_H Q A H FBE B(D0A8D@D 8D0A(B BBBG PXE_ L H,\EB I R F H H O I h7FBA A(G0 (D ABBK X (F ABBE Z (D ABBE P (D ABBG D (D ABBK | (H ABBO ,$FDD  ABF 0TFAA D@  AABK <EAD W DAJ N DAE FDAPNAD ^ DAJ K DAH N DAE rDAIHVFBB B(A0A8DP 8D0A(B BBBC h4Hk<bEAD Q AAC Q DAJ [EA@EAD d AAH \ GAD c CAI 4tYAJ0c AAG X AAF $<KEd G J F Jd,EW L C$KEd G J F J((EW E FP8pFAA D0V  AABJ S  AABI   FABH @ T{ZAD J0f  AABE W  AABA 0d=EDJ N JAE DFAS <yEKD0o AAK X AAF DCA$/HfH< FBB B(A0A8DP 8D0A(B BBBI d HxFBB B(A0A8D@ 8D0A(B BBBD  (Ew D m A \ A \ @ch E XHX((zEAD } CAE 4TxECD w CAI \ CAA HHTP#4l@EAD b DAG ~ DAE t` H H K>Et80FAD T ABF A FBG lXEG0 AH $REPD vAA$HSEAD FAAE} $84HkP dx4(\BGD J;  AABA PLh$0(<#<X#HPtFBB B(A0A8G 8A0A(B BBBA <ujQEHh H Q I d A l(OBD A(G0a (D ABBI D (G ABBH f(G ABBFP0`t#t#$AEDD nDA$AEDD nDA #$ #@ (L @<H FME F(A0Pk 0A(A BBBA ` NFSH B(A0A8GGuF 8A0A(B BBBA  @ ER DX8, zFBA A(D0F (A ABBF hYyN4dEDG L AAB d CAH DEj A S DEj A S<DEj A S(luEAD w AAE (DPEDG l AAB (pPEDG l AAB (PEDG l AAB H,\FBE E(A0A8D@ 8D0A(B BBBD @(L1\<x FBD F(D0 (A ABBG j (A ABBH D (C ABBD (d4WBBB G(D0D8G` 8A0A(B BBBH v 8A0A(B BBBH 4,EKJ@MHZPRHA@ AAA 8PjBBD F(D0 (D ABBF ("DKEo D 8x FBA I(D0b (D ABBG \  XUEK (EC H K E \LFBB A(A0 (C BBBF z (C BBBE R(C BBB8FAA  CBL P CBC lC4BDD  DBA jAEL4=FBA D(D0 (O ABBL  (D ABBK LFFBA D(D0\ (D ABBJ c (D ABBD EQ0p AA H\ EDG0j DAI ~ AAH _ CAE XAA(D wHm K W I F J FpD!5^N<l!aAGD0c AAG X AAF DCAp!BBF A(G@ (A ABBH H (A ABBB u (C ABBC j (C ABBF <<"aEGD0b AAD X AAF DCA@|".FCA G0  AABG ^  AABF L#}bBD D(G@l (A ABBK I (C ABBG 8$FBA A(J` (A ABBC L'PEf E [l' 8'oFEI D(D0u (A BBBH ''1 (*$<(R~ H a G cA0 )FAA I`  AABG TP*hL*|H*0EV E KLX*FHI B(A0A8Dp 8D0A(B BBBD <,ADG0s AAG D CAH `FA`,8-FBA D(D@ (A ABBA  (A ABBK  (A ABBD 0/ADG F DAI \FA\/FEA A(D0x (D ABBF N (D ABBA | (D DBBH $0EG s AH PH,1BDD G0I  AABB R  AABJ W  AABA <1kAFG s CAK K CAA FCA(1WJt AZ hl2\0 $3BAD J  AABG LT5!BBB B(A0D8G 8A0A(B BBBI @7BAD G0v  AABH F  AABF |8,HY G H8FIB B(A0A8G 8A0A(B BBBB P:HT`h :KED A(D@ (A ABBL n (A ABBA E@@;BAD G0N  AABH F  AABA H;BEB B(A0D8D 8A0A(B BBBF 0\x>AFD e DAK VDA>7LK I V4?OBDH d ABK AGBL?FBB B(A0D8D 8A0A(B BBBJ (8|AEDG C AAK <dAdEDD k DAC N DAE FDAL BFBD D(D0K (G ABBE ` (A ABBJ BB($BLAGG wDA`DBBEB B(A0A8D@ 8D0A(B BBBG 8D0A(B BBB(DEDG _ DAD LEFBD D(D0K (G ABBE ` (A ABBJ d$FxBBB B(D0A8GP 8D0A(B BBBG  8G0A(B BBBO L(HFBD D(D0K (G ABBE ` (A ABBJ \H}FED A(D@ (A ABBK y (A ABBA d(C ABB0<I9FDA G0Z  AABH 0pJEDG Y AAE nCA@@KFAD G0a  AABI   AABF XKFBD G(D0F (D ABBJ K (D DBBI Q(D ABBHD0LFBD A(G0p (D ABBC U(C DBB8LFED A(G@ (A ABBF HMFBD A(G@l (G ABBL N(A ABB\NTFDD p GBI L GBK  AFJ [ ABB d ABI 8xOdMDD h CBF LABA,POtFAD @ ABB \OFBA A(G0g (D ABBG H (D ABBG N (D ABBA (DPLEDD m DAA 4p$PFDD O ABH iABP'HR F F<PMAD PABKP RAB\PqFBA A(G0b (C ABBE  (D ABBI D (C DBBA \hR-FBB D(A0 (A BBBE Q (D BBBE A(A BBB8RdMDD h CBF LABA, StFAD @ ABB d4pS=WBB B(A0A8Gp 8D0A(B BBBH XpHWDW/`WlWxW[Ej A j WBE` E W4,WqFAK h ABK bDB0d0XWEDG ] GAE UFA0\XvEDG | GAE UFALXFED D(G0 (A ABBE \ (A ABBF xYEE` K T4<YWEDG ] GAE UFAtYYYED G H Z"(Z4ZUHh H \tZAd\PZeqBB D(D0L@0A(A BBBAp@\[p[! [EG I AJ ,|\EQ0w8Z@R8A0p AE @,]FAD ~ ABD N ABG lAEH]JFEB E(D0D8G@ 8A0A(B BBBJ dh^FEE E(D0D8DP 8A0A(B BBBE H 8C0A(B BBBD |D`FEB E(D0A8D` 8A0A(B BBBK } 8A0A(B BBBI P 8F0A(B BBBA (PeEGD@~ AAH `|xfFLB B(A0A8DP 8A0A(B BBBC } 8A0A(B BBBI LgSFEB B(A0A8L 8A0A(B BBBE (0jdFHD GDB(\HjFKA lABHjFIB B(J0H8D` 8A0A(B BBBH `m \m HXmDFBE E(A0A8D@  8C0A(B BBBD H\p 0\Xp\EFD g DAE VDApWH} K p HpUFED D(D0g (A ABBD D(C ABB p pXy^<(q`E@ K K4\hq?FDD c ABD ACBHpqpFBA A(D0D (C ABBA G(D ABBq4qbEND@lHNPMHA@ AAK L,rFBB A(A0[ (A BBBB O (A FFBA |(sZEx C (lsED { AK uCtk`EB B(D0A8DPM8C0A(B BBBEPPn 8A0A(B BBBH { 8A0A(B BBBK 0XtcEAD ] QCE PKC(uAd\H`uFBB B(A0A8DV 8A0A(B BBBF Xx?FBA D(D0 (A ABBG D (D ABBK D(A ABBHLxFHE I(H0A8G 8A0A(B BBBA 4\yED f AH  AE T AK ,zBDF \ ABE {(HV0{FGD D@  AABG 0L|FAA JPX  AABB H}EAG n AAA  AAH T AAE DCA4X~EAD  AAC D AAJ ~7Z\eHa G \ D <XHz F HXFBI A(A0G (A BBBG (A BBB EG` AA <<dWLdFBB A(A05 (A BBBH ^ (D BEBE D0$FBE B(H0H8K@H8D0A(B BBBx\DtK4|BBA A(D0k(A ABB ЃAr E a G |,@T hl| /H[ E FEb I 8psGAD  AEO ACBJ e4"A`HP$ FEA D(H0 (D ABBF e(A ABBHFBE H(A0` (G BBBE o(C BBB`|xFIB B(D0D8D` 8A0A(B BBBA Y 8G0A(B BBBJ `LlFEE B(A0A8DPP 8G0A(B BBBH  8D0A(B BBBG 4wAGD a DAF p DAA (ENQ@T AAF ( pELS@V AAD (@ ELS@T AAF (l HELS@T AAF ( ELS@U AAE  'H ,FEB E(K0A8D@v 8D0A(B BBBK @$ AGD0} AAE X AAF D ICH 8h  FBA A(IP (A ABBK VAb E O I   H 2BBB E(A0A8J 8A0A(B BBBH ( HgI@ $BBB E(A0K8GP 8A0A(B BBBF f 8F0A(B BBBK Y 8C0A(B BBBK W 8A0A(B BBBG 4 0ZFDC q ABG NAB8 X*FKA  ABH E AEE 8H LFBD D(J (A ABBG EQ0x AA 4 UFDD s GBF AAB ē&A` ؓ "$ Y|\< HeD~ F \4\ ?FDD \ DBH ACB0 AEIG ] AAD DCA4 OFDD o ABH ACBHԔMBED D(O0Q (G DBBB D(C ABBLؔ `Ԕ tД ̔ȔĔ 4?FDD \ DBH ACBȔ0Ĕ9EIG M GAF DCA4DДYFDD p ABG KCB4|TFDD o CBF DAB0 SEIG Y DAM NCA4LdFAA o ABF K CBH 0 SEIG [ DAK NCA0TSEIG [ DAK NCA4ܕcEIG0W AAB N CAF _|b\TDV F a G (EKJ  AAE L$HFIA D(J0 (D ABBA [ (D ABBD tEf M \ D 4|FFA k ABE AEHdAFGA A(D0u (D ABBG (D DBB(hEAD j DAG (HELS@l AAF (tpELSPl AAF 4_Hi G 8xBJD J ABC X AEB HBBE E(D0A8DPE 8D0A(B BBBG 8DpFAA h ABE M ABH 4V({MHK DAAJLԟsFBA A(G0m (F ABBG J (C ABBF DMBE A(D0p (A BBBH H XlEG0w AD L|hBBA D(D0Z (D ABBH N (D ABBA KKh E R8BDD | ABG W CBD (̤$<KKh E R@\FDD O0z  AABE ^  AABF 4tgFDD J ABE ACB(ENQPg AAC P}E` K L4$EDG0X AAF V AAH <\XAMD Q AAK N CAF DDAHBIB B(A0A8G`i 8D0A(B BBBB ||%FGB B(A0K8D`c 8A0A(B BBBB ~ 8A0A(B BBBH b 8A0A(B BBBD h,0HQ G O$,FBB A(A0 (C BBBI { (D BBBK Q (F BBBK N(C BBBl>X9FBA A(G0{ (C ABBL l (A DBBK l (F ABBI P(C ABBl,?(9FBA A(G0{ (C ABBL l (A DBBK l (F ABBI P(C ABBl?9FBA A(G0{ (C ABBL l (A DBBK l (F ABBI P(C ABBl @ȝ9FBA A(G0{ (C ABBL l (A DBBK l (F ABBI P(C ABB||@FBA A(G0 (C ABBL y (A DBBN l (F ABBI Z (A ABBE W(C ABB`@FBB B(A0A8GPr 8A0A(B BBBO D8C0A(B BBB``AoFBB B(A0A8G@ 8A0A(B BBBH 8C0A(B BBB`A oFBB B(A0A8G@ 8A0A(B BBBH 8C0A(B BBB$(B,LEZ I X H CPBT4E^ M C$pBtTEZ I [ M CB4E^ M C$ḄTEZ I [ M C(BED  AG d CI 4 CȤEAD E DAD _ DAD TDC EAD J AAJ \ AAJ S CAA Z CAB HAAC+IJ E RLC FEB B(A0A8D 8D0A(B BBBH $ DxEQ J C E _4DcHc E Z A TD0FBA A(J0 (D ABBM Y (D ABBF D (C ABBL ^ (D ABBI t (A ABBF <DEAD ] QCE a NCN DCAEUEO08ELpLDA t ABH X(lEHs E J F J F J F E8EȸFAA  ABB | AEF E<RWGHC` FnBBB B(A0A8IP 8D0A(B BBBB L 8A0A(B BBBJ (pFEAQ0 AAF FEX0d AF FEX0d AF HF0PFIB K(H0A8Dp7 8A0A(B BBBF 0G4EX0~ AD $TGIE[ H M K D|G dG6FBB B(A0A8D@f 8D0A(B BBBK t 8A0A(B BBBJ G7HZ N F`HMFED A(D0Q (A ABBE  (A ABBG  (A ABBD H|HABEE B(A0A8Fp 8D0A(B BBBB HBHB B(A0D8J 8D0A(B BBBK > 8D0A(B BBBE fKWAXETBETAB_ALtI` LBB E(A0A8D 8D0A(B BBBH HILBB E(A0D8D 8D0A(B BBBF J84\W(J80 G r A $h<')EDG IJALhD'BEG D(G@M (A ABBD V (A ABBA i' Hi'9 FEB L(K0A8J 8A0A(B BBBC `i3K A h|i(4FBB B(A0D8GGIFFFN 8A0A(B BBBH i9 hi9 FBB B(A0A8GDFIFF` 8A0A(B BBBF hjD h|jDQFBB B(G0D8G 8A0A(B BBBG FQFFFFSjS.FBB B(A0A8Gf 8A0A(B BBBK PMBFFFb MBFFFO hpktXFBB B(K0I8G 8A0A(B BBBH KFFFFIhk[FBB B(A0A8Ga 8A0A(B BBBH iiBFFFIDHl]FEE D(I0G 0A(A BBBH 8l4`|FBA A(D (A ABBB XlxaZFHB B(A0A8GpxRWxApM 8A0A(B BBBK 4(m|dFIK { NBK ANB`mdELP|mdFAD D0t  AABI   AABF ~  CABD mdg FEE E(A0A8GS 8A0A(B BBBE x`BIFFXaDIFFX(XnpENDpu AAB lnqBBB B(A0A8GnDdAw 8A0A(B BBBG eYdB0nyFDD GPn  AABI (o,zLED o AG w DE l AK DC8| ?ED o AG w DE l AK DC8}?ED o AG w DE l AK DC8<}@ED o AG w DE l AK DCx}lAD h L F}AGdT E I}AD h L F}\BD h L F}BD h L FL~CEAD@A AAK g DAL  AAF DCA8h~DED o AG w DE l AK DC8~PEED o AG w DE l AK DC8~FED o AG w DE l AK DC8FED o AG w DE l AK DC8XGED o AG w DE l AK DCL`HEAD@A AAK g DAL  AAF DCA$IcOG `AIA 8 JEG \ AG w AH P AE DFH|J!$\J)EAG YAA(JAEADP AAF 8LFBA A(DP  (A ABBG NkEK H RL NnFBB B(A0A8DpG 8A0A(B BBBE \QLp$Q+BBA A(D0 (D ABBJ Z (G ABBJ 0RADD N GAI \CAP`RBNI D0W  AABH X  AABD V  AABF (HS_AW _ AH V AA 0t0TYAKD0g AAG VAAL\T BBB B(A0A8J 8A0A(B BBBD \`KENKxqFFFFUpxBcxApX AAD xAoxApTXbBBL J(A0A8G@8HKP^HA@u 8D0A(B BBBI 4g[Ao H J F 8ԃpg,FNH DHhPRHA@  AABB 0dhFDD G  AABC @D@ibFDG D0e  AABB V  AABA li,hi[EIB IAY E J F H̄iKFEE H(D0A8G@t 8D0A(B BBBK \j'FEE E(D0A8GK_AY 8A0A(B BBBI 8xll9FMA  ABH f ABG pn9Eb I Ѕnn-n$ nIA` G `,o^Dp^H\p)FBE B(D0K8DpN 8A0A(B BBBF l|rBEH B(D0A8GP^ 8A0A(B BBBK D 8C0A(B BBBH QXV`[XAPX sBHD D(D@\ (A ABBH T (C ABBD V(A ABBHtpsBBB A(A0Z (D BBBD R(D BBB(sNADD s AAA @sEKD0l AAF X AAF ` CHM (0DtBAA R ABG P\,FAA  ABD h ABE d DBF N ABG ,PBMC  ABJ HrFBB B(A0A8DP} 8D0A(B BBBD D,FAA k ABJ s ABJ ? ABF 8t FAA  ABA   ABE 8FAA  ABF O ABF DX FAA  ABB m ABH P ABE ,4 BMC  ABJ d8xEFAA w ABF  ABG 8GFAA  ABF O ABF @DBKD ] ABG c ABA c ABK @4BBKD ] ABG c ABA c ABK 4x̷qAAD f AAB _ FAJ Dd_ȋL&E``&E`tJEe F Y &E`H<FBB B(A0A8D@] 8A0A(B BBBG H,FBB B(A0A8D@d 8A0A(B BBBH (Ԍ6FGH ]AB(6FGH ]AB8,jFBA A(D0{ (A ABBA <hFBB A(A0L (A BBBA HlFBB B(A0A8D@R 8A0A(B BBBB <кrFBB A(A0@ (A BBBE <4rFBB A(A0@ (A BBBE 4tPIFHI C(F0b(A ABB4hIFHI C(F0b(A ABBDcFEE J(D0D8G@o8A0A(B BBB8,jFBA A(D0{ (A ABBA (hܻ6FGH ]AB8MFEH I(C0f(A BBB(Џ6FGH ]AB(6FGH ]AB((,ZFAA q ABD $T`3EFK ZAA$|x3EFK ZAA$3EFK ZAAH̐sFBA A(D0x (A ABBD Z(C ABB<ܼFBB A(A0L (A BBBA 8X\FBA A(D0 (A ABBE 8FBA A(D0B (A ABBJ <Б$FBB A(A0O (A BBBF 4IFHI C(F0b(A ABB(H̾6FGH ]AB8tjFBA A(D0{ (A ABBA 8jFBA A(D0{ (A ABBA <HFBB A(A0F (A BBBG 8,jFBA A(D0{ (A ABBA (hܿ6FGH ]AB(ZFAA q ABD <$rFBB A(A0@ (A BBBE HdFBB B(A0A8D@S 8A0A(B BBBA (LZFAA q ABD (xZFAA q ABD (ZFAA q ABD (ДDZFAA q ABD $x3EFK ZAAL$FBB A(A0N (A BBBG W (C BBBH LtFBB A(A0N (A BBBG W (C BBBH HĕFBA A(D0 (A ABBE Z (C ABBF HFBA A(D0 (A ABBE Z (C ABBF H\8sFBA A(D0x (A ABBD Z(C ABBHlsFBA A(D0x (A ABBD Z(C ABB(:FGI `AB &E`<JEe F Y(\zFAA q ABD 8LMFEH I(C0f(A BBBDė`^FEE J(D0D8G@j8A0A(B BBB( xREAD h AAD (8zEAD m AAG 8dBLD D(DP (A ABBG \T+BBB B(K0D8Gy 8A0A(B BBBG H_A8jKDK V ABM WFBA@<_BLE A(D0DP 0A(A BBBC \BEB B(A0A8G 8A0A(B BBBC XGdAH$BBB L(D0D8Dp 8A0A(B BBBG H,5BBB E(A0A8Dp 8A0A(B BBBG (xREAD h AAD @_BLE A(D0DP 0A(A BBBC (READ h AAD  /BBB B(K0D8Je 8A0A(B BBBH HmBZDiBGfE{ EEAp8d/jKDK V ABM WFBA(/ EAD  DA4<<~EDD Q DAE  DAD LP=FBB B(D0D8Gw 8A0A(B BBBD B/EW L F0ĜBEAJ Y DAB IFA0,CEAJ Y DAB IFA0,C~BAA Jm  AABA @`DBAA e CBB W CBD AFBx0EAd K s E T L G I n J J F O I @ H f J  A  S Y G Y G Y A z A $ JNADF @AA$HJIADF {AAHpJBED D(F0X (A ABBE D(F ABB8KdDE G P$ܞK*A E l L iLBBE B(H0C8D@ 8A0A(B BBBK  8C0A(B BBBB  8F0A(B BBBE Z 8C0A(B BBBJ RRDs I N@R:AAG q AAD X FAI y CAK XSBED D(G0 (C ABBD T (C ABBD _(C ABB0\TBAD G0  AABE HVBED K(I0_ (F ABBG D(C ABB@ܠXVBBE D(A0G 0A(A BBBG H XDBBB B(D0D8GP 8A0A(B BBBC l[^BEE B(A0A8Gp 8K0D(B BBBL R 8D0A(B BBBA k 8I0A(B BBBK  8G0A(B BBBK  8I0A(B BBBE D 8G0A(B BBBE p8aBIB B(A0D8J 8A0A(B BBBE R MFALCUB|wyBBB B(A0D8D@s 8G0A(B BBBL ^ 8D0A(B BBBE L 8C0A(B BBBH H,xBEE E(A0A8Dph 8D0A(B BBBD HxyBBA D(G0` (A ABBJ `(C ABBlģ@zBEB B(A0A8G 8A0A(B BBBE CUBvC`AD4BBB E(A0D8GP8D0A(B BBBH|BEE B(A0D8G`: 8A0A(B BBBB lȤ|BEA D(G0E (A ABBJ D (C ABBD D (A ABBN D(A ABB8BBB B(A0D8GI^AD 8A0A(B BBBF v 8A0A(B BBBH  8A0A(B BBBH  8C0A(B BBBI t 8C0A(B BBBH 8BBE D(G0k(A BBB84aGHK `AA\ DCAlpDBBB E(A0D8G@uHQPIHA@D 8A0A(B BBBK D 8C0A(B BBBH TwBBE B(A0A8D 8I0A(B BBBJ & 8A0A(B BBBH D 8I0A(B BBBJ  8D0A(B BBBK zLSBQFA 8A0A(B BBBI P 8A0A(B BBBN a 8A0A(B BBBE F 8D0A(B BBBE P 8A0A(B BBBE P 8A0A(B BBBE e 8A0A(B BBBE h 8A0A(B BBBE v 8A0A(B BBBO  8A0A(B BBBN MIZBa 8A0A(B BBBK S 8A0A(B BBBK  8A0A(B BBBE  8D0A(B BBBE  8A0A(B BBBE r 8A0A(B BBBE H8 BBE B(G0A8DP 8D0A(B BBBG pBBB B(D0D8G@HAPDXB`I@D 8A0A(B BBBC L 8C0A(B BBBH VHPPDXB`I@D8A0A(B BBB(Ho I M K \ D MLHFEB B(A0A8Gv 8A0A(B BBBH X}FED G(D@h (A ABBH X (A ABBB D(C ABB4EFDD a GBH AAB4,أEFDD a GBH AAB4dEFDD a GBH AAB(EDGP AAA ȫ̤ܫؤHFBB E(A0A8D@ 8D0A(B BBBB <xYEn M XYEn M tYEn M lD FEE A(A0D@| 0A(A BBBF \ 0A(A BBBD _ 0A(A BBBA 0{EDD R FHE DCAH40FBA A(D0x (D ABBA ^(D ABBLFEA A(D@o (A ABBJ D (C ABBD HЭTFHE B(A0A8G@ 8D0A(B BBBF ȩHRH4Щ$FOI B(A0A8Dp 8A0A(B BBBI @aFSG D(DX_`RXAP (A ABBA (ĮLENK@ AAK  \"FBB E(A0A8GTMRA 8A0A(B BBBD dгH8v@T8C0k A (<E~ E  E E K ȯܯ\ĵFEA A(D0 (A ABBA V (C ABBB V (A ABBD \PFEA A(D0 (A ABBD V (C ABBB V (A ABBD DH@ G H̰HbBIE B(D0A8Gp 8A0A(B BBBH l,x@.ET G M`HLxyH0f B yH0f B HdFIB E(A0A8Dp 8A0A(B BBBA 8 4/HU K F0DH0 F LH8s@R8A0| F pHRkH0] A 0lH0^ A dH V A ܲWH I A    $ HHMPFXF`U@z A `HFBB B(A0A8DP  8D0A(B BBBE XL`BhJpExBNPH0g A ȳH8j@R8A0z A H0k E |H0y G @$ BBE A(D0Dm 0A(A BBBI <hFNH DhgpRhA`O  AABC 4<ENKhgpRhA`( AAF @ENKxLFFFFPp AAG ,$rFHA _AB8THBBA D(G@A (A ABBI `BBE E(A0A8G@ 8C0A(B BBBE  8F0A(B BBBI 9A] B E K KAp G RH8BEE E(D0D8G`m 8A0A(B BBBI HBBE E(A0D8Dp 8A0A(B BBBG 0жBDD G@  AABG 07ADJ N LAF DAA8^(L?ADD Q DAA px,BBH B(A0D8DP| 8A0A(B BBBC O 8A0A(B BBBG CXO`cXAPLAEID S 8$AFN   AAE Z HAE `t   AHM K  E Ը:Ep>Ed G  BHnL$@BBB B(A0A8D: 8A0A(B BBBF tmEJ A UUEu F P  FEe F A G @عLEMD m AAK  DAH T AAJ (FE\ G L D 4@T~FAA U ABH | ABI \xqFED A(D0 (C ABBG  (C ABBA \(H ABB`غRFBB B(A0A8D@ 8A0A(B BBBF V 8C0A(B BBBF < P(dEPD0H AAE 8TFJK A(D0O (A ABBK 4̻FKI l ABG ^AB40FKI  ABC ^AB<AEwX NEO D q xNEB A(A0d8O@X8A0d (D BBBG c (A EBBK 0̈XED _ AG X AG DC\LbFIA A(D0 (A ABBE H (C ABBH _ (H ABBL  4EDD0E AAD X AAF \GEj A VLPBE A(C0(A BBBGC0h,OH@A A L`KFBE B(A0D8GPU 8D0A(B BBBC L`OHA A(G0T (A ABBF T(A ABBF@$RADG U EAI  AAD LHAh܎1<|ACG ` CAI y AAE \FAxhkBBB B(F0G8D@ 8A0A(B BBBE g 8F0A(B BBBJ O 8A0A(B BBBA 88\BDA L GGO T ABI (t*BDD XAB@Đ3BBB A(A0GC 0A(A BBBF @ BBB D(A0GK 0A(A BBBK (1Gi@7Di A \ؤhkYJI|(7A^ A VHTAs A xBEB B(A0A8G 8A0A(B BBBE 2BEDBDDDBJ 4rAa F f B (XEc H HX3TODpԓ<FAD  ABL ] ABH A ABD ̔ LȔFBA D(I0 (A ABBG O (A ABBC `aFBB B(D0D8FP 8A0A(B BBBH d 8F0A(B BBBM K A dK A LFNB B(A0A8G 8A0A(B BBBF K A 8K A 4TPEFDD a GBH AAB hYEr I E K ., ܧAG0} AA HH'BBB B(A0C8Dpj 8A0A(B BBBD HH,cBBB B(A0D8F` 8A0A(B BBBK PPBBB B(A0A8G I! 8A0A(B BBBF <ܳEDD  AAG D DAG DAAL( lNFGB A(K0 (D BBBC X (D BBBF 8x lFED D(DP (A ABBF  @H LFBB B(A0A8Dp 8A0A(B BBBK !@(!FBE D(F0 (A BBBA l!h;H!6FBE E(D0A8D@ 8D0A(B BBBG H!KDD ZDBEH F ABG KAI0"qEDG | CAH TAA@L"8BEDG  AAB P AAF T AAB H"D-FBB E(D0A8G` 8A0A(B BBBD L"(FHB B(A0A8D 8A0A(B BBBC ,#R@#sT#`5D0 K lp#RHB B(A0G8d 0A(B BBBE K0A(B BBBDH8(#ACD D AAB 4 $YBAD  ABB uABD$<As D $`$TADI CAA8$ BGA D(G0M (D ABBE $vD0T H 8$4BJD C(G0\ (A ABBD `%BEB B(A0D8D@" 8A0A(B BBBH p8A0A(B BBBL%4BGA A(F@| (D ABBJ C (D DBBA T%t/BEI A(D0D@ 0A(A BBBF n0A(A BBB(&LWR0 A D&SH0E A H`&FBB B(A0A8G 8A0A(B BBBE &(HP&dFBB B(A0A8L 8A0A(B BBBF @'KLE  AIH ^ ALE D4X'\PADD0b AAC V AAA H'tBBB B(A0A8D` 8C0A(B BBBH 8' BJD D(G@= (A ABBB @(|%AAG R AAC { CAA v CAA \(h9A] B E K (6P(BEE A(A0G@ 0A(A BBBJ HNPDXD`T@(\MBEE E(A0D8GPXU`PhKpIP 8A0A(B BBBB  8A0A(B BBBE Z 8F0A(B BBBG tx)BBB B(A0A8GGAE\dKIDI 8A0A(B BBBK H)TFBB B(D0D8DO 8A0A(B BBBG t<*!HFBB B(D0A8JR 8A0A(B BBBI fDBB`c]BEN0*&FDD D`s  AABG *l'm FBE B(A0A8JOIHVzBDH[KGBSMKGBS 8A0A(B BBBG BDH[4+ 2BEA N  AABE (+3EAGI U CAF @,3XBDC F0  AABD x  AABD L,4HHX H [Hl,(5FBB B(A0D8G` 8A0A(B BBBE H,7%FBB B(A0D8D`K 8A0A(B BBBF (-9QEFD k CAA 40-:`EDD0h AAI V AAA h-<:|-8:-D:>Ej A (-h:EID@ AAD - ;<Ej A -0;EG n AE L.;FBB B(A0A8G I  8A0A(B BBBA Dh.|<FBB A(A0G I  0A(A BBBI 4.D=FAA G I   AABE (.=QEAF j CAA D/>$FBE D(A0R[ 0A(A BBBI \/@0p/@FDD Dp  AABA /A7H ] K /A'H/AhKm H /4B9JP F PH0PBFBE B(D0A8Gp 8A0A(B BBBE `0C0HM K K0C0CTH x H 04D 00D 0,DHN04D 10D1,D 0,1(DFAA D`f  AABJ (`1D"EAG AAB 1E[AI F J81EBEA D(D0P (A ABBJ 41F\ADG I GAK X GAH 2FANf AJ TD2GBBB B(A0A8H Q Gl 8A0A(B BBBH 2WEy J A28X-\P2PX5dP2xX5dP3X5dPL3XBBE K(A0 (A BBBD m (A BBBD <l3[AHD W AAJ W AAG gAAl3[FBB B(H0C8J 8A0A(B BBBC 3 GSEIRB4k44kH4k\4(k>p4Tkeaq F LH4kFDB D(A0y (D BBBD U(A EBB4lKOH4 lFKI E(A0A8D@p 8D0A(B BBBF H@5lFDA H(H0G (D ABBE V(D DBBT5lHFDB A(A0D}CjAL 0A(A BBBG 5m$5m$ 6n( 6$nUO ^ AE PH LL6n BBB B(A0A8Gi 8A0A(B BBBD p6zZNN H(A0D8A@P8A0 (A BBBA F (D BFBB A(C BBB(7{wAGM@W DAA <7{?Hk E F\7|p7|CRjD(7H|RDG YCAF87|RDG fCAIH wAA7}H h H 8}GOl E F08}vE J P8T?\bh8|H\kd8@dOG(U0P(A QAAEH R AAL [ AAK e AAB 8iH~ J L D 9܀ $9؀fEEG RAAD9 ;<X9LTED J EAC DAAJ 9#E]090jEAD | AAH UCA9lVla C A:G:0:HTH:HU(`:EAG@ AAF :xH:tBBB E(A0D8Dp 8A0A(B BBBH 0:H1FAJ KP   AABG ;TET@ AG D;"X;%EWt;KEl O ;DCEg L L;xsBEB A(A0 (A BBBB L (A BBBE 8;MDD  ABA P ABE (8<BAD f ABH 4d<FAH e ABI LAB(<،$EAG  CAF L<܍FDD  DBM U ABH A CBJ HAB=,QEv M 44=pUFDD s GBF AAB4l=eEAG d AAE O AAG =ЎdAr E 4=$EAD e DAD Z DAI =  >gEz A (>GEb I V H>,EN b AJ l>:HR F Y>=Ea J L0>8oEAD j NCK ZCA8>tFBA N(FPi (A ABBD H?FED A(G0o (M ABBE g(F ABB4h?LZENMH_PRHA@ AAF ?tzEm F A(?Ԕ|EHD eDA(?(EFDA vABL@LBEA A(J0 (C ABBF O (C ABBA 0h@AKD y DAB VDA0@hFFKA G  AABJ (@EKG AAB @@BCA { ABD _ AEC RAB@AHU XAEP0 AG 0|A(AID q DAD VDAA^H P A AAD  AD 4A?FDA Z ABH KAB (BES AF LBXH d D 0hBFKA G  AABH \BKcDDDDDDDDDDDDDDDIZ C B؞H b F (ClEKF`U AAC ,DCП3EKI AAA tCLC FBA A(D0 (D ABBC _ (F ABBF HC ZBB B(A0A8D@T 8A0A(B BBBD $Dp d8DlCEQvGGGGGGGGGGGGGGGI~ AA DTEN0y AA DЭ4Ej A CDD9H[ E O8E 9FTF  ABJ E ABH TEL\T H StE@wHjEHS0EyFAA D0o  AABA 8EFBD D(D@ (A ABBH 8FPFBD D(D@ (A ABBH 8PF"BED D(D@~ (A ABBI FtE[ M AA FkH ] A FHzH l A FiH Q G GfH X A  GTnH ` A UH G A {>/H[ E F0{>iH V B L{>yH0_ I h{L?|{X?yH0k A {?_X VR ^0{?uEAD V AAF DCA${H@EMD zDA4|@EFDD a GBH AAB L|@YEt G J F p|A{H m A |xAE[ ] AA h|A_FBE A(A0G@ 0A(A BBBA v 0A(A BBBB D0C(A BBB}BHEg L K<<}C FNH DH_PRHA@   AABA \|}DIFBA A(D0 (D ABBG V (D ABBA l (D ABBK }EAEQ@ AD ~GIHMI ]E8 ~4GqFED A(G0 (D ABBE H\~xHFBB B(K0A8Dp 8A0A(B BBBA ~IE[ P 4~\JeFDD E GBD AAB0JFMA K@  AABF 40KHFBB E(D0H8GP 8A0A(B BBBI O 8A0A(B BBBG O 8A0A(B BBBG U 8C0A(B BBBG ~td(,ERD@ AAA @EAD0| AAH { AAC T AAJ P(FAA G0  AABB L  CABF D  DABM (|EDG P AAF <Ec H ďЂ,ET@ AJ ܃HTEe N DE D F4D EFDD a GBH AAB<|8EDD  CAH g CAE KCA4АEFDD a GBH AAB4,EFDD a GBH AAB4@DEFDD a GBH AABx\`hFBB A(A0x (C BBBC P (A BBBI E (A BBBA 4$EFDD a GBH AAB4( 0A(A BBBF (EDGP AAF (ȠEDGP AAF 06FAD G@  AABF H(̻FBB E(A0A8D@ 8D0A(B BBBB Ht`FBB B(A0A8DP 8D0A(B BBBF 4Ea J C8FBD A(D0e (D ABBA 4Ea J CH<FBB B(D0A8D@ 8D0A(B BBBH LLFDA D0W  AABF X  AABD \ CAB(آEAG  DAE 4`uFDD W GBB AABH<FED D(D0O (G ABBF D(A ABB LAI [ AJ $EW D C0̣(\EKG V GAK WCA4TUFDD s GBF AAB48|UFDD s GBF AAB8pFDA X ABJ v CBA (VoH KȤl6ܤFN9\\8.l0T`BA D(D0P (C ABBE L(D HDBb0O(C ABBAlzXBA D(D0[(C ABBJ`0o (C ABBI L(D DDIDFAA e(C0[(A A ABH P DMG PX|\AG HCBGX N HBH LCBGP\AG HCBGX N HBH LCBGXMFBA A(D0 (A ABBE Z (C ABBF T(C ABB(\Xz N Nbj4E^ M MH>E^ M Mh<>E^ M M\>E^ M M|>E^ M Mȫ>E^ M M>E^ M ME $`FEN0 AH HuH0g A dqH0c A TfH X A 8$FLA A(DP (A ABBD 0جFKA D@  AABA  8H@l D (H0j F DpEP U AE hEN | AH ` MDB B(A0A8D@ 8D0A(B BBBK `P@,4FAA ^ ABG 0 FMA  ABH T`H Wl844OFDD j GBG CABxL FOB B(A0A8GFFFFFU) 8A0A(B BBBH GfAH4FED A(D0l (D ABBG N (D ABBI 4MDA t ABG CAB MHb F \<د<EDD i DAE @ DAK VDAH FGB B(A0A8D@ 8D0A(B BBBH dx 5dP40<A\԰@ < 8 04FAD D@  AABJ D HP\(!8pDWFOA A(D@ (A ABBG hOLe G VH̱#FBB B(N0A8D`h 8A0A(B BBBG L||FBG H(A0 (A BBBG v (A BBBK 0h_FAA Q0  AABJ (MAD { ABH Ȳ<"E\P)H`h"E\@|FBO A(A0D@, 0A(A BBBA \AU$xzLc A U K G I $$zLc A U K G I $ȳ|zLc A U K G I (EHG X AAB H0DD@JH_ I `t TK x|Ed O b6Hm ȴ,5dPTi/Hf HI$8(LEAD@ AAE x'AeLFBE B(A0A8GX 8A0A(B BBBF 8 FBA A(GP (A ABBF   Eh S Q\@4 BBD C(D0c (D ABBE Z (C ABBF N (A ABBL 8 FBA A(D@ (A ABBF ܶ !D\ ", @8 oBAC I ABF d ABA kAB\`d 2FBB B(A0G8JdMRA 8A0A(B BBBH 0DOFRA GPg  AABE `%|%uayN(<ELAG ^DA hEG0g AD @2FBB A(A0G 0A(A BBBA Hи:FBB B(A0A8G 8A0A(B BBBG HLHG0t AAG XAAFX0g KCK h |$5dPLHйT9Eb I xFEd G Q  EG@ AF (D BEAG@ AAE (pDEAG@ AAC HFBB B(A0A8GP> 8A0A(B BBBC <iEKD0b AAH X AAF DCA(E P H\AEo D Hh,|!D\"%%л ( BAA y ABH ( zEAG@ AAE 8<"FBA A(G{ (A ABBF xL#ET@ AA \$FBA A(D0 (D ABBA D (C DBBA V (D ABBA L$EAG  DAG r AAD h CAD j CAJ L(&%0`D&EDD0V AAK _CA&s@'LCG0s AAE X AAF DCAHh'REl G Y4 'FAA G  AABE 4DP(EFDD d GBE AAB |h(iEA J J F ( (EK H J F ؾ,)A\0) ,) () 0$) D )/Hf\8)"0pT)BFAA Q  AABH p*XrVY G (Ŀ*IFA  ABF T+A C H A  ,LET@ AH 88L-BHA C(D0 (D ABBD t0.E L i/E M /\ET@ AB (0END@ AAA (1EATPB AAB 0d3FDf F UP3*d3-x3-3-4- 4-<4eSu H P(4lLs I XHC4%(4%<5%P$5Ad\@h\5EKD0p AAJ X AAF k CAI L5BAA U ABD d ABI Z ABC `AB(X6AD t AF V AI ((6OEAG@s AAF $T9YqDG ZAA@|89BAA D0m  AABG X  AABD (9EGN@ AAB H:T:`:(l:<x:P:d:x:0:aEGN V AAF XKA0:kAAG H AAE OAA0 ;3FAA D@I  AABG H(,<BNM B(D0A8D 8A0A(B BBBG <t=gAG  AAF KCAIP  >AZ E [ E ( ?EAG0 AAD 4`@EAG h DAF n DAE 0<(AFAA G@  AABK <pDFBA A(JB (A ABBD @JBKM D(A0D 0A(A BBBD (KVAAG { AAJ H KBBB B(A0D8G@ 8D0A(B BBBI lxOEG b AA PEq J _ A (PEAG0= AAD DRFBB D(A0D 0A(A BBBG ((,UJEAG@] AAD LTPWFBB B(A0A8G` 8A0A(B BBBK ^^iEy R @_A! F J F `JEl G QaA\4 a Ha \a pa a/Hf,(aET`uh`pRhA`P AF a(bEDD@ AAH P c& FBA A(TNFFU (A ABBF `ntnnnnnn nEG  AD @oBAA D0  CABE }  FABA TpaD0W A 0pqFAA D@`  AABH 4rFDD  GBF AABs8 s|Ay F J F @t!D\ ,XtL| H iGPtF$duhFY A _ A dHu% duEQ0 AI vAD K J F \v]t\v]t\v]t\04w]t\H|w]t\`wUl\x x-(x-LDxFBA A(G0@ (D ABBF d (D ABBC xMd\ xEv E g I ,yUl\0DyFAA DP|  AABD 4x{$EAD0R EHG o CAE L|NFBB B(A0A8Gf 8A0A(B BBBK LFBB B(A0A8G 8A0A(B BBBA @P$FBB A(A0GP 0A(A BBBF 4|FDG w AAF `G (E K AHFBB B(A0A8D` 8D0A(B BBBE `4ET@| AA @BBB A(A0GPg 0A(A BBBB 8\FBA A(G`Y (A ABBH IHG H(A0A8D` 8A0A(B BBBK  8H0A(B BBBG @ 8C0A(E BBBI z 8A0A(B BBBA u 8H0A(B BBBA XBBB E(A0A8Gp 8A0A(B BBBA xPcxAp $EG b AA 44EAD o DAB A DAJ l5dP,FEd G Q4\jBEG z ABE VAB EG0 AE LBBB A(A0D@HnPJHG@i 0A(A BBBE dE L !D\Jd\ЯMd\Md\@Md\,xBAD R ABD ,(E| G 8LȱBAH V ABD M ABH D,1BDA  ABF ^ ABG b ABK @$cFBB A(A0T` 0A(A BBBE 4PEAD0@ DAI Z CAJ (LEAG0 AAG (xlLEAG0 AAK (EAG0 AAD DEm F V B @mD\ \ `FBA A(D06 (D ABBC b (A ABBH h (C ABBH Md\ܿe|\04EDD0c AAF lCA4lAAG | AAI D KAH H0BBA A(D@ (A ABBH I(C ABBX|wBBB N(A0D`FFFUJ 0A(A BBBF 0FAN D0b  AABA  yE} N `(]BBB E(A0G8DP 8A0A(B BBBH g8A0D(B BBB EQ X AA 8dFBA A(QP[ (A ABBD LBBB B(G0A8G 8A0A(B BBBB <hEQ0Y AH `aEQ D AA 80-FBA N(DP (A ABBB H$BBB E(H0H8D@g 8C0A(B BBBF ( ENF@n AAG 8EQ0 AI \XTdpBBB B(A0A8G L! 8A0A(B BBBD u!K!F!F!f!L<FLB B(A0A8MU 8A0A(B BBBD (EK0  AB LXeG I O A lED v CA dH V A h"HY"HY?H r  EAA $EN W AE H0\AAD j AAF LAALtlBBD A(D0m (D ABBE  (D ABBJ 8BED C(G} (A ABBA LFEA A(L0Q (A ABBH ` (A ABBB lhDw E HT\TIE B(A0A8F@8C0A(B BBBW@@MDD N ABJ M GBJ ACB D}Kg F ` H \h\UAz E TH  H 09dTX!D\8poENNrFRA AAF LFOI B(A0A8Gs 8A0A(B BBBJ `4H0 J \|FOH A(GrFRAMKA (A ABBJ (EAG AAA 8FFA 3 ABE V ABG X\Mt kh#RM HW#RMiEZD,hTD0J A HAJm<dvOFP F(F0n(H BBBC@ BBE D(A0D@ 0A(A BBBH |x9VN(OFD }NC@,TyEF0R AB p8N@R8A0`lDg9dTKdf ED0 AE HFBI D(D0R (C DBBJ d(F ABB@<GVR UJAI FAAB pI G 8lBBA A(F`4 (A ABBJ H f B HldBBB B(D0D8D`Q 8A0A(B BBBA L$BED D(D0I (D ABBK d (D ABBC 4tFDD U ABJ gABHhFBD D(G0R (D ABBF w(D ABB4iBDD ~ ABE UAB00bEDG [ DAH dDA4dPhFAD ^ ABD tAB7Ef E F0=FAA D08  AABH Tz B LL0NBBB A(A0 (A BBBH Y (A BBBH `d0mBEH B(A0D8DP 8F0A(B BBBG F 8A0A(B BBBH <8 4H0+FEE B(A0D8D` 8D0A(B BBBB P 'HKJ I4p$ |FBA A(D0d(D ABBHl FEG A(D0J (D ABBF D(F ABB` 1FEE B(A0A8JP 8A0A(B BBBH U 8C0A(B BBBA $X| :EDG gAA  P hLEE D(D0g (A BBBD K(C BBBA8 FBB A(D0k(D BBB48 tFBA D(D0X(D ABBPpD FBB A(D0D@mHCPFHA@ 0A(A BBBF ( WEKD@ AAD D E +LW A F,(+LW A F L8iEQ D AE piEQ D AE EN0 AA | x4E] N C4E] N C( nFDI r ABH 8EGNUP AX5`fOl ?+l l l l l xl l l l EDyl l l l l l l l l l l l l l l l l l l l l l l l ^9l sE*]l ;3l l I0Cl El t8*-xl ]g) *>?z?l l S*/*l hl l l ,&E,&6zl S--,XUl l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l _9SbOʿȿ**!*+*8*B* M*@X*a*`GhGpG xG G G G ^GfGnGvG~GGGGGGGGGG G!G"G#G$G%GGGGGGGGGGGGGH HGH(=H)SH*H&H'"H*H+5H,9H.CH0OH1YH/dHlHsHl@[Ho GRo G_]o G1ALYc 0 AAo`X3 M A{X5 ooXzoo^koA 101@1P1`1p11111111122 202@2P2`2p22222222233 303@3P3`3p33333333344 404@4P4`4p44444444455 505@5P5`5p55555555566 606@6P6`6p66666666677 707@7P7`7p77777777788 808@8P8`8p88888888899 909@9P9`9p999999999:: :0:@:P:`:p:::::::::;; ;0;@;P;`;p;;;;;;;;;<< <0<@<P<`<p<<<<<<<<<== =0=@=P=`=p=========>> >0>@>P>`>p>>>>>>>>>?? ?0?@?P?`?p?????????@@ @0@@@P@`@p@@@@@@@@@AA A0A@APA`ApAAAAAAAAABB B0B@BPB`BpBBBBBBBBBCC C0C@CPC`CpCCCCCCCCCDD D0D@DPD`DpDDDDDDDDDEE E0E@EPE`EpEEEEEEEEEFF F0F@FPF`FpFFFFFFFFFGG G0G@GPG`GpGGGGGGGGGHH H0H@HPH`HpHHHHHHHHHII I0I@IPI`IpIIIIIIIIIJJ J0J@JPJ`JpJJJJJJJJJKK K0K@KPK`KpKKKKKKKKKLL L0L@LPL`LpLLLLLLLLLMM M0M@MPM`MpMMMMMMMMMNN N0N@NPN`NpNNNNNNNNNOO O0O@OPO`OpOOOOOOOOOPP P0P@PPP`PpPPPPPPPPPQQ Q0Q@QPQ`QpQQQQQQQQQRR R0R@RPR`RpRRRRRRRRRSS S0S@SPS`SpSSSSSSSSSTT T0T@TPT`TpTTTTTTTTTUU U0U@UPU`UpUUUUUUUUUVV V0V@VPV`VpVVVVVVVVVWW W0W@WPW`WpWWWWWWWWWXX X0X@XPX`XpXXXXXXXXXYY Y0Y@YPY`YpYYYYYYYYYZZ Z0Z@ZPZ`ZpZZZZZZZZZ[[ [0[@[P[`[p[[[[[[[[[\\ \0\@\P\`\p\\\\\\\\\]] ]0]@]P]`]p]]]]]]]]]^^ ^0^@^P^`^p^^^^^^^^^__ _0_@_P_`_p_________`` `0`@`P```p`````````aa a0a@aPa`apaaaaaaaaabb b0b@bPb`bpbbbbbbbbbcc c0c@cPc`cpcccccccccdd d0d@dPd`dpdddddddddee e0e@ePe`epeeeeeeeeeff f0f@fPf`fpfffffffffgg g0g@gPg`gpggggggggghh h0h@hPh`hphhhhhhhhhii i0i@iPi`ipiiiiiiiiijj j0j@jPj`jpjjjjjjjjjkk k0k@kPk`kpkkkkkkkkkll l0l@lPl`lplllllllllmm m0m@mPm`mpmmmmmmmmmnn n0n@nPn`npnnnnnnnnnoo o0o@oPo`opooooooooopp p0p@pPp`pppppppppppqq q0q@qPq`qpqqqqqqqqqrr r0r@rPr`rprrrrrrrrrss s0s@sPs`spssssssssstt t0t@tPt`tptttttttttuu u0u@uPu`upuuuuuuuuuvv v0v@vPv`vpvvvvvvvvvww w0w@wPw`wpwwwwwwwwwxx x0x@xPx`xpxxxxxxxxxyy y0y@yPy`ypyyyyyyyyyzz z0z@zPz`zpzzzzzzzzz{{ {0{@{P{`{p{{{{{{{{{|| |0|@|P|`|p|||||||||}} }0}@}P}`}p}}}}}}}}}~~ ~0~@~P~`~p~~~~~~~~~ 0@P`p 0@P`pЀ 0@P`pЁ 0@P`pЂ 0@P`pЃ 0@P`pЄ 0@P`pЅ 0@P`       2B0BX  !@6BC(`5BG-5B154B193B1> 3BK0B0B0B0B80B40B(0B 0B0BH0B@0BX0BP0Bl0Bh0Bd0B`0B\0Bx0Bp0B  `#+29>CHMSY^cjinty{Zv%5DTdp>nn0e.bool(x) -> bool Returns True when the argument x is true, False otherwise. The builtins True and False are the only two instances of the class bool. The class bool is a subclass of the class int, and cannot be subclassed.(P :B 9BМSet state information for unpickling.Private method returning an estimate of len(list(it)).bytearray(iterable_of_ints) -> bytearray bytearray(string, encoding[, errors]) -> bytearray bytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer bytearray(int) -> bytes array of size given by the parameter initialized with null bytes bytearray() -> empty bytes array Construct an mutable bytearray object from: - an iterable yielding integers in range(256) - a text string encoded using the specified encoding - a bytes or a buffer object - any object implementing the buffer API. - an integerB.__sizeof__() -> int Returns the size of B in memory, in bytesReturn state information for pickling.Return state information for pickling.bytearray.fromhex(string) -> bytearray (static method) Create a bytearray object from a string of hexadecimal numbers. Spaces between two numbers are accepted. Example: bytearray.fromhex('B9 01EF') -> bytearray(b'\xb9\x01\xef').B.splitlines([keepends]) -> list of lines Return a list of the lines in B, breaking at line boundaries. Line breaks are not included in the resulting list unless keepends is given and true.B.join(iterable_of_bytes) -> bytearray Concatenate any number of bytes/bytearray objects, with B in between each pair, and return the result as a new bytearray.B.__alloc__() -> int Return the number of bytes actually allocated.B.decode(encoding='utf-8', errors='strict') -> str Decode B using the codec registered for encoding. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' as well as any other name registered with codecs.register_error that is able to handle UnicodeDecodeErrors.B.rstrip([bytes]) -> bytearray Strip trailing bytes contained in the argument and return the result as a new bytearray. If the argument is omitted, strip trailing ASCII whitespace.B.lstrip([bytes]) -> bytearray Strip leading bytes contained in the argument and return the result as a new bytearray. If the argument is omitted, strip leading ASCII whitespace.B.strip([bytes]) -> bytearray Strip leading and trailing bytes contained in the argument and return the result as a new bytearray. If the argument is omitted, strip ASCII whitespace.B.remove(int) -> None Remove the first occurrence of a value in B.B.pop([index]) -> int Remove and return a single item from B. If no index argument is given, will pop the last value.B.extend(iterable_of_ints) -> None Append all the elements from the iterator or sequence to the end of B.B.append(int) -> None Append a single item to the end of B.B.insert(index, int) -> None Insert a single item into the bytearray before the given index.B.reverse() -> None Reverse the order of the values in B in place.B.rsplit(sep=None, maxsplit=-1) -> list of bytearrays Return a list of the sections in B, using sep as the delimiter, starting at the end of B and working to the front. If sep is not given, B is split on ASCII whitespace characters (space, tab, return, newline, formfeed, vertical tab). If maxsplit is given, at most maxsplit splits are done.B.rpartition(sep) -> (head, sep, tail) Search for the separator sep in B, starting at the end of B, and return the part before it, the separator itself, and the part after it. If the separator is not found, returns two empty bytearray objects and B.B.partition(sep) -> (head, sep, tail) Search for the separator sep in B, and return the part before it, the separator itself, and the part after it. If the separator is not found, returns B and two empty bytearray objects.B.split(sep=None, maxsplit=-1) -> list of bytearrays Return a list of the sections in B, using sep as the delimiter. If sep is not given, B is split on ASCII whitespace characters (space, tab, return, newline, formfeed, vertical tab). If maxsplit is given, at most maxsplit splits are done.B.replace(old, new[, count]) -> bytearray Return a copy of B with all occurrences of subsection old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.B.translate(table[, deletechars]) -> bytearray Return a copy of B, where all characters occurring in the optional argument deletechars are removed, and the remaining characters have been mapped through the given translation table, which must be a bytes object of length 256.B.endswith(suffix[, start[, end]]) -> bool Return True if B ends with the specified suffix, False otherwise. With optional start, test B beginning at that position. With optional end, stop comparing B at that position. suffix can also be a tuple of bytes to try.B.startswith(prefix[, start[, end]]) -> bool Return True if B starts with the specified prefix, False otherwise. With optional start, test B beginning at that position. With optional end, stop comparing B at that position. prefix can also be a tuple of bytes to try.B.rindex(sub[, start[, end]]) -> int Like B.rfind() but raise ValueError when the subsection is not found.B.rfind(sub[, start[, end]]) -> int Return the highest index in B where subsection sub is found, such that sub is contained within B[start,end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.B.index(sub[, start[, end]]) -> int Like B.find() but raise ValueError when the subsection is not found.B.copy() -> bytearray Return a copy of B.B.clear() -> None Remove all items from B.B.count(sub[, start[, end]]) -> int Return the number of non-overlapping occurrences of subsection sub in bytes B[start:end]. Optional arguments start and end are interpreted as in slice notation.B.find(sub[, start[, end]]) -> int Return the lowest index in B where subsection sub is found, such that sub is contained within B[start,end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.B.zfill(width) -> copy of B Pad a numeric string B with zeros on the left, to fill a field of the specified width. B is never truncated.B.center(width[, fillchar]) -> copy of B Return B centered in a string of length width. Padding is done using the specified fill character (default is a space).B.rjust(width[, fillchar]) -> copy of B Return B right justified in a string of length width. Padding is done using the specified fill character (default is a space)B.ljust(width[, fillchar]) -> copy of B Return B left justified in a string of length width. Padding is done using the specified fill character (default is a space).B.expandtabs(tabsize=8) -> copy of B Return a copy of B where all tab characters are expanded using spaces. If tabsize is not given, a tab size of 8 characters is assumed.?k7F7F4_kP >B40 AB=B  P- @p@\B8PfB\B\B`>BP@`B @CB4@ AB^Ъ@B( @B3 -IB:6XB C,UBEUBlVB-P@DBJ@QBpZBS@* IBVB@#`ABhbUB!IBZ bjrz`0` CBZBt@FB!`MB HB@HB@OB0@JB`TBSB p@YBLB$PJBi@FB)NB[`BB`RBRGB0r PBPBWB `Pp)p2Set state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).bytes(iterable_of_ints) -> bytes bytes(string, encoding[, errors]) -> bytes bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer bytes(int) -> bytes object of size given by the parameter initialized with null bytes bytes() -> empty bytes object Construct an immutable array of bytes from: - an iterable yielding integers in range(256) - a text string encoded using the specified encoding - any object implementing the buffer API. - an integerbytes.fromhex(string) -> bytes Create a bytes object from a string of hexadecimal numbers. Spaces between two numbers are accepted. Example: bytes.fromhex('B9 01EF') -> b'\xb9\x01\xef'.B.splitlines([keepends]) -> list of lines Return a list of the lines in B, breaking at line boundaries. Line breaks are not included in the resulting list unless keepends is given and true.B.decode(encoding='utf-8', errors='strict') -> str Decode B using the codec registered for encoding. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' as well as any other name registerd with codecs.register_error that is able to handle UnicodeDecodeErrors.B.endswith(suffix[, start[, end]]) -> bool Return True if B ends with the specified suffix, False otherwise. With optional start, test B beginning at that position. With optional end, stop comparing B at that position. suffix can also be a tuple of bytes to try.B.startswith(prefix[, start[, end]]) -> bool Return True if B starts with the specified prefix, False otherwise. With optional start, test B beginning at that position. With optional end, stop comparing B at that position. prefix can also be a tuple of bytes to try.B.replace(old, new[, count]) -> bytes Return a copy of B with all occurrences of subsection old replaced by new. If the optional argument count is given, only first count occurances are replaced.B.translate(table[, deletechars]) -> bytes Return a copy of B, where all characters occurring in the optional argument deletechars are removed, and the remaining characters have been mapped through the given translation table, which must be a bytes object of length 256.B.count(sub[, start[, end]]) -> int Return the number of non-overlapping occurrences of substring sub in string B[start:end]. Optional arguments start and end are interpreted as in slice notation.B.rstrip([bytes]) -> bytes Strip trailing bytes contained in the argument. If the argument is omitted, strip trailing ASCII whitespace.B.lstrip([bytes]) -> bytes Strip leading bytes contained in the argument. If the argument is omitted, strip leading ASCII whitespace.B.strip([bytes]) -> bytes Strip leading and trailing bytes contained in the argument. If the argument is omitted, strip leading and trailing ASCII whitespace.B.rindex(sub[, start[, end]]) -> int Like B.rfind() but raise ValueError when the substring is not found.B.rfind(sub[, start[, end]]) -> int Return the highest index in B where substring sub is found, such that sub is contained within B[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.B.index(sub[, start[, end]]) -> int Like B.find() but raise ValueError when the substring is not found.B.find(sub[, start[, end]]) -> int Return the lowest index in B where substring sub is found, such that sub is contained within B[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.B.join(iterable_of_bytes) -> bytes Concatenate any number of bytes objects, with B in between each pair. Example: b'.'.join([b'ab', b'pq', b'rs']) -> b'ab.pq.rs'.B.rsplit(sep=None, maxsplit=-1) -> list of bytes Return a list of the sections in B, using sep as the delimiter, starting at the end of B and working to the front. If sep is not given, B is split on ASCII whitespace characters (space, tab, return, newline, formfeed, vertical tab). If maxsplit is given, at most maxsplit splits are done.B.rpartition(sep) -> (head, sep, tail) Search for the separator sep in B, starting at the end of B, and return the part before it, the separator itself, and the part after it. If the separator is not found, returns two empty bytes objects and B.B.partition(sep) -> (head, sep, tail) Search for the separator sep in B, and return the part before it, the separator itself, and the part after it. If the separator is not found, returns B and two empty bytes objects.B.split(sep=None, maxsplit=-1) -> list of bytes Return a list of the sections in B, using sep as the delimiter. If sep is not specified or is None, B is split on ASCII whitespace characters (space, tab, return, newline, formfeed, vertical tab). If maxsplit is given, at most maxsplit splits are done.B.zfill(width) -> copy of B Pad a numeric string B with zeros on the left, to fill a field of the specified width. B is never truncated.B.center(width[, fillchar]) -> copy of B Return B centered in a string of length width. Padding is done using the specified fill character (default is a space).B.rjust(width[, fillchar]) -> copy of B Return B right justified in a string of length width. Padding is done using the specified fill character (default is a space)B.ljust(width[, fillchar]) -> copy of B Return B left justified in a string of length width. Padding is done using the specified fill character (default is a space).B.expandtabs(tabsize=8) -> copy of B Return a copy of B where all tab characters are expanded using spaces. If tabsize is not given, a tab size of 8 characters is assumed.k7F7F#4_k@7gB4=@gB;gB;p3p33=PW# P<@3p;Bq!`3p@BB@;BgB9<B #8:P6|Bl0S qB-P8 kBJ`>lB@B@BuBiBhbF`uBZ08b8j7r7z77p7_vB@~BtrB`7!zB@z oBK`tBOsB }B@wyB$mwBi0rB)czB[b`jBP@nBRp@sBaar`pBPaB` |B`@ B'instancemethod(function) Bind a function to a class.method(function, instance) Create a bound instance method object.(I(p(H)I(0(H)()4((0@BBB@( @ B @BB`Bcode(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring, constants, names, varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]]) Create a code object. Not for the faint of heart.P)@B`BB())) **  *((*02*8;*@G*HS*PU`_*hg*pv*xcomplex(real[, imag]) -> complex number Create a complex number from a real part and an optional imaginary part. This is equivalent to (real + imag*1j) where imag defaults to 0.complex.__format__() -> str Convert to a string according to format_spec.complex.conjugate() -> complex Return the complex conjugate of its argument. (3-4j).conjugate() == 3+4j....P `.-.-.@@B#e.`B[. B  B@B Bproperty(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and likewise fset is a function for setting, and fdel a function for del'ing, an attribute. Typical use is to define a managed attribute x: class C(object): def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") Decorators make defining new properties or modifying existing ones easy: class C(object): @property def x(self): "I am the 'x' property." return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x Descriptor to change the deleter on a property.Descriptor to change the setter on a property.Descriptor to change the getter on a property.I(,0<1060(-00nnE K(:0G0?8@B\0Bc0B,0<10 I((z0(P :0`I(0`(4p-0` X50@ 0n 5n 5E 6P@0I(:0P0@I(:0PI(0:0PI(:0P0 z0(40/8DB@BBBk0 `@@ BBB/ BPB @p@B 08` !@P@BBB@!00` @PB B00` @P@BBB0`00` ` @P@BB B00` @P@BB BSet state information for unpickling.Private method returning an estimate of len(list(it)).reversed(sequence) -> reverse iterator over values of the sequence Return a reverse iteratorenumerate(iterable[, start]) -> iterator for index, value of iterable Return an enumerate object. iterable must be another object that supports iteration. The enumerate object yields pairs containing a count (from start, which defaults to zero) and a value yielded by the iterable argument. enumerate is useful for obtaining an indexed list: (0, seq[0]), (1, seq[1]), (2, seq[2]), ...Return state information for pickling.l6b<*B4(B 'B4(BF6 p%DB`#'B%<60$D`B@( )B#Exception.with_traceback(tb) -- set self.__traceback__ to tb and return self.B:@+DHE@B+@B21B:@+DxE@B+@B21@B:@+DE@B+@B21B9@+DXF@B+@B21B9@+DF@B+@B21 B9@+DF@B+@B21B9@+D0G@B+@B21`B9@+D`G@B+@B21B9@+DG@B+@B21B9@+DG@B+@B21@B$:@+DH@B+#C21B9@+D_;@B+#C21B9@pEDm;@B+#C2PR Bz9@+D@H@B+#C21Bn9@+DpH@B+#C21`B\9@+D I@B+@B21BN9@+D`I@B+@B21B;9@+DI@B+@B21@B+9@+DI@B+#C21B9@+D|;@B+#C21B9h01?D;E0`B`B=1 B8h014D;E0`B`B@1B8h01=D;E0`B`B;1@;NH;<P;<X <%<`<`B8@+D,<@B+B21B8@+DI@B+#C21B8@+HDC<@B+B2@B8@+DZ<@B+B21B:;@+Dw<@B+#C21B8pP0DJ`D@/ B P B8pP0D<`D@/B PB8pP0`9D<`D@/`B#C P<@<>H><P<<X<<`<=h<B8@+D=@B+#C21 Bm8@+D0J@B+B21Bc8@+D-=@B+#C21`BO8@+D`J@B+B21BB8@+DF=@B+#C21B98@+Db=@B+#C21@BF;h.D{=C0.CLB3;h.D=C0.CLB#;h.D=C0.CL C;h.D=C0.CLC:h.DJC0.CL`C:h.DJC0.CLC:h.D=C0.CLC:h.D=C0.CL@ C:h.D=C0.`CL C:h.D>C0.`CL C:h.D>C0.`CL Cf:h.D->C0.`CLCv:h.D:>C0.CL`C,:h.DO>C0.CLC<:h.Da>C0.CLCR7h.IDJC0.CC@C#CLpJZ7M74 3@|>>H>>P>>X>C`X-HDKpCP-G`C#C5<@>H>P> C8@+D>@B+%C21C 8H-D@KC,`C%CFP)@>C7@+DhK@B+%C21`C7Hp,DKB0,!C#Cp2?@?`!C7@+D?@B+#C21#C7@+DK@B+%C21%C7?842G?PTB7@+4`HD@K@B+%C$C 'C21?_SGL?@CEZ?UVf?x?TU?Return the name of the generator's associated code object.throw(typ[,val[,tb]]) -> raise exception in generator, return next yielded value or raise StopIteration.close() -> raise GeneratorExit inside generator.send(arg) -> send 'arg' into generator, return next yielded value or raise StopIteration.EL=ZLcLnL ( (CKL0@0(`,C)C`*CUL )CEL``(C=Б(CO] OOOOPO=4O4O`4@4]4Op.C`-C float(x) -> floating point number Convert a string or number to a floating point number, if possible.float.__format__(format_spec) -> string Formats the float according to format_spec.float.__setformat__(typestr, fmt) -> None You probably don't want to use this function. It exists mainly to be used in Python's test suite. typestr must be 'double' or 'float'. fmt must be one of 'unknown', 'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be one of the latter two if it appears to match the underlying C reality. Override the automatic determination of C-level floating point type. This affects how floats are converted to and from binary strings.float.__getformat__(typestr) -> string You probably don't want to use this function. It exists mainly to be used in Python's test suite. typestr must be 'double' or 'float'. This function returns whichever of 'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the format of floating point numbers used by the C type named by typestr.float.as_integer_ratio() -> (int, int) Return a pair of integers, whose ratio is exactly equal to the original float and with a positive denominator. Raise OverflowError on infinities and a ValueError on NaNs. >>> (10.0).as_integer_ratio() (10, 1) >>> (0.0).as_integer_ratio() (0, 1) >>> (-.25).as_integer_ratio() (-1, 4)float.fromhex(string) -> float Create a floating-point number from a hexadecimal string. >>> float.fromhex('0x1.ffffp10') 2047.984375 >>> float.fromhex('-0x1p-1074') -5e-324float.hex() -> string Return a hexadecimal representation of a floating-point number. >>> (-0.1).hex() '-0x1.999999999999ap-4' >>> 3.14159.hex() '0x1.921f9f01b866ep+1'sys.float_info A structseq holding information about the float type. It contains low level information about the precision and internal representation. Please study your system's :file:`float.h` for more information.( 0P p` P. -.-. UUPPVP04C 6C6CP V#PЪ@3CO @1Ce.0CQ7C;C VQVQ8WxW%QW-QXOQ8QJQ@XSQ`X[QXxQaQ}P0@8C0@`0C@:C9CF.__sizeof__() -> size of F in memory, in bytesF.clear(): clear most references held by the frameHZ C>C(@>CUZ^Z gZoZvZ }Z(Z0Zx@P>C?C@?Cstaticmethod(function) -> method Convert a function to be a static method. A static method does not receive an implicit first argument. To declare a static method, use this idiom: class C: def f(arg1, arg2, ...): ... f = staticmethod(f) It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()). The instance is ignored except for its class. Static methods in Python are similar to those found in Java or C++. For a more advanced concept, see the classmethod builtin.classmethod(function) -> method Convert a function to be a class method. A class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom: class C: def f(cls, arg1, arg2, ...): ... f = classmethod(f) It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()). The instance is ignored except for its class. If a class method is called for a derived class, the derived class object is passed as the implied first argument. Class methods are different than C++ or Java static methods. If you want those, see the staticmethod builtin.function(code, globals[, name[, argdefs[, closure]]]) Create a function object from a code object and a dictionary. The optional name string overrides the name from the code object. The optional argdefs tuple specifies the default argument values. The optional closure tuple supplies the bindings for free variables.P)__((`0I(8#`/`Xi_ PDBC0HCLC  G0 ?]_ DDC IC NC  G0p ?~dp`@@GC` PIC@PC@H __ @ _0  `p@ ?( :0` Set state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).[`  @  UC 0 @ p UC4@ QC RC4` QC QCSet state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).list() -> new empty list list(iterable) -> new list initialized from iterable's itemsL.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*L.reverse() -- reverse *IN PLACE*L.count(value) -> integer -- return number of occurrences of valueL.index(value, [start, [stop]]) -> integer -- return first index of value. Raises ValueError if the value is not present.L.remove(value) -> None -- remove first occurrence of value. Raises ValueError if the value is not present.L.pop([index]) -> item -- remove and return item at index (default last). Raises IndexError if list is empty or index is out of range.L.insert(index, object) -- insert object before indexL.extend(iterable) -> None -- extend list by appending elements from the iterableL.append(object) -> None -- append object to endL.copy() -> list -- a shallow copy of LL.clear() -> None -- remove all items from LL.__sizeof__() -- size of L in memory, in bytesL.__reversed__() -- return a reverse iterator over the listx.__getitem__(y) <==> x[y]H q VC4[ VC" @VC# VC4`[ VC " @VC  pW R  Z Y $ PR  P' p icpW H[Cl6! [C( `[C CP  [CER ZC3@, ZC( ZCS$ @ZCQ `YCP XChb `XClP XC0 WCbP? `WCFc ! @`  @\C[c  @  \C{b( + p, `]C@]CDWC  p) 0# ]C' sys.int_info A struct sequence that holds information about Python's internal representation of integers. The attributes are read only.int(x=0) -> integer int(x, base=10) -> integer Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero. If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int('0b100', base=0) 4int.from_bytes(bytes, byteorder, *, signed=False) -> int Return the integer represented by the given array of bytes. The bytes argument must either support the buffer protocol or be an iterable object producing bytes. Bytes and bytearray are examples of built-in objects that support the buffer protocol. The byteorder argument determines the byte order used to represent the integer. If byteorder is 'big', the most significant byte is at the beginning of the byte array. If byteorder is 'little', the most significant byte is at the end of the byte array. To request the native byte order of the host system, use `sys.byteorder' as the byte order value. The signed keyword-only argument indicates whether two's complement is used to represent the integer.int.to_bytes(length, byteorder, *, signed=False) -> bytes Return an array of bytes representing an integer. The integer is represented using length bytes. An OverflowError is raised if the integer is not representable with the given number of bytes. The byteorder argument determines the byte order used to represent the integer. If byteorder is 'big', the most significant byte is at the beginning of the byte array. If byteorder is 'little', the most significant byte is at the end of the byte array. To request the native byte order of the host system, use `sys.byteorder' as the byte order value. The signed keyword-only argument determines whether two's complement is used to represent the integer. If signed is False and a negative integer is given, an OverflowError is raised.int.bit_length() -> int Number of bits necessary to represent self in binary. >>> bin(37) '0b100101' >>> (37).bit_length() 6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%  !"#%%%%%%  !"#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%lClMlqClMl(TlYldCoCflulli ` 0 0 ` a @ @| . -.Ќ -l jl 8j. pjl mCl jCk gC jl jl jP k# e.@h ( xk%{a Pt oCh Pt  eCj qCqC@ Return True if the view and the given iterable have a null intersection.Return state information for pickling.Private method returning an estimate of len(list(it)).dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2)D.values() -> an object providing a view on D's valuesD.items() -> a set-like object providing a view on D's itemsD.keys() -> a set-like object providing a view on D's keysD.copy() -> a shallow copy of DD.clear() -> None. Remove all items from D.D.update([E, ]**F) -> None. Update D from dict/iterable E and F. If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]D.popitem() -> (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty.D.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raisedD.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in DD.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.D.__sizeof__() -> size of D in memory, in bytesx.__getitem__(y) <==> x[y]__contains__($self, key, /) -- True if D has a key k, else False.fromkeys($type, iterable, value=None, /) -- Returns a new dict with keys from iterable and values equal to value.inKn_nn{n0 n uC  n uC     uC4 `uCn H{Cic H{C( `{C-0  {C$n`< zCp  zCo yC0 wCn wCn `wCn@4 xCn*  |C C0% @xCE06  xC 0$  Cn0 n  `}C@p Gn  ~C~C@p `  }Cn  ~CC@p ` `~Cn8 @ Cn8 @ Cn8 @ Co(P & C`CD uC P% C04 M.cast(format[, shape]) -> memoryview Cast a memoryview to a new format or shape.M.tolist() -> list Return the data in the buffer as a list of elements.M.tobytes() -> bytes Return the data in the buffer as a byte string.M.release() -> None Release the underlying buffer exposed by the memoryview object.A bool indicating whether the memory is contiguous.A bool indicating whether the memory is Fortran contiguous.A bool indicating whether the memory is C contiguous.A tuple of integers used internally for PIL-style arrays.A tuple of ndim integers giving the size in bytes to access each element for each dimension of the array.A tuple of ndim integers giving the shape of the memory as an N-dimensional array.An integer indicating how many dimensions of a multi-dimensional array the memory represents.A string containing the format (in struct module style) for each element in the view.The size in bytes of each element of the memoryview.A bool indicating whether the memory is read only.The amount of space in bytes that the array would use in a contiguous representation.The underlying object of the memoryview.memoryview(object) Create a new memoryview object which references the given object. qN^E `Cqb Cq} Cqn @CqS qE qR @CqX CqV CqPX `C X CqX Cq X @CqW CqW CqV @CqV Cq`V C0T pv 0T y @Y PF C |qN Y CpC`l C@CC F Ѓ CC rp0D @pC D (:0/` I( ( :0 (0 0 4` ݇( 0 @ ` C CCmodule(name[, doc]) Create a module object. The name must be a string; the optional doc argument can have any type.?60 ?ڪ8К p D`C0 ( C`C hA simple attribute-based namespace. SimpleNamespace(**kwargs)Return state information for pickling:p p DCP p 0 C`C 4 @C?@ ` @CЯ 0 P Cp 40  ZG0#0C0C@C@CPCPC`C`CpCpCCCCCCCCCCCЭCЭCCCCCCCCC C C0C0C@C@CPCPC`C`CpCpCCCCCCCCCCCЮCЮCCCCCCCCC C C0C0C@C@CPCPC`C`CpCpCCCCCCCCCCCЯCЯCCCCCCCCC C C0C0C@C@CPCPC`C`CpCpCCCCCCCCCCCаCаCCCCCCCCC C C p ` ` @ 0 ` @ 0 Capsule objects let you wrap a C "void *" pointer in a Python object. They're a way of passing data through the Python interpreter without creating your own custom type. Capsules are used for communication between extension modules. They provide a way for an extension module to export a C interface to other extension modules, so that extension modules can use the Python import mechanism to link to one another. 0 P CSet state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).rangeobject.index(value, [start, [stop]]) -> integer -- return index of value. Raise ValueError if the value is not present.rangeobject.count(value) -> integer -- return number of occurrences of valueReturn a reverse iterator.range(stop) -> range object range(start, stop[, step]) -> range object Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1. start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3. These are exactly the valid indices for a list of 4 elements. When step is given, it specifies the increment (or decrement).ך0   Cۚ0@ C 7C00 CC CP @ CC  C40 `C  C C4 `C  C< l6 C4 l `Chb  C   frozenset() -> empty frozenset object frozenset(iterable) -> frozenset object Build an immutable unordered collection of unique elements.set() -> new empty set object set(iterable) -> new set object Build an unordered collection of unique elements.S.__sizeof__() -> size of S in memory, in bytesRemove an element from a set if it is a member. If the element is not a member, do nothing.Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError.x.__contains__(y) <==> y in x.Add an element to a set. This has no effect if the element is already present.Report whether this set contains another set.Report whether another set contains this set.Return the symmetric difference of two sets as a new set. (i.e. all elements that are in exactly one of the sets.)Update a set with the symmetric difference of itself and another.Return the difference of two or more sets as a new set. (i.e. all elements that are in this set but not the others.)Remove all elements of another set from this set.Return True if two sets have a null intersection.Update a set with the intersection of itself and another.Return the intersection of two sets as a new set. (i.e. all elements that are in both sets.)Return the union of sets as a new set. (i.e. all elements that are in either set.)Remove all elements from this set.Return a shallow copy of a set.Update a set with the union of itself and others.Return state information for pickling.Private method returning an estimate of len(list(it)).Remove and return an arbitrary set element. Raises KeyError if the set is empty.? C7 @4 / @= nD HpCE`0 C0D `CwPB Cn0  C@8 @CP? C4p C( `C / C< C7 @4 / @= G p3 . A 70# C C % `CnD HpCEP0 C; C0D `CinG CwPB CKnC `Cn0  C@8 @CP? C@ C4p C; C( `C / C_n+ C< Cn`A C `C  @C4 C@Cn p mPF D C`C` D@C `# @  C9 7PF D C`CDC `# @  C@> @+ 0 @p  CReturn state information for pickling.S.indices(len) -> (start, stop, stride) Assuming a sequence of length len, calculate the start and stop indices, and the stride length of the extended slice described by S. Out of bounds indices are clipped in a manner consistent with the handling of normal slices.slice(stop) slice(start, stop[, step]) Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).s@( Q Q  CR C@CT HQ CQ @_ C4Q C< 4S n_unnamed_fieldsn_fieldsn_sequence_fieldsHo4` ѝe b Cf Set state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).T.count(value) -> integer -- return number of occurrences of valueT.index(value, [start, [stop]]) -> integer -- return first index of value. Raises ValueError if the value is not present.tuple() -> empty tuple tuple(iterable) -> tuple initialized from iterable's items If the argument is a tuple, the return value is the same object.H@o `C4t  Cpq C@m } #{ hb`o Cln C@m  ~ t n { 0n @m m @C\w t `CCp DCPm r q C| super() -> same as super(__class__, ) super(type) -> unbound super object super(type, obj) -> bound super object; requires isinstance(obj, type) super(type, type2) -> bound super object; requires issubclass(type2, type) Typical use to call a cooperative superclass method: class C(B): def meth(self, arg): super().meth(arg) This works for class methods too: class C(B): @classmethod def cmeth(cls, arg): super().cmeth(arg) Abstract classes can override this to customize issubclass(). This is invoked early on by abc.ABCMeta.__subclasscheck__(). It should return True, False or NotImplemented. If it returns NotImplemented, the normal algorithm is used. Otherwise, it overrides the normal algorithm (and the outcome is cached). type(object_or_name, bases, dict) type(object) -> the object's type type(name, bases, dict) -> a new type 4n#.<#I[ibIm v~]1ǣУأ"+3;CLWbnyȤѤڤ '4BN[ivicn:0o( еȥ@4~@4H4]H4mXp ٥x0 p 8  @ hvP ȥ P ض~ 4 ] p @  0     @ p  и 0 ` 00  0 P 1( P (8Г  40 ǣ0 0У hأ 0 л0  8 h0 0  " h+ 3 ); Cp нL W b Pn y   ( `  ȿ  ( p HȤ(P P pѤ00 P ڤ8 P @ P H P PP P X P  `p P hP P 0p0 P h'x 4x B N H[ P i P v E0 У hic P M P Y E0 У hP  @ xic0 M P Y @ n @ ȤP ڤ   X^ e4p ew0 Ce.` ( 0   iO P@ æ   PК ( Т ? P P? P PТ ( :0 `  J /`P p Ϧ ? I(  0`  (# 2XZM(/`E٥icȥI(?YϦn( DC C  N P @D D ` n8( O D C` p D@ D D 6 ` Set state information for unpickling.Return state information for pickling.Private method returning an estimate of len(list(it)).str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.S.__sizeof__() -> size of S in memory, in bytesS.__format__(format_spec) -> str Return a formatted version of S as described by format_spec.S.format_map(mapping) -> str Return a formatted version of S, using substitutions from mapping. The substitutions are identified by braces ('{' and '}').S.format(*args, **kwargs) -> str Return a formatted version of S, using substitutions from args and kwargs. The substitutions are identified by braces ('{' and '}').S.endswith(suffix[, start[, end]]) -> bool Return True if S ends with the specified suffix, False otherwise. With optional start, test S beginning at that position. With optional end, stop comparing S at that position. suffix can also be a tuple of strings to try.S.startswith(prefix[, start[, end]]) -> bool Return True if S starts with the specified prefix, False otherwise. With optional start, test S beginning at that position. With optional end, stop comparing S at that position. prefix can also be a tuple of strings to try.S.zfill(width) -> str Pad a numeric string S with zeros on the left, to fill a field of the specified width. The string S is never truncated.S.upper() -> str Return a copy of S converted to uppercase.S.translate(table) -> str Return a copy of the string S in which each character has been mapped through the given translation table. The table must implement lookup/indexing via __getitem__, for instance a dictionary or list, mapping Unicode ordinals to Unicode ordinals, strings, or None. If this operation raises LookupError, the character is left untouched. Characters mapped to None are deleted.maketrans(x, y=None, z=None, /) -- Return a translation table usable for str.translate(). If there is only one argument, it must be a dictionary mapping Unicode ordinals (integers) or characters to Unicode ordinals, strings or None. Character keys will be then converted to ordinals. If there are two arguments, they must be strings of equal length, and in the resulting dictionary, each character in x will be mapped to the character at the same position in y. If there is a third argument, it must be a string, whose characters will be mapped to None in the result.S.swapcase() -> str Return a copy of S with uppercase characters converted to lowercase and vice versa.S.splitlines([keepends]) -> list of strings Return a list of the lines in S, breaking at line boundaries. Line breaks are not included in the resulting list unless keepends is given and true.S.rsplit(sep=None, maxsplit=-1) -> list of strings Return a list of the words in S, using sep as the delimiter string, starting at the end of the string and working to the front. If maxsplit is given, at most maxsplit splits are done. If sep is not specified, any whitespace string is a separator.S.rpartition(sep) -> (head, sep, tail) Search for the separator sep in S, starting at the end of S, and return the part before it, the separator itself, and the part after it. If the separator is not found, return two empty strings and S.S.partition(sep) -> (head, sep, tail) Search for the separator sep in S, and return the part before it, the separator itself, and the part after it. If the separator is not found, return S and two empty strings.S.split(sep=None, maxsplit=-1) -> list of strings Return a list of the words in S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result.S.rjust(width[, fillchar]) -> str Return S right-justified in a string of length width. Padding is done using the specified fill character (default is a space).S.rindex(sub[, start[, end]]) -> int Like S.rfind() but raise ValueError when the substring is not found.S.rfind(sub[, start[, end]]) -> int Return the highest index in S where substring sub is found, such that sub is contained within S[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.S.replace(old, new[, count]) -> str Return a copy of S with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.S.rstrip([chars]) -> str Return a copy of the string S with trailing whitespace removed. If chars is given and not None, remove characters in chars instead.S.lstrip([chars]) -> str Return a copy of the string S with leading whitespace removed. If chars is given and not None, remove characters in chars instead.S.strip([chars]) -> str Return a copy of the string S with leading and trailing whitespace removed. If chars is given and not None, remove characters in chars instead.S.lower() -> str Return a copy of the string S converted to lowercase.S.ljust(width[, fillchar]) -> str Return S left-justified in a Unicode string of length width. Padding is done using the specified fill character (default is a space).S.join(iterable) -> str Return a string which is the concatenation of the strings in the iterable. The separator between elements is S.S.isprintable() -> bool Return True if all characters in S are considered printable in repr() or S is empty, False otherwise.S.isidentifier() -> bool Return True if S is a valid identifier according to the language definition. Use keyword.iskeyword() to test for reserved identifiers such as "def" and "class". S.isnumeric() -> bool Return True if there are only numeric characters in S, False otherwise.S.isdigit() -> bool Return True if all characters in S are digits and there is at least one character in S, False otherwise.S.isdecimal() -> bool Return True if there are only decimal characters in S, False otherwise.S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise.S.isalpha() -> bool Return True if all characters in S are alphabetic and there is at least one character in S, False otherwise.S.isspace() -> bool Return True if all characters in S are whitespace and there is at least one character in S, False otherwise.S.istitle() -> bool Return True if S is a titlecased string and there is at least one character in S, i.e. upper- and titlecase characters may only follow uncased characters and lowercase characters only cased ones. Return False otherwise.S.isupper() -> bool Return True if all cased characters in S are uppercase and there is at least one cased character in S, False otherwise.S.islower() -> bool Return True if all cased characters in S are lowercase and there is at least one cased character in S, False otherwise.S.index(sub[, start[, end]]) -> int Like S.find() but raise ValueError when the substring is not found.S.find(sub[, start[, end]]) -> int Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 on failure.S.expandtabs(tabsize=8) -> str Return a copy of S where all tab characters are expanded using spaces. If tabsize is not given, a tab size of 8 characters is assumed.S.encode(encoding='utf-8', errors='strict') -> bytes Encode S using the codec registered for encoding. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name registered with codecs.register_error that can handle UnicodeEncodeErrors.S.count(sub[, start[, end]]) -> int Return the number of non-overlapping occurrences of substring sub in string S[start:end]. Optional arguments start and end are interpreted as in slice notation.S.center(width[, fillchar]) -> str Return S centered in a string of length width. Padding is done using the specified fill character (default is a space)S.casefold() -> str Return a version of S suitable for caseless comparisons.S.capitalize() -> str Return a capitalized version of S, i.e. make the first character have upper case and the rest lower case.S.title() -> str Return a titlecased version of S, i.e. words start with title case characters, all remaining cased characters have lower case.k7F7FNk]e D ` 0 8b 4#H0b 2#H#(00p#PL08@MD`MD@MD00@@PB8@MD`MD@MD00@@PND8D0 ODЙPLow-level inferface to warnings functionality.Issue a warning, or maybe ignore it or raise an exception._warnings provides basic warning filtering support. It is a helper module to speed up interpreter start-up.> [0_> ><ڪ()w,TDVDTD`TD6@"j?ڝ4` m m ` { { 1 ?1   1 < _          n# n<  o  ?  tt     ? ?s@ s@?J  J? _    ; +8+8 ??   q?  q        0n0#  _#   ;;nn< ?``ڪ`AAڪ``<<#      ( ??( n# n#  #   o#   o ? , ?, , ??   # 4    _# 4 C C 4 _<  <# # # # # ?K D0PXD eD(Built-in functions, exceptions, and other objects. Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.zip(iter1 [,iter2 [...]]) --> zip object Return a zip object whose .__next__() method returns a tuple where the i-th element comes from the i-th iterable argument. The .__next__() method continues until the shortest iterable in the argument sequence is exhausted and then it raises StopIteration.issubclass(C, B) -> bool Return whether class C is a subclass (i.e., a derived class) of class B. When using a tuple as the second argument issubclass(X, (A, B, ...)), is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).isinstance(object, class-or-type-or-tuple) -> bool Return whether an object is an instance of a class or of a subclass thereof. With a type as second argument, return whether that is the object's type. The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for isinstance(x, A) or isinstance(x, B) or ... (etc.).sum(iterable[, start]) -> value Return the sum of an iterable of numbers (NOT strings) plus the value of parameter 'start' (which defaults to 0). When the iterable is empty, return start.vars([object]) -> dictionary Without arguments, equivalent to locals(). With an argument, equivalent to object.__dict__.sorted(iterable, key=None, reverse=False) --> new sorted listround(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative.repr(object) -> string Return the canonical string representation of the object. For most object types, eval(repr(object)) == object.input([prompt]) -> string Read a string from standard input. The trailing newline is stripped. If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError. On Unix, GNU readline is used if enabled. The prompt string, if given, is printed without a trailing newline before reading.print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.pow(x, y[, z]) -> number With two arguments, equivalent to x**y. With three arguments, equivalent to (x**y) % z, but may be more efficient (e.g. for ints).ord(c) -> integer Return the integer ordinal of a one-character string.oct(number) -> string Return the octal representation of an integer. >>> oct(342391) '0o1234567' max(iterable, *[, default=obj, key=func]) -> value max(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its biggest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the largest argument.min(iterable, *[, default=obj, key=func]) -> value min(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its smallest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the smallest argument.locals() -> dictionary Update and return a dictionary containing the current scope's local variables.len(object) Return the number of items of a sequence or collection.iter(iterable) -> iterator iter(callable, sentinel) -> iterator Get an iterator from an object. In the first form, the argument must supply its own iterator, or be a sequence. In the second form, the callable is called until it returns the sentinel.hex(number) -> string Return the hexadecimal representation of an integer. >>> hex(3735928559) '0xdeadbeef' hash(object) -> integer Return a hash value for the object. Two objects with the same value have the same hash value. The reverse is not necessarily true, but likely.delattr(object, name) Delete a named attribute on an object; delattr(x, 'y') is equivalent to ``del x.y''.setattr(object, name, value) Set a named attribute on an object; setattr(x, 'y', v) is equivalent to ``x.y = v''.next(iterator[, default]) Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.map(func, *iterables) --> map object Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.id(object) -> integer Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (Hint: it's the object's memory address.)hasattr(object, name) -> bool Return whether the object has an attribute with the given name. (This is done by calling getattr(object, name) and catching AttributeError.)globals() -> dictionary Return the dictionary containing the current scope's global variables.getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception is raised in that case.exec(object[, globals[, locals]]) Read and execute code from an object, which can be a string or a code object. The globals and locals are dictionaries, defaulting to the current globals and locals. If only globals is given, locals defaults to it.eval(source[, globals[, locals]]) -> value Evaluate the source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it. divmod(x, y) -> (div, mod) Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.dir([object]) -> list of strings If called without an argument, return the names in the current scope. Else, return an alphabetized list of names comprising (some of) the attributes of the given object, and of attributes reachable from it. If the object supplies a method named __dir__, it will be used; otherwise the default dir() logic is used and returns: for a module object: the module's attributes. for a class object: its attributes, and recursively the attributes of its bases. for any other object: its attributes, its class's attributes, and recursively the attributes of its class's base classes.compile(source, filename, mode[, flags[, dont_inherit]]) -> code object Compile the source (a Python module, statement or expression) into a code object that can be executed by exec() or eval(). The filename will be used for run-time error messages. The mode must be 'exec' to compile a module, 'single' to compile a single (interactive) statement, or 'eval' to compile an expression. The flags argument, if present, controls which future statements influence the compilation of the code. The dont_inherit argument, if non-zero, stops the compilation inheriting the effects of any future statements in effect in the code calling compile; if absent or zero these statements do influence the compilation, in addition to any features explicitly specified.chr(i) -> Unicode character Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.format(value[, format_spec]) -> string Returns value.__format__(format_spec) format_spec defaults to ""filter(function or None, iterable) --> filter object Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true.Return state information for pickling.callable(object) -> bool Return whether the object is callable (i.e., some kind of function). Note that classes are callable, as are instances of classes with a __call__() method.bin(number) -> string Return the binary representation of an integer. >>> bin(2796202) '0b1010101010101010101010' ascii(object) -> string As repr(), return a string containing a printable representation of an object, but escape the non-ASCII characters in the string returned by repr() using \x, \u or \U escapes. This generates a string similar to that returned by repr() in Python 2.any(iterable) -> bool Return True if bool(x) is True for any x in the iterable. If the iterable is empty, return False.all(iterable) -> bool Return True if bool(x) is True for all values x in the iterable. If the iterable is empty, return True.abs(number) -> number Return the absolute value of the argument.__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module Import a module. Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module. The globals argument is only used to determine the context; they are not modified. The locals argument is unused. The fromlist should be a list of names to emulate ``from name import ...'', or an empty list to emulate ``import name''. When importing a module from a package, note that __import__('A.B', ...) returns package A when fromlist is empty, but its submodule B when fromlist is not empty. Level is used to determine whether to perform absolute or relative imports. 0 is absolute while a positive number is the number of parent directories to search relative to the current module.__build_class__(func, name, *bases, metaclass=None, **kwds) -> class Internal helper function used by the class statement.WZA4_>O=KcKpK q'n7F<}OO1yKb qZ@gDDKwDJw D vD d@DKcDBvDK`c DAj`DJv@DK@DJ}xDvDJu`DJ~DJ}D 0uD(0t|Du|DJ@s{DKswD@c@wDs{DknD-J`kjD"JjiDoP~@vD2;juDWZU`uDpjrDxPj tDreyDK c`rDarD6a`qDI]oDB]mDIp\lDJ0}yDI[lDIU`kDv | lD4N D4Q D4`N D"jbJJJbKOOkPæ?HZ_K(@PDgD M0RDS OD@zDL0S DPI OD@DLN`DpM?TqqJKULRT"eHkh#Zkmo#hk@nknvkPo2Okokk k=<<><</`"jZI m\ka>`       g0g0 N00/ O gtawxyz{|}at~vgrtusrqpm!o!okn^k\kljiRhgRfed   c^ d cdb  ^ a>`^_]^\WXYZ[VUTNSQQR RP PLNO LNO IMLJKIH/ GFE@ABCD?>=123456789:;<00/-/ .-%&'()*+,#$# "   "    " "   """                     RDDX % G1!JI2. -  #   "#$P7$%&'()*+,-.020FkOUʿ^uqr 3 dkt&'()*{ @yS@:,;N+820/1O93L 46569: ;<!"=>/?@BA H(MCDEKLNOOQ@DD`Dփ@DD`Dɀ DRDрD2 ߀DI  D2 DI `D` Dw`Dw`DD-D7D@DӄJ@DTD_DmD/yDFD]`DtDDDI`DIсDI DI! DI"D#  DЅ$@D%#D&1D'9`D,(D DC)M DZ*VDq+` Dփ,j@D-x`D.`Dփ/~Dփ0 D1@D2D͆3D͆4D͆5D6D7#D8 D9ÂD:̂`D;ՂD<D=@D>D? D)@ D)ADBD@C DWD&@DWE0DnF8@DGADփHJ DփIYDJbDK:lDփLjDʇMtDCN}DODIPDFQDHDDD@D`DXDPDhDdD|DxDpDlDDDDDDDDDĢDDDDDDDDDآDТDȢD4D0D(D DDDD DDDtDpDhDXDPDHDDD@D8DDDDȣDDDDأDУDDDDDD DDD@D8D4D0D,D(D$DxDhDdDXDPD DDDDDDDDDDDDDDDD4D DDD8DTDHD`DXDpDhDDxDDDD DDDDХDȥDDإDԥDDDDDDD DDD0D(D$D DD8D4DXDPDLDHDDD@DxDpDlDhD`DDDDDDDDDD̦DȦDDDD DDDD DDDDDDܦDئDЦDLDHDDD@DË͋؋q|=KQThis module contains functions that can read and write Python values in a binary format. The format is specific to Python, but independent of machine architecture issues. Not all Python object types are supported; in general, only objects whose value is independent from a particular invocation of Python can be written and read by this module. The following types are supported: None, integers, floating point numbers, strings, bytes, bytearrays, tuples, lists, sets, dictionaries, and code objects, where it should be understood that tuples, lists and dictionaries are only supported as long as the values contained therein are themselves supported; and recursive lists and dictionaries should not be written (they will cause infinite loops). Variables: version -- indicates the format that the module uses. Version 0 is the historical format, version 1 shares interned strings and version 2 uses a binary format for floating point numbers. Version 3 shares common object references (New in version 3.4). Functions: dump() -- write value to a file load() -- read value from a file dumps() -- write value to a string loads() -- read value from a stringloads(bytes) Convert the bytes object to a value. If no valid value is found, raise EOFError, ValueError or TypeError. Extra characters in the input are ignored.dumps(value[, version]) Return the string that would be written to a file by dump(value, file). The value must be a supported type. Raise a ValueError exception if value has (or contains an object that has) an unsupported type. The version argument indicates the data format that dumps should use.load(file) Read one value from the open file and return it. If no valid value is read (e.g. because the data has a different Python version’s incompatible marshal format), raise EOFError, ValueError or TypeError. The file must be an open file object opened in binary mode ('rb' or 'r+b'). Note: If an object containing an unsupported type was marshalled with dump(), load() will substitute None for the unmarshallable type.dump(value, file[, version]) Write the value on the open file. The value must be a supported type. The file must be an open file object such as sys.stdout or returned by open() or os.popen(). It must be opened in binary mode ('wb' or 'w+b'). If the value has (or contains an object that has) an unsupported type, a ValueError exception is raised — but garbage data will also be written to the file. The object will not be properly read back by load() The version argument indicates the data format that dump should use.]TS E EP E``E Ep`E0`@<<<></`=P)gOWq ^"jbJJJ͋Ë؋OuZZp^p^ E i>*(0qD{Hn@<Psys.version_info Version information as a named tuple.sys.flags Flags provided through command line arguments or environment vars.This module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter. Dynamic objects: argv -- command line arguments; argv[0] is the script pathname if known path -- module search path; path[0] is the script directory, else '' modules -- dictionary of loaded modules displayhook -- called to show results in an interactive session excepthook -- called to handle any uncaught exception other than SystemExit To customize printing in an interactive session or to install a custom top-level exception handler, assign other functions to replace these. stdin -- standard input file object; used by input() stdout -- standard output file object; used by print() stderr -- standard error object; used for error messages By assigning other file objects (or objects that behave like files) to these, it is possible to redirect all of the interpreter's I/O. last_type -- type of last uncaught exception last_value -- value of last uncaught exception last_traceback -- traceback of last uncaught exception These three are only available in an interactive session after a traceback has been printed. Static objects: builtin_module_names -- tuple of module names built into this interpreter copyright -- copyright notice pertaining to this interpreter exec_prefix -- prefix used to find the machine-specific Python library executable -- absolute path of the executable binary of the Python interpreter float_info -- a struct sequence with information about the float implementation. float_repr_style -- string indicating the style of repr() output for floats hash_info -- a struct sequence with information about the hash algorithm. hexversion -- version information encoded as a single integer implementation -- Python implementation information. int_info -- a struct sequence with information about the int implementation. maxsize -- the largest supported length of containers. maxunicode -- the value of the largest Unicode code point platform -- platform identifier prefix -- prefix used to find the Python library thread_info -- a struct sequence with information about the thread implementation. version -- the version of this interpreter as a string version_info -- version information as a named tuple __stdin__ -- the original stdin; don't touch! __stdout__ -- the original stdout; don't touch! __stderr__ -- the original stderr; don't touch! __displayhook__ -- the original displayhook; don't touch! __excepthook__ -- the original excepthook; don't touch! Functions: displayhook() -- print an object to the screen, and save it in builtins._ excepthook() -- print an exception and its traceback to sys.stderr exc_info() -- return thread-safe information about the current exception exit() -- exit the interpreter by raising SystemExit getdlopenflags() -- returns flags to be used for dlopen() calls getprofile() -- get the global profiling function getrefcount() -- return the reference count for an object (plus one :-) getrecursionlimit() -- return the max recursion depth for the interpreter getsizeof() -- return the size of an object in bytes gettrace() -- get the global debug tracing function setcheckinterval() -- control how often the interpreter checks for events setdlopenflags() -- set the flags to be used for dlopen() calls setprofile() -- set the global profiling function setrecursionlimit() -- set the max recursion depth for the interpreter settrace() -- set the global debug tracing function _clear_type_cache() -> None Clear the internal type lookup cache._debugmallocstats() Print summary info to stderr about the state of pymalloc's structures. In Py_DEBUG mode, also perform some expensive internal consistency checks. callstats() -> tuple of integers Return a tuple of function call statistics, if CALL_PROFILE was defined when Python was built. Otherwise, return None. When enabled, this function returns detailed, implementation-specific details about the number of function calls executed. The return value is a 11-tuple where the entries in the tuple are counts of: 0. all function calls 1. calls to PyFunction_Type objects 2. PyFunction calls that do not create an argument tuple 3. PyFunction calls that do not create an argument tuple and bypass PyEval_EvalCodeEx() 4. PyMethod calls 5. PyMethod calls on bound methods 6. PyType calls 7. PyCFunction calls 8. generator calls 9. All other calls 10. Number of stack pops performed by call_function()call_tracing(func, args) -> object Call func(*args), while tracing is enabled. The tracing state is saved, and restored afterwards. This is intended to be called from a debugger from a checkpoint, to recursively debug some other code._current_frames() -> dictionary Return a dictionary mapping each current thread T's thread id to T's current stack frame. This function should be used for specialized purposes only._getframe([depth]) -> frameobject Return a frame object from the call stack. If optional integer depth is given, return the frame object that many calls below the top of the stack. If that is deeper than the call stack, ValueError is raised. The default for depth is zero, returning the frame at the top of the call stack. This function should be used for internal and specialized purposes only.getallocatedblocks() -> integer Return the number of memory blocks currently allocated, regardless of their size.getrefcount(object) -> integer Return the reference count of object. The count returned is generally one higher than you might expect, because it includes the (temporary) reference as an argument to getrefcount().getsizeof(object, default) -> int Return the size of object in bytes.getdlopenflags() -> int Return the current value of the flags that are used for dlopen calls. The flag constants are defined in the os module.setdlopenflags(n) -> None Set the flags used by the interpreter for dlopen calls, such as when the interpreter loads extension modules. Among other things, this will enable a lazy resolving of symbols when importing a module, if called as sys.setdlopenflags(0). To share symbols across extension modules, call as sys.setdlopenflags(os.RTLD_GLOBAL). Symbolic names for the flag modules can be found in the os module (RTLD_xxx constants, e.g. os.RTLD_LAZY).getrecursionlimit() Return the current value of the recursion limit, the maximum depth of the Python interpreter stack. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python.setrecursionlimit(n) Set the maximum depth of the Python interpreter stack to n. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python. The highest possible limit is platform- dependent.hash_info A struct sequence providing parameters used for computing hashes. The attributes are read only.getswitchinterval() -> current thread switch interval; see setswitchinterval().setswitchinterval(n) Set the ideal thread switching delay inside the Python interpreter The actual frequency of switching threads can be lower if the interpreter executes long sequences of uninterruptible code (this is implementation-specific and workload-dependent). The parameter must represent the desired switching delay in seconds A typical value is 0.005 (5 milliseconds).getcheckinterval() -> current check interval; see setcheckinterval().setcheckinterval(n) Tell the Python interpreter to check for asynchronous events every n instructions. This also affects how often thread switches occur.dgetprofile() Return the profiling function set with sys.setprofile. See the profiler chapter in the library manual.setprofile(function) Set the profiling function. It will be called on each function call and return. See the profiler chapter in the library manual.gettrace() Return the global debug tracing function set with sys.settrace. See the debugger chapter in the library manual.settrace(function) Set the global debug tracing function. It will be called on each function call. See the debugger chapter in the library manual.intern(string) -> string ``Intern'' the given string. This enters the string in the (global) table of interned strings whose purpose is to speed up dictionary lookups. Return the string itself or the previously interned string object with the same value.getfilesystemencoding() -> string Return the encoding used to convert Unicode filenames in operating system filenames.getdefaultencoding() -> string Return the current default string encoding used by the Unicode implementation.exit([status]) Exit the interpreter by raising SystemExit(status). If the status is omitted or None, it defaults to zero (i.e., success). If the status is an integer, it will be used as the system exit status. If it is another kind of object, it will be printed and the system exit status will be one (i.e., failure).exc_info() -> (type, value, traceback) Return information about the most recent exception caught by an except clause in the current stack frame or in an older stack frame.excepthook(exctype, value, traceback) -> None Handle an exception by displaying it with a traceback on sys.stderr. displayhook(object) -> None Print an object to sys.stdout and also save it in builtins._ N'n`EHEѿܿE@EE:1 %:pGNdEEE Inqy|ypK 9EFE $(P.xR,6@\ ]"jbJ>ZEz(֣ @-E  ,E)@1ERDE9BEuCEwAEBAEU`5EdИ3Ew@E 4E7E@05E02EO`?EE@>E@0@0E,E?(@pNEMEowf \$ > =Wmq$(@}Hsys.thread_info A struct sequence holding information about the thread implementation..OE`PE@2Shw!.8_ZB,]/:This module provides access to the garbage collector for reference cycles. enable() -- Enable automatic garbage collection. disable() -- Disable automatic garbage collection. isenabled() -- Returns true if automatic collection is enabled. collect() -- Do a full collection right now. get_count() -- Return the current collection counts. get_stats() -- Return list of dictionaries containing per-generation stats. set_debug() -- Set debugging flags. get_debug() -- Get debugging flags. set_threshold() -- Set the collection thresholds. get_threshold() -- Return the current the collection thresholds. get_objects() -- Return a list of all objects tracked by the collector. is_tracked() -- Returns true if a given object is tracked. get_referrers() -- Return the list of objects that refer to an object. get_referents() -- Return the list of objects that an object refers to. is_tracked(obj) -> bool Returns true if the object is tracked by the garbage collector. Simple atomic objects will return false. get_stats() -> [...] Return a list of dictionaries containing per-generation statistics. get_objects() -> [...] Return a list of objects tracked by the collector (excluding the list returned). get_referents(*objs) -> list Return the list of objects that are directly referred to by objs.get_referrers(*objs) -> list Return the list of objects that directly refer to any of objs.get_count() -> (count0, count1, count2) Return the current collection counts get_threshold() -> (threshold0, threshold1, threshold2) Return the current collection thresholds set_threshold(threshold0, [threshold1, threshold2]) -> None Sets the collection thresholds. Setting threshold0 to zero disables collection. get_debug() -> flags Get the garbage collection debugging flags. set_debug(flags) -> None Set the garbage collection debugging flags. Debugging information is written to sys.stderr. flags is an integer and can have the following bits turned on: DEBUG_STATS - Print statistics during collection. DEBUG_COLLECTABLE - Print collectable objects found. DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found. DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them. DEBUG_LEAK - Debug leaking programs (everything but STATS). collect([generation]) -> n With no arguments, run a full collection. The optional argument may be an integer specifying which generation to collect. A ValueError is raised if the generation number is invalid. The number of unreachable objects is returned. isenabled() -> status Returns true if automatic garbage collection is enabled. disable() -> None Disable automatic garbage collection. enable() -> None Enable automatic garbage collection. BRE_Eqj^E30]E;@`]E@ZEEYEO`XE@YEYXEgв@\Eo WE{@VE VEXEWEaEaEaE aE aE @aE@aE A lock object is a synchronization primitive. To create a lock, call the PyThread_allocate_lock() function. Methods are: acquire() -- lock the lock, possibly blocking until it can be obtained release() -- unlock of the lock locked() -- test whether the lock is currently locked A lock is not owned by the thread that locked it; another thread may unlock it. A thread attempting to lock a lock that it has already locked will block until another thread unlocks it. Deadlocks may ensue.This module provides primitive operations to write multi-threaded programs. The 'threading' module provides a more convenient interface.stack_size([size]) -> size Return the thread stack size used when creating new threads. The optional size argument specifies the stack size (in bytes) to be used for subsequently created threads, and must be 0 (use platform or configured default) or a positive integer value of at least 32,768 (32k). If changing the thread stack size is unsupported, a ThreadError exception is raised. If the specified size is invalid, a ValueError exception is raised, and the stack size is unmodified. 32k bytes currently the minimum supported stack size value to guarantee sufficient stack space for the interpreter itself. Note that some platforms may have particular restrictions on values for the stack size, such as requiring a minimum stack size larger than 32kB or requiring allocation in multiples of the system memory page size - platform documentation should be referred to for more information (4kB pages are common; using multiples of 4096 for the stack size is the suggested approach in the absence of more specific information)._set_sentinel() -> lock Set a sentinel lock that will be released when the current thread state is finalized (after it is untied from the interpreter). This is a private API for the threading module._count() -> integer Return the number of currently running Python threads, excluding the main thread. The returned number comprises all threads created through `start_new_thread()` as well as `threading.Thread`, and not yet finished. This function is meant for internal and specialized purposes only. In most applications `threading.enumerate()` should be used instead.get_ident() -> integer Return a non-zero integer that uniquely identifies the current thread amongst other threads that exist simultaneously. This may be used to identify per-thread resources. Even though on some platforms threads identities may appear to be allocated consecutive numbers starting at 1, this behavior should not be relied upon, and the number should be seen purely as a magic cookie. A thread's identity may be reused for another thread after it exits.allocate_lock() -> lock object (allocate() is an obsolete synonym) Create a new lock object. See help(LockType) for information about locks.interrupt_main() Raise a KeyboardInterrupt in the main thread. A subthread can use this function to interrupt the main thread.exit() (exit_thread() is an obsolete synonym) This is synonymous to ``raise SystemExit''. It will cause the current thread to exit silently unless the exception is caught.start_new_thread(function, args[, kwargs]) (start_new() is an obsolete synonym) Start a new thread and return its identifier. The thread will call the function with positional arguments from the tuple args and keyword arguments taken from the optional dictionary kwargs. The thread exits when the function returns; the return value is ignored. The thread will also exit when the function raises an unhandled exception; a stack trace will be printed unless the exception is SystemExit. _is_owned() -> bool For internal use by `threading.Condition`._release_save() -> tuple For internal use by `threading.Condition`._acquire_restore(state) -> None For internal use by `threading.Condition`.release() Release the lock, allowing another thread that is blocked waiting for the lock to acquire the lock. The lock must be in the locked state, and must be locked by the same thread that unlocks it; otherwise a `RuntimeError` is raised. Do note that if the lock was acquire()d several times in a row by the current thread, release() needs to be called as many times for the lock to be available for other threads.acquire(blocking=True) -> bool Lock the lock. `blocking` indicates whether we should wait for the lock to be available or not. If `blocking` is False and another thread holds the lock, the method will return False immediately. If `blocking` is True and another thread holds the lock, the method will wait for the lock to be released, take it and then return True. (note: the blocking operation is interruptible.) In all other cases, the method will return True immediately. Precisely, if the current thread already holds the lock, its internal counter is simply incremented. If nobody holds the lock, the lock is taken and its internal counter initialized to 1.locked() -> bool (locked_lock() is an obsolete synonym) Return whether the lock is in the locked state.release() (release_lock() is an obsolete synonym) Release the lock, allowing another thread that is blocked waiting for the lock to acquire the lock. The lock must be in the locked state, but it needn't be locked by the same thread that unlocks it.acquire([wait]) -> bool (acquire_lock() is an obsolete synonym) Lock the lock. Without argument, this blocks if the lock is already locked (even by the same thread), waiting for another thread to release the lock, and return True once the lock is acquired. With an argument, this will only block if the argument is true, and the return value reflects whether the lock is acquired. The blocking operation is interruptible.`cEyE@nE@nEp`lE$p`lEmEwmEmE0jERкiE@dE hE@pDp@(p $9sE^@qEEp@pE pEOpEqsEq@qE@ wE9@ wE vE^ vEjмuERмuEq@ wEq vE"j70P(@~E](@EThis module provides mechanisms to use signal handlers in Python. Functions: alarm() -- cause SIGALRM after a specified time [Unix only] setitimer() -- cause a signal (described below) after a specified float time and the timer may restart then [Unix only] getitimer() -- get current value of timer [Unix only] signal() -- set the action for a given signal getsignal() -- get the signal action for a given signal pause() -- wait until a signal arrives [Unix only] default_int_handler() -- default SIGINT handler signal constants: SIG_DFL -- used to refer to the system default handler SIG_IGN -- used to ignore the signal NSIG -- number of defined signals SIGINT, SIGTERM, etc. -- signal numbers itimer constants: ITIMER_REAL -- decrements in real time, and delivers SIGALRM upon expiration ITIMER_VIRTUAL -- decrements only when the process is executing, and delivers SIGVTALRM upon expiration ITIMER_PROF -- decrements both when the process is executing and when the system is executing on behalf of the process. Coupled with ITIMER_VIRTUAL, this timer is usually used to profile the time spent by the application in user and kernel space. SIGPROF is delivered upon expiration. *** IMPORTANT NOTICE *** A signal handler function is called with two arguments: the first is the signal number, the second is the interrupted stack frame.pthread_kill(thread_id, signum) Send a signal to a thread.sigtimedwait(sigset, (timeout_sec, timeout_nsec)) -> struct_siginfo Like sigwaitinfo(), but with a timeout specified as a tuple of (seconds, nanoseconds).sigwaitinfo(sigset) -> struct_siginfo Wait synchronously for a signal until one of the signals in *sigset* is delivered. Returns a struct_siginfo containing information about the signal.struct_siginfo: Result from sigwaitinfo or sigtimedwait. This object may be accessed either as a tuple of (si_signo, si_code, si_errno, si_pid, si_uid, si_status, si_band), or via the attributes si_signo, si_code, and so on.sigwait(sigset) -> signum Wait a signal.sigpending() -> list Examine pending signals.pthread_sigmask(how, mask) -> old mask Fetch and/or change the signal mask of the calling thread.getitimer(which) Returns current value of given itimer.setitimer(which, seconds[, interval]) Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF) to fire after value seconds and after that every interval seconds. The itimer can be cleared by setting seconds to zero. Returns old values as a tuple: (delay, interval).set_wakeup_fd(fd) -> fd Sets the fd to be written to (with '\0') when a signal comes in. A library can use this to wakeup select or poll. The previous fd is returned. The fd must be non-blocking.siginterrupt(sig, flag) -> None change system call restart behaviour: if flag is False, system calls will be restarted when interrupted by signal sig, else system calls will be interrupted.getsignal(sig) -> action Return the current action for the given signal. The return value can be: SIG_IGN -- if the signal is being ignored SIG_DFL -- if the default action for the signal is in effect None -- if an unknown handler is in effect anything else -- the callable Python object used as a handlersignal(sig, action) -> action Set the action for the given signal. The action can be SIG_DFL, SIG_IGN, or a callable Python object. The previous action is returned. See getsignal() for possible return values. *** IMPORTANT NOTICE *** A signal handler function is called with two arguments: the first is the signal number, the second is the interrupted stack frame.pause() Wait until a signal arrives.alarm(seconds) Arrange for SIGALRM to arrive after the given number of seconds.default_int_handler(...) The default handler for SIGINT installed by Python. It raises KeyboardInterrupt.EE.  E`E{P E`EQp E6El`EE`EE8E%pEK`E  E] `EEV EEluset_inheritable(fd, inheritable) Set the inheritable flag of the specified file descriptor.get_inheritable(fd) -> bool Get the close-on-exe flag of the specified file descriptor.cpu_count() -> integer Return the number of CPUs in the system, or None if this value cannot be established.Return the size of the terminal window as (columns, lines). The optional argument fd (default standard output) specifies which file descriptor should be queried. If the file descriptor is not connected to a terminal, an OSError is thrown. This function will only be defined if an implementation is available for this system. shutil.get_terminal_size is the high-level function which should normally be used, os.get_terminal_size is the low-level implementation.A tuple of (columns, lines) for holding terminal window sizeurandom(n) -> str Return n random bytes suitable for cryptographic use.listxattr(path='.', *, follow_symlinks=True) Return a list of extended attributes on path. path may be either None, a string, or an open file descriptor. if path is None, listxattr will examine the current directory. If follow_symlinks is False, and the last element of the path is a symbolic link, listxattr will examine the symbolic link itself instead of the file the link points to.removexattr(path, attribute, *, follow_symlinks=True) Remove extended attribute attribute on path. path may be either a string or an open file descriptor. If follow_symlinks is False, and the last element of the path is a symbolic link, removexattr will modify the symbolic link itself instead of the file the link points to.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True) Set extended attribute attribute on path to value. path may be either a string or an open file descriptor. If follow_symlinks is False, and the last element of the path is a symbolic link, setxattr will modify the symbolic link itself instead of the file the link points to.getxattr(path, attribute, *, follow_symlinks=True) -> value Return the value of extended attribute attribute on path. path may be either a string or an open file descriptor. If follow_symlinks is False, and the last element of the path is a symbolic link, getxattr will examine the symbolic link itself instead of the file the link points to.getresgid() -> (rgid, egid, sgid) Get tuple of the current process's real, effective, and saved group ids.getresuid() -> (ruid, euid, suid) Get tuple of the current process's real, effective, and saved user ids.setresgid(rgid, egid, sgid) Set the current process's real, effective, and saved group ids.setresuid(ruid, euid, suid) Set the current process's real, effective, and saved user ids.device_encoding(fd) -> str Return a string describing the encoding of the device if the output is a terminal; else return None.getloadavg() -> (float, float, float) Return the number of processes in the system run queue averaged over the last 1, 5, and 15 minutes or raises OSError if the load average was unobtainableabort() -> does not return! Abort the interpreter immediately. This 'dumps core' or otherwise fails in the hardest way possible on the hosting operating system.sysconf(name) -> integer Return an integer-valued system configuration variable.confstr(name) -> string Return a string-valued system configuration variable.pathconf(path, name) -> integer Return the configuration limit name for the file or directory path. If there is no limit, return -1. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception.fpathconf(fd, name) -> integer Return the configuration limit name for the file descriptor fd. If there is no limit, return -1.statvfs(path) Perform a statvfs system call on the given path. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception.fstatvfs(fd) -> statvfs result Perform an fstatvfs system call on the given fd. Equivalent to statvfs(fd).WSTOPSIG(status) -> integer Return the signal that stopped the process that provided the 'status' value.WTERMSIG(status) -> integer Return the signal that terminated the process that provided the 'status' value.WEXITSTATUS(status) -> integer Return the process return code from 'status'.WIFEXITED(status) -> bool Return true if the process returning 'status' exited using the exit() system call.WIFSIGNALED(status) -> bool Return True if the process returning 'status' was terminated by a signal.WIFSTOPPED(status) -> bool Return True if the process returning 'status' was stopped.WIFCONTINUED(status) -> bool Return True if the process returning 'status' was continued from a job control stop.WCOREDUMP(status) -> bool Return True if the process returning 'status' was dumped to a core file.strerror(code) -> string Translate an error code to a message string.unsetenv(key) Delete an environment variable.putenv(key, value) Change or add an environment variable.posix_fadvise(fd, offset, len, advice) Announces an intention to access data in a specific pattern thus allowing the kernel to make optimizations. The advice applies to the region of the file specified by fd starting at offset and continuing for len bytes. advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL, POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED or POSIX_FADV_DONTNEED.posix_fallocate(fd, offset, len) Ensures that enough disk space is allocated for the file specified by fd starting from offset and continuing for len bytes.truncate(path, length) Truncate the file given by path to length bytes. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception.ftruncate(fd, length) Truncate a file to a specified length.makedev(major, minor) -> device number Composes a raw device number from the major and minor device numbers.minor(device) -> minor number Extracts a device minor number from a raw device number.major(device) -> major number Extracts a device major number from a raw device number.mknod(path, mode=0o600, device=0, *, dir_fd=None) Create a filesystem node (file, device special file or named pipe) named path. mode specifies both the permissions to use and the type of node to be created, being combined (bitwise OR) with one of S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. For S_IFCHR and S_IFBLK, device defines the newly created device special file (probably using os.makedev()), otherwise it is ignored. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.mkfifo(path, mode=0o666, *, dir_fd=None) Create a FIFO (a POSIX named pipe). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.pwrite(fd, string, offset) -> byteswritten Write string to a file descriptor, fd, from offset, leaving the file offset unchanged.writev(fd, buffers) -> byteswritten Write the contents of *buffers* to file descriptor *fd*. *buffers* must be a sequence of bytes-like objects. writev writes the contents of each object to the file descriptor and returns the total number of bytes written.pipe2(flags) -> (read_end, write_end) Create a pipe with flags set atomically. flags can be constructed by ORing together one or more of these values: O_NONBLOCK, O_CLOEXEC. pipe() -> (read_end, write_end) Create a pipe.isatty(fd) -> bool Return True if the file descriptor 'fd' is an open file descriptor connected to the slave end of a terminal.fstat(fd) -> stat result Like stat(), but for an open file descriptor. Equivalent to stat(fd=fd).sendfile(out, in, offset, count) -> byteswritten sendfile(out, in, offset, count[, headers][, trailers], flags=0) -> byteswritten Copy count bytes from file descriptor in to file descriptor out.write(fd, data) -> byteswritten Write bytes to a file descriptor.pread(fd, buffersize, offset) -> string Read from a file descriptor, fd, at a position of offset. It will read up to buffersize number of bytes. The file offset remains unchanged.readv(fd, buffers) -> bytesread Read from a file descriptor fd into a number of mutable, bytes-like objects ("buffers"). readv will transfer data into each buffer until it is full and then move on to the next buffer in the sequence to hold the rest of the data. readv returns the total number of bytes read (which may be less than the total capacity of all the buffers.read(fd, buffersize) -> bytes Read a file descriptor.lseek(fd, pos, how) -> newpos Set the current position of a file descriptor. Return the new cursor position in bytes, starting from the beginning.lockf(fd, cmd, len) Apply, test or remove a POSIX lock on an open file descriptor. fd is an open file descriptor. cmd specifies the command to use - one of F_LOCK, F_TLOCK, F_ULOCK or F_TEST. len specifies the section of the file to lock.dup2(old_fd, new_fd) Duplicate file descriptor.dup(fd) -> fd2 Return a duplicate of a file descriptor.closerange(fd_low, fd_high) Closes all file descriptors in [fd_low, fd_high), ignoring errors.close(fd) Close a file descriptor (for low level IO).open(path, flags, mode=0o777, *, dir_fd=None) Open a file for low level IO. Returns a file handle (integer). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.tcsetpgrp(fd, pgid) Set the process group associated with the terminal given by a fd.tcgetpgrp(fd) -> pgid Return the process group associated with the terminal given by a fd.setpgid(pid, pgrp) Call the system call setpgid().setsid() Call the system call setsid().getsid(pid) -> sid Call the system call getsid().times() -> times_result Return an object containing floating point numbers indicating process times. The object behaves like a named tuple with these fields: (utime, stime, cutime, cstime, elapsed_time)times_result: Result from os.times(). This object may be accessed either as a tuple of (user, system, children_user, children_system, elapsed), or via the attributes user, system, children_user, children_system, and elapsed. See os.times for more information.symlink(src, dst, target_is_directory=False, *, dir_fd=None) Create a symbolic link pointing to src named dst. target_is_directory is required on Windows if the target is to be interpreted as a directory. (On Windows, symlink requires Windows 6.0 or greater, and raises a NotImplementedError otherwise.) target_is_directory is ignored on non-Windows platforms. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.readlink(path, *, dir_fd=None) -> path Return a string representing the path to which the symbolic link points. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.wait() -> (pid, status) Wait for completion of a child process.waitpid(pid, options) -> (pid, status) Wait for completion of a given child process.waitid(idtype, id, options) -> waitid_result Wait for the completion of one or more child processes. idtype can be P_PID, P_PGID or P_ALL. id specifies the pid to wait on. options is constructed from the ORing of one or more of WEXITED, WSTOPPED or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT. Returns either waitid_result or None if WNOHANG is specified and there are no children in a waitable state.wait4(pid, options) -> (pid, status, rusage) Wait for completion of a given child process.wait3(options) -> (pid, status, rusage) Wait for completion of a child process.setgroups(list) Set the groups of the current process to list.setgid(gid) Set the current process's group id.setregid(rgid, egid) Set the current process's real and effective group ids.setreuid(ruid, euid) Set the current process's real and effective user ids.setegid(gid) Set the current process's effective group id.seteuid(uid) Set the current process's effective user id.setuid(uid) Set the current process's user id.killpg(pgid, sig) Kill a process group with a signal.kill(pid, sig) Kill a process with a signal.getuid() -> uid Return the current process's user id.getlogin() -> string Return the actual login name.getppid() -> ppid Return the parent's process id. If the parent process has already exited, Windows machines will still return its id; others systems will return the id of the 'init' process (1).setpgrp() Make this process the process group leader.getpgrp() -> pgrp Return the current process group id.getpgid(pid) -> pgid Call the system call getpgid().initgroups(username, gid) -> None Call the system initgroups() to initialize the group access list with all of the groups of which the specified username is a member, plus the specified group id.getgroups() -> list of group IDs Return list of supplemental group IDs for the process.getgrouplist(user, group) -> list of groups to which a user belongs Returns a list of groups to which a user belongs. user: username to lookup group: base group id of the usergetpid() -> pid Return the current process idgetgid() -> gid Return the current process's group id.geteuid() -> euid Return the current process's effective user id.getegid() -> egid Return the current process's effective group id.forkpty() -> (pid, master_fd) Fork a new process with a new pseudo-terminal as controlling tty. Like fork(), return 0 as pid to child process, and PID of child to parent. To both, return fd of newly opened pseudo-terminal. openpty() -> (master_fd, slave_fd) Open a pseudo-terminal, returning open fd's for both master and slave end. sched_getaffinity(pid, ncpus) -> cpu_set Return the affinity of the process with PID *pid*. The returned cpu_set will be of size *ncpus*.sched_setaffinity(pid, cpu_set) Set the affinity of the process with PID *pid* to *cpu_set*.sched_yield() Voluntarily relinquish the CPU.sched_rr_get_interval(pid) -> float Return the round-robin quantum for the process with PID *pid* in seconds.sched_setparam(pid, param) Set scheduling parameters for a process with PID *pid*. A PID of 0 means the calling process.sched_getparam(pid) -> sched_param Returns scheduling parameters for the process with *pid* as an instance of the sched_param class. A PID of 0 means the calling process.sched_setscheduler(pid, policy, param) Set the scheduling policy, *policy*, for *pid*. If *pid* is 0, the calling process is changed. *param* is an instance of sched_param.sched_param(sched_priority): A scheduling parameter. Current has only one field: sched_prioritysched_getscheduler(pid) Get the scheduling policy for the process with a PID of *pid*. Passing a PID of 0 returns the scheduling policy for the calling process.sched_get_priority_min(policy) Get the minimum scheduling priority for *policy*.sched_get_priority_max(policy) Get the maximum scheduling priority for *policy*.fork() -> pid Fork a child process. Return 0 to child process and PID of child to parent process.execve(path, args, env) Execute a path with arguments and environment, replacing current process. path: path of executable file args: tuple or list of arguments env: dictionary of strings mapping to strings On some platforms, you may specify an open file descriptor for path; execve will execute the program the file descriptor is open to. If this functionality is unavailable, using it raises NotImplementedError.execv(path, args) Execute an executable path with arguments, replacing current process. path: path of executable file args: tuple or list of strings_exit(status) Exit to the system with specified status, without normal exit processing.utime(path, times=None, *[, ns], dir_fd=None, follow_symlinks=True) Set the access and modified time of path. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. If times is not None, it must be a tuple (atime, mtime); atime and mtime should be expressed as float seconds since the epoch. If ns is specified, it must be a tuple (atime_ns, mtime_ns); atime_ns and mtime_ns should be expressed as integer nanoseconds since the epoch. If times is None and ns is unspecified, utime uses the current time. Specifying tuples for both times and ns is an error. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If follow_symlinks is False, and the last element of the path is a symbolic link, utime will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be available on your platform. If they are unavailable, using them will raise a NotImplementedError.uname_result: Result from os.uname(). This object may be accessed either as a tuple of (sysname, nodename, release, version, machine), or via the attributes sysname, nodename, release, version, and machine. See os.uname for more information.uname() -> uname_result Return an object identifying the current operating system. The object behaves like a named tuple with the following fields: (sysname, nodename, release, version, machine)remove(path, *, dir_fd=None) Remove a file (same as unlink()). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.unlink(path, *, dir_fd=None) Remove a file (same as remove()). If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.umask(new_mask) -> old_mask Set the current numeric umask and return the previous umask.system(command) -> exit_status Execute the command (a string) in a subshell.rmdir(path, *, dir_fd=None) Remove a directory. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) Rename a file or directory, overwriting the destination. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) Rename a file or directory. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. src_dir_fd and dst_dir_fd, may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.setpriority(which, who, prio) -> None Set program scheduling priority.getpriority(which, who) -> current_priority Get program scheduling priority.nice(inc) -> new_priority Decrease the priority of process by inc and return the new priority.mkdir(path, mode=0o777, *, dir_fd=None) Create a directory. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. dir_fd may not be implemented on your platform. If it is unavailable, using it will raise a NotImplementedError. The mode argument is ignored on Windows.listdir(path='.') -> list_of_filenames Return a list containing the names of the files in the directory. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. path can be specified as either str or bytes. If path is bytes, the filenames returned will also be bytes; in all other circumstances the filenames returned will be str. On some platforms, path may also be specified as an open file descriptor; the file descriptor must refer to a directory. If this functionality is unavailable, using it raises NotImplementedError.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True) Create a hard link to a file. If either src_dir_fd or dst_dir_fd is not None, it should be a file descriptor open to a directory, and the respective path string (src or dst) should be relative; the path will then be relative to that directory. If follow_symlinks is False, and the last element of src is a symbolic link, link will create a link to the symbolic link itself instead of the file the link points to. src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.getcwdb() -> path Return a bytes string representing the current working directory.getcwd() -> path Return a unicode string representing the current working directory.lchown(path, uid, gid) Change the owner and group id of path to the numeric uid and gid. This function will not follow symbolic links. Equivalent to os.chown(path, uid, gid, follow_symlinks=False).fchown(fd, uid, gid) Change the owner and group id of the file given by file descriptor fd to the numeric uid and gid. Equivalent to os.chown(fd, uid, gid).chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True) Change the owner and group id of path to the numeric uid and gid. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If follow_symlinks is False, and the last element of the path is a symbolic link, chown will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.fdatasync(fildes) force write of file with filedescriptor to disk. does not force update of metadata.sync() Force write of everything to disk.fsync(fildes) force write of file with filedescriptor to disk.chroot(path) Change root directory to path.fchmod(fd, mode) Change the access permissions of the file given by file descriptor fd. Equivalent to os.chmod(fd, mode).chmod(path, mode, *, dir_fd=None, follow_symlinks=True) Change the access permissions of a file. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. If dir_fd is not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. If follow_symlinks is False, and the last element of the path is a symbolic link, chmod will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.fchdir(fd) Change to the directory of the given file descriptor. fd must be opened on a directory, not a file. Equivalent to os.chdir(fd).chdir(path) Change the current working directory to the specified path. path may always be specified as a string. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception.ctermid() -> string Return the name of the controlling terminal for this process.ttyname($module, fd, /) -- Return the name of the terminal device connected to 'fd'. fd Integer file descriptor handle.access($module, /, path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True) -- Use the real uid/gid to test for access to a path. path Path to be tested; can be string, bytes, or open-file-descriptor int. mode Operating-system mode bitfield. Can be F_OK to test existence, or the inclusive-OR of R_OK, W_OK, and X_OK. dir_fd If not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. effective_ids If True, access will use the effective uid/gid instead of the real uid/gid. follow_symlinks If False, and the last element of the path is a symbolic link, access will examine the symbolic link itself instead of the file the link points to. dir_fd, effective_ids, and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError. Note that most operations will use the effective uid/gid, therefore this routine can be used in a suid/sgid environment to test if the invoking user has the specified access to the path.lstat(path, *, dir_fd=None) -> stat result Like stat(), but do not follow symbolic links. Equivalent to stat(path, follow_symlinks=False).stat($module, /, path, *, dir_fd=None, follow_symlinks=True) -- Perform a stat system call on the given path. path Path to be examined; can be string, bytes, or open-file-descriptor int. dir_fd If not None, it should be a file descriptor open to a directory, and path should be a relative string; path will then be relative to that directory. follow_symlinks If False, and the last element of the path is a symbolic link, stat will examine the symbolic link itself instead of the file the link points to. dir_fd and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError. It's an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor.stat_float_times([newval]) -> oldval Determine whether os.[lf]stat represents time stamps as float objects. If newval is True, future calls to stat() return floats, if it is False, future calls return ints. If newval is omitted, return the current setting. waitid_result: Result from waitid. This object may be accessed either as a tuple of (si_pid, si_uid, si_signo, si_status, si_code), or via the attributes si_pid, si_uid, and so on. See os.waitid for more information.statvfs_result: Result from statvfs or fstatvfs. This object may be accessed either as a tuple of (bsize, frsize, blocks, bfree, bavail, files, ffree, favail, flag, namemax), or via the attributes f_bsize, f_frsize, f_blocks, f_bfree, and so on. See os.statvfs for more information.stat_result: Result from stat, fstat, or lstat. This object may be accessed either as a tuple of (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) or via the attributes st_mode, st_ino, st_dev, st_nlink, st_uid, and so on. Posix/windows: If your platform supports st_blksize, st_blocks, st_rdev, or st_flags, they are available as attributes only. See os.stat for more information.This module provides access to operating system functionality that is standardized by the C Standard and the POSIX standard (a thinly disguised Unix interface). Refer to the library manual and corresponding Unix manual entries for more information on calls.>JI>OJ8I>>OJI>UJIFQI>>J>OJ>JFQ>J\J>J>p>=KOJL~FeJS@<l>OJ>OJ>l>>>"0?=KI>"0I>"0I>I-<JWfr~FFsFP}F|FP<F0E0|EE0@E`{E ;E EzF;`E#;E7`E0wEeF6`EvE+vE7e@E4EuEuE3`Epr F@1`E0EqECp/E@.@E@.EcHEpp`EvP-En,Ec&@E"TpE~o`Ee0oEO&@EPn@E8 n@E'mElEIlEP#EEUE]kEe EmEuE|E| E@EEpE E`EPkEjEPj`Ei EPiEEh E0hEE`g@EfEsfE f`E`@E|EO@ E' Ee EdEPdE}c@Eq`cE `E=p] E E\0`EVEOp@Ehb@EDET `ES`E2p  E]aE2EI^E$` EX`EEE\EEE:E1p EPE1\`EpEP[E Z@EEE>Y`EYFYEp@EYEE `EnE`@ETEE  EEk P EwP E0ERE0VE `EEUETE@TESE E E@ FE,C@E`AE>E `ENEB`EpR E&@E*F7L?_N/Z0e`t1243a. W V0$?%M&]'n-efg()*  E' F; hF iQ <\ k +w G j  l       $ w1 x? yL zW {d |r S T m    X U 5 8 > =& 91 @A ?Q A^ 7l 6w :    ,   o p ;   ' !8 Q q] ri "y n   C M NI J O P, QC R\ Du K L  # H  B s t <uv"-k9}M~bu\]^[YZ(b6cDdRfLM;NTOrPQR0STUVW/XKYhZP[    " -9Kav@E5FpE@6FE6F&.D^Mwf F7Fl F7F F`8F %:ARYks0 `$AKfnThis module makes available standard errno system symbols. The value of each symbol is the corresponding integer value, e.g., on most systems, errno.ENOENT equals the integer 2. The dictionary errno.errorcode maps numeric codes to symbol names, e.g., errno.errorcode[2] could be the string 'ENOENT'. Symbols that are not relevant to the underlying system are not defined. To map error codes to error messages, use the function os.strerror(), e.g. os.strerror(2) could return 'No such file or directory'.9FfIgetpwall() -> list_of_entries Return a list of all available password database entries, in arbitrary order. See help(pwd) for more on password database entries.getpwnam(name) -> (pw_name,pw_passwd,pw_uid, pw_gid,pw_gecos,pw_dir,pw_shell) Return the password database entry for the given user name. See help(pwd) for more on password database entries.getpwuid(uid) -> (pw_name,pw_passwd,pw_uid, pw_gid,pw_gecos,pw_dir,pw_shell) Return the password database entry for the given numeric user ID. See help(pwd) for more on password database entries.This module provides access to the Unix password database. It is available on all Unix versions. Password database entries are reported as 7-tuples containing the following items from the password database (see `'), in order: pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell. The uid and gid items are integers, all others are strings. An exception is raised if the entry asked for cannot be found.pwd.struct_passwd: Results from getpw*() routines. This object may be accessed either as a tuple of (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell) or via the object attributes as named in the above tuple.>FAFK=F?г str. Return the string obtained by doing backslash substitution on the string template, as done by the sub() method.groupdict([default=None]) -> dict. Return a dictionary containing all the named subgroups of the match, keyed by the subgroup name. The default argument is used for groups that did not participate in the matchgroups([default=None]) -> tuple. Return a tuple containing all the subgroups of the match, from 1. The default argument is used for groups that did not participate in the matchspan([group]) -> tuple. For MatchObject m, return the 2-tuple (m.start(group), m.end(group)).end([group=0]) -> int. Return index of the end of the substring matched by group.start([group=0]) -> int. Return index of the start of the substring matched by group.group([group1, ...]) -> str or tuple. Return subgroup(s) of the match by indices or names. For 0 returns the entire match.The result of re.match() and re.search(). Match objects always have a boolean value of True.Compiled regular expression objectssubn(repl, string[, count = 0]) -> (newstring, number of subs) Return the tuple (new_string, number_of_subs_made) found by replacing the leftmost non-overlapping occurrences of pattern with the replacement repl.sub(repl, string[, count = 0]) -> newstring. Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.finditer(string[, pos[, endpos]]) -> iterator. Return an iterator over all non-overlapping matches for the RE pattern in string. For each match, the iterator returns a match object.findall(string[, pos[, endpos]]) -> list. Return a list of all non-overlapping matches of pattern in string.split(string[, maxsplit = 0]) -> list. Split string by the occurrences of pattern.search(string[, pos[, endpos]]) -> match object or None. Scan through string looking for a match, and return a corresponding match object instance. Return None if no position in the string matches.fullmatch(string[, pos[, endpos]]) -> match object or None. Matches against all of the stringmatch(string[, pos[, endpos]]) -> match object or None. Matches zero or more characters at the beginning of the string SRE 2.2.2 Copyright (c) 1997-2002 by Secret Labs AB m*j*)m*j*)m*j*)q*lq*l4_m*j*4_m*j*4_'n'n`OFKv*`* * QFQF))V)`w*X0GF`UFSFTF (m*0j*8***@5)@`FF<FF<EF()` EF0`DF`)CFV)BF**p*``0`GF@ YF@XF)0=K8* )X`LF)SKF)`xKF)@HF)GF)pJF)`{ JF*@IF{)@**нlookup_error(errors) -> handler Return the error handler for the specified error handling name or raise a LookupError, if no handler exists under this name.register_error(errors, handler) Register the specified error handler under the name errors. handler must be a callable object, that will be called with an exception instance containing information about the location of the encoding/decoding error and must return a (replacement, new position) tuple._forget_codec($module, encoding, /) -- Purge the named codec from the internal codec lookup cachedecode(obj, [encoding[,errors]]) -> object Decodes obj using the codec registered for encoding. encoding defaults to the default encoding. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a ValueError. Other possible values are 'ignore' and 'replace' as well as any other name registered with codecs.register_error that is able to handle ValueErrors.encode(obj, [encoding[,errors]]) -> object Encodes obj using the codec registered for encoding. encoding defaults to the default encoding. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a ValueError. Other possible values are 'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name registered with codecs.register_error that can handle ValueErrors.lookup(encoding) -> CodecInfo Looks up a codec tuple in the Python codec registry and returns a CodecInfo object.register(search_function) Register a codec search function. Search functions are expected to take one argument, the encoding name in all lower case letters, and either return None, or a tuple of functions (encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object).bFdj`aF.`F-`^F-]F-г-@-@-p-n-Z-D-/--Ы-,,,,,,o,0X,P=,0 ,@,+P+P+`7.М++Pw+`f+ЙR+>+*++(.@[F+0ZF.\Fproxy(object[, callback]) -- create a proxy object that weakly references 'object'. 'callback', if given, is called with a reference to the proxy when 'object' is about to be finalized.getweakrefs(object) -- return a list of all weak reference objects that point to 'object'.getweakrefcount($module, object, /) -- Return the number of weak references to 'object'..iF. iF.hF<gFTools that operate on functions.reduce(function, sequence[, initial]) -> value Apply a function of two arguments cumulatively to the items of a sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty.Convert a cmp= function into a key= function.partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords. q/`jFmF.jF.P`lFq(04 P0_0  0/ л` nF?//8@ DlF0nFnF qF(0methodcaller(name, ...) --> methodcaller object Return a callable object that calls the given method on its operand. After f = methodcaller('name'), the call f(r) returns r.name(). After g = methodcaller('name', 'date', foo=1), the call g(r) returns r.name('date', foo=1).attrgetter(attr, ...) --> attrgetter object Return a callable object that fetches the given attribute(s) from its operand. After f = attrgetter('name'), the call f(r) returns r.name. After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date). After h = attrgetter('name.first', 'name.last'), the call h(r) returns (r.name.first, r.name.last).itemgetter(item, ...) --> itemgetter object Return a callable object that fetches the given item(s) from its operand. After f = itemgetter(2), the call f(r) returns r[2]. After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])compare_digest(a, b) -> bool Return 'a == b'. This function uses an approach designed to prevent timing analysis, making it appropriate for cryptography. a and b must both be of the same type: either str (ASCII only), or any type that supports the buffer protocol (e.g. bytes). Note: If a and b are of different lengths, or if an error occurs, a timing attack could theoretically reveal information about the types and lengths of a and b--but not their values. length_hint(obj, default=0) -> int Return an estimate of the number of items in obj. This is useful for presizing containers when building from an iterable. If the object supports len(), the result will be exact. Otherwise, it may over- or under-estimate by an arbitrary amount. The result will be an integer >= 0.Operator interface. This module exports a set of functions implemented in C corresponding to the intrinsic operators of Python. For example, operator.add(x, y) is equivalent to the expression x+y. The function names are those used for special methods; variants without leading and trailing '__' are also provided for convenience.yF{FF817027p27`26L862hbP37i8)p8787837 `37888m*8  9#9p'9=9D97373]9`b97|979|79t73l703d74W7P84K7`4C7p4874-74%7 57(57@P5 7x57`5658P6786696``669p:6!:6p;:6U:6pn::vF6pxF8(0@ sFp8 @@tFP28 @uF00High performance data structures. - deque: ordered collection accessible from endpoints only - defaultdict: dict subclass with a default value factory _count_elements(mapping, iterable) -> None Count elements in the iterable, updating the mapppingdefaultdict(default_factory[, ...]) --> dict with default factory The default factory is called without arguments to produce a new value when a key is not present, in __getitem__ only. A defaultdict compares equal to a dict with the same items. All remaining arguments are treated the same as if they were passed to the dict constructor, including keyword arguments. D.copy() -> a shallow copy of D.__missing__(key) # Called by __getitem__ for missing key; pseudo-code: if self.default_factory is None: raise KeyError((key,)) self[key] = value = self.default_factory() return value Private method returning an estimate of len(list(it)).deque([iterable[, maxlen]]) --> deque object Build an ordered collection with optimized access from its endpoints.D.__reversed__() -- return a reverse iterator over the dequeD.__sizeof__() -- size of D in memory, in bytesReturn state information for pickling.Return a shallow copy of a deque.Remove all elements from the deque.D.remove(value) -- remove first occurrence of value.D.count(value) -> integer -- return number of occurrences of valueD.reverse() -- reverse *IN PLACE*Rotate the deque n steps to the right (default n=1). If n is negative, rotates left.Extend the left side of the deque with elements from the iterableExtend the right side of the deque with elements from the iterableAdd an element to the left side of the deque.Add an element to the right side of the deque.Remove and return the leftmost element.Remove and return the rightmost element.M-0?nFF:Ft;(<{n FEF*F4 FF4F3F;`F C`F* FlFS@F; F `F; F4`FFl6`F@F(;0F(FP@/;@=;0 pD F`@FF<8@pF;8@ F ;P`@FDF` H`@FF`@Functional tools for creating and using iterators. Infinite iterators: count(start=0, step=1) --> start, start+step, start+2*step, ... cycle(p) --> p0, p1, ... plast, p0, p1, ... repeat(elem [,n]) --> elem, elem, elem, ... endlessly or up to n times Iterators terminating on the shortest input sequence: accumulate(p[, func]) --> p0, p0+p1, p0+p1+p2 chain(p, q, ...) --> p0, p1, ... plast, q0, q1, ... chain.from_iterable([p, q, ...]) --> p0, p1, ... plast, q0, q1, ... compress(data, selectors) --> (d[0] if s[0]), (d[1] if s[1]), ... dropwhile(pred, seq) --> seq[n], seq[n+1], starting when pred fails groupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v) filterfalse(pred, seq) --> elements of seq where pred(elem) is False islice(seq, [start,] stop [, step]) --> elements from seq[start:stop:step] starmap(fun, seq) --> fun(*seq[0]), fun(*seq[1]), ... tee(it, n=2) --> (it1, it2 , ... itn) splits one iterator into n takewhile(pred, seq) --> seq[0], seq[1], until pred fails zip_longest(p, q, ...) --> (p[0], q[0]), (p[1], q[1]), ... Combinatoric generators: product(p, q, ... [repeat=1]) --> cartesian product permutations(p[, r]) combinations(p, r) combinations_with_replacement(p, r) zip_longest(iter1 [,iter2 [...]], [fillvalue=None]) --> zip_longest object Return an zip_longest object whose .__next__() method returns a tuple where the i-th element comes from the i-th iterable argument. The .__next__() method continues until the longest iterable in the argument sequence is exhausted and then it raises StopIteration. When the shorter iterables are exhausted, the fillvalue is substituted in their place. The fillvalue defaults to None or can be specified by a keyword argument. repeat(object [,times]) -> create an iterator which returns the object for the specified number of times. If not specified, returns the object endlessly.Private method returning an estimate of len(list(it)).count(start=0, step=1) --> count object Return a count object whose .__next__() method returns consecutive values. Equivalent to: def count(firstval=0, step=1): x = firstval while 1: yield x x += step filterfalse(function or None, sequence) --> filterfalse object Return those items of sequence for which function(item) is false. If function is None, return the items that are false.compress(data, selectors) --> iterator over selected data Return data elements corresponding to true selector elements. Forms a shorter iterator from selected data elements using the selectors to choose the data elements.accumulate(iterable[, func]) --> accumulate object Return series of accumulated sums (or other binary function results).permutations(iterable[, r]) --> permutations object Return successive r-length permutations of elements in the iterable. permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)combinations_with_replacement(iterable, r) --> combinations_with_replacement object Return successive r-length combinations of elements in the iterable allowing individual elements to have successive repeats. combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CCcombinations(iterable, r) --> combinations object Return successive r-length combinations of elements in the iterable. combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)product(*iterables, repeat=1) --> product object Cartesian product of input iterables. Equivalent to nested for-loops. For example, product(A, B) returns the same as: ((x,y) for x in A for y in B). The leftmost iterators are in the outermost for-loop, so the output tuples cycle in a manner similar to an odometer (with the rightmost element changing on every iteration). To compute the product of an iterable with itself, specify the number of repetitions with the optional repeat keyword argument. For example, product(A, repeat=4) means the same as product(A, A, A, A). product('ab', range(3)) --> ('a',0) ('a',1) ('a',2) ('b',0) ('b',1) ('b',2) product((0,1), (0,1), (0,1)) --> (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) ...Returns size in memory, in bytes.chain.from_iterable(iterable) --> chain object Alternate chain() contructor taking a single iterable argument that evaluates lazily.chain(*iterables) --> chain object Return a chain object whose .__next__() method returns elements from the first iterable until it is exhausted, then elements from the next iterable, until all of the iterables are exhausted.starmap(function, sequence) --> starmap object Return an iterator whose values are returned from the function evaluated with an argument tuple taken from the given sequence.islice(iterable, stop) --> islice object islice(iterable, start, stop[, step]) --> islice object Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator.takewhile(predicate, iterable) --> takewhile object Return successive entries from an iterable as long as the predicate evaluates to true for each entry.dropwhile(predicate, iterable) --> dropwhile object Drop items from the iterable while predicate(item) is true. Afterwards, return every element until the iterable is exhausted.cycle(iterable) --> cycle object Return elements from the iterable until it is exhausted. Then repeat the sequence indefinitely.tee(iterable, n=2) --> tuple of n independent iterators.Iterator wrapped to make it copyableReturns an independent iterator.Data container common to multiple tee objects.groupby(iterable[, keyfunc]) -> create an iterator which returns (key, sub-iterator) grouped by each value of key(value). Set state information for unpickling.Return state information for pickling.b b_>b_>j_y?<b_>Nb q*F F@`)F4+@F`FdF4d@F4@d@F4p,@F4,@F4`-@FF4Pf@F0FF(AF4h@FjF(BF4i@FJF( BF4Pe@F@BF(AF8@a@F4d@FF4,@F4g@F0JF4,@Fp\F4-@F]F40-@FF*&F4p+@FF4*@F4+@F4c@FF?8/D`Fb H`FK? . eD`F0Fp9?(/kD@Fl F@O? /D@FpZ`FpR? P0DF [F6?(2DF bQF7?@=D`Fp` @FCB8?D@F "F>@8PAD`F$@F?&@00=D FPF`:F@ 0DF0 N@FaV@ 1DF^FpSh@8p1DFFpTy@(1DFP\`FW@(2D F]FX@(p2DF`_ FY@(3@F3 bFP3@-@@F`F'@ -@04@Fm@8.DF0`7F 5allow programmer to define multiple exit functions to be executedupon normal program termination. Two public functions, register and unregister, are defined. unregister(func) -> None Unregister an exit function which was previously registered using atexit.register func - function to be unregistered_ncallbacks() -> int Return the number of registered exit functions._clear() -> None Clear the list of previously registered exit functions._run_exitfuncs() -> None Run all registered exit functions.register(func, *args, **kwargs) -> func Register a function to be executed upon normal program termination func - function to be called at exit args - optional arguments to pass to func kwargs - optional keyword arguments to pass to func func is returned to facilitate usage as a decorator.dj0pF C@tFSjtFC u`FCpF`FFo tptS_IFMT_: file type bits S_IFDIR: directory S_IFCHR: character device S_IFBLK: block device S_IFREG: regular file S_IFIFO: fifo (named pipe) S_IFLNK: symbolic link S_IFSOCK: socket file S_IFDOOR: door S_IFPORT: event port S_IFWHT: whiteout S_ISUID: set UID bit S_ISGID: set GID bit S_ENFMT: file locking enforcement S_ISVTX: sticky bit S_IREAD: Unix V7 synonym for S_IRUSR S_IWRITE: Unix V7 synonym for S_IWUSR S_IEXEC: Unix V7 synonym for S_IXUSR S_IRWXU: mask for owner permissions S_IRUSR: read by owner S_IWUSR: write by owner S_IXUSR: execute by owner S_IRWXG: mask for group permissions S_IRGRP: read by group S_IWGRP: write by group S_IXGRP: execute by group S_IRWXO: mask for others (not in group) permissions S_IROTH: read by others S_IWOTH: write by others S_IXOTH: execute by others UF_NODUMP: do not dump file UF_IMMUTABLE: file may not be changed UF_APPEND: file may only be appended to UF_OPAQUE: directory is opaque when viewed through a union stack UF_NOUNLINK: file may not be renamed or deleted UF_COMPRESSED: OS X: file is hfs-compressed UF_HIDDEN: OS X: file should not be displayed SF_ARCHIVED: file may be archived SF_IMMUTABLE: file may not be changed SF_APPEND: file may only be appended to SF_NOUNLINK: file may not be renamed or deleted SF_SNAPSHOT: file is a snapshot file ST_MODE ST_INO ST_DEV ST_NLINK ST_UID ST_GID ST_SIZE ST_ATIME ST_MTIME ST_CTIME Convert a file's mode to a string of the form '-rwxrwxrwx'Return the portion of the file's mode that describes the file type.Return the portion of the file's mode that can be set by os.chmod().S_ISWHT(mode) -> bool Return True if mode is from a whiteout.S_ISPORT(mode) -> bool Return True if mode is from an event port.S_ISDOOR(mode) -> bool Return True if mode is from a door.S_ISSOCK(mode) -> bool Return True if mode is from a socket.S_ISLNK(mode) -> bool Return True if mode is from a symbolic link.S_ISFIFO(mode) -> bool Return True if mode is from a FIFO (named pipe).S_ISREG(mode) -> bool Return True if mode is from a regular file.S_ISBLK(mode) -> bool Return True if mode is from a block special device file.S_ISCHR(mode) -> bool Return True if mode is from a character special device file.S_ISDIR(mode) -> bool Return True if mode is from a directory. F`FEpzF E0z@FEyFEyF#Epy F,E0yF4ExF=Ex@FFExFOExFWEPx@F_ExFfE vFbind_textdomain_codeset(domain, codeset) -> string Bind the C library's domain to codeset.bindtextdomain(domain, dir) -> string Bind the C library's domain to dir.textdomain(domain) -> string Set the C library's textdmain to domain, returning the new domain.dcgettext(domain, msg, category) -> string Return translation of msg in domain and category.dgettext(domain, msg) -> string Return translation of msg in domain.gettext(msg) -> string Return translation of msg.nl_langinfo(key) -> string Return the value for the locale information associated with key.strxfrm(string) -> string. Return a string that can be used as a key for locale-aware comparisons.string,string -> int. Compares two strings according to the locale.() -> dict. Returns numeric and monetary locale-specific parameters.(integer,string=None) -> string. Activates/queries locale processing.Support for POSIX locales.0FFEFGFE@ FxEFE@F/GF$G F-G@F;GF7GPFFG Fopen(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) -> file object Open file and return a stream. Raise IOError upon failure. file is either a text or byte string giving the name (and the path if the file isn't in the current working directory) of the file to be opened or an integer file descriptor of the file to be wrapped. (If a file descriptor is given, it is closed when the returned I/O object is closed, unless closefd is set to False.) mode is an optional string that specifies the mode in which the file is opened. It defaults to 'r' which means open for reading in text mode. Other common values are 'w' for writing (truncating the file if it already exists), 'x' for creating and writing to a new file, and 'a' for appending (which on some Unix systems, means that all writes append to the end of the file regardless of the current seek position). In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding. (For reading and writing raw bytes use binary mode and leave encoding unspecified.) The available modes are: ========= =============================================================== Character Meaning --------- --------------------------------------------------------------- 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated) ========= =============================================================== The default mode is 'rt' (open for reading text). For binary random access, the mode 'w+b' opens and truncates the file to 0 bytes, while 'r+b' opens the file without truncation. The 'x' mode implies 'w' and raises an `FileExistsError` if the file already exists. Python distinguishes between files opened in binary and text modes, even when the underlying operating system doesn't. Files opened in binary mode (appending 'b' to the mode argument) return contents as bytes objects without any decoding. In text mode (the default, or when 't' is appended to the mode argument), the contents of the file are returned as strings, the bytes having been first decoded using a platform-dependent encoding or using the specified encoding if given. 'U' mode is deprecated and will raise an exception in future versions of Python. It has no effect in Python 3. Use newline to control universal newlines mode. buffering is an optional integer used to set the buffering policy. Pass 0 to switch buffering off (only allowed in binary mode), 1 to select line buffering (only usable in text mode), and an integer > 1 to indicate the size of a fixed-size chunk buffer. When no buffering argument is given, the default buffering policy works as follows: * Binary files are buffered in fixed-size chunks; the size of the buffer is chosen using a heuristic trying to determine the underlying device's "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`. On many systems, the buffer will typically be 4096 or 8192 bytes long. * "Interactive" text files (files for which isatty() returns True) use line buffering. Other text files use the policy described above for binary files. encoding is the name of the encoding used to decode or encode the file. This should only be used in text mode. The default encoding is platform dependent, but any encoding supported by Python can be passed. See the codecs module for the list of supported encodings. errors is an optional string that specifies how encoding errors are to be handled---this argument should not be used in binary mode. Pass 'strict' to raise a ValueError exception if there is an encoding error (the default of None has the same effect), or pass 'ignore' to ignore errors. (Note that ignoring encoding errors can lead to data loss.) See the documentation for codecs.register or run 'help(codecs.Codec)' for a list of the permitted encoding error strings. newline controls how universal newlines works (it only applies to text mode). It can be None, '', '\n', '\r', and '\r\n'. It works as follows: * On input, if newline is None, universal newlines mode is enabled. Lines in the input can end in '\n', '\r', or '\r\n', and these are translated into '\n' before being returned to the caller. If it is '', universal newline mode is enabled, but line endings are returned to the caller untranslated. If it has any of the other legal values, input lines are only terminated by the given string, and the line ending is returned to the caller untranslated. * On output, if newline is None, any '\n' characters written are translated to the system default line separator, os.linesep. If newline is '' or '\n', no translation takes place. If newline is any of the other legal values, any '\n' characters written are translated to the given string. If closefd is False, the underlying file descriptor will be kept open when the file is closed. This does not work when a file name is given and must be True in that case. A custom opener can be used by passing a callable as *opener*. The underlying file descriptor for the file object is then obtained by calling *opener* with (*file*, *flags*). *opener* must return an open file descriptor (passing os.open as *opener* results in functionality similar to passing None). open() returns a file object whose type depends on the mode, and through which the standard file operations such as reading and writing are performed. When open() is used to open a file in a text mode ('w', 'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open a file in a binary mode, the returned class varies: in read binary mode, it returns a BufferedReader; in write binary and append binary modes, it returns a BufferedWriter, and in read/write mode, it returns a BufferedRandom. It is also possible to use a string or bytearray as a file for both reading and writing. For strings StringIO can be used like a file opened in a text mode, and for bytes a BytesIO can be used like a file opened in a binary mode. The io module provides the Python interfaces to stream handling. The builtin open function is defined in this module. At the top of the I/O hierarchy is the abstract base class IOBase. It defines the basic interface to a stream. Note, however, that there is no separation between reading and writing to streams; implementations are allowed to raise an IOError if they do not support a given operation. Extending IOBase is RawIOBase which deals simply with the reading and writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide an interface to OS files. BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer streams that are readable, writable, and both respectively. BufferedRandom provides a buffered interface to random access streams. BytesIO is a simple stream of in-memory bytes. Another IOBase subclass, TextIOBase, deals with the encoding and decoding of streams into text. TextIOWrapper, which extends it, is a buffered text interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open() are intended to be used as keyword arguments. data: DEFAULT_BUFFER_SIZE An int containing the default buffer size used by the module's buffered I/O classes. open() uses the file's blksize (as obtained by os.stat) if possible. =OO@G Gp Б`FRead until EOF, using multiple read() call.Base class for raw binary I/O.Return a list of lines from the stream. hint can be specified to control the number of lines read: no more lines will be read if the total size (in bytes/characters) of all lines so far exceeds hint.Read and return a line from the stream. If limit is specified, at most limit bytes will be read. The line terminator is always b'\n' for binary files; for text files, the newlines argument to open can be used to select the line terminator(s) recognized. Return whether this is an 'interactive' stream. Return False if it can't be determined. Returns underlying file descriptor if one exists. An IOError is raised if the IO object does not use a file descriptor. Return whether object was opened for writing. If False, write() will raise UnsupportedOperation.Return whether object was opened for reading. If False, read() will raise UnsupportedOperation.Return whether object supports random access. If False, seek(), tell() and truncate() will raise UnsupportedOperation. This method may need to do a test seek().Flush and close the IO object. This method has no effect if the file is already closed. Flush write buffers, if applicable. This is not implemented for read-only and non-blocking streams. Truncate file to size bytes. File pointer is left unchanged. Size defaults to the current IO position as reported by tell(). Returns the new size.Return current stream position.Change stream position. Change the stream position to the given byte offset. The offset is interpreted relative to the position indicated by whence. Values for whence are: * 0 -- start of stream (the default); offset should be zero or positive * 1 -- current stream position; offset may be negative * 2 -- end of stream; offset is usually negative Return the new absolute position.The abstract base class for all I/O classes, acting on streams of bytes. There is no public constructor. This class provides dummy implementations for many methods that derived classes can override selectively; the default implementations represent a file that cannot be read, written or seeked. Even though IOBase does not declare read, readinto, or write because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations may raise UnsupportedOperation when operations they do not support are called. The basic type used for binary data read from or written to a file is bytes. bytearrays are accepted too, and in some cases (such as readinto) needed. Text I/O classes work with str data. Note that calling any method (except additional calls to close(), which are ignored) on a closed stream should raise a ValueError. IOBase (and its subclasses) support the iterator protocol, meaning that an IOBase object can be iterated over yielding the lines in a stream. IOBase also supports the :keyword:`with` statement. In this example, fp is closed after the suite of the with statement is complete: with open('spam.txt', 'r') as fp: fp.write('Spam and eggs!') wISnTS MTwI``GTjMMG #G$M DG0P0'G'G?O0SGIPG@GOPG=`GIGX@ GUX0G0M=MLM[MO GGqбq0GLGL`writable() -> bool. True if file was opened in a write mode.readable() -> bool. True if file was opened in a read mode.seekable() -> bool. True if file supports random-access.isatty() -> bool. True if the file is connected to a TTY device.close() -> None. Close the file. A closed file cannot be used for further I/O operations. close() may be called more than once without error.readinto() -> Same as RawIOBase.readinto().tell() -> int. Current file position. Can raise OSError for non seekable files.truncate([size: int]) -> int. Truncate the file to at most size bytes and return the truncated size. Size defaults to the current file position, as returned by tell(). The current file position is changed to the value of size.seek(offset: int[, whence: int]) -> int. Move to new file position and return the file position. Argument offset is a byte count. Optional argument whence defaults to SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values are SEEK_CUR or 1 (move relative to current position, positive or negative), and SEEK_END or 2 (move relative to end of file, usually negative, although many platforms allow seeking beyond the end of a file). Note that not all file objects are seekable.fileno() -> int. Return the underlying file descriptor (an integer).write(b: bytes) -> int. Write bytes b to file, return number written. Only makes one system call, so not all of the data may be written. The number of bytes actually written is returned. In non-blocking mode, returns None if the write would block.readall() -> bytes. read all data from the file, returned as bytes. In non-blocking mode, returns as much as is immediately available, or None if no data is available. Return an empty bytes object at EOF.read(size: int) -> bytes. read at most size bytes, returned as bytes. Only makes one system call, so less data may be returned than requested In non-blocking mode, returns None if no data is available. Return an empty bytes object at EOF.file(name: str[, mode: str][, opener: None]) -> file IO object Open a file. The mode can be 'r' (default), 'w', 'x' or 'a' for reading, writing, exclusive creation or appending. The file will be created if it doesn't exist when opened for writing or appending; it will be truncated when opened for writing. A FileExistsError will be raised if it already exists when opened for creating. Opening a file for creating implies writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode to allow simultaneous reading and writing. A custom opener can be used by passing a callable as *opener*. The underlying file descriptor for the file object is then obtained by calling opener with (*name*, *flags*). *opener* must return an open file descriptor (passing os.open as *opener* results in functionality similar to passing None).=}OOH1O MOOHpPOOTм1GwI0GS0+G]/GSP`-GI,G`,G= +GI*GXP@*GUX *GO`/G*GuO<pO(pD2G`7G`6G6G `BytesIO([buffer]) -> object Create a buffered I/O implementation using an in-memory bytes buffer, ready for reading and writing.close() -> None. Disable all I/O operations.writelines(lines) -> None. Write bytes objects to the file. Note that newlines are not added. The argument can be any iterable object producing bytes objects. This is equivalent to calling write() for each bytes object.write(bytes) -> int. Write bytes to file. Return the number of bytes written.seek(pos[, whence]) -> int. Change stream position. Seek to byte offset pos relative to position indicated by whence: 0 Start of stream (the default). pos should be >= 0; 1 Current position - pos may be negative; 2 End of stream - pos usually negative. Returns the new absolute position.truncate([size]) -> int. Truncate the file to at most size bytes. Size defaults to the current file position, as returned by tell(). The current file position is unchanged. Returns the new size. readinto(bytearray) -> int. Read up to len(b) bytes into b. Returns number of bytes read (0 for EOF), or None if the object is set not to block as has no data to read.readlines([size]) -> list of strings, each a line from the file. Call readline() repeatedly and return a list of the lines so read. The optional size argument, if given, is an approximate bound on the total number of bytes in the lines returned. readline([size]) -> next line from the file, as a bytes object. Retain newline. A non-negative size argument limits the maximum number of bytes to return (an incomplete line may be returned then). Return an empty bytes object at EOF. read1(size) -> read at most size bytes, returned as a bytes object. If the size argument is negative or omitted, read until EOF is reached. Return an empty bytes object at EOF.read([size]) -> read at most size bytes, returned as a bytes object. If the size argument is negative, read until EOF is reached. Return an empty bytes object at EOF.tell() -> current file position, an integer isatty() -> False. Always returns False since BytesIO objects are not connected to a tty-like device.getvalue() -> bytes. Retrieve the entire contents of the BytesIO object.getbuffer() -> bytes. Get a read-write view over the contents of the BytesIO object.flush() -> None. Does nothing.seekable() -> bool. Returns True if the IO object can be seeked.writable() -> bool. Returns True if the IO object can be written.readable() -> bool. Returns True if the IO object can be read.]QGG@pXFGI@EGUXEG= ;GOP EG CGICG]G<p(OQpQHD ;G`8GGJG00A buffered interface to random access streams. The constructor creates a reader and writer for a seekable stream, raw, given in the first argument. If the buffer_size is omitted it defaults to DEFAULT_BUFFER_SIZE. A buffered reader and writer object together. A buffered reader object and buffered writer object put together to form a sequential IO object that can read and write. This is typically used with a socket or two-way pipe. reader and writer are RawIOBase objects that are readable and writeable respectively. If the buffer_size is omitted it defaults to DEFAULT_BUFFER_SIZE. A buffer for a writeable sequential RawIO object. The constructor creates a BufferedWriter for the given writeable raw stream. If the buffer_size is not given, it defaults to DEFAULT_BUFFER_SIZE. Create a new buffered reader using the given readable raw IO object.Write the given buffer to the IO stream. Returns the number of bytes written, which is never less than len(b). Raises BlockingIOError if the buffer is full and the underlying raw stream cannot accept more data at the moment. Read and return up to n bytes, with at most one read() call to the underlying raw stream. A short result does not imply that EOF is imminent. Returns an empty bytes object on EOF. Read and return up to n bytes. If the argument is omitted, None, or negative, reads and returns all data until EOF. If the argument is positive, and the underlying raw stream is not 'interactive', multiple raw reads may be issued to satisfy the byte count (unless EOF is reached first). But for interactive raw streams (as well as sockets and pipes), at most one raw read will be issued, and a short result does not imply that EOF is imminent. Returns an empty bytes object on EOF. Returns None if the underlying raw stream was open in non-blocking mode and no data is available at the moment. Disconnect this buffer from its underlying raw stream and return it. After the raw stream has been detached, the buffer is in an unusable state. Base class for buffered IO objects. The main difference with RawIOBase is that the read() method supports omitting the size argument, and does not have a default implementation that defers to readinto(). In addition, read(), readinto() and write() may raise BlockingIOError if the underlying raw stream is in non-blocking mode and not ready; unlike their raw counterparts, they will never return None. A typical implementation should not inherit from a RawIOBase implementation, but wrap one. TpDLG``@`G_G _GT0pDMG @(@cGbG TpDOG`eG`eGdG@ UpDOG``iGhGgGUUGkGOOq M(= SIpX@UXOuO<0O0S0I@TpuT SPnT`](`O@TnTuTS]`O@X UX= <0OOq M(= SIpX@UXOuO<0]O0S0I@(`OOq M( SO=IpX@UXOuO<0TpnT`uT SPS0I@(` S `TGTRGuT@QGS]@PG]UXSXuTTnTOOuO=Character and line based layer over a BufferedIOBase object, buffer. encoding gives the name of the encoding that the stream will be decoded or encoded with. It defaults to locale.getpreferredencoding(False). errors determines the strictness of encoding and decoding (see help(codecs.Codec) or the documentation for codecs.register) and defaults to "strict". newline controls how line endings are handled. It can be None, '', '\n', '\r', and '\r\n'. It works as follows: * On input, if newline is None, universal newlines mode is enabled. Lines in the input can end in '\n', '\r', or '\r\n', and these are translated into '\n' before being returned to the caller. If it is '', universal newline mode is enabled, but line endings are returned to the caller untranslated. If it has any of the other legal values, input lines are only terminated by the given string, and the line ending is returned to the caller untranslated. * On output, if newline is None, any '\n' characters written are translated to the system default line separator, os.linesep. If newline is '' or '\n', no translation takes place. If newline is any of the other legal values, any '\n' characters written are translated to the given string. If line_buffering is True, a call to flush is implied when a call to write contains a newline character.Codec used when reading a file in universal newlines mode. It wraps another incremental decoder, translating \r\n and \r into \n. It also records the types of newlines encountered. When used with translate=False, it ensures that the newline sequence is returned in one piece. When used with decoder=None, it expects unicode strings as decode input and translates newlines without first invoking an external decoder. The error setting of the decoder or encoder. Subclasses should override. Line endings translated so far. Only line endings translated during reading are considered. Subclasses should override. Encoding of the text stream. Subclasses should override. Write string to stream. Returns the number of characters written (which is always equal to the length of the string). Read until newline or EOF. Returns an empty string if EOF is hit immediately. Read at most n characters from stream. Read from underlying buffer until we have n characters or we hit EOF. If n is negative or omitted, read until EOF. Separate the underlying buffer from the TextIOBase and return it. After the underlying buffer has been detached, the TextIO is in an unusable state. Base class for text I/O. This class provides a character and line based interface to stream I/O. There is no readinto method because Python's character strings are immutable. There is no public constructor. W^@:DmGP<'zGG~G+X(p%@sGGG(X@xG GGBOEnIDk?XDC(Ez WX M` SP>]@YTkzOG=EOBI0BXAUXpAA<`(SpQI I7B7p7P7077C66PCnI)-`g{n*ln?I`=`%uGnIp_`uGk`_uG SP(wGT@(wG0(vG] ( vGUXIlnISIXuTTqOXOO-uO=seekable() -> bool. Returns True if the IO object can be seeked.writable() -> bool. Returns True if the IO object can be written.readable() -> bool. Returns True if the IO object can be read.Close the IO object. Attempting any further operation after the object is closed will raise a ValueError. This method has no effect if the file is already closed. Write string to file. Returns the number of characters written, which is always equal to the length of the string. Change stream position. Seek to character offset pos relative to position indicated by whence: 0 Start of stream (the default). pos should be >= 0; 1 Current position - pos must be 0; 2 End of stream - pos must be 0. Returns the new absolute position. Truncate size to pos. The pos argument defaults to the current file position, as returned by tell(). The current file position is unchanged. Returns the new absolute position. Read until newline or EOF. Returns an empty string if EOF is hit immediately. Read at most n characters, returned as a string. If the argument is negative or omitted, read until EOF is reached. Return an empty string at EOF. Tell the current file position.Retrieve the entire contents of the object.Text I/O implementation using an in-memory buffer. The initial_value argument sets the value of object. The newline argument is like the one of TextIOWrapper's constructor.;^xDG0|P|pG Gh|OpnIW= @GQ@GTG`GI`GGSP}G]0GI@GXGUXPG<zipimport provides support for importing Python modules from Zip archives. This module exports three objects: - zipimporter: a class; its constructor takes a path to a Zip archive. - ZipImportError: exception raised by zipimporter objects. It's a subclass of ImportError, so it can be caught as ImportError, too. - _zip_directory_cache: a dict, mapping archive paths to zip directory info dicts, as used in zipimporter._files. It is usually not needed to use the zipimport module explicitly; it is used by the builtin import mechanism for sys.path items that are paths to Zip archives.zipimporter(archivepath) -> zipimporter object Create a new zipimporter instance. 'archivepath' must be a path to a zipfile, or to a specific path inside a zipfile. For example, it can be '/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a valid directory inside the archive. 'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip archive. The 'archive' attribute of zipimporter objects contains the name of the zipfile targeted.get_filename(fullname) -> filename string. Return the filename for the specified module.get_source(fullname) -> source string. Return the source code for the specified module. Raise ZipImportError if the module couldn't be found, return None if the archive does contain the module, but has no source for it.get_code(fullname) -> code object. Return the code object for the specified module. Raise ZipImportError if the module couldn't be found.is_package(fullname) -> bool. Return True if the module specified by fullname is a package. Raise ZipImportError if the module couldn't be found.get_data(pathname) -> string with file data. Return the data associated with 'pathname'. Raise IOError if the file wasn't found.load_module(fullname) -> module. Load the module specified by 'fullname'. 'fullname' must be the fully qualified (dotted) module name. It returns the imported module, or raises ZipImportError if it wasn't found.find_loader(fullname, path=None) -> self, str or None. Search for a module specified by 'fullname'. 'fullname' must be the fully qualified (dotted) module name. It returns the zipimporter instance itself if the module was found, a string containing the full path name if it's possibly a portion of a namespace package, or None otherwise. The optional 'path' argument is ignored -- it's there for compatibility with the importer protocol.find_module(fullname, path=None) -> self or None. Search for a module specified by 'fullname'. 'fullname' must be the fully qualified (dotted) module name. It returns the zipimporter instance itself if the module was found, or None if it wasn't. The optional 'path' argument is ignored -- it's there for compatibility with the importer protocol./__init__.pyc/__init__.pyo/__init__.py.pyc.pyo.py aGAa7 `GIaG_G^`@G_G0_ G_pG_@G+a(`DG`G Gfaulthandler module.}Oj}Oj-?}Owj}OjP@GGpqjd3dj0e|j`Hej`ej0fdjgSjgjHhkhkh!k@i)k0i1kXi9kpiFkiVk`ktkk k"jOOqjDebug module to trace memory blocks allocated by Python.get_traced_memory() -> (int, int) Get the current size and peak size of memory blocks traced by the tracemalloc module as a tuple: (current: int, peak: int).get_tracemalloc_memory() -> int Get the memory usage in bytes of the tracemalloc module used internally to trace memory allocations.get_traceback_limit() -> int Get the maximum number of frames stored in the traceback of a trace. By default, a trace of an allocated memory block only stores the most recent frame: the limit is 1.stop() Stop tracing Python memory allocations and clear traces of memory blocks allocated by Python.start(nframe: int=1) Start tracing Python memory allocations. Set also the maximum number of frames stored in the traceback of a trace to nframe._get_object_traceback(obj) Get the traceback where the Python object obj was allocated. Return a tuple of (filename: str, lineno: int) tuples. Return None if the tracemalloc module is disabled or did not trace the allocation of the object._get_traces() -> list Get traces of all memory blocks allocated by Python. Return a list of (size: int, traceback: tuple) tuples. traceback is a tuple of (filename: str, lineno: int) tuples. Return an empty list if the tracemalloc module is disabled.clear_traces() Clear traces of memory blocks allocated by Python.is_tracing()->bool True if the tracemalloc module is tracing Python memory allocations, False otherwise.! GGk0Gk`Gk0GkG<pG GlG&lPG=l`G.Gd(nxxsubtype is an example module showing how to subtype builtin types from C. test_descr.py in the standard test suite requires it in order to complete. If you don't care about the examples, and don't intend to run the Python test suite, you can recompile Python without Modules/xxsubtype.c.8 GGn0n0 GG n(o{nPnlnnn0G Gno{nnlnPnnnn#oc@sdZeddS(u Hello world!NT(uTrueu initializeduprint(((uflag.pyus A[stapsdt{ۀҹGpythonfunction__entry8@192(%rsp) 8@200(%rsp) -4@208(%rsp) 8@%rbx\stapsdt ۀйGpythonfunction__return8@192(%rsp) 8@200(%rsp) -4@208(%rsp) 8@%rbxGA$3a10 GA$3p1113GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignlibpython3.4m.so.1.0-3.4.10-11.el8.x86_64.debug^g7zXZִF!t/d~]?Eh=ڊ2N_I_I>6R>BKQL+\ ߒ޷9DB~o:ށ)  AAÃԹ'ʺЌ6BnG/:[yHpghFXؒӁ'@, \EsP24c6#G2"4;~SJuL?U%zH_ڜzD~/AtpzO8$k lE}C_G7B pw <#2t BHZPH֔Ѣ}"l[ ^4#LB U.ڢ.寊 ?y) &R| WcL~s[K6]d+Qak\|lu.|(| t\8&Kzx$NB 륾,e$U=F7]KC5<8LT1',5fy%PSvKڵ{e; 0ɼhZh$a`|x7L.-0cXi@HC mŽZe5X!RJFHK[wʂ#U#4E|C0dn&?؝ڈuL^ y{F1݈45t;ī//֌[鈖:'_s9eQ[_få&Fw8h7v4Q*bīy Tñʱ S+7|+Ad2;cS$`¢V8`ռdeoYJ[k#ljݓ0\6*ɲSc q3';)2T2ӋK=4xHy %z"e0mOfh4CŨ WF3ZqjQI'Ԣ%= [d`~Du2GRo3+|:nLa]{5 VT@gE>ٶQ2txF3P`ouP5/ ٥F kebAbWkrTWrnEqU*'[:38U,O:U=Y?0"irwIa4~HC{w&D5ѽ*!;<9D2&v ".[Ȟ٤jSGfV/xc'.Eݍ.Tdn?,]nXm-LK"?FS-)hJW=!B +!onG74 ,qMV x&kDKUMeN+jtmD+W'Gi:C),ŏE&k# 2Vo QnS#4皰Br`5&z|F? {,QlaLl1,P5hs$b';i-n2dx3x1}p8l> ZMxf콵t|шu3ŃhlQX-ZMlTc,`8P|\];6QXvL'؋ ly@k}x= Tk^ߊh65Oe2祓lk^TxȈhZ>X)&٭Խ0Ey|sx1*l k$eD2ms%o̧Sz#PI[CZF+>lv̭ ]kNo=]hIOGGW9`.]`VUa&0JZ_!WRZRVVd'b[68*6VMLl{ptyVXœw8YXZc[a6<}+P*)J+_rT[gc >e $~4g3#揇`Ht(n8'*p0h"zRu&F6j>cfo=Y472 ȋ}qR@8Jm%ް9ᚴoY2 b2Т9ղ|%[M٧S{)<:mq<O/ywISe_,mFf!-iV}y-n2:wx6 ^s<aı$t'E"7.vCG:ҿ1 J F/kT21;yk:Bl_N3q>~Dp:Z38P3 w [UԘ?fjѶWk<ޏ.MLH묮? 8l.EswQ[u]XPRtCY?C ǟ/[#\rUi5F}3tq6_t&w0d:>•& }Ay|-xq90|f)<<̷ԫns^Gea~Oe6yZA>2*swkZ9{LMd.ZRrrg!ٶGquà{B] A`sK $7 Ib7%uaundӶ6\ZKp 24czd@9W-񫅞.zQ[gOdsC>\f7WDL@S;iu#3gBjz̐<0]d`FH!K6䪚s=`Rk4Λ;v R¨JTSC`s?T1Tܳۙ8pԒrԋbr7mu욤X1Ȝ {ac$pԤ-vY\whd\lڋ$=|..ZFꂡ&8sdU8:VHYQzcp6u U[&dt*&ן&IQ IYr ȚuZTo}ڎ\(-# wHS; L&~H0yhv<봆CSӜ#3膭OKV]h8x3GP# F^ABȴaw{O{]ꊮ"?JI VeBB&Z8)OJW7#'4c;Ӕ,sdXcܳ:wZe_"s/POy7QN (ʱx,3h#p owy.:']\e[dlWgݥxp%''l/ƅKK1J6ahelQfI|&d1(~m|m؏2V,iZ-DYJY8> TNxn;AkKWu H!Bn#K;~o=Zg-[NܳzK, {eSH9G3)K?FlFL*Lz@NROH5tmYRYPv*7'#MlLHXl9:rO&YZ!AF/$yux[3w'}>H. ̛̾_OLLTpo,8`a *zh·i$4V1<xG] EAP#ҟd%QG^t:1j/.Pu]^t,Z  $Yuwn1 Z?Ɲbn:oG#`l7vh 8>dpW:?a@HnWY%<&=?8rMwvVw`X`vs~-c;nu=-pHp!e5vwG@@9דa*R7e"{@ebRa=a.mJ \@ ersE`V9)YLp?܏tS/4,kל7ԙPRӳO: JOO=CRNWh`]9f/E*aHC)GDNۨ:K2LU/n4bFT~Ѳ@Ets'Km?~Z ǪS|x3@o0oN4-KbgyQ yAc~'͖;#ehq/O4e`~/ ӓ[ P a+&t iM[|:7يrE<1iaHOo}Ȥ%-D?p쌟d {tE~PxRT^>VHB=C|{"ˠ8yj(^mk`+V dq?315 jٻ#ŬZS3 j(@v x'F 0I\٩=r7bhgkW1툶y;,9NjuP3(k;ˢ2  :r&bGg|H'WN׾6Kz,^1~l7FǁQpx׋XW66<P2 }iScX`{:'Ew8ik 9F0n\#TQ,mu+.])쫳[J͒yk+52֝ PQ!x `%Qvpؗ[i ;P]0XXTؖ0:FH_ ܟ=/am8̀C" RWȅ]X ?4"Th˜(aK$ϹH |7MJR>B#IlGM j1Yn?A6קKؕ%*sH.Ӿ9{p51vKmFSrkG+3;ewېAv{B, ;[$c@0b~|K2&*#J?4& rꗈ8ܑ秞oo"}3P 7 .2)31]hP)~y0-՚dvxj2O:}^"t=sk2je<}@X K\ڀ-:j+U#Ng/)irigћҕk0 n;wyMS  %ܚѹPZEo/LyK]bA%X/=+aA\Z(V7̡F &u]KAB1C/<Yٌy /`_| y1|oV7ڋmDVq tGP#B}> Qњ+7p]tuFMydQ)`sfLċ "WGi v^ iLZE^7@RAJ'Z А] ݛoNᥡ݋[w\K{X2!mGmN:C 4VOswp6Zx lKmF-":Vp 㢬߶ww =Y_7H@ wgbw9uz!Iweqƛ˜)=Ces30әE׎9:a-^1_%=S-bSoAȗlYj#[+05CnX>gnh*Ḳ#{q$F;YȆ.oGӖGy 6y2sv}R[AᚅHz)5XR1&fߩjvҶsJm=9<XL0W4,t Ы R;:Xt[#s)؎K4J%_ %JhԮMmI;Icɪ͙Ji.1ʸML I$YyuA`,xߕ7߹!tHyH$#OuҊzڧyZ+wJ%G6-Y7gxUn煱@S;$AenbXimh!u>\U\ 9n.yer$ 2rQ*pI$1dއI" W3MAO 䞆̏qcLzf.;QwE%) h&1qOP, L$PL=7#EaQaNqR'hvU` pSHz,'7QW_`$w+g>GҦG=bqW$nXpv5x,aZP֨A3Z=d #&G;&SP2v07OW4'GT>)Z*a"#耸r^GN}׌[BP)^"jɆ(xP&@(SIC5pσՠ\Xc?de <<8 .H;qr~•ИBAIc2/fzW "q=A (0 0OIãooDN*nY@.Er|%Igüc5}LNT:\h8Kr̊R{LXl l-ax[Ȫ&2|p6KQ')8IAfB~ aHNuR^k.9鄛bFQvz٨L0 0~TGx@> 2R$kv7.?=wqo"I#NLvf#a?6l{/м%+7?wV\A}U0L9z=m[Q9v"W+lI'R?=4sY .B]Kr<؏A`@W\R yL2YG.TfeU_L0B̊}[ ֧-2y)~v଩Urqw 9r7 nzG3Ѐc_FDx t}Bodysdi)]RMaER1r8C Lh07ԝx_'&L.q7yC!B!O|К';dtw(]saC('INx;@).B (Ng̯VĚ ?Gtc %@B@r`:h،aƍFk&4y$MU0/vsŔ$=vko$3~yU{5m[9 OGKMݔ{{Nr-@Xƻnp:CptIr4x%O T hQ] f6Psgv PDy bMJ׫#fnAm mlk^9ڴ.nD/]eLOZ-^]PѶ4xSK\40ڥKأUXP=eMWfd?-tt5QXTlrbO8i䒻mcʨjvN 7&$A0_=tAq%-8_T!v>`D}='tW_{R۵M< Ti<0/q:朵eTPF?I\6_Leu{2cAp[,^k4i)YBڳ=sk8:NnTTN9$GZI?W3nH*]fjr7޿`I"5ɣqc1+ݻeܗ #, 7jS!H+9YքV<m"w8A\D1ipxL{J=S(s-Lgd2r 7]qr/EaG [-.ؘ)RAV JcߘOE;|w9&b 0aܞ,x*3=LG?|~Jp/TZiLndaP蟤F؈zN@TOcMj1D։Q>.$ bVL4 &·tPnLJkLK%YɁkfP &B5#΁7T1F9>qxyqmuX f)U5c2!m|딂G'E2 ;Zb@&xD{DӡSPP NqrLa,i'|>9bH^꜓X T]-Z+["'X{L]srύڃ +_Ungpȝ?}(#Ӄ91ʖX#/1c/7:ɕPbw8pZ,6]^#Ko ׋H0L>IE0 ϝ!L.DO=T=(P9Y!z#lu-k?4P;0p2Ż>CuJ^h`BF;"*)ͪPND8<ɘ8f<ׁ^ )qTi%)B\\5G$F;Fڢ U_>5^P>c_?Ѵ)qvֱ)<ԃBty9}=U Ym=!TNN;CkoGD<ɛWqR)MH`9TMjHx <2Gqשex0憠l:z.7OG'43ep:'|INAsS6f @x[5 eHȟ=F `esr'f3j4$aB#"{YC=}M:ItO&ODE8F_ =ZKMJ1uS5qj6Z-ѿ]ZsG5]1r;})I!Uh<= *9rC/H2axB FRlA'tʮ4u|GV F Ѵ8w lvd[gwPԨD]8ôԜ&DX3OC)P}N}Kh[hUX_^ [mar MNk;K}G cv0+KbZ7]+SkFQ7pqQg?AD@I1$ƞˬlCn%%ܒU٬A]ԥe(軞€H㢆ddXeIxNDC,I4W2o/v2ԝ5Q O,I6l_۲ͦ!ȧi;  OEz-}ep⥢ @t^B,l03cr D<qtX -3δڼe.%"E\Di\ H YPɶL`<](:22>M'r>SԪ V~axu`|4{vIn`2f+6a%(x =ŦAi`"NC}&$M4sp?E^\ƈqcg/$^A|9ë{RE2s̄N.f *ќOP3~B$_]IZԽOꩳAs&z"Tqˎ7Zr*뷰xe;A}&'aQcd$oY,^J5$i"JDD+:t\٩GLK{X6T7,|I41MY?=%y7ݩ&kSR#٭޾EZȖpg|JԚD$#.W`(*0\ɥ0mbdoj.:0Zrǔo<^P8`9 L[1Fe b~53]ERJ80i q9Nj YD^a#eT)UG>5s}`QJr6|GU%S1\ND1m68W_;R(*Nj^/gW iO:mD E78Idf x4&V5i51A '8t i;/ @ KG}.-5D]?>;(N$[<+/'\&^7 B((wOsC~;.3|S6lUKr[r.ݢ U, bԕl \N`,k{Kס{=?_uP_OxعqmW6 .ZbՋY/oj2Y7//C+q%$O"ͥ91xv!ÜyEDAF ]OS7A=/N~q+SFr6d.~E> !;rPd'Vxl0;[RҺ|{7k\;(#iIDY;ӎRdR9cˤ~Y,"iiL'pƔd7&|M1zϯ]K~:\,vNl{rG_֎\'w)")? .)Sho-kGZ٢A 9/#eJ\=jY)~O;{`%y!<VU*}m! L%}>9=}[E*٤{8)ē'W8Bo0j)HRҔ 5*'XW.4oѴnI;U 96xE|ʐy[~]x9l2"oIw _莮ҿ˧U9\eeN85F"r޲-E~*Zʽ2ȚM,ǟޗ??.Yj"4k:AjUy -@FgBۭ2[==K&oRsOc rOt1_EoE!{l:ly;]M{v5 Y1/d) N%2R#`"ىmO{APxdfmuqi1&GhP].l NHc1F@D߃ ]=낺l(PAI5ȶ\ptf{O㦉ڙ0HD,d9RUog -a+yfFP!.GQMs~tCmE *czqyJqτ"G 5{Ϙޟ-)rZD`R 1@ZdM`MeK M&>-pOfy8m`9. NqO]1X㾗 5#ZܺޘV sH0fX;o7J͞#$|I gʫ> A }e;0v~4V$i!fBxwv<͠˜x9z-+p6Z+U%I͑p&$/{9U2YZ!:'T//mX,й 0٧ɚ'+j21>(cMfε/\`~Ͻ[~X\~e.^`IR,J)Rޛ_奤V+py$r~ðTGzĈ/cL򜳈Z.2$K1OKJT3uT!`Hc}4SOeɦD,Huj 2mg8&)h@ˠeD>wz_0BtyºkX`C(!h`b$_͘} 7T,F 7.9ZAxLW/w-GߔD'`9 ݫ}U7B$W+q;\KY0NP *Ō7t둋`TyPF/\q2Z۵UNׅy5ފ5#Ae_mO|vI(qur3D3_ K9,v^2]0K62B ![t唲YlVnx}ɔiAD]'IѤZJx2j8Xo(0[󭚙o.n0h`90#e#hG.?FUؒgq )FcQ?cLrtһJK!tbz @aO `GN["NN[3KȲXv3)1 =‰hXB =LjZThj'#`(6<cWVW@`^+mSgYORt][7V3J\^M̲]%ML^&&s&tpXfĉ.~}z#}}_1y0ClܝslOv:m6W ph%rfއLjz*?tF!y 3,O*~Dd~oS\ vn[cNuUq oW(I7~Eտo9 ěߓőg;ƿ`v`Huf%E-CʘxZwə_Y GB/C~!h:<l$f\waT FugMHI)Qw.J4s ])m5w:: Ae7xƖ/# Olll1ѭNEh4[fmnΗ!*VWT?EעiNŰQ$'Kk,9:C%-Q-Z,`#p hqM#%Y2Y8"kN5&/j 3D5h9Vd[6uJUN:qhYYC|nU[;*|8Lbo,LYÓZ³`R'=g{]1Y8xB}9=)X`c6Fd4!5 (Jvyĺ%Jh$iԘ6瀁g=l f6X8ӀC39܆B/_U!%QiPj,cҭtv`㾬cWTY+`+l"0Ib,@siAw_GxY.h(7Vr֞*8^ ˿,B+w"3g["6[vc5d@ \=4P< wCFlsU(%ck3IeP;*)>o+/n]J(fzpIX(`*)L@*1 kT>+ -ṙy.>A> )!\u)e-V{7:_<oK y]gXr6;Jׇ>~=xWtpVvI]02z&VS,o1J2) Jq?ק+' U3~dulyR'F;떌SWb8TkZjrG뎆+TXYڃ[uQtnu٘rQLximc)?]#7^˾)vM+{$q(K~$plҮ-s0]Ɵ|Up5_6>,gl8hͲ!i/$#B=EL Q nKZz=@UO7DCVfS~@T(&,8|RZ+={> A6xbVGC_G7x5yqqU(UsjP`$+›=wGnm"-75@Mm<^G*W}ķ!1xW0>YR.6F4 e[4zj.T8kwTyrޥ5~gx!푏LR1]3xN ,&A,28[X$`#x `zEtY&@ZIB.Z:8C$|bZ;9eqY%PL_ϴͱ6gG;d}g=PS=zk06ec]nC5%`>1g҈H)Dz{ %P."`ϊam'M}Ԁvǫfi^A $&W\_4:e;qb:4qJ6fOrP,Eb\ЌmvY/c< J)(lz(+Rr䩦5k5[Ь Lk&rtq+v а+Kę{50>=jA?p   |imp,I%>#l,Zu[jՔeE$+%끑G.kɚ C=SՆ89 <k+ _|e}TGAS]v WMw;=UYT6]sp,AKi*ϹOy%j\ڃ+52q>*7ދXl  Ql%ua,y %FW{lpЧY\dsjzgڭ&ih̶:i,xl@tI HxԀNrvAc#nt,3s΂@h;G|F즙Fe+oI38ꋕ_"ώD{K»sW]QN0H\sהȋ}]zpݒAˋdܟ4)Nc@<02G+To%P)>93}~WX3) 2<qa,+)7.,iفbw QL ʦ!6ͽkk sNa^ zv޸׃C}_O i" |kdn)șQ?sGUiZ6ّB3Y50},"ը + CwI Tajp@K8T7:xөo?,,scc"0țhwس} $gw:%>) ~G)3W}wNBzb7xE|~;_:Q%Z.w9CtSzuE2\Kw^Jvh_^Qt4BI}f }E-.y[VWm~:ARE(D]_-%cZ æ6WJ~tXYH?0;,>ZU{Oa!`Od_D+y`Jg0hUNE\z<'Imk??ͳQ@>0B_F.{HWրt{L4Hs++?*4! 偨#~42\>̕.PZhu&"4(bCxÈVv"+,Ndu;\d{[AY;O-^W-.r}9wq h75}k5y (8ni"ao?MvŀU8Q}-La<v`1$C~[7 pXMLO9֮63]4؉}RC!qyZbjI rs5^'ޣ3Ƣ.-Sq I"h5n]JdUo/Qs%٘8ڠŠp8nWyE쬬i`BbeEqL8OFϪZpyiۂODF*9/%\3RK"bpt[d8l la[[7>;eiΪ0F|{U~U桩X`0 K;U kE  'ErfLZjqvr ?7"ڡnOp늦!h~θA hD{)lהt/=:`ܳ"!]6v3n v +{lj]V(/Fi]w<{6:JX= ۦ7D[^'wN νr ӯH+Ϛl;qB3\1bM*|rYFO0{trfoX_N!40"v48}-l~ YiXVu:hH%08M1<Rʘng(b,k/"Ïp.k#<A 1E{CLԲ:g;pZ\e:<%?뀼N j'}[MB%ceW([o~gN?W>MhUo-ta'g}7X(eu`<-?6tUdv[؝pq FKc A_%A^w s)Е6 Y'-: g] 67#oBa#p9wBé(v층C Dϋ5a4{?u=(r|Y k;Kg$Nb$tx94FFV}wMh/]ÕY6&z'^@j[ -P/nzNM-'Ӭ,Lw$B#Y7r)#98o% JlCPmqLX^,};RٮM)j*e#28e\xx y "s5szj{\hGw"i}O͒ɡt3nq\T=;5[.L3`DZ;̰Nx_ HMHt$Df6cv<( ,R^x3]~$WۯV M_g' m.otw:vSrH-Vp!7cY$QN8ӹ^`$ބ%jJe!@EYbIY#&yC&@q{pY4[L>n ]?۪V $8 glqx%.-CO| תRqf1vP0/O\( g>ɀ`T7uYpG+RNy su܉@H)O@*@) ݸEj9N@{aJ\%}[6 V)K؜Qr ^6M>+r|fwd)@$S\p,1e=ꎜʽoVTÌWh#t/C(#ٿlR[Fh7X䆸(қj`k Z3(hBZ]Ɯd)(P\|K&<9@ːu9*6OY;Kך_sKCǝ+ڛ492Ɩڅx) \dfhCF<&.t)ChZP"WaAxǬL:r~jkGjn#p|ұ/ٙi!Ź6x& 6dzz[Dc3gg} YCʣtܝzeޅuN(b-ƉNv"6-vn\Q[(y)WnEQ Մ;#=J6/05\q挒؈_k"zJQAL%kܥk1&-̑7BpGAaxk*YbT/= c8؊iAնĝl0_bh`k',|][; t%ֲԌA trHY_X_AK `g%5Տ\mR`uJ,Q-ŻDM *ECbyVH/lGUc*05z;oJJ-;u_fxOpjyy?UR~޵@ș(+ukf$=-&Qa`U %]I Sl6Q,< Яf~o, ~ޝv u5߄ 2fQ`񨆧%=UdKKbJ=F =u!EM{pbJzV@NJhG?9WEFla>~-{';߅PZA2jw]8؜zf_CQbif~Opxb g|[tD1-49nA|ebb ض2ZSϫytk8 \\V8Z`Cs YE\-~T쳐9sOx8ڟG8-o0 qzPȦA{Tvޏ]zqM@(uY4"'A V}*" C4E4jfk 9Ƿ^wFsh.:U•MٰDzC3~~-}8_=ݚ\!V( vy7%!YW#GjtUH9\XZwM|Tq| ľ'QgX(/1l0VKt;:ýZu)*P'b¼H> ?Juv n)ұ_xMW+olB(c(HFs3y%k !jTkK?$@'ɑy ^eJ r)HUy䮬\\3 EA*U_L-@5zlފ1!ؠLrçKxY^1a8XF`e;P`Bo7GcWfItˌS?5z5ܔU*>\-Q??Vsp2^Ioh9US~ W CΖňshus[Y둏 N+6J1ϴaGכ[-J\IHotT9.17b)&f.7ti`4`%-51"Rʖ8x%)2"8eDc:&i cc }&l[oifm1sqYSϷ5(²ߥԉJ=U ϳ!FH8xa;Bv2'۞BTf%gEENIxW jwX3V'U eR[ k5#&g;8ma4_B9EҞ_s8b|1KaC^/7SmxxRäȊIץ) WoZLA#V O_ZMNblv~'gE@5$F"Nw d{EߤT2[Л 5}KzP 6ߔ*\VEK! `b Tz 92ͽ A#|D%T "!%7QӆcSu؃BݲNh' oVv:Tz4]X;`6Nx]Kb.E° E":@M<.b9nK/so*KŘ=V ^<[@KC$İl YdƵ!L(Zλ+J,>[^ev& < WэJx=FXh#ם^FB#XzKH=tbƽ{vhn}q>Y8s*A Oq*Po\L\s4zjVW!|D 9koUlUw R=v7g%―dOc.5_LH#L]8&CK%O{ERfpz0r T]YC- x/4f ہ"+/Lw';xޞZuPN(EB)'.ڢhu6t&Z‚fj >hT4 Шw*+YQ[|vɕG_:!T CX~,Gz}T٢:Y?<,?b[ӇcȐOM**_O*qU g'N!E3ϐ(D_Wӗ5!NAY[la̖؎'~m䟼R W?g 1V[*?Ĩ;LaY%XF:Qx|U~nA@;ӸR †{DZ*ӽͫ++}D`].MjNg'yauЋ"!HBc*~~Ґ@bg!fH5\iIXݦ+ /hI6k}aUle\bM?7)V!0K?'aD|b~ޘlUB䖩m:@υ٭=@X865UD- cƂk=fAjs2"OC @G5}oa:_ZƺT-p$`)wV^lFyApWXF޻} Ane9 1g1iZi"JsLye~0Fxiqt>RniAu]f_t6'_!ֶNB7\LTݼH4-c YvfTԣ! z^DvnʾyD{8bQJ+r 3챡W#*rް6iF|jkYZ?Y,L j갌5*Oz|smH-hAw/Yf JK^* 4}pzu[3 v/>ʻ)u\u U@z#wP6X1#?~$wcBWH}of-nZa8'lrnPCZ'Ji0ppjaV6^ؖ$h}VbJuE Vv6qIl)Oj_U}R|+!v \süU_:NX0&TM'eΕwP4Ej0(d WgOFJ_]}<GQ~{ ei_hB'љa¦-??Y!F׿ ;NT\^+E &糃[b6tE>Q=W7r}V1?] ?<`wupS> TYz! ȧ<+p9(I0%I pi-/J`w h c5Ded|ce̯e&I rѾ4|#>rdXum>Ql PsRXɌebClv\lcu@lɯm 2O 0UJ8G?$/Ud#DK)& n䂱gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.stapsdt.base.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.probes.bss.note.stapsdt.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``0( X3X30M8o^k^kEoXzXz@T{{X5^Bh00c11`UnppPUw} ۅ ۀۀ܀܀|T ! ! A!A! A !x A!@A!(30B0"Љ йGй'GԹ' Թ'hk'.'4=ܼ'8<(Llib64/python3.4/sre_compile.py000064400000046677152342604300012130 0ustar00# # Secret Labs' Regular Expression Engine # # convert template to internal format # # Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. # # See the sre.py file for information on usage and redistribution. # """Internal support module for sre""" import _sre import sre_parse from sre_constants import * from _sre import MAXREPEAT assert _sre.MAGIC == MAGIC, "SRE module mismatch" if _sre.CODESIZE == 2: MAXCODE = 65535 else: MAXCODE = 0xFFFFFFFF _LITERAL_CODES = set([LITERAL, NOT_LITERAL]) _REPEATING_CODES = set([REPEAT, MIN_REPEAT, MAX_REPEAT]) _SUCCESS_CODES = set([SUCCESS, FAILURE]) _ASSERT_CODES = set([ASSERT, ASSERT_NOT]) # Sets of lowercase characters which have the same uppercase. _equivalences = ( # LATIN SMALL LETTER I, LATIN SMALL LETTER DOTLESS I (0x69, 0x131), # iı # LATIN SMALL LETTER S, LATIN SMALL LETTER LONG S (0x73, 0x17f), # sſ # MICRO SIGN, GREEK SMALL LETTER MU (0xb5, 0x3bc), # µμ # COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI (0x345, 0x3b9, 0x1fbe), # \u0345ιι # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA (0x390, 0x1fd3), # ΐΐ # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA (0x3b0, 0x1fe3), # ΰΰ # GREEK SMALL LETTER BETA, GREEK BETA SYMBOL (0x3b2, 0x3d0), # βϐ # GREEK SMALL LETTER EPSILON, GREEK LUNATE EPSILON SYMBOL (0x3b5, 0x3f5), # εϵ # GREEK SMALL LETTER THETA, GREEK THETA SYMBOL (0x3b8, 0x3d1), # θϑ # GREEK SMALL LETTER KAPPA, GREEK KAPPA SYMBOL (0x3ba, 0x3f0), # κϰ # GREEK SMALL LETTER PI, GREEK PI SYMBOL (0x3c0, 0x3d6), # πϖ # GREEK SMALL LETTER RHO, GREEK RHO SYMBOL (0x3c1, 0x3f1), # ρϱ # GREEK SMALL LETTER FINAL SIGMA, GREEK SMALL LETTER SIGMA (0x3c2, 0x3c3), # ςσ # GREEK SMALL LETTER PHI, GREEK PHI SYMBOL (0x3c6, 0x3d5), # φϕ # LATIN SMALL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER LONG S WITH DOT ABOVE (0x1e61, 0x1e9b), # ṡẛ # LATIN SMALL LIGATURE LONG S T, LATIN SMALL LIGATURE ST (0xfb05, 0xfb06), # ſtst ) # Maps the lowercase code to lowercase codes which have the same uppercase. _ignorecase_fixes = {i: tuple(j for j in t if i != j) for t in _equivalences for i in t} def _compile(code, pattern, flags): # internal: compile a (sub)pattern emit = code.append _len = len LITERAL_CODES = _LITERAL_CODES REPEATING_CODES = _REPEATING_CODES SUCCESS_CODES = _SUCCESS_CODES ASSERT_CODES = _ASSERT_CODES if (flags & SRE_FLAG_IGNORECASE and not (flags & SRE_FLAG_LOCALE) and flags & SRE_FLAG_UNICODE): fixes = _ignorecase_fixes else: fixes = None for op, av in pattern: if op in LITERAL_CODES: if flags & SRE_FLAG_IGNORECASE: lo = _sre.getlower(av, flags) if fixes and lo in fixes: emit(OPCODES[IN_IGNORE]) skip = _len(code); emit(0) if op is NOT_LITERAL: emit(OPCODES[NEGATE]) for k in (lo,) + fixes[lo]: emit(OPCODES[LITERAL]) emit(k) emit(OPCODES[FAILURE]) code[skip] = _len(code) - skip else: emit(OPCODES[OP_IGNORE[op]]) emit(lo) else: emit(OPCODES[op]) emit(av) elif op is IN: if flags & SRE_FLAG_IGNORECASE: emit(OPCODES[OP_IGNORE[op]]) def fixup(literal, flags=flags): return _sre.getlower(literal, flags) else: emit(OPCODES[op]) fixup = None skip = _len(code); emit(0) _compile_charset(av, flags, code, fixup, fixes) code[skip] = _len(code) - skip elif op is ANY: if flags & SRE_FLAG_DOTALL: emit(OPCODES[ANY_ALL]) else: emit(OPCODES[ANY]) elif op in REPEATING_CODES: if flags & SRE_FLAG_TEMPLATE: raise error("internal: unsupported template operator") elif _simple(av) and op is not REPEAT: if op is MAX_REPEAT: emit(OPCODES[REPEAT_ONE]) else: emit(OPCODES[MIN_REPEAT_ONE]) skip = _len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) emit(OPCODES[SUCCESS]) code[skip] = _len(code) - skip else: emit(OPCODES[REPEAT]) skip = _len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) code[skip] = _len(code) - skip if op is MAX_REPEAT: emit(OPCODES[MAX_UNTIL]) else: emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: if av[0]: emit(OPCODES[MARK]) emit((av[0]-1)*2) # _compile_info(code, av[1], flags) _compile(code, av[1], flags) if av[0]: emit(OPCODES[MARK]) emit((av[0]-1)*2+1) elif op in SUCCESS_CODES: emit(OPCODES[op]) elif op in ASSERT_CODES: emit(OPCODES[op]) skip = _len(code); emit(0) if av[0] >= 0: emit(0) # look ahead else: lo, hi = av[1].getwidth() if lo != hi: raise error("look-behind requires fixed-width pattern") emit(lo) # look behind _compile(code, av[1], flags) emit(OPCODES[SUCCESS]) code[skip] = _len(code) - skip elif op is CALL: emit(OPCODES[op]) skip = _len(code); emit(0) _compile(code, av, flags) emit(OPCODES[SUCCESS]) code[skip] = _len(code) - skip elif op is AT: emit(OPCODES[op]) if flags & SRE_FLAG_MULTILINE: av = AT_MULTILINE.get(av, av) if flags & SRE_FLAG_LOCALE: av = AT_LOCALE.get(av, av) elif flags & SRE_FLAG_UNICODE: av = AT_UNICODE.get(av, av) emit(ATCODES[av]) elif op is BRANCH: emit(OPCODES[op]) tail = [] tailappend = tail.append for av in av[1]: skip = _len(code); emit(0) # _compile_info(code, av, flags) _compile(code, av, flags) emit(OPCODES[JUMP]) tailappend(_len(code)); emit(0) code[skip] = _len(code) - skip emit(0) # end of branch for tail in tail: code[tail] = _len(code) - tail elif op is CATEGORY: emit(OPCODES[op]) if flags & SRE_FLAG_LOCALE: av = CH_LOCALE[av] elif flags & SRE_FLAG_UNICODE: av = CH_UNICODE[av] emit(CHCODES[av]) elif op is GROUPREF: if flags & SRE_FLAG_IGNORECASE: emit(OPCODES[OP_IGNORE[op]]) else: emit(OPCODES[op]) emit(av-1) elif op is GROUPREF_EXISTS: emit(OPCODES[op]) emit(av[0]-1) skipyes = _len(code); emit(0) _compile(code, av[1], flags) if av[2]: emit(OPCODES[JUMP]) skipno = _len(code); emit(0) code[skipyes] = _len(code) - skipyes + 1 _compile(code, av[2], flags) code[skipno] = _len(code) - skipno else: code[skipyes] = _len(code) - skipyes + 1 else: raise ValueError("unsupported operand type", op) def _compile_charset(charset, flags, code, fixup=None, fixes=None): # compile charset subprogram emit = code.append for op, av in _optimize_charset(charset, fixup, fixes, flags & SRE_FLAG_UNICODE): emit(OPCODES[op]) if op is NEGATE: pass elif op is LITERAL: emit(av) elif op is RANGE: emit(av[0]) emit(av[1]) elif op is CHARSET: code.extend(av) elif op is BIGCHARSET: code.extend(av) elif op is CATEGORY: if flags & SRE_FLAG_LOCALE: emit(CHCODES[CH_LOCALE[av]]) elif flags & SRE_FLAG_UNICODE: emit(CHCODES[CH_UNICODE[av]]) else: emit(CHCODES[av]) else: raise error("internal: unsupported set operator") emit(OPCODES[FAILURE]) def _optimize_charset(charset, fixup, fixes, isunicode): # internal: optimize character set out = [] tail = [] charmap = bytearray(256) for op, av in charset: while True: try: if op is LITERAL: if fixup: i = fixup(av) charmap[i] = 1 if fixes and i in fixes: for k in fixes[i]: charmap[k] = 1 else: charmap[av] = 1 elif op is RANGE: r = range(av[0], av[1]+1) if fixup: r = map(fixup, r) if fixup and fixes: for i in r: charmap[i] = 1 if i in fixes: for k in fixes[i]: charmap[k] = 1 else: for i in r: charmap[i] = 1 elif op is NEGATE: out.append((op, av)) else: tail.append((op, av)) except IndexError: if len(charmap) == 256: # character set contains non-UCS1 character codes charmap += b'\0' * 0xff00 continue # character set contains non-BMP character codes if fixup and isunicode and op is RANGE: lo, hi = av ranges = [av] # There are only two ranges of cased astral characters: # 10400-1044F (Deseret) and 118A0-118DF (Warang Citi). _fixup_range(max(0x10000, lo), min(0x11fff, hi), ranges, fixup) for lo, hi in ranges: if lo == hi: tail.append((LITERAL, hi)) else: tail.append((RANGE, (lo, hi))) else: tail.append((op, av)) break # compress character map runs = [] q = 0 while True: p = charmap.find(1, q) if p < 0: break if len(runs) >= 2: runs = None break q = charmap.find(0, p) if q < 0: runs.append((p, len(charmap))) break runs.append((p, q)) if runs is not None: # use literal/range for p, q in runs: if q - p == 1: out.append((LITERAL, p)) else: out.append((RANGE, (p, q - 1))) out += tail # if the case was changed or new representation is more compact if fixup or len(out) < len(charset): return out # else original character set is good enough return charset # use bitmap if len(charmap) == 256: data = _mk_bitmap(charmap) out.append((CHARSET, data)) out += tail return out # To represent a big charset, first a bitmap of all characters in the # set is constructed. Then, this bitmap is sliced into chunks of 256 # characters, duplicate chunks are eliminated, and each chunk is # given a number. In the compiled expression, the charset is # represented by a 32-bit word sequence, consisting of one word for # the number of different chunks, a sequence of 256 bytes (64 words) # of chunk numbers indexed by their original chunk position, and a # sequence of 256-bit chunks (8 words each). # Compression is normally good: in a typical charset, large ranges of # Unicode will be either completely excluded (e.g. if only cyrillic # letters are to be matched), or completely included (e.g. if large # subranges of Kanji match). These ranges will be represented by # chunks of all one-bits or all zero-bits. # Matching can be also done efficiently: the more significant byte of # the Unicode character is an index into the chunk number, and the # less significant byte is a bit index in the chunk (just like the # CHARSET matching). charmap = bytes(charmap) # should be hashable comps = {} mapping = bytearray(256) block = 0 data = bytearray() for i in range(0, 65536, 256): chunk = charmap[i: i + 256] if chunk in comps: mapping[i // 256] = comps[chunk] else: mapping[i // 256] = comps[chunk] = block block += 1 data += chunk data = _mk_bitmap(data) data[0:0] = [block] + _bytes_to_codes(mapping) out.append((BIGCHARSET, data)) out += tail return out def _fixup_range(lo, hi, ranges, fixup): for i in map(fixup, range(lo, hi+1)): for k, (lo, hi) in enumerate(ranges): if i < lo: if l == lo - 1: ranges[k] = (i, hi) else: ranges.insert(k, (i, i)) break elif i > hi: if i == hi + 1: ranges[k] = (lo, i) break else: break else: ranges.append((i, i)) _CODEBITS = _sre.CODESIZE * 8 _BITS_TRANS = b'0' + b'1' * 255 def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int): s = bits.translate(_BITS_TRANS)[::-1] return [_int(s[i - _CODEBITS: i], 2) for i in range(len(s), 0, -_CODEBITS)] def _bytes_to_codes(b): # Convert block indices to word array a = memoryview(b).cast('I') assert a.itemsize == _sre.CODESIZE assert len(a) * a.itemsize == len(b) return a.tolist() def _simple(av): # check if av is a "simple" operator lo, hi = av[2].getwidth() return lo == hi == 1 and av[2][0][0] != SUBPATTERN def _generate_overlap_table(prefix): """ Generate an overlap table for the following prefix. An overlap table is a table of the same size as the prefix which informs about the potential self-overlap for each index in the prefix: - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with prefix[0:k] """ table = [0] * len(prefix) for i in range(1, len(prefix)): idx = table[i - 1] while prefix[i] != prefix[idx]: if idx == 0: table[i] = 0 break idx = table[idx - 1] else: table[i] = idx + 1 return table def _compile_info(code, pattern, flags): # internal: compile an info block. in the current version, # this contains min/max pattern width, and an optional literal # prefix or a character map lo, hi = pattern.getwidth() if lo == 0: return # not worth it # look for a literal prefix prefix = [] prefixappend = prefix.append prefix_skip = 0 charset = [] # not used charsetappend = charset.append if not (flags & SRE_FLAG_IGNORECASE): # look for literal prefix for op, av in pattern.data: if op is LITERAL: if len(prefix) == prefix_skip: prefix_skip = prefix_skip + 1 prefixappend(av) elif op is SUBPATTERN and len(av[1]) == 1: op, av = av[1][0] if op is LITERAL: prefixappend(av) else: break else: break # if no prefix, look for charset prefix if not prefix and pattern.data: op, av = pattern.data[0] if op is SUBPATTERN and av[1]: op, av = av[1][0] if op is LITERAL: charsetappend((op, av)) elif op is BRANCH: c = [] cappend = c.append for p in av[1]: if not p: break op, av = p[0] if op is LITERAL: cappend((op, av)) else: break else: charset = c elif op is BRANCH: c = [] cappend = c.append for p in av[1]: if not p: break op, av = p[0] if op is LITERAL: cappend((op, av)) else: break else: charset = c elif op is IN: charset = av ## if prefix: ## print "*** PREFIX", prefix, prefix_skip ## if charset: ## print "*** CHARSET", charset # add an info block emit = code.append emit(OPCODES[INFO]) skip = len(code); emit(0) # literal flag mask = 0 if prefix: mask = SRE_INFO_PREFIX if len(prefix) == prefix_skip == len(pattern.data): mask = mask + SRE_INFO_LITERAL elif charset: mask = mask + SRE_INFO_CHARSET emit(mask) # pattern length if lo < MAXCODE: emit(lo) else: emit(MAXCODE) prefix = prefix[:MAXCODE] if hi < MAXCODE: emit(hi) else: emit(0) # add literal prefix if prefix: emit(len(prefix)) # length emit(prefix_skip) # skip code.extend(prefix) # generate overlap table code.extend(_generate_overlap_table(prefix)) elif charset: _compile_charset(charset, flags, code) code[skip] = len(code) - skip def isstring(obj): return isinstance(obj, (str, bytes)) def _code(p, flags): flags = p.pattern.flags | flags code = [] # compile info block _compile_info(code, p, flags) # compile the pattern _compile(code, p.data, flags) code.append(OPCODES[SUCCESS]) return code def compile(p, flags=0): # internal: convert pattern list to internal format if isstring(p): pattern = p p = sre_parse.parse(p, flags) else: pattern = None code = _code(p, flags) # print code # XXX: get rid of this limitation! if p.pattern.groups > 100: raise AssertionError( "sorry, but this version only supports 100 named groups" ) # map in either direction groupindex = p.pattern.groupdict indexgroup = [None] * p.pattern.groups for k, i in groupindex.items(): indexgroup[i] = k return _sre.compile( pattern, flags | p.pattern.flags, code, p.pattern.groups-1, groupindex, indexgroup ) lib64/python3.4/sched.py000064400000014322152342604300010673 0ustar00"""A generally useful event scheduler class. Each instance of this class manages its own queue. No multi-threading is implied; you are supposed to hack that yourself, or use a single instance per application. Each instance is parametrized with two functions, one that is supposed to return the current time, one that is supposed to implement a delay. You can implement real-time scheduling by substituting time and sleep from built-in module time, or you can implement simulated time by writing your own functions. This can also be used to integrate scheduling with STDWIN events; the delay function is allowed to modify the queue. Time can be expressed as integers or floating point numbers, as long as it is consistent. Events are specified by tuples (time, priority, action, argument, kwargs). As in UNIX, lower priority numbers mean higher priority; in this way the queue can be maintained as a priority queue. Execution of the event means calling the action function, passing it the argument sequence in "argument" (remember that in Python, multiple function arguments are be packed in a sequence) and keyword parameters in "kwargs". The action function may be an instance method so it has another way to reference private data (besides global variables). """ # XXX The timefunc and delayfunc should have been defined as methods # XXX so you can define new kinds of schedulers using subclassing # XXX instead of having to define a module or class just to hold # XXX the global state of your particular time and delay functions. import time import heapq from collections import namedtuple try: import threading except ImportError: import dummy_threading as threading try: from time import monotonic as _time except ImportError: from time import time as _time __all__ = ["scheduler"] class Event(namedtuple('Event', 'time, priority, action, argument, kwargs')): def __eq__(s, o): return (s.time, s.priority) == (o.time, o.priority) def __ne__(s, o): return (s.time, s.priority) != (o.time, o.priority) def __lt__(s, o): return (s.time, s.priority) < (o.time, o.priority) def __le__(s, o): return (s.time, s.priority) <= (o.time, o.priority) def __gt__(s, o): return (s.time, s.priority) > (o.time, o.priority) def __ge__(s, o): return (s.time, s.priority) >= (o.time, o.priority) _sentinel = object() class scheduler: def __init__(self, timefunc=_time, delayfunc=time.sleep): """Initialize a new instance, passing the time and delay functions""" self._queue = [] self._lock = threading.RLock() self.timefunc = timefunc self.delayfunc = delayfunc def enterabs(self, time, priority, action, argument=(), kwargs=_sentinel): """Enter a new event in the queue at an absolute time. Returns an ID for the event which can be used to remove it, if necessary. """ if kwargs is _sentinel: kwargs = {} event = Event(time, priority, action, argument, kwargs) with self._lock: heapq.heappush(self._queue, event) return event # The ID def enter(self, delay, priority, action, argument=(), kwargs=_sentinel): """A variant that specifies the time as a relative time. This is actually the more commonly used interface. """ time = self.timefunc() + delay return self.enterabs(time, priority, action, argument, kwargs) def cancel(self, event): """Remove an event from the queue. This must be presented the ID as returned by enter(). If the event is not in the queue, this raises ValueError. """ with self._lock: self._queue.remove(event) heapq.heapify(self._queue) def empty(self): """Check whether the queue is empty.""" with self._lock: return not self._queue def run(self, blocking=True): """Execute events until the queue is empty. If blocking is False executes the scheduled events due to expire soonest (if any) and then return the deadline of the next scheduled call in the scheduler. When there is a positive delay until the first event, the delay function is called and the event is left in the queue; otherwise, the event is removed from the queue and executed (its action function is called, passing it the argument). If the delay function returns prematurely, it is simply restarted. It is legal for both the delay function and the action function to modify the queue or to raise an exception; exceptions are not caught but the scheduler's state remains well-defined so run() may be called again. A questionable hack is added to allow other threads to run: just after an event is executed, a delay of 0 is executed, to avoid monopolizing the CPU when other threads are also runnable. """ # localize variable access to minimize overhead # and to improve thread safety lock = self._lock q = self._queue delayfunc = self.delayfunc timefunc = self.timefunc pop = heapq.heappop while True: with lock: if not q: break time, priority, action, argument, kwargs = q[0] now = timefunc() if time > now: delay = True else: delay = False pop(q) if delay: if not blocking: return time - now delayfunc(time - now) else: action(*argument, **kwargs) delayfunc(0) # Let other threads run @property def queue(self): """An ordered list of upcoming events. Events are named tuples with fields for: time, priority, action, arguments, kwargs """ # Use heapq to sort the queue rather than using 'sorted(self._queue)'. # With heapq, two events scheduled at the same time will show in # the actual order they would be retrieved. with self._lock: events = self._queue[:] return list(map(heapq.heappop, [events]*len(events))) lib64/python3.4/fractions.py000064400000055243152342604300011604 0ustar00# Originally contributed by Sjoerd Mullender. # Significantly modified by Jeffrey Yasskin . """Fraction, infinite-precision, real numbers.""" from decimal import Decimal import math import numbers import operator import re import sys __all__ = ['Fraction', 'gcd'] def gcd(a, b): """Calculate the Greatest Common Divisor of a and b. Unless b==0, the result will have the same sign as b (so that when b is divided by it, the result comes out positive). """ while b: a, b = b, a%b return a # Constants related to the hash implementation; hash(x) is based # on the reduction of x modulo the prime _PyHASH_MODULUS. _PyHASH_MODULUS = sys.hash_info.modulus # Value to be used for rationals that reduce to infinity modulo # _PyHASH_MODULUS. _PyHASH_INF = sys.hash_info.inf _RATIONAL_FORMAT = re.compile(r""" \A\s* # optional whitespace at the start, then (?P[-+]?) # an optional sign, then (?=\d|\.\d) # lookahead for digit or .digit (?P\d*) # numerator (possibly empty) (?: # followed by (?:/(?P\d+))? # an optional denominator | # or (?:\.(?P\d*))? # an optional fractional part (?:E(?P[-+]?\d+))? # and optional exponent ) \s*\Z # and optional whitespace to finish """, re.VERBOSE | re.IGNORECASE) class Fraction(numbers.Rational): """This class implements rational numbers. In the two-argument form of the constructor, Fraction(8, 6) will produce a rational number equivalent to 4/3. Both arguments must be Rational. The numerator defaults to 0 and the denominator defaults to 1 so that Fraction(3) == 3 and Fraction() == 0. Fractions can also be constructed from: - numeric strings similar to those accepted by the float constructor (for example, '-2.3' or '1e10') - strings of the form '123/456' - float and Decimal instances - other Rational instances (including integers) """ __slots__ = ('_numerator', '_denominator') # We're immutable, so use __new__ not __init__ def __new__(cls, numerator=0, denominator=None): """Constructs a Rational. Takes a string like '3/2' or '1.5', another Rational instance, a numerator/denominator pair, or a float. Examples -------- >>> Fraction(10, -8) Fraction(-5, 4) >>> Fraction(Fraction(1, 7), 5) Fraction(1, 35) >>> Fraction(Fraction(1, 7), Fraction(2, 3)) Fraction(3, 14) >>> Fraction('314') Fraction(314, 1) >>> Fraction('-35/4') Fraction(-35, 4) >>> Fraction('3.1415') # conversion from numeric string Fraction(6283, 2000) >>> Fraction('-47e-2') # string may include a decimal exponent Fraction(-47, 100) >>> Fraction(1.47) # direct construction from float (exact conversion) Fraction(6620291452234629, 4503599627370496) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(Decimal('1.47')) Fraction(147, 100) """ self = super(Fraction, cls).__new__(cls) if denominator is None: if isinstance(numerator, numbers.Rational): self._numerator = numerator.numerator self._denominator = numerator.denominator return self elif isinstance(numerator, float): # Exact conversion from float value = Fraction.from_float(numerator) self._numerator = value._numerator self._denominator = value._denominator return self elif isinstance(numerator, Decimal): value = Fraction.from_decimal(numerator) self._numerator = value._numerator self._denominator = value._denominator return self elif isinstance(numerator, str): # Handle construction from strings. m = _RATIONAL_FORMAT.match(numerator) if m is None: raise ValueError('Invalid literal for Fraction: %r' % numerator) numerator = int(m.group('num') or '0') denom = m.group('denom') if denom: denominator = int(denom) else: denominator = 1 decimal = m.group('decimal') if decimal: scale = 10**len(decimal) numerator = numerator * scale + int(decimal) denominator *= scale exp = m.group('exp') if exp: exp = int(exp) if exp >= 0: numerator *= 10**exp else: denominator *= 10**-exp if m.group('sign') == '-': numerator = -numerator else: raise TypeError("argument should be a string " "or a Rational instance") elif (isinstance(numerator, numbers.Rational) and isinstance(denominator, numbers.Rational)): numerator, denominator = ( numerator.numerator * denominator.denominator, denominator.numerator * numerator.denominator ) else: raise TypeError("both arguments should be " "Rational instances") if denominator == 0: raise ZeroDivisionError('Fraction(%s, 0)' % numerator) g = gcd(numerator, denominator) self._numerator = numerator // g self._denominator = denominator // g return self @classmethod def from_float(cls, f): """Converts a finite float to a rational number, exactly. Beware that Fraction.from_float(0.3) != Fraction(3, 10). """ if isinstance(f, numbers.Integral): return cls(f) elif not isinstance(f, float): raise TypeError("%s.from_float() only takes floats, not %r (%s)" % (cls.__name__, f, type(f).__name__)) if math.isnan(f): raise ValueError("Cannot convert %r to %s." % (f, cls.__name__)) if math.isinf(f): raise OverflowError("Cannot convert %r to %s." % (f, cls.__name__)) return cls(*f.as_integer_ratio()) @classmethod def from_decimal(cls, dec): """Converts a finite Decimal instance to a rational number, exactly.""" from decimal import Decimal if isinstance(dec, numbers.Integral): dec = Decimal(int(dec)) elif not isinstance(dec, Decimal): raise TypeError( "%s.from_decimal() only takes Decimals, not %r (%s)" % (cls.__name__, dec, type(dec).__name__)) if dec.is_infinite(): raise OverflowError( "Cannot convert %s to %s." % (dec, cls.__name__)) if dec.is_nan(): raise ValueError("Cannot convert %s to %s." % (dec, cls.__name__)) sign, digits, exp = dec.as_tuple() digits = int(''.join(map(str, digits))) if sign: digits = -digits if exp >= 0: return cls(digits * 10 ** exp) else: return cls(digits, 10 ** -exp) def limit_denominator(self, max_denominator=1000000): """Closest Fraction to self with denominator at most max_denominator. >>> Fraction('3.141592653589793').limit_denominator(10) Fraction(22, 7) >>> Fraction('3.141592653589793').limit_denominator(100) Fraction(311, 99) >>> Fraction(4321, 8765).limit_denominator(10000) Fraction(4321, 8765) """ # Algorithm notes: For any real number x, define a *best upper # approximation* to x to be a rational number p/q such that: # # (1) p/q >= x, and # (2) if p/q > r/s >= x then s > q, for any rational r/s. # # Define *best lower approximation* similarly. Then it can be # proved that a rational number is a best upper or lower # approximation to x if, and only if, it is a convergent or # semiconvergent of the (unique shortest) continued fraction # associated to x. # # To find a best rational approximation with denominator <= M, # we find the best upper and lower approximations with # denominator <= M and take whichever of these is closer to x. # In the event of a tie, the bound with smaller denominator is # chosen. If both denominators are equal (which can happen # only when max_denominator == 1 and self is midway between # two integers) the lower bound---i.e., the floor of self, is # taken. if max_denominator < 1: raise ValueError("max_denominator should be at least 1") if self._denominator <= max_denominator: return Fraction(self) p0, q0, p1, q1 = 0, 1, 1, 0 n, d = self._numerator, self._denominator while True: a = n//d q2 = q0+a*q1 if q2 > max_denominator: break p0, q0, p1, q1 = p1, q1, p0+a*p1, q2 n, d = d, n-a*d k = (max_denominator-q0)//q1 bound1 = Fraction(p0+k*p1, q0+k*q1) bound2 = Fraction(p1, q1) if abs(bound2 - self) <= abs(bound1-self): return bound2 else: return bound1 @property def numerator(a): return a._numerator @property def denominator(a): return a._denominator def __repr__(self): """repr(self)""" return ('Fraction(%s, %s)' % (self._numerator, self._denominator)) def __str__(self): """str(self)""" if self._denominator == 1: return str(self._numerator) else: return '%s/%s' % (self._numerator, self._denominator) def _operator_fallbacks(monomorphic_operator, fallback_operator): """Generates forward and reverse operators given a purely-rational operator and a function from the operator module. Use this like: __op__, __rop__ = _operator_fallbacks(just_rational_op, operator.op) In general, we want to implement the arithmetic operations so that mixed-mode operations either call an implementation whose author knew about the types of both arguments, or convert both to the nearest built in type and do the operation there. In Fraction, that means that we define __add__ and __radd__ as: def __add__(self, other): # Both types have numerators/denominator attributes, # so do the operation directly if isinstance(other, (int, Fraction)): return Fraction(self.numerator * other.denominator + other.numerator * self.denominator, self.denominator * other.denominator) # float and complex don't have those operations, but we # know about those types, so special case them. elif isinstance(other, float): return float(self) + other elif isinstance(other, complex): return complex(self) + other # Let the other type take over. return NotImplemented def __radd__(self, other): # radd handles more types than add because there's # nothing left to fall back to. if isinstance(other, numbers.Rational): return Fraction(self.numerator * other.denominator + other.numerator * self.denominator, self.denominator * other.denominator) elif isinstance(other, Real): return float(other) + float(self) elif isinstance(other, Complex): return complex(other) + complex(self) return NotImplemented There are 5 different cases for a mixed-type addition on Fraction. I'll refer to all of the above code that doesn't refer to Fraction, float, or complex as "boilerplate". 'r' will be an instance of Fraction, which is a subtype of Rational (r : Fraction <: Rational), and b : B <: Complex. The first three involve 'r + b': 1. If B <: Fraction, int, float, or complex, we handle that specially, and all is well. 2. If Fraction falls back to the boilerplate code, and it were to return a value from __add__, we'd miss the possibility that B defines a more intelligent __radd__, so the boilerplate should return NotImplemented from __add__. In particular, we don't handle Rational here, even though we could get an exact answer, in case the other type wants to do something special. 3. If B <: Fraction, Python tries B.__radd__ before Fraction.__add__. This is ok, because it was implemented with knowledge of Fraction, so it can handle those instances before delegating to Real or Complex. The next two situations describe 'b + r'. We assume that b didn't know about Fraction in its implementation, and that it uses similar boilerplate code: 4. If B <: Rational, then __radd_ converts both to the builtin rational type (hey look, that's us) and proceeds. 5. Otherwise, __radd__ tries to find the nearest common base ABC, and fall back to its builtin type. Since this class doesn't subclass a concrete type, there's no implementation to fall back to, so we need to try as hard as possible to return an actual value, or the user will get a TypeError. """ def forward(a, b): if isinstance(b, (int, Fraction)): return monomorphic_operator(a, b) elif isinstance(b, float): return fallback_operator(float(a), b) elif isinstance(b, complex): return fallback_operator(complex(a), b) else: return NotImplemented forward.__name__ = '__' + fallback_operator.__name__ + '__' forward.__doc__ = monomorphic_operator.__doc__ def reverse(b, a): if isinstance(a, numbers.Rational): # Includes ints. return monomorphic_operator(a, b) elif isinstance(a, numbers.Real): return fallback_operator(float(a), float(b)) elif isinstance(a, numbers.Complex): return fallback_operator(complex(a), complex(b)) else: return NotImplemented reverse.__name__ = '__r' + fallback_operator.__name__ + '__' reverse.__doc__ = monomorphic_operator.__doc__ return forward, reverse def _add(a, b): """a + b""" return Fraction(a.numerator * b.denominator + b.numerator * a.denominator, a.denominator * b.denominator) __add__, __radd__ = _operator_fallbacks(_add, operator.add) def _sub(a, b): """a - b""" return Fraction(a.numerator * b.denominator - b.numerator * a.denominator, a.denominator * b.denominator) __sub__, __rsub__ = _operator_fallbacks(_sub, operator.sub) def _mul(a, b): """a * b""" return Fraction(a.numerator * b.numerator, a.denominator * b.denominator) __mul__, __rmul__ = _operator_fallbacks(_mul, operator.mul) def _div(a, b): """a / b""" return Fraction(a.numerator * b.denominator, a.denominator * b.numerator) __truediv__, __rtruediv__ = _operator_fallbacks(_div, operator.truediv) def __floordiv__(a, b): """a // b""" return math.floor(a / b) def __rfloordiv__(b, a): """a // b""" return math.floor(a / b) def __mod__(a, b): """a % b""" div = a // b return a - b * div def __rmod__(b, a): """a % b""" div = a // b return a - b * div def __pow__(a, b): """a ** b If b is not an integer, the result will be a float or complex since roots are generally irrational. If b is an integer, the result will be rational. """ if isinstance(b, numbers.Rational): if b.denominator == 1: power = b.numerator if power >= 0: return Fraction(a._numerator ** power, a._denominator ** power) else: return Fraction(a._denominator ** -power, a._numerator ** -power) else: # A fractional power will generally produce an # irrational number. return float(a) ** float(b) else: return float(a) ** b def __rpow__(b, a): """a ** b""" if b._denominator == 1 and b._numerator >= 0: # If a is an int, keep it that way if possible. return a ** b._numerator if isinstance(a, numbers.Rational): return Fraction(a.numerator, a.denominator) ** b if b._denominator == 1: return a ** b._numerator return a ** float(b) def __pos__(a): """+a: Coerces a subclass instance to Fraction""" return Fraction(a._numerator, a._denominator) def __neg__(a): """-a""" return Fraction(-a._numerator, a._denominator) def __abs__(a): """abs(a)""" return Fraction(abs(a._numerator), a._denominator) def __trunc__(a): """trunc(a)""" if a._numerator < 0: return -(-a._numerator // a._denominator) else: return a._numerator // a._denominator def __floor__(a): """Will be math.floor(a) in 3.0.""" return a.numerator // a.denominator def __ceil__(a): """Will be math.ceil(a) in 3.0.""" # The negations cleverly convince floordiv to return the ceiling. return -(-a.numerator // a.denominator) def __round__(self, ndigits=None): """Will be round(self, ndigits) in 3.0. Rounds half toward even. """ if ndigits is None: floor, remainder = divmod(self.numerator, self.denominator) if remainder * 2 < self.denominator: return floor elif remainder * 2 > self.denominator: return floor + 1 # Deal with the half case: elif floor % 2 == 0: return floor else: return floor + 1 shift = 10**abs(ndigits) # See _operator_fallbacks.forward to check that the results of # these operations will always be Fraction and therefore have # round(). if ndigits > 0: return Fraction(round(self * shift), shift) else: return Fraction(round(self / shift) * shift) def __hash__(self): """hash(self)""" # XXX since this method is expensive, consider caching the result # In order to make sure that the hash of a Fraction agrees # with the hash of a numerically equal integer, float or # Decimal instance, we follow the rules for numeric hashes # outlined in the documentation. (See library docs, 'Built-in # Types'). # dinv is the inverse of self._denominator modulo the prime # _PyHASH_MODULUS, or 0 if self._denominator is divisible by # _PyHASH_MODULUS. dinv = pow(self._denominator, _PyHASH_MODULUS - 2, _PyHASH_MODULUS) if not dinv: hash_ = _PyHASH_INF else: hash_ = abs(self._numerator) * dinv % _PyHASH_MODULUS result = hash_ if self >= 0 else -hash_ return -2 if result == -1 else result def __eq__(a, b): """a == b""" if isinstance(b, numbers.Rational): return (a._numerator == b.numerator and a._denominator == b.denominator) if isinstance(b, numbers.Complex) and b.imag == 0: b = b.real if isinstance(b, float): if math.isnan(b) or math.isinf(b): # comparisons with an infinity or nan should behave in # the same way for any finite a, so treat a as zero. return 0.0 == b else: return a == a.from_float(b) else: # Since a doesn't know how to compare with b, let's give b # a chance to compare itself with a. return NotImplemented def _richcmp(self, other, op): """Helper for comparison operators, for internal use only. Implement comparison between a Rational instance `self`, and either another Rational instance or a float `other`. If `other` is not a Rational instance or a float, return NotImplemented. `op` should be one of the six standard comparison operators. """ # convert other to a Rational instance where reasonable. if isinstance(other, numbers.Rational): return op(self._numerator * other.denominator, self._denominator * other.numerator) if isinstance(other, float): if math.isnan(other) or math.isinf(other): return op(0.0, other) else: return op(self, self.from_float(other)) else: return NotImplemented def __lt__(a, b): """a < b""" return a._richcmp(b, operator.lt) def __gt__(a, b): """a > b""" return a._richcmp(b, operator.gt) def __le__(a, b): """a <= b""" return a._richcmp(b, operator.le) def __ge__(a, b): """a >= b""" return a._richcmp(b, operator.ge) def __bool__(a): """a != 0""" return a._numerator != 0 # support for pickling, copy, and deepcopy def __reduce__(self): return (self.__class__, (str(self),)) def __copy__(self): if type(self) == Fraction: return self # I'm immutable; therefore I am my own clone return self.__class__(self._numerator, self._denominator) def __deepcopy__(self, memo): if type(self) == Fraction: return self # My components are also immutable return self.__class__(self._numerator, self._denominator) lib64/python3.4/tempfile.py000064400000053775152342604300011431 0ustar00"""Temporary files. This module provides generic, low- and high-level interfaces for creating temporary files and directories. All of the interfaces provided by this module can be used without fear of race conditions except for 'mktemp'. 'mktemp' is subject to race conditions and should not be used; it is provided for backward compatibility only. This module also provides some data items to the user: TMP_MAX - maximum number of names that will be tried before giving up. tempdir - If this is set to a string before the first use of any routine from this module, it will be considered as another candidate location to store temporary files. """ __all__ = [ "NamedTemporaryFile", "TemporaryFile", # high level safe interfaces "SpooledTemporaryFile", "TemporaryDirectory", "mkstemp", "mkdtemp", # low level safe interfaces "mktemp", # deprecated unsafe interface "TMP_MAX", "gettempprefix", # constants "tempdir", "gettempdir" ] # Imports. import functools as _functools import warnings as _warnings import io as _io import os as _os import shutil as _shutil import errno as _errno from random import Random as _Random import weakref as _weakref try: import _thread except ImportError: import _dummy_thread as _thread _allocate_lock = _thread.allocate_lock _text_openflags = _os.O_RDWR | _os.O_CREAT | _os.O_EXCL if hasattr(_os, 'O_NOFOLLOW'): _text_openflags |= _os.O_NOFOLLOW _bin_openflags = _text_openflags if hasattr(_os, 'O_BINARY'): _bin_openflags |= _os.O_BINARY if hasattr(_os, 'TMP_MAX'): TMP_MAX = _os.TMP_MAX else: TMP_MAX = 10000 # Although it does not have an underscore for historical reasons, this # variable is an internal implementation detail (see issue 10354). template = "tmp" # Internal routines. _once_lock = _allocate_lock() if hasattr(_os, "lstat"): _stat = _os.lstat elif hasattr(_os, "stat"): _stat = _os.stat else: # Fallback. All we need is something that raises OSError if the # file doesn't exist. def _stat(fn): fd = _os.open(fn, _os.O_RDONLY) _os.close(fd) def _exists(fn): try: _stat(fn) except OSError: return False else: return True class _RandomNameSequence: """An instance of _RandomNameSequence generates an endless sequence of unpredictable strings which can safely be incorporated into file names. Each string is six characters long. Multiple threads can safely use the same instance at the same time. _RandomNameSequence is an iterator.""" characters = "abcdefghijklmnopqrstuvwxyz0123456789_" @property def rng(self): cur_pid = _os.getpid() if cur_pid != getattr(self, '_rng_pid', None): self._rng = _Random() self._rng_pid = cur_pid return self._rng def __iter__(self): return self def __next__(self): c = self.characters choose = self.rng.choice letters = [choose(c) for dummy in range(8)] return ''.join(letters) def _candidate_tempdir_list(): """Generate a list of candidate temporary directories which _get_default_tempdir will try.""" dirlist = [] # First, try the environment. for envname in 'TMPDIR', 'TEMP', 'TMP': dirname = _os.getenv(envname) if dirname: dirlist.append(dirname) # Failing that, try OS-specific locations. if _os.name == 'nt': dirlist.extend([ r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ]) else: dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ]) # As a last resort, the current directory. try: dirlist.append(_os.getcwd()) except (AttributeError, OSError): dirlist.append(_os.curdir) return dirlist def _get_default_tempdir(): """Calculate the default directory to use for temporary files. This routine should be called exactly once. We determine whether or not a candidate temp dir is usable by trying to create and write to a file in that directory. If this is successful, the test file is deleted. To prevent denial of service, the name of the test file must be randomized.""" namer = _RandomNameSequence() dirlist = _candidate_tempdir_list() for dir in dirlist: if dir != _os.curdir: dir = _os.path.abspath(dir) # Try only a few names per directory. for seq in range(100): name = next(namer) filename = _os.path.join(dir, name) try: fd = _os.open(filename, _bin_openflags, 0o600) try: try: with _io.open(fd, 'wb', closefd=False) as fp: fp.write(b'blat') finally: _os.close(fd) finally: _os.unlink(filename) return dir except FileExistsError: pass except PermissionError: # This exception is thrown when a directory with the chosen name # already exists on windows. if (_os.name == 'nt' and _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): continue break # no point trying more names in this directory except OSError: break # no point trying more names in this directory raise FileNotFoundError(_errno.ENOENT, "No usable temporary directory found in %s" % dirlist) _name_sequence = None def _get_candidate_names(): """Common setup sequence for all user-callable interfaces.""" global _name_sequence if _name_sequence is None: _once_lock.acquire() try: if _name_sequence is None: _name_sequence = _RandomNameSequence() finally: _once_lock.release() return _name_sequence def _mkstemp_inner(dir, pre, suf, flags): """Code common to mkstemp, TemporaryFile, and NamedTemporaryFile.""" names = _get_candidate_names() for seq in range(TMP_MAX): name = next(names) file = _os.path.join(dir, pre + name + suf) try: fd = _os.open(file, flags, 0o600) return (fd, _os.path.abspath(file)) except FileExistsError: continue # try again except PermissionError: # This exception is thrown when a directory with the chosen name # already exists on windows. if (_os.name == 'nt' and _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): continue else: raise raise FileExistsError(_errno.EEXIST, "No usable temporary file name found") # User visible interfaces. def gettempprefix(): """Accessor for tempdir.template.""" return template tempdir = None def gettempdir(): """Accessor for tempfile.tempdir.""" global tempdir if tempdir is None: _once_lock.acquire() try: if tempdir is None: tempdir = _get_default_tempdir() finally: _once_lock.release() return tempdir def mkstemp(suffix="", prefix=template, dir=None, text=False): """User-callable function to create and return a unique temporary file. The return value is a pair (fd, name) where fd is the file descriptor returned by os.open, and name is the filename. If 'suffix' is specified, the file name will end with that suffix, otherwise there will be no suffix. If 'prefix' is specified, the file name will begin with that prefix, otherwise a default prefix is used. If 'dir' is specified, the file will be created in that directory, otherwise a default directory is used. If 'text' is specified and true, the file is opened in text mode. Else (the default) the file is opened in binary mode. On some operating systems, this makes no difference. The file is readable and writable only by the creating user ID. If the operating system uses permission bits to indicate whether a file is executable, the file is executable by no one. The file descriptor is not inherited by children of this process. Caller is responsible for deleting the file when done with it. """ if dir is None: dir = gettempdir() if text: flags = _text_openflags else: flags = _bin_openflags return _mkstemp_inner(dir, prefix, suffix, flags) def mkdtemp(suffix="", prefix=template, dir=None): """User-callable function to create and return a unique temporary directory. The return value is the pathname of the directory. Arguments are as for mkstemp, except that the 'text' argument is not accepted. The directory is readable, writable, and searchable only by the creating user. Caller is responsible for deleting the directory when done with it. """ if dir is None: dir = gettempdir() names = _get_candidate_names() for seq in range(TMP_MAX): name = next(names) file = _os.path.join(dir, prefix + name + suffix) try: _os.mkdir(file, 0o700) return file except FileExistsError: continue # try again except PermissionError: # This exception is thrown when a directory with the chosen name # already exists on windows. if (_os.name == 'nt' and _os.path.isdir(dir) and _os.access(dir, _os.W_OK)): continue else: raise raise FileExistsError(_errno.EEXIST, "No usable temporary directory name found") def mktemp(suffix="", prefix=template, dir=None): """User-callable function to return a unique temporary file name. The file is not created. Arguments are as for mkstemp, except that the 'text' argument is not accepted. This function is unsafe and should not be used. The file name refers to a file that did not exist at some point, but by the time you get around to creating it, someone else may have beaten you to the punch. """ ## from warnings import warn as _warn ## _warn("mktemp is a potential security risk to your program", ## RuntimeWarning, stacklevel=2) if dir is None: dir = gettempdir() names = _get_candidate_names() for seq in range(TMP_MAX): name = next(names) file = _os.path.join(dir, prefix + name + suffix) if not _exists(file): return file raise FileExistsError(_errno.EEXIST, "No usable temporary filename found") class _TemporaryFileCloser: """A separate object allowing proper closing of a temporary file's underlying file object, without adding a __del__ method to the temporary file.""" file = None # Set here since __del__ checks it close_called = False def __init__(self, file, name, delete=True): self.file = file self.name = name self.delete = delete # NT provides delete-on-close as a primitive, so we don't need # the wrapper to do anything special. We still use it so that # file.name is useful (i.e. not "(fdopen)") with NamedTemporaryFile. if _os.name != 'nt': # Cache the unlinker so we don't get spurious errors at # shutdown when the module-level "os" is None'd out. Note # that this must be referenced as self.unlink, because the # name TemporaryFileWrapper may also get None'd out before # __del__ is called. def close(self, unlink=_os.unlink): if not self.close_called and self.file is not None: self.close_called = True try: self.file.close() finally: if self.delete: unlink(self.name) # Need to ensure the file is deleted on __del__ def __del__(self): self.close() else: def close(self): if not self.close_called: self.close_called = True self.file.close() class _TemporaryFileWrapper: """Temporary file wrapper This class provides a wrapper around files opened for temporary use. In particular, it seeks to automatically remove the file when it is no longer needed. """ def __init__(self, file, name, delete=True): self.file = file self.name = name self.delete = delete self._closer = _TemporaryFileCloser(file, name, delete) def __getattr__(self, name): # Attribute lookups are delegated to the underlying file # and cached for non-numeric results # (i.e. methods are cached, closed and friends are not) file = self.__dict__['file'] a = getattr(file, name) if hasattr(a, '__call__'): func = a @_functools.wraps(func) def func_wrapper(*args, **kwargs): return func(*args, **kwargs) # Avoid closing the file as long as the wrapper is alive, # see issue #18879. func_wrapper._closer = self._closer a = func_wrapper if not isinstance(a, int): setattr(self, name, a) return a # The underlying __enter__ method returns the wrong object # (self.file) so override it to return the wrapper def __enter__(self): self.file.__enter__() return self # Need to trap __exit__ as well to ensure the file gets # deleted when used in a with statement def __exit__(self, exc, value, tb): result = self.file.__exit__(exc, value, tb) self.close() return result def close(self): """ Close the temporary file, possibly deleting it. """ self._closer.close() # iter() doesn't use __getattr__ to find the __iter__ method def __iter__(self): # Don't return iter(self.file), but yield from it to avoid closing # file as long as it's being used as iterator (see issue #23700). We # can't use 'yield from' here because iter(file) returns the file # object itself, which has a close method, and thus the file would get # closed when the generator is finalized, due to PEP380 semantics. for line in self.file: yield line def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix="", prefix=template, dir=None, delete=True): """Create and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to io.open (default "w+b"). 'buffering' -- the buffer size argument to io.open (default -1). 'encoding' -- the encoding argument to io.open (default None) 'newline' -- the newline argument to io.open (default None) 'delete' -- whether the file is deleted on close (default True). The file is created as mkstemp() would do it. Returns an object with a file-like interface; the name of the file is accessible as file.name. The file will be automatically deleted when it is closed unless the 'delete' argument is set to False. """ if dir is None: dir = gettempdir() flags = _bin_openflags # Setting O_TEMPORARY in the flags causes the OS to delete # the file when it is closed. This is only supported by Windows. if _os.name == 'nt' and delete: flags |= _os.O_TEMPORARY (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) try: file = _io.open(fd, mode, buffering=buffering, newline=newline, encoding=encoding) return _TemporaryFileWrapper(file, name, delete) except Exception: _os.close(fd) raise if _os.name != 'posix' or _os.sys.platform == 'cygwin': # On non-POSIX and Cygwin systems, assume that we cannot unlink a file # while it is open. TemporaryFile = NamedTemporaryFile else: def TemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix="", prefix=template, dir=None): """Create and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to io.open (default "w+b"). 'buffering' -- the buffer size argument to io.open (default -1). 'encoding' -- the encoding argument to io.open (default None) 'newline' -- the newline argument to io.open (default None) The file is created as mkstemp() would do it. Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed. """ if dir is None: dir = gettempdir() flags = _bin_openflags (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) try: _os.unlink(name) return _io.open(fd, mode, buffering=buffering, newline=newline, encoding=encoding) except: _os.close(fd) raise class SpooledTemporaryFile: """Temporary file wrapper, specialized to switch from BytesIO or StringIO to a real file when it exceeds a certain size or when a fileno is needed. """ _rolled = False def __init__(self, max_size=0, mode='w+b', buffering=-1, encoding=None, newline=None, suffix="", prefix=template, dir=None): if 'b' in mode: self._file = _io.BytesIO() else: # Setting newline="\n" avoids newline translation; # this is important because otherwise on Windows we'd # get double newline translation upon rollover(). self._file = _io.StringIO(newline="\n") self._max_size = max_size self._rolled = False self._TemporaryFileArgs = {'mode': mode, 'buffering': buffering, 'suffix': suffix, 'prefix': prefix, 'encoding': encoding, 'newline': newline, 'dir': dir} def _check(self, file): if self._rolled: return max_size = self._max_size if max_size and file.tell() > max_size: self.rollover() def rollover(self): if self._rolled: return file = self._file newfile = self._file = TemporaryFile(**self._TemporaryFileArgs) del self._TemporaryFileArgs newfile.write(file.getvalue()) newfile.seek(file.tell(), 0) self._rolled = True # The method caching trick from NamedTemporaryFile # won't work here, because _file may change from a # BytesIO/StringIO instance to a real file. So we list # all the methods directly. # Context management protocol def __enter__(self): if self._file.closed: raise ValueError("Cannot enter context with closed file") return self def __exit__(self, exc, value, tb): self._file.close() # file protocol def __iter__(self): return self._file.__iter__() def close(self): self._file.close() @property def closed(self): return self._file.closed @property def encoding(self): try: return self._file.encoding except AttributeError: if 'b' in self._TemporaryFileArgs['mode']: raise return self._TemporaryFileArgs['encoding'] def fileno(self): self.rollover() return self._file.fileno() def flush(self): self._file.flush() def isatty(self): return self._file.isatty() @property def mode(self): try: return self._file.mode except AttributeError: return self._TemporaryFileArgs['mode'] @property def name(self): try: return self._file.name except AttributeError: return None @property def newlines(self): try: return self._file.newlines except AttributeError: if 'b' in self._TemporaryFileArgs['mode']: raise return self._TemporaryFileArgs['newline'] def read(self, *args): return self._file.read(*args) def readline(self, *args): return self._file.readline(*args) def readlines(self, *args): return self._file.readlines(*args) def seek(self, *args): self._file.seek(*args) @property def softspace(self): return self._file.softspace def tell(self): return self._file.tell() def truncate(self, size=None): if size is None: self._file.truncate() else: if size > self._max_size: self.rollover() self._file.truncate(size) def write(self, s): file = self._file rv = file.write(s) self._check(file) return rv def writelines(self, iterable): file = self._file rv = file.writelines(iterable) self._check(file) return rv class TemporaryDirectory(object): """Create and return a temporary directory. This has the same behavior as mkdtemp but can be used as a context manager. For example: with TemporaryDirectory() as tmpdir: ... Upon exiting the context, the directory and everything contained in it are removed. """ def __init__(self, suffix="", prefix=template, dir=None): self.name = mkdtemp(suffix, prefix, dir) self._finalizer = _weakref.finalize( self, self._cleanup, self.name, warn_message="Implicitly cleaning up {!r}".format(self)) @classmethod def _cleanup(cls, name, warn_message): _shutil.rmtree(name) _warnings.warn(warn_message, ResourceWarning) def __repr__(self): return "<{} {!r}>".format(self.__class__.__name__, self.name) def __enter__(self): return self.name def __exit__(self, exc, value, tb): self.cleanup() def cleanup(self): if self._finalizer.detach(): _shutil.rmtree(self.name) lib64/python3.4/_osx_support.py000064400000045235152342604300012360 0ustar00"""Shared OS X support functions.""" import os import re import sys __all__ = [ 'compiler_fixup', 'customize_config_vars', 'customize_compiler', 'get_platform_osx', ] # configuration variables that may contain universal build flags, # like "-arch" or "-isdkroot", that may need customization for # the user environment _UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'CC', 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS', 'PY_CORE_CFLAGS') # configuration variables that may contain compiler calls _COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'CC', 'CXX') # prefix added to original configuration variable names _INITPRE = '_OSX_SUPPORT_INITIAL_' def _find_executable(executable, path=None): """Tries to find 'executable' in the directories listed in 'path'. A string listing directories separated by 'os.pathsep'; defaults to os.environ['PATH']. Returns the complete filename or None if not found. """ if path is None: path = os.environ['PATH'] paths = path.split(os.pathsep) base, ext = os.path.splitext(executable) if (sys.platform == 'win32') and (ext != '.exe'): executable = executable + '.exe' if not os.path.isfile(executable): for p in paths: f = os.path.join(p, executable) if os.path.isfile(f): # the file exists, we have a shot at spawn working return f return None else: return executable def _read_output(commandstring): """Output from successful command execution or None""" # Similar to os.popen(commandstring, "r").read(), # but without actually using os.popen because that # function is not usable during python bootstrap. # tempfile is also not available then. import contextlib try: import tempfile fp = tempfile.NamedTemporaryFile() except ImportError: fp = open("/tmp/_osx_support.%s"%( os.getpid(),), "w+b") with contextlib.closing(fp) as fp: cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name) return fp.read().decode('utf-8').strip() if not os.system(cmd) else None def _find_build_tool(toolname): """Find a build tool on current path or using xcrun""" return (_find_executable(toolname) or _read_output("/usr/bin/xcrun -find %s" % (toolname,)) or '' ) _SYSTEM_VERSION = None def _get_system_version(): """Return the OS X system version as a string""" # Reading this plist is a documented way to get the system # version (see the documentation for the Gestalt Manager) # We avoid using platform.mac_ver to avoid possible bootstrap issues during # the build of Python itself (distutils is used to build standard library # extensions). global _SYSTEM_VERSION if _SYSTEM_VERSION is None: _SYSTEM_VERSION = '' try: f = open('/System/Library/CoreServices/SystemVersion.plist') except OSError: # We're on a plain darwin box, fall back to the default # behaviour. pass else: try: m = re.search(r'ProductUserVisibleVersion\s*' r'(.*?)', f.read()) finally: f.close() if m is not None: _SYSTEM_VERSION = '.'.join(m.group(1).split('.')[:2]) # else: fall back to the default behaviour return _SYSTEM_VERSION def _remove_original_values(_config_vars): """Remove original unmodified values for testing""" # This is needed for higher-level cross-platform tests of get_platform. for k in list(_config_vars): if k.startswith(_INITPRE): del _config_vars[k] def _save_modified_value(_config_vars, cv, newvalue): """Save modified and original unmodified value of configuration var""" oldvalue = _config_vars.get(cv, '') if (oldvalue != newvalue) and (_INITPRE + cv not in _config_vars): _config_vars[_INITPRE + cv] = oldvalue _config_vars[cv] = newvalue def _supports_universal_builds(): """Returns True if universal builds are supported on this system""" # As an approximation, we assume that if we are running on 10.4 or above, # then we are running with an Xcode environment that supports universal # builds, in particular -isysroot and -arch arguments to the compiler. This # is in support of allowing 10.4 universal builds to run on 10.3.x systems. osx_version = _get_system_version() if osx_version: try: osx_version = tuple(int(i) for i in osx_version.split('.')) except ValueError: osx_version = '' return bool(osx_version >= (10, 4)) if osx_version else False def _find_appropriate_compiler(_config_vars): """Find appropriate C compiler for extension module builds""" # Issue #13590: # The OSX location for the compiler varies between OSX # (or rather Xcode) releases. With older releases (up-to 10.5) # the compiler is in /usr/bin, with newer releases the compiler # can only be found inside Xcode.app if the "Command Line Tools" # are not installed. # # Futhermore, the compiler that can be used varies between # Xcode releases. Up to Xcode 4 it was possible to use 'gcc-4.2' # as the compiler, after that 'clang' should be used because # gcc-4.2 is either not present, or a copy of 'llvm-gcc' that # miscompiles Python. # skip checks if the compiler was overriden with a CC env variable if 'CC' in os.environ: return _config_vars # The CC config var might contain additional arguments. # Ignore them while searching. cc = oldcc = _config_vars['CC'].split()[0] if not _find_executable(cc): # Compiler is not found on the shell search PATH. # Now search for clang, first on PATH (if the Command LIne # Tools have been installed in / or if the user has provided # another location via CC). If not found, try using xcrun # to find an uninstalled clang (within a selected Xcode). # NOTE: Cannot use subprocess here because of bootstrap # issues when building Python itself (and os.popen is # implemented on top of subprocess and is therefore not # usable as well) cc = _find_build_tool('clang') elif os.path.basename(cc).startswith('gcc'): # Compiler is GCC, check if it is LLVM-GCC data = _read_output("'%s' --version" % (cc.replace("'", "'\"'\"'"),)) if data and 'llvm-gcc' in data: # Found LLVM-GCC, fall back to clang cc = _find_build_tool('clang') if not cc: raise SystemError( "Cannot locate working compiler") if cc != oldcc: # Found a replacement compiler. # Modify config vars using new compiler, if not already explicitly # overriden by an env variable, preserving additional arguments. for cv in _COMPILER_CONFIG_VARS: if cv in _config_vars and cv not in os.environ: cv_split = _config_vars[cv].split() cv_split[0] = cc if cv != 'CXX' else cc + '++' _save_modified_value(_config_vars, cv, ' '.join(cv_split)) return _config_vars def _remove_universal_flags(_config_vars): """Remove all universal build arguments from config vars""" for cv in _UNIVERSAL_CONFIG_VARS: # Do not alter a config var explicitly overriden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub('-arch\s+\w+\s', ' ', flags, re.ASCII) flags = re.sub('-isysroot [^ \t]*', ' ', flags) _save_modified_value(_config_vars, cv, flags) return _config_vars def _remove_unsupported_archs(_config_vars): """Remove any unsupported archs from config vars""" # Different Xcode releases support different sets for '-arch' # flags. In particular, Xcode 4.x no longer supports the # PPC architectures. # # This code automatically removes '-arch ppc' and '-arch ppc64' # when these are not supported. That makes it possible to # build extensions on OSX 10.7 and later with the prebuilt # 32-bit installer on the python.org website. # skip checks if the compiler was overriden with a CC env variable if 'CC' in os.environ: return _config_vars if re.search('-arch\s+ppc', _config_vars['CFLAGS']) is not None: # NOTE: Cannot use subprocess here because of bootstrap # issues when building Python itself status = os.system( """echo 'int main{};' | """ """'%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/null""" %(_config_vars['CC'].replace("'", "'\"'\"'"),)) if status: # The compile failed for some reason. Because of differences # across Xcode and compiler versions, there is no reliable way # to be sure why it failed. Assume here it was due to lack of # PPC support and remove the related '-arch' flags from each # config variables not explicitly overriden by an environment # variable. If the error was for some other reason, we hope the # failure will show up again when trying to compile an extension # module. for cv in _UNIVERSAL_CONFIG_VARS: if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub('-arch\s+ppc\w*\s', ' ', flags) _save_modified_value(_config_vars, cv, flags) return _config_vars def _override_all_archs(_config_vars): """Allow override of all archs with ARCHFLAGS env var""" # NOTE: This name was introduced by Apple in OSX 10.5 and # is used by several scripting languages distributed with # that OS release. if 'ARCHFLAGS' in os.environ: arch = os.environ['ARCHFLAGS'] for cv in _UNIVERSAL_CONFIG_VARS: if cv in _config_vars and '-arch' in _config_vars[cv]: flags = _config_vars[cv] flags = re.sub('-arch\s+\w+\s', ' ', flags) flags = flags + ' ' + arch _save_modified_value(_config_vars, cv, flags) return _config_vars def _check_for_unavailable_sdk(_config_vars): """Remove references to any SDKs not available""" # If we're on OSX 10.5 or later and the user tries to # compile an extension using an SDK that is not present # on the current machine it is better to not use an SDK # than to fail. This is particularly important with # the standalone Command Line Tools alternative to a # full-blown Xcode install since the CLT packages do not # provide SDKs. If the SDK is not present, it is assumed # that the header files and dev libs have been installed # to /usr and /System/Library by either a standalone CLT # package or the CLT component within Xcode. cflags = _config_vars.get('CFLAGS', '') m = re.search(r'-isysroot\s+(\S+)', cflags) if m is not None: sdk = m.group(1) if not os.path.exists(sdk): for cv in _UNIVERSAL_CONFIG_VARS: # Do not alter a config var explicitly overriden by env var if cv in _config_vars and cv not in os.environ: flags = _config_vars[cv] flags = re.sub(r'-isysroot\s+\S+(?:\s|$)', ' ', flags) _save_modified_value(_config_vars, cv, flags) return _config_vars def compiler_fixup(compiler_so, cc_args): """ This function will strip '-isysroot PATH' and '-arch ARCH' from the compile flags if the user has specified one them in extra_compile_flags. This is needed because '-arch ARCH' adds another architecture to the build, without a way to remove an architecture. Furthermore GCC will barf if multiple '-isysroot' arguments are present. """ stripArch = stripSysroot = False compiler_so = list(compiler_so) if not _supports_universal_builds(): # OSX before 10.4.0, these don't support -arch and -isysroot at # all. stripArch = stripSysroot = True else: stripArch = '-arch' in cc_args stripSysroot = '-isysroot' in cc_args if stripArch or 'ARCHFLAGS' in os.environ: while True: try: index = compiler_so.index('-arch') # Strip this argument and the next one: del compiler_so[index:index+2] except ValueError: break if 'ARCHFLAGS' in os.environ and not stripArch: # User specified different -arch flags in the environ, # see also distutils.sysconfig compiler_so = compiler_so + os.environ['ARCHFLAGS'].split() if stripSysroot: while True: try: index = compiler_so.index('-isysroot') # Strip this argument and the next one: del compiler_so[index:index+2] except ValueError: break # Check if the SDK that is used during compilation actually exists, # the universal build requires the usage of a universal SDK and not all # users have that installed by default. sysroot = None if '-isysroot' in cc_args: idx = cc_args.index('-isysroot') sysroot = cc_args[idx+1] elif '-isysroot' in compiler_so: idx = compiler_so.index('-isysroot') sysroot = compiler_so[idx+1] if sysroot and not os.path.isdir(sysroot): from distutils import log log.warn("Compiling with an SDK that doesn't seem to exist: %s", sysroot) log.warn("Please check your Xcode installation") return compiler_so def customize_config_vars(_config_vars): """Customize Python build configuration variables. Called internally from sysconfig with a mutable mapping containing name/value pairs parsed from the configured makefile used to build this interpreter. Returns the mapping updated as needed to reflect the environment in which the interpreter is running; in the case of a Python from a binary installer, the installed environment may be very different from the build environment, i.e. different OS levels, different built tools, different available CPU architectures. This customization is performed whenever distutils.sysconfig.get_config_vars() is first called. It may be used in environments where no compilers are present, i.e. when installing pure Python dists. Customization of compiler paths and detection of unavailable archs is deferred until the first extension module build is requested (in distutils.sysconfig.customize_compiler). Currently called from distutils.sysconfig """ if not _supports_universal_builds(): # On Mac OS X before 10.4, check if -arch and -isysroot # are in CFLAGS or LDFLAGS and remove them if they are. # This is needed when building extensions on a 10.3 system # using a universal build of python. _remove_universal_flags(_config_vars) # Allow user to override all archs with ARCHFLAGS env var _override_all_archs(_config_vars) # Remove references to sdks that are not found _check_for_unavailable_sdk(_config_vars) return _config_vars def customize_compiler(_config_vars): """Customize compiler path and configuration variables. This customization is performed when the first extension module build is requested in distutils.sysconfig.customize_compiler). """ # Find a compiler to use for extension module builds _find_appropriate_compiler(_config_vars) # Remove ppc arch flags if not supported here _remove_unsupported_archs(_config_vars) # Allow user to override all archs with ARCHFLAGS env var _override_all_archs(_config_vars) return _config_vars def get_platform_osx(_config_vars, osname, release, machine): """Filter values for get_platform()""" # called from get_platform() in sysconfig and distutils.util # # For our purposes, we'll assume that the system version from # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set # to. This makes the compatibility story a bit more sane because the # machine is going to compile and link as if it were # MACOSX_DEPLOYMENT_TARGET. macver = _config_vars.get('MACOSX_DEPLOYMENT_TARGET', '') macrelease = _get_system_version() or macver macver = macver or macrelease if macver: release = macver osname = "macosx" # Use the original CFLAGS value, if available, so that we # return the same machine type for the platform string. # Otherwise, distutils may consider this a cross-compiling # case and disallow installs. cflags = _config_vars.get(_INITPRE+'CFLAGS', _config_vars.get('CFLAGS', '')) if macrelease: try: macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) except ValueError: macrelease = (10, 0) else: # assume no universal support macrelease = (10, 0) if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on # systems before 10.4 machine = 'fat' archs = re.findall('-arch\s+(\S+)', cflags) archs = tuple(sorted(set(archs))) if len(archs) == 1: machine = archs[0] elif archs == ('i386', 'ppc'): machine = 'fat' elif archs == ('i386', 'x86_64'): machine = 'intel' elif archs == ('i386', 'ppc', 'x86_64'): machine = 'fat3' elif archs == ('ppc64', 'x86_64'): machine = 'fat64' elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): machine = 'universal' else: raise ValueError( "Don't know machine value for archs=%r" % (archs,)) elif machine == 'i386': # On OSX the machine type returned by uname is always the # 32-bit variant, even if the executable architecture is # the 64-bit variant if sys.maxsize >= 2**32: machine = 'x86_64' elif machine in ('PowerPC', 'Power_Macintosh'): # Pick a sane name for the PPC architecture. # See 'i386' case if sys.maxsize >= 2**32: machine = 'ppc64' else: machine = 'ppc' return (osname, release, machine) lib64/python3.4/runpy.py000064400000025100152342604300010756 0ustar00"""runpy.py - locating and running Python code using the module namespace Provides support for locating and running Python scripts using the Python module namespace instead of the native filesystem. This allows Python code to play nicely with non-filesystem based PEP 302 importers when locating support scripts as well as when importing modules. """ # Written by Nick Coghlan # to implement PEP 338 (Executing Modules as Scripts) import sys import importlib.machinery # importlib first so we can test #15386 via -m import importlib.util import types from pkgutil import read_code, get_importer __all__ = [ "run_module", "run_path", ] class _TempModule(object): """Temporarily replace a module in sys.modules with an empty namespace""" def __init__(self, mod_name): self.mod_name = mod_name self.module = types.ModuleType(mod_name) self._saved_module = [] def __enter__(self): mod_name = self.mod_name try: self._saved_module.append(sys.modules[mod_name]) except KeyError: pass sys.modules[mod_name] = self.module return self def __exit__(self, *args): if self._saved_module: sys.modules[self.mod_name] = self._saved_module[0] else: del sys.modules[self.mod_name] self._saved_module = [] class _ModifiedArgv0(object): def __init__(self, value): self.value = value self._saved_value = self._sentinel = object() def __enter__(self): if self._saved_value is not self._sentinel: raise RuntimeError("Already preserving saved value") self._saved_value = sys.argv[0] sys.argv[0] = self.value def __exit__(self, *args): self.value = self._sentinel sys.argv[0] = self._saved_value # TODO: Replace these helpers with importlib._bootstrap._SpecMethods def _run_code(code, run_globals, init_globals=None, mod_name=None, mod_spec=None, pkg_name=None, script_name=None): """Helper to run code in nominated namespace""" if init_globals is not None: run_globals.update(init_globals) if mod_spec is None: loader = None fname = script_name cached = None else: loader = mod_spec.loader fname = mod_spec.origin cached = mod_spec.cached if pkg_name is None: pkg_name = mod_spec.parent run_globals.update(__name__ = mod_name, __file__ = fname, __cached__ = cached, __doc__ = None, __loader__ = loader, __package__ = pkg_name, __spec__ = mod_spec) exec(code, run_globals) return run_globals def _run_module_code(code, init_globals=None, mod_name=None, mod_spec=None, pkg_name=None, script_name=None): """Helper to run code in new namespace with sys modified""" fname = script_name if mod_spec is None else mod_spec.origin with _TempModule(mod_name) as temp_module, _ModifiedArgv0(fname): mod_globals = temp_module.module.__dict__ _run_code(code, mod_globals, init_globals, mod_name, mod_spec, pkg_name, script_name) # Copy the globals of the temporary module, as they # may be cleared when the temporary module goes away return mod_globals.copy() # Helper to get the loader, code and filename for a module def _get_module_details(mod_name): try: spec = importlib.util.find_spec(mod_name) except (ImportError, AttributeError, TypeError, ValueError) as ex: # This hack fixes an impedance mismatch between pkgutil and # importlib, where the latter raises other errors for cases where # pkgutil previously raised ImportError msg = "Error while finding spec for {!r} ({}: {})" raise ImportError(msg.format(mod_name, type(ex), ex)) from ex if spec is None: raise ImportError("No module named %s" % mod_name) if spec.submodule_search_locations is not None: if mod_name == "__main__" or mod_name.endswith(".__main__"): raise ImportError("Cannot use package as __main__ module") try: pkg_main_name = mod_name + ".__main__" return _get_module_details(pkg_main_name) except ImportError as e: raise ImportError(("%s; %r is a package and cannot " + "be directly executed") %(e, mod_name)) loader = spec.loader if loader is None: raise ImportError("%r is a namespace package and cannot be executed" % mod_name) code = loader.get_code(mod_name) if code is None: raise ImportError("No code object available for %s" % mod_name) return mod_name, spec, code # XXX ncoghlan: Should this be documented and made public? # (Current thoughts: don't repeat the mistake that lead to its # creation when run_module() no longer met the needs of # mainmodule.c, but couldn't be changed because it was public) def _run_module_as_main(mod_name, alter_argv=True): """Runs the designated module in the __main__ namespace Note that the executed module will have full access to the __main__ namespace. If this is not desirable, the run_module() function should be used to run the module code in a fresh namespace. At the very least, these variables in __main__ will be overwritten: __name__ __file__ __cached__ __loader__ __package__ """ try: if alter_argv or mod_name != "__main__": # i.e. -m switch mod_name, mod_spec, code = _get_module_details(mod_name) else: # i.e. directory or zipfile execution mod_name, mod_spec, code = _get_main_module_details() except ImportError as exc: # Try to provide a good error message # for directories, zip files and the -m switch if alter_argv: # For -m switch, just display the exception info = str(exc) else: # For directories/zipfiles, let the user # know what the code was looking for info = "can't find '__main__' module in %r" % sys.argv[0] msg = "%s: %s" % (sys.executable, info) sys.exit(msg) main_globals = sys.modules["__main__"].__dict__ if alter_argv: sys.argv[0] = mod_spec.origin return _run_code(code, main_globals, None, "__main__", mod_spec) def run_module(mod_name, init_globals=None, run_name=None, alter_sys=False): """Execute a module's code without importing it Returns the resulting top level namespace dictionary """ mod_name, mod_spec, code = _get_module_details(mod_name) if run_name is None: run_name = mod_name if alter_sys: return _run_module_code(code, init_globals, run_name, mod_spec) else: # Leave the sys module alone return _run_code(code, {}, init_globals, run_name, mod_spec) def _get_main_module_details(): # Helper that gives a nicer error message when attempting to # execute a zipfile or directory by invoking __main__.py # Also moves the standard __main__ out of the way so that the # preexisting __loader__ entry doesn't cause issues main_name = "__main__" saved_main = sys.modules[main_name] del sys.modules[main_name] try: return _get_module_details(main_name) except ImportError as exc: if main_name in str(exc): raise ImportError("can't find %r module in %r" % (main_name, sys.path[0])) from exc raise finally: sys.modules[main_name] = saved_main def _get_code_from_file(run_name, fname): # Check for a compiled file first with open(fname, "rb") as f: code = read_code(f) if code is None: # That didn't work, so try it as normal source code with open(fname, "rb") as f: code = compile(f.read(), fname, 'exec') return code, fname def run_path(path_name, init_globals=None, run_name=None): """Execute code located at the specified filesystem location Returns the resulting top level namespace dictionary The file path may refer directly to a Python script (i.e. one that could be directly executed with execfile) or else it may refer to a zipfile or directory containing a top level __main__.py script. """ if run_name is None: run_name = "" pkg_name = run_name.rpartition(".")[0] importer = get_importer(path_name) # Trying to avoid importing imp so as to not consume the deprecation warning. is_NullImporter = False if type(importer).__module__ == 'imp': if type(importer).__name__ == 'NullImporter': is_NullImporter = True if isinstance(importer, type(None)) or is_NullImporter: # Not a valid sys.path entry, so run the code directly # execfile() doesn't help as we want to allow compiled files code, fname = _get_code_from_file(run_name, path_name) return _run_module_code(code, init_globals, run_name, pkg_name=pkg_name, script_name=fname) else: # Importer is defined for path, so add it to # the start of sys.path sys.path.insert(0, path_name) try: # Here's where things are a little different from the run_module # case. There, we only had to replace the module in sys while the # code was running and doing so was somewhat optional. Here, we # have no choice and we have to remove it even while we read the # code. If we don't do this, a __loader__ attribute in the # existing __main__ module may prevent location of the new module. mod_name, mod_spec, code = _get_main_module_details() with _TempModule(run_name) as temp_module, \ _ModifiedArgv0(path_name): mod_globals = temp_module.module.__dict__ return _run_code(code, mod_globals, init_globals, run_name, mod_spec, pkg_name).copy() finally: try: sys.path.remove(path_name) except ValueError: pass if __name__ == "__main__": # Run the module specified as the next command line argument if len(sys.argv) < 2: print("No module specified for execution", file=sys.stderr) else: del sys.argv[0] # Make the requested module sys.argv[0] _run_module_as_main(sys.argv[0]) lib64/python3.4/pickletools.py000064400000263162152342604300012145 0ustar00'''"Executable documentation" for the pickle module. Extensive comments about the pickle protocols and pickle-machine opcodes can be found here. Some functions meant for external use: genops(pickle) Generate all the opcodes in a pickle, as (opcode, arg, position) triples. dis(pickle, out=None, memo=None, indentlevel=4) Print a symbolic disassembly of a pickle. ''' import codecs import io import pickle import re import sys __all__ = ['dis', 'genops', 'optimize'] bytes_types = pickle.bytes_types # Other ideas: # # - A pickle verifier: read a pickle and check it exhaustively for # well-formedness. dis() does a lot of this already. # # - A protocol identifier: examine a pickle and return its protocol number # (== the highest .proto attr value among all the opcodes in the pickle). # dis() already prints this info at the end. # # - A pickle optimizer: for example, tuple-building code is sometimes more # elaborate than necessary, catering for the possibility that the tuple # is recursive. Or lots of times a PUT is generated that's never accessed # by a later GET. # "A pickle" is a program for a virtual pickle machine (PM, but more accurately # called an unpickling machine). It's a sequence of opcodes, interpreted by the # PM, building an arbitrarily complex Python object. # # For the most part, the PM is very simple: there are no looping, testing, or # conditional instructions, no arithmetic and no function calls. Opcodes are # executed once each, from first to last, until a STOP opcode is reached. # # The PM has two data areas, "the stack" and "the memo". # # Many opcodes push Python objects onto the stack; e.g., INT pushes a Python # integer object on the stack, whose value is gotten from a decimal string # literal immediately following the INT opcode in the pickle bytestream. Other # opcodes take Python objects off the stack. The result of unpickling is # whatever object is left on the stack when the final STOP opcode is executed. # # The memo is simply an array of objects, or it can be implemented as a dict # mapping little integers to objects. The memo serves as the PM's "long term # memory", and the little integers indexing the memo are akin to variable # names. Some opcodes pop a stack object into the memo at a given index, # and others push a memo object at a given index onto the stack again. # # At heart, that's all the PM has. Subtleties arise for these reasons: # # + Object identity. Objects can be arbitrarily complex, and subobjects # may be shared (for example, the list [a, a] refers to the same object a # twice). It can be vital that unpickling recreate an isomorphic object # graph, faithfully reproducing sharing. # # + Recursive objects. For example, after "L = []; L.append(L)", L is a # list, and L[0] is the same list. This is related to the object identity # point, and some sequences of pickle opcodes are subtle in order to # get the right result in all cases. # # + Things pickle doesn't know everything about. Examples of things pickle # does know everything about are Python's builtin scalar and container # types, like ints and tuples. They generally have opcodes dedicated to # them. For things like module references and instances of user-defined # classes, pickle's knowledge is limited. Historically, many enhancements # have been made to the pickle protocol in order to do a better (faster, # and/or more compact) job on those. # # + Backward compatibility and micro-optimization. As explained below, # pickle opcodes never go away, not even when better ways to do a thing # get invented. The repertoire of the PM just keeps growing over time. # For example, protocol 0 had two opcodes for building Python integers (INT # and LONG), protocol 1 added three more for more-efficient pickling of short # integers, and protocol 2 added two more for more-efficient pickling of # long integers (before protocol 2, the only ways to pickle a Python long # took time quadratic in the number of digits, for both pickling and # unpickling). "Opcode bloat" isn't so much a subtlety as a source of # wearying complication. # # # Pickle protocols: # # For compatibility, the meaning of a pickle opcode never changes. Instead new # pickle opcodes get added, and each version's unpickler can handle all the # pickle opcodes in all protocol versions to date. So old pickles continue to # be readable forever. The pickler can generally be told to restrict itself to # the subset of opcodes available under previous protocol versions too, so that # users can create pickles under the current version readable by older # versions. However, a pickle does not contain its version number embedded # within it. If an older unpickler tries to read a pickle using a later # protocol, the result is most likely an exception due to seeing an unknown (in # the older unpickler) opcode. # # The original pickle used what's now called "protocol 0", and what was called # "text mode" before Python 2.3. The entire pickle bytestream is made up of # printable 7-bit ASCII characters, plus the newline character, in protocol 0. # That's why it was called text mode. Protocol 0 is small and elegant, but # sometimes painfully inefficient. # # The second major set of additions is now called "protocol 1", and was called # "binary mode" before Python 2.3. This added many opcodes with arguments # consisting of arbitrary bytes, including NUL bytes and unprintable "high bit" # bytes. Binary mode pickles can be substantially smaller than equivalent # text mode pickles, and sometimes faster too; e.g., BININT represents a 4-byte # int as 4 bytes following the opcode, which is cheaper to unpickle than the # (perhaps) 11-character decimal string attached to INT. Protocol 1 also added # a number of opcodes that operate on many stack elements at once (like APPENDS # and SETITEMS), and "shortcut" opcodes (like EMPTY_DICT and EMPTY_TUPLE). # # The third major set of additions came in Python 2.3, and is called "protocol # 2". This added: # # - A better way to pickle instances of new-style classes (NEWOBJ). # # - A way for a pickle to identify its protocol (PROTO). # # - Time- and space- efficient pickling of long ints (LONG{1,4}). # # - Shortcuts for small tuples (TUPLE{1,2,3}}. # # - Dedicated opcodes for bools (NEWTRUE, NEWFALSE). # # - The "extension registry", a vector of popular objects that can be pushed # efficiently by index (EXT{1,2,4}). This is akin to the memo and GET, but # the registry contents are predefined (there's nothing akin to the memo's # PUT). # # Another independent change with Python 2.3 is the abandonment of any # pretense that it might be safe to load pickles received from untrusted # parties -- no sufficient security analysis has been done to guarantee # this and there isn't a use case that warrants the expense of such an # analysis. # # To this end, all tests for __safe_for_unpickling__ or for # copyreg.safe_constructors are removed from the unpickling code. # References to these variables in the descriptions below are to be seen # as describing unpickling in Python 2.2 and before. # Meta-rule: Descriptions are stored in instances of descriptor objects, # with plain constructors. No meta-language is defined from which # descriptors could be constructed. If you want, e.g., XML, write a little # program to generate XML from the objects. ############################################################################## # Some pickle opcodes have an argument, following the opcode in the # bytestream. An argument is of a specific type, described by an instance # of ArgumentDescriptor. These are not to be confused with arguments taken # off the stack -- ArgumentDescriptor applies only to arguments embedded in # the opcode stream, immediately following an opcode. # Represents the number of bytes consumed by an argument delimited by the # next newline character. UP_TO_NEWLINE = -1 # Represents the number of bytes consumed by a two-argument opcode where # the first argument gives the number of bytes in the second argument. TAKEN_FROM_ARGUMENT1 = -2 # num bytes is 1-byte unsigned int TAKEN_FROM_ARGUMENT4 = -3 # num bytes is 4-byte signed little-endian int TAKEN_FROM_ARGUMENT4U = -4 # num bytes is 4-byte unsigned little-endian int TAKEN_FROM_ARGUMENT8U = -5 # num bytes is 8-byte unsigned little-endian int class ArgumentDescriptor(object): __slots__ = ( # name of descriptor record, also a module global name; a string 'name', # length of argument, in bytes; an int; UP_TO_NEWLINE and # TAKEN_FROM_ARGUMENT{1,4,8} are negative values for variable-length # cases 'n', # a function taking a file-like object, reading this kind of argument # from the object at the current position, advancing the current # position by n bytes, and returning the value of the argument 'reader', # human-readable docs for this arg descriptor; a string 'doc', ) def __init__(self, name, n, reader, doc): assert isinstance(name, str) self.name = name assert isinstance(n, int) and (n >= 0 or n in (UP_TO_NEWLINE, TAKEN_FROM_ARGUMENT1, TAKEN_FROM_ARGUMENT4, TAKEN_FROM_ARGUMENT4U, TAKEN_FROM_ARGUMENT8U)) self.n = n self.reader = reader assert isinstance(doc, str) self.doc = doc from struct import unpack as _unpack def read_uint1(f): r""" >>> import io >>> read_uint1(io.BytesIO(b'\xff')) 255 """ data = f.read(1) if data: return data[0] raise ValueError("not enough data in stream to read uint1") uint1 = ArgumentDescriptor( name='uint1', n=1, reader=read_uint1, doc="One-byte unsigned integer.") def read_uint2(f): r""" >>> import io >>> read_uint2(io.BytesIO(b'\xff\x00')) 255 >>> read_uint2(io.BytesIO(b'\xff\xff')) 65535 """ data = f.read(2) if len(data) == 2: return _unpack(">> import io >>> read_int4(io.BytesIO(b'\xff\x00\x00\x00')) 255 >>> read_int4(io.BytesIO(b'\x00\x00\x00\x80')) == -(2**31) True """ data = f.read(4) if len(data) == 4: return _unpack(">> import io >>> read_uint4(io.BytesIO(b'\xff\x00\x00\x00')) 255 >>> read_uint4(io.BytesIO(b'\x00\x00\x00\x80')) == 2**31 True """ data = f.read(4) if len(data) == 4: return _unpack(">> import io >>> read_uint8(io.BytesIO(b'\xff\x00\x00\x00\x00\x00\x00\x00')) 255 >>> read_uint8(io.BytesIO(b'\xff' * 8)) == 2**64-1 True """ data = f.read(8) if len(data) == 8: return _unpack(">> import io >>> read_stringnl(io.BytesIO(b"'abcd'\nefg\n")) 'abcd' >>> read_stringnl(io.BytesIO(b"\n")) Traceback (most recent call last): ... ValueError: no string quotes around b'' >>> read_stringnl(io.BytesIO(b"\n"), stripquotes=False) '' >>> read_stringnl(io.BytesIO(b"''\n")) '' >>> read_stringnl(io.BytesIO(b'"abcd"')) Traceback (most recent call last): ... ValueError: no newline found when trying to read stringnl Embedded escapes are undone in the result. >>> read_stringnl(io.BytesIO(br"'a\n\\b\x00c\td'" + b"\n'e'")) 'a\n\\b\x00c\td' """ data = f.readline() if not data.endswith(b'\n'): raise ValueError("no newline found when trying to read stringnl") data = data[:-1] # lose the newline if stripquotes: for q in (b'"', b"'"): if data.startswith(q): if not data.endswith(q): raise ValueError("strinq quote %r not found at both " "ends of %r" % (q, data)) data = data[1:-1] break else: raise ValueError("no string quotes around %r" % data) if decode: data = codecs.escape_decode(data)[0].decode("ascii") return data stringnl = ArgumentDescriptor( name='stringnl', n=UP_TO_NEWLINE, reader=read_stringnl, doc="""A newline-terminated string. This is a repr-style string, with embedded escapes, and bracketing quotes. """) def read_stringnl_noescape(f): return read_stringnl(f, stripquotes=False) stringnl_noescape = ArgumentDescriptor( name='stringnl_noescape', n=UP_TO_NEWLINE, reader=read_stringnl_noescape, doc="""A newline-terminated string. This is a str-style string, without embedded escapes, or bracketing quotes. It should consist solely of printable ASCII characters. """) def read_stringnl_noescape_pair(f): r""" >>> import io >>> read_stringnl_noescape_pair(io.BytesIO(b"Queue\nEmpty\njunk")) 'Queue Empty' """ return "%s %s" % (read_stringnl_noescape(f), read_stringnl_noescape(f)) stringnl_noescape_pair = ArgumentDescriptor( name='stringnl_noescape_pair', n=UP_TO_NEWLINE, reader=read_stringnl_noescape_pair, doc="""A pair of newline-terminated strings. These are str-style strings, without embedded escapes, or bracketing quotes. They should consist solely of printable ASCII characters. The pair is returned as a single string, with a single blank separating the two strings. """) def read_string1(f): r""" >>> import io >>> read_string1(io.BytesIO(b"\x00")) '' >>> read_string1(io.BytesIO(b"\x03abcdef")) 'abc' """ n = read_uint1(f) assert n >= 0 data = f.read(n) if len(data) == n: return data.decode("latin-1") raise ValueError("expected %d bytes in a string1, but only %d remain" % (n, len(data))) string1 = ArgumentDescriptor( name="string1", n=TAKEN_FROM_ARGUMENT1, reader=read_string1, doc="""A counted string. The first argument is a 1-byte unsigned int giving the number of bytes in the string, and the second argument is that many bytes. """) def read_string4(f): r""" >>> import io >>> read_string4(io.BytesIO(b"\x00\x00\x00\x00abc")) '' >>> read_string4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) 'abc' >>> read_string4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) Traceback (most recent call last): ... ValueError: expected 50331648 bytes in a string4, but only 6 remain """ n = read_int4(f) if n < 0: raise ValueError("string4 byte count < 0: %d" % n) data = f.read(n) if len(data) == n: return data.decode("latin-1") raise ValueError("expected %d bytes in a string4, but only %d remain" % (n, len(data))) string4 = ArgumentDescriptor( name="string4", n=TAKEN_FROM_ARGUMENT4, reader=read_string4, doc="""A counted string. The first argument is a 4-byte little-endian signed int giving the number of bytes in the string, and the second argument is that many bytes. """) def read_bytes1(f): r""" >>> import io >>> read_bytes1(io.BytesIO(b"\x00")) b'' >>> read_bytes1(io.BytesIO(b"\x03abcdef")) b'abc' """ n = read_uint1(f) assert n >= 0 data = f.read(n) if len(data) == n: return data raise ValueError("expected %d bytes in a bytes1, but only %d remain" % (n, len(data))) bytes1 = ArgumentDescriptor( name="bytes1", n=TAKEN_FROM_ARGUMENT1, reader=read_bytes1, doc="""A counted bytes string. The first argument is a 1-byte unsigned int giving the number of bytes in the string, and the second argument is that many bytes. """) def read_bytes1(f): r""" >>> import io >>> read_bytes1(io.BytesIO(b"\x00")) b'' >>> read_bytes1(io.BytesIO(b"\x03abcdef")) b'abc' """ n = read_uint1(f) assert n >= 0 data = f.read(n) if len(data) == n: return data raise ValueError("expected %d bytes in a bytes1, but only %d remain" % (n, len(data))) bytes1 = ArgumentDescriptor( name="bytes1", n=TAKEN_FROM_ARGUMENT1, reader=read_bytes1, doc="""A counted bytes string. The first argument is a 1-byte unsigned int giving the number of bytes, and the second argument is that many bytes. """) def read_bytes4(f): r""" >>> import io >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x00abc")) b'' >>> read_bytes4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) b'abc' >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) Traceback (most recent call last): ... ValueError: expected 50331648 bytes in a bytes4, but only 6 remain """ n = read_uint4(f) assert n >= 0 if n > sys.maxsize: raise ValueError("bytes4 byte count > sys.maxsize: %d" % n) data = f.read(n) if len(data) == n: return data raise ValueError("expected %d bytes in a bytes4, but only %d remain" % (n, len(data))) bytes4 = ArgumentDescriptor( name="bytes4", n=TAKEN_FROM_ARGUMENT4U, reader=read_bytes4, doc="""A counted bytes string. The first argument is a 4-byte little-endian unsigned int giving the number of bytes, and the second argument is that many bytes. """) def read_bytes8(f): r""" >>> import io, struct, sys >>> read_bytes8(io.BytesIO(b"\x00\x00\x00\x00\x00\x00\x00\x00abc")) b'' >>> read_bytes8(io.BytesIO(b"\x03\x00\x00\x00\x00\x00\x00\x00abcdef")) b'abc' >>> bigsize8 = struct.pack(">> read_bytes8(io.BytesIO(bigsize8 + b"abcdef")) #doctest: +ELLIPSIS Traceback (most recent call last): ... ValueError: expected ... bytes in a bytes8, but only 6 remain """ n = read_uint8(f) assert n >= 0 if n > sys.maxsize: raise ValueError("bytes8 byte count > sys.maxsize: %d" % n) data = f.read(n) if len(data) == n: return data raise ValueError("expected %d bytes in a bytes8, but only %d remain" % (n, len(data))) bytes8 = ArgumentDescriptor( name="bytes8", n=TAKEN_FROM_ARGUMENT8U, reader=read_bytes8, doc="""A counted bytes string. The first argument is a 8-byte little-endian unsigned int giving the number of bytes, and the second argument is that many bytes. """) def read_unicodestringnl(f): r""" >>> import io >>> read_unicodestringnl(io.BytesIO(b"abc\\uabcd\njunk")) == 'abc\uabcd' True """ data = f.readline() if not data.endswith(b'\n'): raise ValueError("no newline found when trying to read " "unicodestringnl") data = data[:-1] # lose the newline return str(data, 'raw-unicode-escape') unicodestringnl = ArgumentDescriptor( name='unicodestringnl', n=UP_TO_NEWLINE, reader=read_unicodestringnl, doc="""A newline-terminated Unicode string. This is raw-unicode-escape encoded, so consists of printable ASCII characters, and may contain embedded escape sequences. """) def read_unicodestring1(f): r""" >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc)]) # little-endian 1-byte length >>> t = read_unicodestring1(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring1(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring1, but only 6 remain """ n = read_uint1(f) assert n >= 0 data = f.read(n) if len(data) == n: return str(data, 'utf-8', 'surrogatepass') raise ValueError("expected %d bytes in a unicodestring1, but only %d " "remain" % (n, len(data))) unicodestring1 = ArgumentDescriptor( name="unicodestring1", n=TAKEN_FROM_ARGUMENT1, reader=read_unicodestring1, doc="""A counted Unicode string. The first argument is a 1-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. """) def read_unicodestring4(f): r""" >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc), 0, 0, 0]) # little-endian 4-byte length >>> t = read_unicodestring4(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring4(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring4, but only 6 remain """ n = read_uint4(f) assert n >= 0 if n > sys.maxsize: raise ValueError("unicodestring4 byte count > sys.maxsize: %d" % n) data = f.read(n) if len(data) == n: return str(data, 'utf-8', 'surrogatepass') raise ValueError("expected %d bytes in a unicodestring4, but only %d " "remain" % (n, len(data))) unicodestring4 = ArgumentDescriptor( name="unicodestring4", n=TAKEN_FROM_ARGUMENT4U, reader=read_unicodestring4, doc="""A counted Unicode string. The first argument is a 4-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. """) def read_unicodestring8(f): r""" >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc)]) + bytes(7) # little-endian 8-byte length >>> t = read_unicodestring8(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring8(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring8, but only 6 remain """ n = read_uint8(f) assert n >= 0 if n > sys.maxsize: raise ValueError("unicodestring8 byte count > sys.maxsize: %d" % n) data = f.read(n) if len(data) == n: return str(data, 'utf-8', 'surrogatepass') raise ValueError("expected %d bytes in a unicodestring8, but only %d " "remain" % (n, len(data))) unicodestring8 = ArgumentDescriptor( name="unicodestring8", n=TAKEN_FROM_ARGUMENT8U, reader=read_unicodestring8, doc="""A counted Unicode string. The first argument is a 8-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. """) def read_decimalnl_short(f): r""" >>> import io >>> read_decimalnl_short(io.BytesIO(b"1234\n56")) 1234 >>> read_decimalnl_short(io.BytesIO(b"1234L\n56")) Traceback (most recent call last): ... ValueError: invalid literal for int() with base 10: b'1234L' """ s = read_stringnl(f, decode=False, stripquotes=False) # There's a hack for True and False here. if s == b"00": return False elif s == b"01": return True return int(s) def read_decimalnl_long(f): r""" >>> import io >>> read_decimalnl_long(io.BytesIO(b"1234L\n56")) 1234 >>> read_decimalnl_long(io.BytesIO(b"123456789012345678901234L\n6")) 123456789012345678901234 """ s = read_stringnl(f, decode=False, stripquotes=False) if s[-1:] == b'L': s = s[:-1] return int(s) decimalnl_short = ArgumentDescriptor( name='decimalnl_short', n=UP_TO_NEWLINE, reader=read_decimalnl_short, doc="""A newline-terminated decimal integer literal. This never has a trailing 'L', and the integer fit in a short Python int on the box where the pickle was written -- but there's no guarantee it will fit in a short Python int on the box where the pickle is read. """) decimalnl_long = ArgumentDescriptor( name='decimalnl_long', n=UP_TO_NEWLINE, reader=read_decimalnl_long, doc="""A newline-terminated decimal integer literal. This has a trailing 'L', and can represent integers of any size. """) def read_floatnl(f): r""" >>> import io >>> read_floatnl(io.BytesIO(b"-1.25\n6")) -1.25 """ s = read_stringnl(f, decode=False, stripquotes=False) return float(s) floatnl = ArgumentDescriptor( name='floatnl', n=UP_TO_NEWLINE, reader=read_floatnl, doc="""A newline-terminated decimal floating literal. In general this requires 17 significant digits for roundtrip identity, and pickling then unpickling infinities, NaNs, and minus zero doesn't work across boxes, or on some boxes even on itself (e.g., Windows can't read the strings it produces for infinities or NaNs). """) def read_float8(f): r""" >>> import io, struct >>> raw = struct.pack(">d", -1.25) >>> raw b'\xbf\xf4\x00\x00\x00\x00\x00\x00' >>> read_float8(io.BytesIO(raw + b"\n")) -1.25 """ data = f.read(8) if len(data) == 8: return _unpack(">d", data)[0] raise ValueError("not enough data in stream to read float8") float8 = ArgumentDescriptor( name='float8', n=8, reader=read_float8, doc="""An 8-byte binary representation of a float, big-endian. The format is unique to Python, and shared with the struct module (format string '>d') "in theory" (the struct and pickle implementations don't share the code -- they should). It's strongly related to the IEEE-754 double format, and, in normal cases, is in fact identical to the big-endian 754 double format. On other boxes the dynamic range is limited to that of a 754 double, and "add a half and chop" rounding is used to reduce the precision to 53 bits. However, even on a 754 box, infinities, NaNs, and minus zero may not be handled correctly (may not survive roundtrip pickling intact). """) # Protocol 2 formats from pickle import decode_long def read_long1(f): r""" >>> import io >>> read_long1(io.BytesIO(b"\x00")) 0 >>> read_long1(io.BytesIO(b"\x02\xff\x00")) 255 >>> read_long1(io.BytesIO(b"\x02\xff\x7f")) 32767 >>> read_long1(io.BytesIO(b"\x02\x00\xff")) -256 >>> read_long1(io.BytesIO(b"\x02\x00\x80")) -32768 """ n = read_uint1(f) data = f.read(n) if len(data) != n: raise ValueError("not enough data in stream to read long1") return decode_long(data) long1 = ArgumentDescriptor( name="long1", n=TAKEN_FROM_ARGUMENT1, reader=read_long1, doc="""A binary long, little-endian, using 1-byte size. This first reads one byte as an unsigned size, then reads that many bytes and interprets them as a little-endian 2's-complement long. If the size is 0, that's taken as a shortcut for the long 0L. """) def read_long4(f): r""" >>> import io >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x00")) 255 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x7f")) 32767 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\xff")) -256 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\x80")) -32768 >>> read_long1(io.BytesIO(b"\x00\x00\x00\x00")) 0 """ n = read_int4(f) if n < 0: raise ValueError("long4 byte count < 0: %d" % n) data = f.read(n) if len(data) != n: raise ValueError("not enough data in stream to read long4") return decode_long(data) long4 = ArgumentDescriptor( name="long4", n=TAKEN_FROM_ARGUMENT4, reader=read_long4, doc="""A binary representation of a long, little-endian. This first reads four bytes as a signed size (but requires the size to be >= 0), then reads that many bytes and interprets them as a little-endian 2's-complement long. If the size is 0, that's taken as a shortcut for the int 0, although LONG1 should really be used then instead (and in any case where # of bytes < 256). """) ############################################################################## # Object descriptors. The stack used by the pickle machine holds objects, # and in the stack_before and stack_after attributes of OpcodeInfo # descriptors we need names to describe the various types of objects that can # appear on the stack. class StackObject(object): __slots__ = ( # name of descriptor record, for info only 'name', # type of object, or tuple of type objects (meaning the object can # be of any type in the tuple) 'obtype', # human-readable docs for this kind of stack object; a string 'doc', ) def __init__(self, name, obtype, doc): assert isinstance(name, str) self.name = name assert isinstance(obtype, type) or isinstance(obtype, tuple) if isinstance(obtype, tuple): for contained in obtype: assert isinstance(contained, type) self.obtype = obtype assert isinstance(doc, str) self.doc = doc def __repr__(self): return self.name pyint = pylong = StackObject( name='int', obtype=int, doc="A Python integer object.") pyinteger_or_bool = StackObject( name='int_or_bool', obtype=(int, bool), doc="A Python integer or boolean object.") pybool = StackObject( name='bool', obtype=bool, doc="A Python boolean object.") pyfloat = StackObject( name='float', obtype=float, doc="A Python float object.") pybytes_or_str = pystring = StackObject( name='bytes_or_str', obtype=(bytes, str), doc="A Python bytes or (Unicode) string object.") pybytes = StackObject( name='bytes', obtype=bytes, doc="A Python bytes object.") pyunicode = StackObject( name='str', obtype=str, doc="A Python (Unicode) string object.") pynone = StackObject( name="None", obtype=type(None), doc="The Python None object.") pytuple = StackObject( name="tuple", obtype=tuple, doc="A Python tuple object.") pylist = StackObject( name="list", obtype=list, doc="A Python list object.") pydict = StackObject( name="dict", obtype=dict, doc="A Python dict object.") pyset = StackObject( name="set", obtype=set, doc="A Python set object.") pyfrozenset = StackObject( name="frozenset", obtype=set, doc="A Python frozenset object.") anyobject = StackObject( name='any', obtype=object, doc="Any kind of object whatsoever.") markobject = StackObject( name="mark", obtype=StackObject, doc="""'The mark' is a unique object. Opcodes that operate on a variable number of objects generally don't embed the count of objects in the opcode, or pull it off the stack. Instead the MARK opcode is used to push a special marker object on the stack, and then some other opcodes grab all the objects from the top of the stack down to (but not including) the topmost marker object. """) stackslice = StackObject( name="stackslice", obtype=StackObject, doc="""An object representing a contiguous slice of the stack. This is used in conjunction with markobject, to represent all of the stack following the topmost markobject. For example, the POP_MARK opcode changes the stack from [..., markobject, stackslice] to [...] No matter how many object are on the stack after the topmost markobject, POP_MARK gets rid of all of them (including the topmost markobject too). """) ############################################################################## # Descriptors for pickle opcodes. class OpcodeInfo(object): __slots__ = ( # symbolic name of opcode; a string 'name', # the code used in a bytestream to represent the opcode; a # one-character string 'code', # If the opcode has an argument embedded in the byte string, an # instance of ArgumentDescriptor specifying its type. Note that # arg.reader(s) can be used to read and decode the argument from # the bytestream s, and arg.doc documents the format of the raw # argument bytes. If the opcode doesn't have an argument embedded # in the bytestream, arg should be None. 'arg', # what the stack looks like before this opcode runs; a list 'stack_before', # what the stack looks like after this opcode runs; a list 'stack_after', # the protocol number in which this opcode was introduced; an int 'proto', # human-readable docs for this opcode; a string 'doc', ) def __init__(self, name, code, arg, stack_before, stack_after, proto, doc): assert isinstance(name, str) self.name = name assert isinstance(code, str) assert len(code) == 1 self.code = code assert arg is None or isinstance(arg, ArgumentDescriptor) self.arg = arg assert isinstance(stack_before, list) for x in stack_before: assert isinstance(x, StackObject) self.stack_before = stack_before assert isinstance(stack_after, list) for x in stack_after: assert isinstance(x, StackObject) self.stack_after = stack_after assert isinstance(proto, int) and 0 <= proto <= pickle.HIGHEST_PROTOCOL self.proto = proto assert isinstance(doc, str) self.doc = doc I = OpcodeInfo opcodes = [ # Ways to spell integers. I(name='INT', code='I', arg=decimalnl_short, stack_before=[], stack_after=[pyinteger_or_bool], proto=0, doc="""Push an integer or bool. The argument is a newline-terminated decimal literal string. The intent may have been that this always fit in a short Python int, but INT can be generated in pickles written on a 64-bit box that require a Python long on a 32-bit box. The difference between this and LONG then is that INT skips a trailing 'L', and produces a short int whenever possible. Another difference is due to that, when bool was introduced as a distinct type in 2.3, builtin names True and False were also added to 2.2.2, mapping to ints 1 and 0. For compatibility in both directions, True gets pickled as INT + "I01\\n", and False as INT + "I00\\n". Leading zeroes are never produced for a genuine integer. The 2.3 (and later) unpicklers special-case these and return bool instead; earlier unpicklers ignore the leading "0" and return the int. """), I(name='BININT', code='J', arg=int4, stack_before=[], stack_after=[pyint], proto=1, doc="""Push a four-byte signed integer. This handles the full range of Python (short) integers on a 32-bit box, directly as binary bytes (1 for the opcode and 4 for the integer). If the integer is non-negative and fits in 1 or 2 bytes, pickling via BININT1 or BININT2 saves space. """), I(name='BININT1', code='K', arg=uint1, stack_before=[], stack_after=[pyint], proto=1, doc="""Push a one-byte unsigned integer. This is a space optimization for pickling very small non-negative ints, in range(256). """), I(name='BININT2', code='M', arg=uint2, stack_before=[], stack_after=[pyint], proto=1, doc="""Push a two-byte unsigned integer. This is a space optimization for pickling small positive ints, in range(256, 2**16). Integers in range(256) can also be pickled via BININT2, but BININT1 instead saves a byte. """), I(name='LONG', code='L', arg=decimalnl_long, stack_before=[], stack_after=[pyint], proto=0, doc="""Push a long integer. The same as INT, except that the literal ends with 'L', and always unpickles to a Python long. There doesn't seem a real purpose to the trailing 'L'. Note that LONG takes time quadratic in the number of digits when unpickling (this is simply due to the nature of decimal->binary conversion). Proto 2 added linear-time (in C; still quadratic-time in Python) LONG1 and LONG4 opcodes. """), I(name="LONG1", code='\x8a', arg=long1, stack_before=[], stack_after=[pyint], proto=2, doc="""Long integer using one-byte length. A more efficient encoding of a Python long; the long1 encoding says it all."""), I(name="LONG4", code='\x8b', arg=long4, stack_before=[], stack_after=[pyint], proto=2, doc="""Long integer using found-byte length. A more efficient encoding of a Python long; the long4 encoding says it all."""), # Ways to spell strings (8-bit, not Unicode). I(name='STRING', code='S', arg=stringnl, stack_before=[], stack_after=[pybytes_or_str], proto=0, doc="""Push a Python string object. The argument is a repr-style string, with bracketing quote characters, and perhaps embedded escapes. The argument extends until the next newline character. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. """), I(name='BINSTRING', code='T', arg=string4, stack_before=[], stack_after=[pybytes_or_str], proto=1, doc="""Push a Python string object. There are two arguments: the first is a 4-byte little-endian signed int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. """), I(name='SHORT_BINSTRING', code='U', arg=string1, stack_before=[], stack_after=[pybytes_or_str], proto=1, doc="""Push a Python string object. There are two arguments: the first is a 1-byte unsigned int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. """), # Bytes (protocol 3 only; older protocols don't support bytes at all) I(name='BINBYTES', code='B', arg=bytes4, stack_before=[], stack_after=[pybytes], proto=3, doc="""Push a Python bytes object. There are two arguments: the first is a 4-byte little-endian unsigned int giving the number of bytes, and the second is that many bytes, which are taken literally as the bytes content. """), I(name='SHORT_BINBYTES', code='C', arg=bytes1, stack_before=[], stack_after=[pybytes], proto=3, doc="""Push a Python bytes object. There are two arguments: the first is a 1-byte unsigned int giving the number of bytes, and the second is that many bytes, which are taken literally as the string content. """), I(name='BINBYTES8', code='\x8e', arg=bytes8, stack_before=[], stack_after=[pybytes], proto=4, doc="""Push a Python bytes object. There are two arguments: the first is a 8-byte unsigned int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. """), # Ways to spell None. I(name='NONE', code='N', arg=None, stack_before=[], stack_after=[pynone], proto=0, doc="Push None on the stack."), # Ways to spell bools, starting with proto 2. See INT for how this was # done before proto 2. I(name='NEWTRUE', code='\x88', arg=None, stack_before=[], stack_after=[pybool], proto=2, doc="""True. Push True onto the stack."""), I(name='NEWFALSE', code='\x89', arg=None, stack_before=[], stack_after=[pybool], proto=2, doc="""True. Push False onto the stack."""), # Ways to spell Unicode strings. I(name='UNICODE', code='V', arg=unicodestringnl, stack_before=[], stack_after=[pyunicode], proto=0, # this may be pure-text, but it's a later addition doc="""Push a Python Unicode string object. The argument is a raw-unicode-escape encoding of a Unicode string, and so may contain embedded escape sequences. The argument extends until the next newline character. """), I(name='SHORT_BINUNICODE', code='\x8c', arg=unicodestring1, stack_before=[], stack_after=[pyunicode], proto=4, doc="""Push a Python Unicode string object. There are two arguments: the first is a 1-byte little-endian signed int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. """), I(name='BINUNICODE', code='X', arg=unicodestring4, stack_before=[], stack_after=[pyunicode], proto=1, doc="""Push a Python Unicode string object. There are two arguments: the first is a 4-byte little-endian unsigned int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. """), I(name='BINUNICODE8', code='\x8d', arg=unicodestring8, stack_before=[], stack_after=[pyunicode], proto=4, doc="""Push a Python Unicode string object. There are two arguments: the first is a 8-byte little-endian signed int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. """), # Ways to spell floats. I(name='FLOAT', code='F', arg=floatnl, stack_before=[], stack_after=[pyfloat], proto=0, doc="""Newline-terminated decimal float literal. The argument is repr(a_float), and in general requires 17 significant digits for roundtrip conversion to be an identity (this is so for IEEE-754 double precision values, which is what Python float maps to on most boxes). In general, FLOAT cannot be used to transport infinities, NaNs, or minus zero across boxes (or even on a single box, if the platform C library can't read the strings it produces for such things -- Windows is like that), but may do less damage than BINFLOAT on boxes with greater precision or dynamic range than IEEE-754 double. """), I(name='BINFLOAT', code='G', arg=float8, stack_before=[], stack_after=[pyfloat], proto=1, doc="""Float stored in binary form, with 8 bytes of data. This generally requires less than half the space of FLOAT encoding. In general, BINFLOAT cannot be used to transport infinities, NaNs, or minus zero, raises an exception if the exponent exceeds the range of an IEEE-754 double, and retains no more than 53 bits of precision (if there are more than that, "add a half and chop" rounding is used to cut it back to 53 significant bits). """), # Ways to build lists. I(name='EMPTY_LIST', code=']', arg=None, stack_before=[], stack_after=[pylist], proto=1, doc="Push an empty list."), I(name='APPEND', code='a', arg=None, stack_before=[pylist, anyobject], stack_after=[pylist], proto=0, doc="""Append an object to a list. Stack before: ... pylist anyobject Stack after: ... pylist+[anyobject] although pylist is really extended in-place. """), I(name='APPENDS', code='e', arg=None, stack_before=[pylist, markobject, stackslice], stack_after=[pylist], proto=1, doc="""Extend a list by a slice of stack objects. Stack before: ... pylist markobject stackslice Stack after: ... pylist+stackslice although pylist is really extended in-place. """), I(name='LIST', code='l', arg=None, stack_before=[markobject, stackslice], stack_after=[pylist], proto=0, doc="""Build a list out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python list, which single list object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... [1, 2, 3, 'abc'] """), # Ways to build tuples. I(name='EMPTY_TUPLE', code=')', arg=None, stack_before=[], stack_after=[pytuple], proto=1, doc="Push an empty tuple."), I(name='TUPLE', code='t', arg=None, stack_before=[markobject, stackslice], stack_after=[pytuple], proto=0, doc="""Build a tuple out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python tuple, which single tuple object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... (1, 2, 3, 'abc') """), I(name='TUPLE1', code='\x85', arg=None, stack_before=[anyobject], stack_after=[pytuple], proto=2, doc="""Build a one-tuple out of the topmost item on the stack. This code pops one value off the stack and pushes a tuple of length 1 whose one item is that value back onto it. In other words: stack[-1] = tuple(stack[-1:]) """), I(name='TUPLE2', code='\x86', arg=None, stack_before=[anyobject, anyobject], stack_after=[pytuple], proto=2, doc="""Build a two-tuple out of the top two items on the stack. This code pops two values off the stack and pushes a tuple of length 2 whose items are those values back onto it. In other words: stack[-2:] = [tuple(stack[-2:])] """), I(name='TUPLE3', code='\x87', arg=None, stack_before=[anyobject, anyobject, anyobject], stack_after=[pytuple], proto=2, doc="""Build a three-tuple out of the top three items on the stack. This code pops three values off the stack and pushes a tuple of length 3 whose items are those values back onto it. In other words: stack[-3:] = [tuple(stack[-3:])] """), # Ways to build dicts. I(name='EMPTY_DICT', code='}', arg=None, stack_before=[], stack_after=[pydict], proto=1, doc="Push an empty dict."), I(name='DICT', code='d', arg=None, stack_before=[markobject, stackslice], stack_after=[pydict], proto=0, doc="""Build a dict out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python dict, which single dict object replaces all of the stack from the topmost markobject onward. The stack slice alternates key, value, key, value, .... For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... {1: 2, 3: 'abc'} """), I(name='SETITEM', code='s', arg=None, stack_before=[pydict, anyobject, anyobject], stack_after=[pydict], proto=0, doc="""Add a key+value pair to an existing dict. Stack before: ... pydict key value Stack after: ... pydict where pydict has been modified via pydict[key] = value. """), I(name='SETITEMS', code='u', arg=None, stack_before=[pydict, markobject, stackslice], stack_after=[pydict], proto=1, doc="""Add an arbitrary number of key+value pairs to an existing dict. The slice of the stack following the topmost markobject is taken as an alternating sequence of keys and values, added to the dict immediately under the topmost markobject. Everything at and after the topmost markobject is popped, leaving the mutated dict at the top of the stack. Stack before: ... pydict markobject key_1 value_1 ... key_n value_n Stack after: ... pydict where pydict has been modified via pydict[key_i] = value_i for i in 1, 2, ..., n, and in that order. """), # Ways to build sets I(name='EMPTY_SET', code='\x8f', arg=None, stack_before=[], stack_after=[pyset], proto=4, doc="Push an empty set."), I(name='ADDITEMS', code='\x90', arg=None, stack_before=[pyset, markobject, stackslice], stack_after=[pyset], proto=4, doc="""Add an arbitrary number of items to an existing set. The slice of the stack following the topmost markobject is taken as a sequence of items, added to the set immediately under the topmost markobject. Everything at and after the topmost markobject is popped, leaving the mutated set at the top of the stack. Stack before: ... pyset markobject item_1 ... item_n Stack after: ... pyset where pyset has been modified via pyset.add(item_i) = item_i for i in 1, 2, ..., n, and in that order. """), # Way to build frozensets I(name='FROZENSET', code='\x91', arg=None, stack_before=[markobject, stackslice], stack_after=[pyfrozenset], proto=4, doc="""Build a frozenset out of the topmost slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python frozenset, which single frozenset object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 Stack after: ... frozenset({1, 2, 3}) """), # Stack manipulation. I(name='POP', code='0', arg=None, stack_before=[anyobject], stack_after=[], proto=0, doc="Discard the top stack item, shrinking the stack by one item."), I(name='DUP', code='2', arg=None, stack_before=[anyobject], stack_after=[anyobject, anyobject], proto=0, doc="Push the top stack item onto the stack again, duplicating it."), I(name='MARK', code='(', arg=None, stack_before=[], stack_after=[markobject], proto=0, doc="""Push markobject onto the stack. markobject is a unique object, used by other opcodes to identify a region of the stack containing a variable number of objects for them to work on. See markobject.doc for more detail. """), I(name='POP_MARK', code='1', arg=None, stack_before=[markobject, stackslice], stack_after=[], proto=1, doc="""Pop all the stack objects at and above the topmost markobject. When an opcode using a variable number of stack objects is done, POP_MARK is used to remove those objects, and to remove the markobject that delimited their starting position on the stack. """), # Memo manipulation. There are really only two operations (get and put), # each in all-text, "short binary", and "long binary" flavors. I(name='GET', code='g', arg=decimalnl_short, stack_before=[], stack_after=[anyobject], proto=0, doc="""Read an object from the memo and push it on the stack. The index of the memo object to push is given by the newline-terminated decimal string following. BINGET and LONG_BINGET are space-optimized versions. """), I(name='BINGET', code='h', arg=uint1, stack_before=[], stack_after=[anyobject], proto=1, doc="""Read an object from the memo and push it on the stack. The index of the memo object to push is given by the 1-byte unsigned integer following. """), I(name='LONG_BINGET', code='j', arg=uint4, stack_before=[], stack_after=[anyobject], proto=1, doc="""Read an object from the memo and push it on the stack. The index of the memo object to push is given by the 4-byte unsigned little-endian integer following. """), I(name='PUT', code='p', arg=decimalnl_short, stack_before=[], stack_after=[], proto=0, doc="""Store the stack top into the memo. The stack is not popped. The index of the memo location to write into is given by the newline- terminated decimal string following. BINPUT and LONG_BINPUT are space-optimized versions. """), I(name='BINPUT', code='q', arg=uint1, stack_before=[], stack_after=[], proto=1, doc="""Store the stack top into the memo. The stack is not popped. The index of the memo location to write into is given by the 1-byte unsigned integer following. """), I(name='LONG_BINPUT', code='r', arg=uint4, stack_before=[], stack_after=[], proto=1, doc="""Store the stack top into the memo. The stack is not popped. The index of the memo location to write into is given by the 4-byte unsigned little-endian integer following. """), I(name='MEMOIZE', code='\x94', arg=None, stack_before=[anyobject], stack_after=[anyobject], proto=4, doc="""Store the stack top into the memo. The stack is not popped. The index of the memo location to write is the number of elements currently present in the memo. """), # Access the extension registry (predefined objects). Akin to the GET # family. I(name='EXT1', code='\x82', arg=uint1, stack_before=[], stack_after=[anyobject], proto=2, doc="""Extension code. This code and the similar EXT2 and EXT4 allow using a registry of popular objects that are pickled by name, typically classes. It is envisioned that through a global negotiation and registration process, third parties can set up a mapping between ints and object names. In order to guarantee pickle interchangeability, the extension code registry ought to be global, although a range of codes may be reserved for private use. EXT1 has a 1-byte integer argument. This is used to index into the extension registry, and the object at that index is pushed on the stack. """), I(name='EXT2', code='\x83', arg=uint2, stack_before=[], stack_after=[anyobject], proto=2, doc="""Extension code. See EXT1. EXT2 has a two-byte integer argument. """), I(name='EXT4', code='\x84', arg=int4, stack_before=[], stack_after=[anyobject], proto=2, doc="""Extension code. See EXT1. EXT4 has a four-byte integer argument. """), # Push a class object, or module function, on the stack, via its module # and name. I(name='GLOBAL', code='c', arg=stringnl_noescape_pair, stack_before=[], stack_after=[anyobject], proto=0, doc="""Push a global object (module.attr) on the stack. Two newline-terminated strings follow the GLOBAL opcode. The first is taken as a module name, and the second as a class name. The class object module.class is pushed on the stack. More accurately, the object returned by self.find_class(module, class) is pushed on the stack, so unpickling subclasses can override this form of lookup. """), I(name='STACK_GLOBAL', code='\x93', arg=None, stack_before=[pyunicode, pyunicode], stack_after=[anyobject], proto=4, doc="""Push a global object (module.attr) on the stack. """), # Ways to build objects of classes pickle doesn't know about directly # (user-defined classes). I despair of documenting this accurately # and comprehensibly -- you really have to read the pickle code to # find all the special cases. I(name='REDUCE', code='R', arg=None, stack_before=[anyobject, anyobject], stack_after=[anyobject], proto=0, doc="""Push an object built from a callable and an argument tuple. The opcode is named to remind of the __reduce__() method. Stack before: ... callable pytuple Stack after: ... callable(*pytuple) The callable and the argument tuple are the first two items returned by a __reduce__ method. Applying the callable to the argtuple is supposed to reproduce the original object, or at least get it started. If the __reduce__ method returns a 3-tuple, the last component is an argument to be passed to the object's __setstate__, and then the REDUCE opcode is followed by code to create setstate's argument, and then a BUILD opcode to apply __setstate__ to that argument. If not isinstance(callable, type), REDUCE complains unless the callable has been registered with the copyreg module's safe_constructors dict, or the callable has a magic '__safe_for_unpickling__' attribute with a true value. I'm not sure why it does this, but I've sure seen this complaint often enough when I didn't want to . """), I(name='BUILD', code='b', arg=None, stack_before=[anyobject, anyobject], stack_after=[anyobject], proto=0, doc="""Finish building an object, via __setstate__ or dict update. Stack before: ... anyobject argument Stack after: ... anyobject where anyobject may have been mutated, as follows: If the object has a __setstate__ method, anyobject.__setstate__(argument) is called. Else the argument must be a dict, the object must have a __dict__, and the object is updated via anyobject.__dict__.update(argument) """), I(name='INST', code='i', arg=stringnl_noescape_pair, stack_before=[markobject, stackslice], stack_after=[anyobject], proto=0, doc="""Build a class instance. This is the protocol 0 version of protocol 1's OBJ opcode. INST is followed by two newline-terminated strings, giving a module and class name, just as for the GLOBAL opcode (and see GLOBAL for more details about that). self.find_class(module, name) is used to get a class object. In addition, all the objects on the stack following the topmost markobject are gathered into a tuple and popped (along with the topmost markobject), just as for the TUPLE opcode. Now it gets complicated. If all of these are true: + The argtuple is empty (markobject was at the top of the stack at the start). + The class object does not have a __getinitargs__ attribute. then we want to create an old-style class instance without invoking its __init__() method (pickle has waffled on this over the years; not calling __init__() is current wisdom). In this case, an instance of an old-style dummy class is created, and then we try to rebind its __class__ attribute to the desired class object. If this succeeds, the new instance object is pushed on the stack, and we're done. Else (the argtuple is not empty, it's not an old-style class object, or the class object does have a __getinitargs__ attribute), the code first insists that the class object have a __safe_for_unpickling__ attribute. Unlike as for the __safe_for_unpickling__ check in REDUCE, it doesn't matter whether this attribute has a true or false value, it only matters whether it exists (XXX this is a bug). If __safe_for_unpickling__ doesn't exist, UnpicklingError is raised. Else (the class object does have a __safe_for_unpickling__ attr), the class object obtained from INST's arguments is applied to the argtuple obtained from the stack, and the resulting instance object is pushed on the stack. NOTE: checks for __safe_for_unpickling__ went away in Python 2.3. NOTE: the distinction between old-style and new-style classes does not make sense in Python 3. """), I(name='OBJ', code='o', arg=None, stack_before=[markobject, anyobject, stackslice], stack_after=[anyobject], proto=1, doc="""Build a class instance. This is the protocol 1 version of protocol 0's INST opcode, and is very much like it. The major difference is that the class object is taken off the stack, allowing it to be retrieved from the memo repeatedly if several instances of the same class are created. This can be much more efficient (in both time and space) than repeatedly embedding the module and class names in INST opcodes. Unlike INST, OBJ takes no arguments from the opcode stream. Instead the class object is taken off the stack, immediately above the topmost markobject: Stack before: ... markobject classobject stackslice Stack after: ... new_instance_object As for INST, the remainder of the stack above the markobject is gathered into an argument tuple, and then the logic seems identical, except that no __safe_for_unpickling__ check is done (XXX this is a bug). See INST for the gory details. NOTE: In Python 2.3, INST and OBJ are identical except for how they get the class object. That was always the intent; the implementations had diverged for accidental reasons. """), I(name='NEWOBJ', code='\x81', arg=None, stack_before=[anyobject, anyobject], stack_after=[anyobject], proto=2, doc="""Build an object instance. The stack before should be thought of as containing a class object followed by an argument tuple (the tuple being the stack top). Call these cls and args. They are popped off the stack, and the value returned by cls.__new__(cls, *args) is pushed back onto the stack. """), I(name='NEWOBJ_EX', code='\x92', arg=None, stack_before=[anyobject, anyobject, anyobject], stack_after=[anyobject], proto=4, doc="""Build an object instance. The stack before should be thought of as containing a class object followed by an argument tuple and by a keyword argument dict (the dict being the stack top). Call these cls and args. They are popped off the stack, and the value returned by cls.__new__(cls, *args, *kwargs) is pushed back onto the stack. """), # Machine control. I(name='PROTO', code='\x80', arg=uint1, stack_before=[], stack_after=[], proto=2, doc="""Protocol version indicator. For protocol 2 and above, a pickle must start with this opcode. The argument is the protocol version, an int in range(2, 256). """), I(name='STOP', code='.', arg=None, stack_before=[anyobject], stack_after=[], proto=0, doc="""Stop the unpickling machine. Every pickle ends with this opcode. The object at the top of the stack is popped, and that's the result of unpickling. The stack should be empty then. """), # Framing support. I(name='FRAME', code='\x95', arg=uint8, stack_before=[], stack_after=[], proto=4, doc="""Indicate the beginning of a new frame. The unpickler may use this opcode to safely prefetch data from its underlying stream. """), # Ways to deal with persistent IDs. I(name='PERSID', code='P', arg=stringnl_noescape, stack_before=[], stack_after=[anyobject], proto=0, doc="""Push an object identified by a persistent ID. The pickle module doesn't define what a persistent ID means. PERSID's argument is a newline-terminated str-style (no embedded escapes, no bracketing quote characters) string, which *is* "the persistent ID". The unpickler passes this string to self.persistent_load(). Whatever object that returns is pushed on the stack. There is no implementation of persistent_load() in Python's unpickler: it must be supplied by an unpickler subclass. """), I(name='BINPERSID', code='Q', arg=None, stack_before=[anyobject], stack_after=[anyobject], proto=1, doc="""Push an object identified by a persistent ID. Like PERSID, except the persistent ID is popped off the stack (instead of being a string embedded in the opcode bytestream). The persistent ID is passed to self.persistent_load(), and whatever object that returns is pushed on the stack. See PERSID for more detail. """), ] del I # Verify uniqueness of .name and .code members. name2i = {} code2i = {} for i, d in enumerate(opcodes): if d.name in name2i: raise ValueError("repeated name %r at indices %d and %d" % (d.name, name2i[d.name], i)) if d.code in code2i: raise ValueError("repeated code %r at indices %d and %d" % (d.code, code2i[d.code], i)) name2i[d.name] = i code2i[d.code] = i del name2i, code2i, i, d ############################################################################## # Build a code2op dict, mapping opcode characters to OpcodeInfo records. # Also ensure we've got the same stuff as pickle.py, although the # introspection here is dicey. code2op = {} for d in opcodes: code2op[d.code] = d del d def assure_pickle_consistency(verbose=False): copy = code2op.copy() for name in pickle.__all__: if not re.match("[A-Z][A-Z0-9_]+$", name): if verbose: print("skipping %r: it doesn't look like an opcode name" % name) continue picklecode = getattr(pickle, name) if not isinstance(picklecode, bytes) or len(picklecode) != 1: if verbose: print(("skipping %r: value %r doesn't look like a pickle " "code" % (name, picklecode))) continue picklecode = picklecode.decode("latin-1") if picklecode in copy: if verbose: print("checking name %r w/ code %r for consistency" % ( name, picklecode)) d = copy[picklecode] if d.name != name: raise ValueError("for pickle code %r, pickle.py uses name %r " "but we're using name %r" % (picklecode, name, d.name)) # Forget this one. Any left over in copy at the end are a problem # of a different kind. del copy[picklecode] else: raise ValueError("pickle.py appears to have a pickle opcode with " "name %r and code %r, but we don't" % (name, picklecode)) if copy: msg = ["we appear to have pickle opcodes that pickle.py doesn't have:"] for code, d in copy.items(): msg.append(" name %r with code %r" % (d.name, code)) raise ValueError("\n".join(msg)) assure_pickle_consistency() del assure_pickle_consistency ############################################################################## # A pickle opcode generator. def _genops(data, yield_end_pos=False): if isinstance(data, bytes_types): data = io.BytesIO(data) if hasattr(data, "tell"): getpos = data.tell else: getpos = lambda: None while True: pos = getpos() code = data.read(1) opcode = code2op.get(code.decode("latin-1")) if opcode is None: if code == b"": raise ValueError("pickle exhausted before seeing STOP") else: raise ValueError("at position %s, opcode %r unknown" % ( "" if pos is None else pos, code)) if opcode.arg is None: arg = None else: arg = opcode.arg.reader(data) if yield_end_pos: yield opcode, arg, pos, getpos() else: yield opcode, arg, pos if code == b'.': assert opcode.name == 'STOP' break def genops(pickle): """Generate all the opcodes in a pickle. 'pickle' is a file-like object, or string, containing the pickle. Each opcode in the pickle is generated, from the current pickle position, stopping after a STOP opcode is delivered. A triple is generated for each opcode: opcode, arg, pos opcode is an OpcodeInfo record, describing the current opcode. If the opcode has an argument embedded in the pickle, arg is its decoded value, as a Python object. If the opcode doesn't have an argument, arg is None. If the pickle has a tell() method, pos was the value of pickle.tell() before reading the current opcode. If the pickle is a bytes object, it's wrapped in a BytesIO object, and the latter's tell() result is used. Else (the pickle doesn't have a tell(), and it's not obvious how to query its current position) pos is None. """ return _genops(pickle) ############################################################################## # A pickle optimizer. def optimize(p): 'Optimize a pickle string by removing unused PUT opcodes' put = 'PUT' get = 'GET' oldids = set() # set of all PUT ids newids = {} # set of ids used by a GET opcode opcodes = [] # (op, idx) or (pos, end_pos) proto = 0 protoheader = b'' for opcode, arg, pos, end_pos in _genops(p, yield_end_pos=True): if 'PUT' in opcode.name: oldids.add(arg) opcodes.append((put, arg)) elif opcode.name == 'MEMOIZE': idx = len(oldids) oldids.add(idx) opcodes.append((put, idx)) elif 'FRAME' in opcode.name: pass elif 'GET' in opcode.name: if opcode.proto > proto: proto = opcode.proto newids[arg] = None opcodes.append((get, arg)) elif opcode.name == 'PROTO': if arg > proto: proto = arg if pos == 0: protoheader = p[pos: end_pos] else: opcodes.append((pos, end_pos)) else: opcodes.append((pos, end_pos)) del oldids # Copy the opcodes except for PUTS without a corresponding GET out = io.BytesIO() # Write the PROTO header before any framing out.write(protoheader) pickler = pickle._Pickler(out, proto) if proto >= 4: pickler.framer.start_framing() idx = 0 for op, arg in opcodes: if op is put: if arg not in newids: continue data = pickler.put(idx) newids[arg] = idx idx += 1 elif op is get: data = pickler.get(newids[arg]) else: data = p[op:arg] pickler.framer.commit_frame() pickler.write(data) pickler.framer.end_framing() return out.getvalue() ############################################################################## # A symbolic pickle disassembler. def dis(pickle, out=None, memo=None, indentlevel=4, annotate=0): """Produce a symbolic disassembly of a pickle. 'pickle' is a file-like object, or string, containing a (at least one) pickle. The pickle is disassembled from the current position, through the first STOP opcode encountered. Optional arg 'out' is a file-like object to which the disassembly is printed. It defaults to sys.stdout. Optional arg 'memo' is a Python dict, used as the pickle's memo. It may be mutated by dis(), if the pickle contains PUT or BINPUT opcodes. Passing the same memo object to another dis() call then allows disassembly to proceed across multiple pickles that were all created by the same pickler with the same memo. Ordinarily you don't need to worry about this. Optional arg 'indentlevel' is the number of blanks by which to indent a new MARK level. It defaults to 4. Optional arg 'annotate' if nonzero instructs dis() to add short description of the opcode on each line of disassembled output. The value given to 'annotate' must be an integer and is used as a hint for the column where annotation should start. The default value is 0, meaning no annotations. In addition to printing the disassembly, some sanity checks are made: + All embedded opcode arguments "make sense". + Explicit and implicit pop operations have enough items on the stack. + When an opcode implicitly refers to a markobject, a markobject is actually on the stack. + A memo entry isn't referenced before it's defined. + The markobject isn't stored in the memo. + A memo entry isn't redefined. """ # Most of the hair here is for sanity checks, but most of it is needed # anyway to detect when a protocol 0 POP takes a MARK off the stack # (which in turn is needed to indent MARK blocks correctly). stack = [] # crude emulation of unpickler stack if memo is None: memo = {} # crude emulation of unpickler memo maxproto = -1 # max protocol number seen markstack = [] # bytecode positions of MARK opcodes indentchunk = ' ' * indentlevel errormsg = None annocol = annotate # column hint for annotations for opcode, arg, pos in genops(pickle): if pos is not None: print("%5d:" % pos, end=' ', file=out) line = "%-4s %s%s" % (repr(opcode.code)[1:-1], indentchunk * len(markstack), opcode.name) maxproto = max(maxproto, opcode.proto) before = opcode.stack_before # don't mutate after = opcode.stack_after # don't mutate numtopop = len(before) # See whether a MARK should be popped. markmsg = None if markobject in before or (opcode.name == "POP" and stack and stack[-1] is markobject): assert markobject not in after if __debug__: if markobject in before: assert before[-1] is stackslice if markstack: markpos = markstack.pop() if markpos is None: markmsg = "(MARK at unknown opcode offset)" else: markmsg = "(MARK at %d)" % markpos # Pop everything at and after the topmost markobject. while stack[-1] is not markobject: stack.pop() stack.pop() # Stop later code from popping too much. try: numtopop = before.index(markobject) except ValueError: assert opcode.name == "POP" numtopop = 0 else: errormsg = markmsg = "no MARK exists on stack" # Check for correct memo usage. if opcode.name in ("PUT", "BINPUT", "LONG_BINPUT", "MEMOIZE"): if opcode.name == "MEMOIZE": memo_idx = len(memo) else: assert arg is not None memo_idx = arg if memo_idx in memo: errormsg = "memo key %r already defined" % arg elif not stack: errormsg = "stack is empty -- can't store into memo" elif stack[-1] is markobject: errormsg = "can't store markobject in the memo" else: memo[memo_idx] = stack[-1] elif opcode.name in ("GET", "BINGET", "LONG_BINGET"): if arg in memo: assert len(after) == 1 after = [memo[arg]] # for better stack emulation else: errormsg = "memo key %r has never been stored into" % arg if arg is not None or markmsg: # make a mild effort to align arguments line += ' ' * (10 - len(opcode.name)) if arg is not None: line += ' ' + repr(arg) if markmsg: line += ' ' + markmsg if annotate: line += ' ' * (annocol - len(line)) # make a mild effort to align annotations annocol = len(line) if annocol > 50: annocol = annotate line += ' ' + opcode.doc.split('\n', 1)[0] print(line, file=out) if errormsg: # Note that we delayed complaining until the offending opcode # was printed. raise ValueError(errormsg) # Emulate the stack effects. if len(stack) < numtopop: raise ValueError("tries to pop %d items from stack with " "only %d items" % (numtopop, len(stack))) if numtopop: del stack[-numtopop:] if markobject in after: assert markobject not in before markstack.append(pos) stack.extend(after) print("highest protocol among opcodes =", maxproto, file=out) if stack: raise ValueError("stack not empty after STOP: %r" % stack) # For use in the doctest, simply as an example of a class to pickle. class _Example: def __init__(self, value): self.value = value _dis_test = r""" >>> import pickle >>> x = [1, 2, (3, 4), {b'abc': "def"}] >>> pkl0 = pickle.dumps(x, 0) >>> dis(pkl0) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: L LONG 1 9: a APPEND 10: L LONG 2 14: a APPEND 15: ( MARK 16: L LONG 3 20: L LONG 4 24: t TUPLE (MARK at 15) 25: p PUT 1 28: a APPEND 29: ( MARK 30: d DICT (MARK at 29) 31: p PUT 2 34: c GLOBAL '_codecs encode' 50: p PUT 3 53: ( MARK 54: V UNICODE 'abc' 59: p PUT 4 62: V UNICODE 'latin1' 70: p PUT 5 73: t TUPLE (MARK at 53) 74: p PUT 6 77: R REDUCE 78: p PUT 7 81: V UNICODE 'def' 86: p PUT 8 89: s SETITEM 90: a APPEND 91: . STOP highest protocol among opcodes = 0 Try again with a "binary" pickle. >>> pkl1 = pickle.dumps(x, 1) >>> dis(pkl1) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: K BININT1 1 6: K BININT1 2 8: ( MARK 9: K BININT1 3 11: K BININT1 4 13: t TUPLE (MARK at 8) 14: q BINPUT 1 16: } EMPTY_DICT 17: q BINPUT 2 19: c GLOBAL '_codecs encode' 35: q BINPUT 3 37: ( MARK 38: X BINUNICODE 'abc' 46: q BINPUT 4 48: X BINUNICODE 'latin1' 59: q BINPUT 5 61: t TUPLE (MARK at 37) 62: q BINPUT 6 64: R REDUCE 65: q BINPUT 7 67: X BINUNICODE 'def' 75: q BINPUT 8 77: s SETITEM 78: e APPENDS (MARK at 3) 79: . STOP highest protocol among opcodes = 1 Exercise the INST/OBJ/BUILD family. >>> import pickletools >>> dis(pickle.dumps(pickletools.dis, 0)) 0: c GLOBAL 'pickletools dis' 17: p PUT 0 20: . STOP highest protocol among opcodes = 0 >>> from pickletools import _Example >>> x = [_Example(42)] * 2 >>> dis(pickle.dumps(x, 0)) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: c GLOBAL 'copy_reg _reconstructor' 30: p PUT 1 33: ( MARK 34: c GLOBAL 'pickletools _Example' 56: p PUT 2 59: c GLOBAL '__builtin__ object' 79: p PUT 3 82: N NONE 83: t TUPLE (MARK at 33) 84: p PUT 4 87: R REDUCE 88: p PUT 5 91: ( MARK 92: d DICT (MARK at 91) 93: p PUT 6 96: V UNICODE 'value' 103: p PUT 7 106: L LONG 42 111: s SETITEM 112: b BUILD 113: a APPEND 114: g GET 5 117: a APPEND 118: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(x, 1)) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: c GLOBAL 'copy_reg _reconstructor' 29: q BINPUT 1 31: ( MARK 32: c GLOBAL 'pickletools _Example' 54: q BINPUT 2 56: c GLOBAL '__builtin__ object' 76: q BINPUT 3 78: N NONE 79: t TUPLE (MARK at 31) 80: q BINPUT 4 82: R REDUCE 83: q BINPUT 5 85: } EMPTY_DICT 86: q BINPUT 6 88: X BINUNICODE 'value' 98: q BINPUT 7 100: K BININT1 42 102: s SETITEM 103: b BUILD 104: h BINGET 5 106: e APPENDS (MARK at 3) 107: . STOP highest protocol among opcodes = 1 Try "the canonical" recursive-object test. >>> L = [] >>> T = L, >>> L.append(T) >>> L[0] is T True >>> T[0] is L True >>> L[0][0] is L True >>> T[0][0] is T True >>> dis(pickle.dumps(L, 0)) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: ( MARK 6: g GET 0 9: t TUPLE (MARK at 5) 10: p PUT 1 13: a APPEND 14: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(L, 1)) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: h BINGET 0 6: t TUPLE (MARK at 3) 7: q BINPUT 1 9: a APPEND 10: . STOP highest protocol among opcodes = 1 Note that, in the protocol 0 pickle of the recursive tuple, the disassembler has to emulate the stack in order to realize that the POP opcode at 16 gets rid of the MARK at 0. >>> dis(pickle.dumps(T, 0)) 0: ( MARK 1: ( MARK 2: l LIST (MARK at 1) 3: p PUT 0 6: ( MARK 7: g GET 0 10: t TUPLE (MARK at 6) 11: p PUT 1 14: a APPEND 15: 0 POP 16: 0 POP (MARK at 0) 17: g GET 1 20: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(T, 1)) 0: ( MARK 1: ] EMPTY_LIST 2: q BINPUT 0 4: ( MARK 5: h BINGET 0 7: t TUPLE (MARK at 4) 8: q BINPUT 1 10: a APPEND 11: 1 POP_MARK (MARK at 0) 12: h BINGET 1 14: . STOP highest protocol among opcodes = 1 Try protocol 2. >>> dis(pickle.dumps(L, 2)) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: h BINGET 0 7: \x85 TUPLE1 8: q BINPUT 1 10: a APPEND 11: . STOP highest protocol among opcodes = 2 >>> dis(pickle.dumps(T, 2)) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: h BINGET 0 7: \x85 TUPLE1 8: q BINPUT 1 10: a APPEND 11: 0 POP 12: h BINGET 1 14: . STOP highest protocol among opcodes = 2 Try protocol 3 with annotations: >>> dis(pickle.dumps(T, 3), annotate=1) 0: \x80 PROTO 3 Protocol version indicator. 2: ] EMPTY_LIST Push an empty list. 3: q BINPUT 0 Store the stack top into the memo. The stack is not popped. 5: h BINGET 0 Read an object from the memo and push it on the stack. 7: \x85 TUPLE1 Build a one-tuple out of the topmost item on the stack. 8: q BINPUT 1 Store the stack top into the memo. The stack is not popped. 10: a APPEND Append an object to a list. 11: 0 POP Discard the top stack item, shrinking the stack by one item. 12: h BINGET 1 Read an object from the memo and push it on the stack. 14: . STOP Stop the unpickling machine. highest protocol among opcodes = 2 """ _memo_test = r""" >>> import pickle >>> import io >>> f = io.BytesIO() >>> p = pickle.Pickler(f, 2) >>> x = [1, 2, 3] >>> p.dump(x) >>> p.dump(x) >>> f.seek(0) 0 >>> memo = {} >>> dis(f, memo=memo) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: ( MARK 6: K BININT1 1 8: K BININT1 2 10: K BININT1 3 12: e APPENDS (MARK at 5) 13: . STOP highest protocol among opcodes = 2 >>> dis(f, memo=memo) 14: \x80 PROTO 2 16: h BINGET 0 18: . STOP highest protocol among opcodes = 2 """ __test__ = {'disassembler_test': _dis_test, 'disassembler_memo_test': _memo_test, } def _test(): import doctest return doctest.testmod() if __name__ == "__main__": import sys, argparse parser = argparse.ArgumentParser( description='disassemble one or more pickle files') parser.add_argument( 'pickle_file', type=argparse.FileType('br'), nargs='*', help='the pickle file') parser.add_argument( '-o', '--output', default=sys.stdout, type=argparse.FileType('w'), help='the file where the output should be written') parser.add_argument( '-m', '--memo', action='store_true', help='preserve memo between disassemblies') parser.add_argument( '-l', '--indentlevel', default=4, type=int, help='the number of blanks by which to indent a new MARK level') parser.add_argument( '-a', '--annotate', action='store_true', help='annotate each line with a short opcode description') parser.add_argument( '-p', '--preamble', default="==> {name} <==", help='if more than one pickle file is specified, print this before' ' each disassembly') parser.add_argument( '-t', '--test', action='store_true', help='run self-test suite') parser.add_argument( '-v', action='store_true', help='run verbosely; only affects self-test run') args = parser.parse_args() if args.test: _test() else: annotate = 30 if args.annotate else 0 if not args.pickle_file: parser.print_help() elif len(args.pickle_file) == 1: dis(args.pickle_file[0], args.output, None, args.indentlevel, annotate) else: memo = {} if args.memo else None for f in args.pickle_file: preamble = args.preamble.format(name=f.name) args.output.write(preamble + '\n') dis(f, args.output, memo, args.indentlevel, annotate) lib64/python3.4/modulefinder.py000064400000055575152342604300012301 0ustar00"""Find modules used by a script, using introspection.""" import dis import importlib._bootstrap import importlib.machinery import marshal import os import sys import types import struct import warnings with warnings.catch_warnings(): warnings.simplefilter('ignore', PendingDeprecationWarning) import imp # XXX Clean up once str8's cstor matches bytes. LOAD_CONST = bytes([dis.opname.index('LOAD_CONST')]) IMPORT_NAME = bytes([dis.opname.index('IMPORT_NAME')]) STORE_NAME = bytes([dis.opname.index('STORE_NAME')]) STORE_GLOBAL = bytes([dis.opname.index('STORE_GLOBAL')]) STORE_OPS = [STORE_NAME, STORE_GLOBAL] HAVE_ARGUMENT = bytes([dis.HAVE_ARGUMENT]) # Modulefinder does a good job at simulating Python's, but it can not # handle __path__ modifications packages make at runtime. Therefore there # is a mechanism whereby you can register extra paths in this map for a # package, and it will be honored. # Note this is a mapping is lists of paths. packagePathMap = {} # A Public interface def AddPackagePath(packagename, path): packagePathMap.setdefault(packagename, []).append(path) replacePackageMap = {} # This ReplacePackage mechanism allows modulefinder to work around # situations in which a package injects itself under the name # of another package into sys.modules at runtime by calling # ReplacePackage("real_package_name", "faked_package_name") # before running ModuleFinder. def ReplacePackage(oldname, newname): replacePackageMap[oldname] = newname class Module: def __init__(self, name, file=None, path=None): self.__name__ = name self.__file__ = file self.__path__ = path self.__code__ = None # The set of global names that are assigned to in the module. # This includes those names imported through starimports of # Python modules. self.globalnames = {} # The set of starimports this module did that could not be # resolved, ie. a starimport from a non-Python module. self.starimports = {} def __repr__(self): s = "Module(%r" % (self.__name__,) if self.__file__ is not None: s = s + ", %r" % (self.__file__,) if self.__path__ is not None: s = s + ", %r" % (self.__path__,) s = s + ")" return s class ModuleFinder: def __init__(self, path=None, debug=0, excludes=[], replace_paths=[]): if path is None: path = sys.path self.path = path self.modules = {} self.badmodules = {} self.debug = debug self.indent = 0 self.excludes = excludes self.replace_paths = replace_paths self.processed_paths = [] # Used in debugging only def msg(self, level, str, *args): if level <= self.debug: for i in range(self.indent): print(" ", end=' ') print(str, end=' ') for arg in args: print(repr(arg), end=' ') print() def msgin(self, *args): level = args[0] if level <= self.debug: self.indent = self.indent + 1 self.msg(*args) def msgout(self, *args): level = args[0] if level <= self.debug: self.indent = self.indent - 1 self.msg(*args) def run_script(self, pathname): self.msg(2, "run_script", pathname) with open(pathname) as fp: stuff = ("", "r", imp.PY_SOURCE) self.load_module('__main__', fp, pathname, stuff) def load_file(self, pathname): dir, name = os.path.split(pathname) name, ext = os.path.splitext(name) with open(pathname) as fp: stuff = (ext, "r", imp.PY_SOURCE) self.load_module(name, fp, pathname, stuff) def import_hook(self, name, caller=None, fromlist=None, level=-1): self.msg(3, "import_hook", name, caller, fromlist, level) parent = self.determine_parent(caller, level=level) q, tail = self.find_head_package(parent, name) m = self.load_tail(q, tail) if not fromlist: return q if m.__path__: self.ensure_fromlist(m, fromlist) return None def determine_parent(self, caller, level=-1): self.msgin(4, "determine_parent", caller, level) if not caller or level == 0: self.msgout(4, "determine_parent -> None") return None pname = caller.__name__ if level >= 1: # relative import if caller.__path__: level -= 1 if level == 0: parent = self.modules[pname] assert parent is caller self.msgout(4, "determine_parent ->", parent) return parent if pname.count(".") < level: raise ImportError("relative importpath too deep") pname = ".".join(pname.split(".")[:-level]) parent = self.modules[pname] self.msgout(4, "determine_parent ->", parent) return parent if caller.__path__: parent = self.modules[pname] assert caller is parent self.msgout(4, "determine_parent ->", parent) return parent if '.' in pname: i = pname.rfind('.') pname = pname[:i] parent = self.modules[pname] assert parent.__name__ == pname self.msgout(4, "determine_parent ->", parent) return parent self.msgout(4, "determine_parent -> None") return None def find_head_package(self, parent, name): self.msgin(4, "find_head_package", parent, name) if '.' in name: i = name.find('.') head = name[:i] tail = name[i+1:] else: head = name tail = "" if parent: qname = "%s.%s" % (parent.__name__, head) else: qname = head q = self.import_module(head, qname, parent) if q: self.msgout(4, "find_head_package ->", (q, tail)) return q, tail if parent: qname = head parent = None q = self.import_module(head, qname, parent) if q: self.msgout(4, "find_head_package ->", (q, tail)) return q, tail self.msgout(4, "raise ImportError: No module named", qname) raise ImportError("No module named " + qname) def load_tail(self, q, tail): self.msgin(4, "load_tail", q, tail) m = q while tail: i = tail.find('.') if i < 0: i = len(tail) head, tail = tail[:i], tail[i+1:] mname = "%s.%s" % (m.__name__, head) m = self.import_module(head, mname, m) if not m: self.msgout(4, "raise ImportError: No module named", mname) raise ImportError("No module named " + mname) self.msgout(4, "load_tail ->", m) return m def ensure_fromlist(self, m, fromlist, recursive=0): self.msg(4, "ensure_fromlist", m, fromlist, recursive) for sub in fromlist: if sub == "*": if not recursive: all = self.find_all_submodules(m) if all: self.ensure_fromlist(m, all, 1) elif not hasattr(m, sub): subname = "%s.%s" % (m.__name__, sub) submod = self.import_module(sub, subname, m) if not submod: raise ImportError("No module named " + subname) def find_all_submodules(self, m): if not m.__path__: return modules = {} # 'suffixes' used to be a list hardcoded to [".py", ".pyc", ".pyo"]. # But we must also collect Python extension modules - although # we cannot separate normal dlls from Python extensions. suffixes = [] suffixes += importlib.machinery.EXTENSION_SUFFIXES[:] suffixes += importlib.machinery.SOURCE_SUFFIXES[:] suffixes += importlib.machinery.BYTECODE_SUFFIXES[:] for dir in m.__path__: try: names = os.listdir(dir) except OSError: self.msg(2, "can't list directory", dir) continue for name in names: mod = None for suff in suffixes: n = len(suff) if name[-n:] == suff: mod = name[:-n] break if mod and mod != "__init__": modules[mod] = mod return modules.keys() def import_module(self, partname, fqname, parent): self.msgin(3, "import_module", partname, fqname, parent) try: m = self.modules[fqname] except KeyError: pass else: self.msgout(3, "import_module ->", m) return m if fqname in self.badmodules: self.msgout(3, "import_module -> None") return None if parent and parent.__path__ is None: self.msgout(3, "import_module -> None") return None try: fp, pathname, stuff = self.find_module(partname, parent and parent.__path__, parent) except ImportError: self.msgout(3, "import_module ->", None) return None try: m = self.load_module(fqname, fp, pathname, stuff) finally: if fp: fp.close() if parent: setattr(parent, partname, m) self.msgout(3, "import_module ->", m) return m def load_module(self, fqname, fp, pathname, file_info): suffix, mode, type = file_info self.msgin(2, "load_module", fqname, fp and "fp", pathname) if type == imp.PKG_DIRECTORY: m = self.load_package(fqname, pathname) self.msgout(2, "load_module ->", m) return m if type == imp.PY_SOURCE: co = compile(fp.read()+'\n', pathname, 'exec') elif type == imp.PY_COMPILED: try: marshal_data = importlib._bootstrap._validate_bytecode_header(fp.read()) except ImportError as exc: self.msgout(2, "raise ImportError: " + str(exc), pathname) raise co = marshal.loads(marshal_data) else: co = None m = self.add_module(fqname) m.__file__ = pathname if co: if self.replace_paths: co = self.replace_paths_in_code(co) m.__code__ = co self.scan_code(co, m) self.msgout(2, "load_module ->", m) return m def _add_badmodule(self, name, caller): if name not in self.badmodules: self.badmodules[name] = {} if caller: self.badmodules[name][caller.__name__] = 1 else: self.badmodules[name]["-"] = 1 def _safe_import_hook(self, name, caller, fromlist, level=-1): # wrapper for self.import_hook() that won't raise ImportError if name in self.badmodules: self._add_badmodule(name, caller) return try: self.import_hook(name, caller, level=level) except ImportError as msg: self.msg(2, "ImportError:", str(msg)) self._add_badmodule(name, caller) else: if fromlist: for sub in fromlist: if sub in self.badmodules: self._add_badmodule(sub, caller) continue try: self.import_hook(name, caller, [sub], level=level) except ImportError as msg: self.msg(2, "ImportError:", str(msg)) fullname = name + "." + sub self._add_badmodule(fullname, caller) def scan_opcodes_25(self, co, unpack = struct.unpack): # Scan the code, and yield 'interesting' opcode combinations # Python 2.5 version (has absolute and relative imports) code = co.co_code names = co.co_names consts = co.co_consts LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME while code: c = bytes([code[0]]) if c in STORE_OPS: oparg, = unpack('= HAVE_ARGUMENT: code = code[3:] else: code = code[1:] def scan_code(self, co, m): code = co.co_code scanner = self.scan_opcodes_25 for what, args in scanner(co): if what == "store": name, = args m.globalnames[name] = 1 elif what == "absolute_import": fromlist, name = args have_star = 0 if fromlist is not None: if "*" in fromlist: have_star = 1 fromlist = [f for f in fromlist if f != "*"] self._safe_import_hook(name, m, fromlist, level=0) if have_star: # We've encountered an "import *". If it is a Python module, # the code has already been parsed and we can suck out the # global names. mm = None if m.__path__: # At this point we don't know whether 'name' is a # submodule of 'm' or a global module. Let's just try # the full name first. mm = self.modules.get(m.__name__ + "." + name) if mm is None: mm = self.modules.get(name) if mm is not None: m.globalnames.update(mm.globalnames) m.starimports.update(mm.starimports) if mm.__code__ is None: m.starimports[name] = 1 else: m.starimports[name] = 1 elif what == "relative_import": level, fromlist, name = args if name: self._safe_import_hook(name, m, fromlist, level=level) else: parent = self.determine_parent(m, level=level) self._safe_import_hook(parent.__name__, None, fromlist, level=0) else: # We don't expect anything else from the generator. raise RuntimeError(what) for c in co.co_consts: if isinstance(c, type(co)): self.scan_code(c, m) def load_package(self, fqname, pathname): self.msgin(2, "load_package", fqname, pathname) newname = replacePackageMap.get(fqname) if newname: fqname = newname m = self.add_module(fqname) m.__file__ = pathname m.__path__ = [pathname] # As per comment at top of file, simulate runtime __path__ additions. m.__path__ = m.__path__ + packagePathMap.get(fqname, []) fp, buf, stuff = self.find_module("__init__", m.__path__) try: self.load_module(fqname, fp, buf, stuff) self.msgout(2, "load_package ->", m) return m finally: if fp: fp.close() def add_module(self, fqname): if fqname in self.modules: return self.modules[fqname] self.modules[fqname] = m = Module(fqname) return m def find_module(self, name, path, parent=None): if parent is not None: # assert path is not None fullname = parent.__name__+'.'+name else: fullname = name if fullname in self.excludes: self.msgout(3, "find_module -> Excluded", fullname) raise ImportError(name) if path is None: if name in sys.builtin_module_names: return (None, None, ("", "", imp.C_BUILTIN)) path = self.path return imp.find_module(name, path) def report(self): """Print a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. """ print() print(" %-25s %s" % ("Name", "File")) print(" %-25s %s" % ("----", "----")) # Print modules found keys = sorted(self.modules.keys()) for key in keys: m = self.modules[key] if m.__path__: print("P", end=' ') else: print("m", end=' ') print("%-25s" % key, m.__file__ or "") # Print missing modules missing, maybe = self.any_missing_maybe() if missing: print() print("Missing modules:") for name in missing: mods = sorted(self.badmodules[name].keys()) print("?", name, "imported from", ', '.join(mods)) # Print modules that may be missing, but then again, maybe not... if maybe: print() print("Submodules that appear to be missing, but could also be", end=' ') print("global names in the parent package:") for name in maybe: mods = sorted(self.badmodules[name].keys()) print("?", name, "imported from", ', '.join(mods)) def any_missing(self): """Return a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. """ missing, maybe = self.any_missing_maybe() return missing + maybe def any_missing_maybe(self): """Return two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. """ missing = [] maybe = [] for name in self.badmodules: if name in self.excludes: continue i = name.rfind(".") if i < 0: missing.append(name) continue subname = name[i+1:] pkgname = name[:i] pkg = self.modules.get(pkgname) if pkg is not None: if pkgname in self.badmodules[name]: # The package tried to import this module itself and # failed. It's definitely missing. missing.append(name) elif subname in pkg.globalnames: # It's a global in the package: definitely not missing. pass elif pkg.starimports: # It could be missing, but the package did an "import *" # from a non-Python module, so we simply can't be sure. maybe.append(name) else: # It's not a global in the package, the package didn't # do funny star imports, it's very likely to be missing. # The symbol could be inserted into the package from the # outside, but since that's not good style we simply list # it missing. missing.append(name) else: missing.append(name) missing.sort() maybe.sort() return missing, maybe def replace_paths_in_code(self, co): new_filename = original_filename = os.path.normpath(co.co_filename) for f, r in self.replace_paths: if original_filename.startswith(f): new_filename = r + original_filename[len(f):] break if self.debug and original_filename not in self.processed_paths: if new_filename != original_filename: self.msgout(2, "co_filename %r changed to %r" \ % (original_filename,new_filename,)) else: self.msgout(2, "co_filename %r remains unchanged" \ % (original_filename,)) self.processed_paths.append(original_filename) consts = list(co.co_consts) for i in range(len(consts)): if isinstance(consts[i], type(co)): consts[i] = self.replace_paths_in_code(consts[i]) return types.CodeType(co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize, co.co_flags, co.co_code, tuple(consts), co.co_names, co.co_varnames, new_filename, co.co_name, co.co_firstlineno, co.co_lnotab, co.co_freevars, co.co_cellvars) def test(): # Parse command line import getopt try: opts, args = getopt.getopt(sys.argv[1:], "dmp:qx:") except getopt.error as msg: print(msg) return # Process options debug = 1 domods = 0 addpath = [] exclude = [] for o, a in opts: if o == '-d': debug = debug + 1 if o == '-m': domods = 1 if o == '-p': addpath = addpath + a.split(os.pathsep) if o == '-q': debug = 0 if o == '-x': exclude.append(a) # Provide default arguments if not args: script = "hello.py" else: script = args[0] # Set the path based on sys.path and the script directory path = sys.path[:] path[0] = os.path.dirname(script) path = addpath + path if debug > 1: print("path:") for item in path: print(" ", repr(item)) # Create the module finder and turn its crank mf = ModuleFinder(path, debug, exclude) for arg in args[1:]: if arg == '-m': domods = 1 continue if domods: if arg[-2:] == '.*': mf.import_hook(arg[:-2], None, ["*"]) else: mf.import_hook(arg) else: mf.load_file(arg) mf.run_script(script) mf.report() return mf # for -i debugging if __name__ == '__main__': try: mf = test() except KeyboardInterrupt: print("\n[interrupted]") lib64/python3.4/socketserver.py000064400000057464152342604300012342 0ustar00"""Generic socket server classes. This module tries to capture the various aspects of defining a server: For socket-based servers: - address family: - AF_INET{,6}: IP (Internet Protocol) sockets (default) - AF_UNIX: Unix domain sockets - others, e.g. AF_DECNET are conceivable (see - socket type: - SOCK_STREAM (reliable stream, e.g. TCP) - SOCK_DGRAM (datagrams, e.g. UDP) For request-based servers (including socket-based): - client address verification before further looking at the request (This is actually a hook for any processing that needs to look at the request before anything else, e.g. logging) - how to handle multiple requests: - synchronous (one request is handled at a time) - forking (each request is handled by a new process) - threading (each request is handled by a new thread) The classes in this module favor the server type that is simplest to write: a synchronous TCP/IP server. This is bad class design, but save some typing. (There's also the issue that a deep class hierarchy slows down method lookups.) There are five classes in an inheritance diagram, four of which represent synchronous servers of four types: +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+ Note that UnixDatagramServer derives from UDPServer, not from UnixStreamServer -- the only difference between an IP and a Unix stream server is the address family, which is simply repeated in both unix server classes. Forking and threading versions of each type of server can be created using the ForkingMixIn and ThreadingMixIn mix-in classes. For instance, a threading UDP server class is created as follows: class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass The Mix-in class must come first, since it overrides a method defined in UDPServer! Setting the various member variables also changes the behavior of the underlying server mechanism. To implement a service, you must derive a class from BaseRequestHandler and redefine its handle() method. You can then run various versions of the service by combining one of the server classes with your request handler class. The request handler class must be different for datagram or stream services. This can be hidden by using the request handler subclasses StreamRequestHandler or DatagramRequestHandler. Of course, you still have to use your head! For instance, it makes no sense to use a forking server if the service contains state in memory that can be modified by requests (since the modifications in the child process would never reach the initial state kept in the parent process and passed to each child). In this case, you can use a threading server, but you will probably have to use locks to avoid two requests that come in nearly simultaneous to apply conflicting changes to the server state. On the other hand, if you are building e.g. an HTTP server, where all data is stored externally (e.g. in the file system), a synchronous class will essentially render the service "deaf" while one request is being handled -- which may be for a very long time if a client is slow to read all the data it has requested. Here a threading or forking server is appropriate. In some cases, it may be appropriate to process part of a request synchronously, but to finish processing in a forked child depending on the request data. This can be implemented by using a synchronous server and doing an explicit fork in the request handler class handle() method. Another approach to handling multiple simultaneous requests in an environment that supports neither threads nor fork (or where these are too expensive or inappropriate for the service) is to maintain an explicit table of partially finished requests and to use select() to decide which request to work on next (or whether to handle a new incoming request). This is particularly important for stream services where each client can potentially be connected for a long time (if threads or subprocesses cannot be used). Future work: - Standard classes for Sun RPC (which uses either UDP or TCP) - Standard mix-in classes to implement various authentication and encryption schemes - Standard framework for select-based multiplexing XXX Open problems: - What to do with out-of-band data? BaseServer: - split generic "request" functionality out into BaseServer class. Copyright (C) 2000 Luke Kenneth Casson Leighton example: read entries from a SQL database (requires overriding get_request() to return a table entry from the database). entry is processed by a RequestHandlerClass. """ # Author of the BaseServer patch: Luke Kenneth Casson Leighton # XXX Warning! # There is a test suite for this module, but it cannot be run by the # standard regression test. # To run it manually, run Lib/test/test_socketserver.py. __version__ = "0.4" import socket import select import os import errno try: import threading except ImportError: import dummy_threading as threading __all__ = ["BaseServer", "TCPServer", "UDPServer", "ForkingUDPServer", "ForkingTCPServer", "ThreadingUDPServer", "ThreadingTCPServer", "BaseRequestHandler", "StreamRequestHandler", "DatagramRequestHandler", "ThreadingMixIn", "ForkingMixIn"] if hasattr(socket, "AF_UNIX"): __all__.extend(["UnixStreamServer","UnixDatagramServer", "ThreadingUnixStreamServer", "ThreadingUnixDatagramServer"]) def _eintr_retry(func, *args): """restart a system call interrupted by EINTR""" while True: try: return func(*args) except OSError as e: if e.errno != errno.EINTR: raise class BaseServer: """Base class for server classes. Methods for the caller: - __init__(server_address, RequestHandlerClass) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you do not use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - server_close() - process_request(request, client_address) - shutdown_request(request) - close_request(request) - service_actions() - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - allow_reuse_address Instance variables: - RequestHandlerClass - socket """ timeout = None def __init__(self, server_address, RequestHandlerClass): """Constructor. May be extended, do not override.""" self.server_address = server_address self.RequestHandlerClass = RequestHandlerClass self.__is_shut_down = threading.Event() self.__shutdown_request = False def server_activate(self): """Called by constructor to activate the server. May be overridden. """ pass def serve_forever(self, poll_interval=0.5): """Handle one request at a time until shutdown. Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread. """ self.__is_shut_down.clear() try: while not self.__shutdown_request: # XXX: Consider using another file descriptor or # connecting to the socket to wake this up instead of # polling. Polling reduces our responsiveness to a # shutdown request and wastes cpu at all other times. r, w, e = _eintr_retry(select.select, [self], [], [], poll_interval) if self in r: self._handle_request_noblock() self.service_actions() finally: self.__shutdown_request = False self.__is_shut_down.set() def shutdown(self): """Stops the serve_forever loop. Blocks until the loop has finished. This must be called while serve_forever() is running in another thread, or it will deadlock. """ self.__shutdown_request = True self.__is_shut_down.wait() def service_actions(self): """Called by the serve_forever() loop. May be overridden by a subclass / Mixin to implement any code that needs to be run during the loop. """ pass # The distinction between handling, getting, processing and # finishing a request is fairly arbitrary. Remember: # # - handle_request() is the top-level call. It calls # select, get_request(), verify_request() and process_request() # - get_request() is different for stream or datagram sockets # - process_request() is the place that may fork a new process # or create a new thread to finish the request # - finish_request() instantiates the request handler class; # this constructor will handle the request all by itself def handle_request(self): """Handle one request, possibly blocking. Respects self.timeout. """ # Support people who used socket.settimeout() to escape # handle_request before self.timeout was available. timeout = self.socket.gettimeout() if timeout is None: timeout = self.timeout elif self.timeout is not None: timeout = min(timeout, self.timeout) fd_sets = _eintr_retry(select.select, [self], [], [], timeout) if not fd_sets[0]: self.handle_timeout() return self._handle_request_noblock() def _handle_request_noblock(self): """Handle one request, without blocking. I assume that select.select has returned that the socket is readable before this function was called, so there should be no risk of blocking in get_request(). """ try: request, client_address = self.get_request() except OSError: return if self.verify_request(request, client_address): try: self.process_request(request, client_address) except: self.handle_error(request, client_address) self.shutdown_request(request) def handle_timeout(self): """Called if no new request arrives within self.timeout. Overridden by ForkingMixIn. """ pass def verify_request(self, request, client_address): """Verify the request. May be overridden. Return True if we should proceed with this request. """ return True def process_request(self, request, client_address): """Call finish_request. Overridden by ForkingMixIn and ThreadingMixIn. """ self.finish_request(request, client_address) self.shutdown_request(request) def server_close(self): """Called to clean-up the server. May be overridden. """ pass def finish_request(self, request, client_address): """Finish one request by instantiating RequestHandlerClass.""" self.RequestHandlerClass(request, client_address, self) def shutdown_request(self, request): """Called to shutdown and close an individual request.""" self.close_request(request) def close_request(self, request): """Called to clean up an individual request.""" pass def handle_error(self, request, client_address): """Handle an error gracefully. May be overridden. The default is to print a traceback and continue. """ print('-'*40) print('Exception happened during processing of request from', end=' ') print(client_address) import traceback traceback.print_exc() # XXX But this goes to stderr! print('-'*40) class TCPServer(BaseServer): """Base class for various socket-based server classes. Defaults to synchronous IP stream (i.e., TCP). Methods for the caller: - __init__(server_address, RequestHandlerClass, bind_and_activate=True) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you don't use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - process_request(request, client_address) - shutdown_request(request) - close_request(request) - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - request_queue_size (only for stream sockets) - allow_reuse_address Instance variables: - server_address - RequestHandlerClass - socket """ address_family = socket.AF_INET socket_type = socket.SOCK_STREAM request_queue_size = 5 allow_reuse_address = False def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): """Constructor. May be extended, do not override.""" BaseServer.__init__(self, server_address, RequestHandlerClass) self.socket = socket.socket(self.address_family, self.socket_type) if bind_and_activate: try: self.server_bind() self.server_activate() except: self.server_close() raise def server_bind(self): """Called by constructor to bind the socket. May be overridden. """ if self.allow_reuse_address: self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(self.server_address) self.server_address = self.socket.getsockname() def server_activate(self): """Called by constructor to activate the server. May be overridden. """ self.socket.listen(self.request_queue_size) def server_close(self): """Called to clean-up the server. May be overridden. """ self.socket.close() def fileno(self): """Return socket file number. Interface required by select(). """ return self.socket.fileno() def get_request(self): """Get the request and client address from the socket. May be overridden. """ return self.socket.accept() def shutdown_request(self, request): """Called to shutdown and close an individual request.""" try: #explicitly shutdown. socket.close() merely releases #the socket and waits for GC to perform the actual close. request.shutdown(socket.SHUT_WR) except OSError: pass #some platforms may raise ENOTCONN here self.close_request(request) def close_request(self, request): """Called to clean up an individual request.""" request.close() class UDPServer(TCPServer): """UDP server class.""" allow_reuse_address = False socket_type = socket.SOCK_DGRAM max_packet_size = 8192 def get_request(self): data, client_addr = self.socket.recvfrom(self.max_packet_size) return (data, self.socket), client_addr def server_activate(self): # No need to call listen() for UDP. pass def shutdown_request(self, request): # No need to shutdown anything. self.close_request(request) def close_request(self, request): # No need to close anything. pass class ForkingMixIn: """Mix-in class to handle each request in a new process.""" timeout = 300 active_children = None max_children = 40 def collect_children(self): """Internal routine to wait for children that have exited.""" if self.active_children is None: return # If we're above the max number of children, wait and reap them until # we go back below threshold. Note that we use waitpid(-1) below to be # able to collect children in size() syscalls instead # of size(): the downside is that this might reap children # which we didn't spawn, which is why we only resort to this when we're # above max_children. while len(self.active_children) >= self.max_children: try: pid, _ = os.waitpid(-1, 0) self.active_children.discard(pid) except InterruptedError: pass except ChildProcessError: # we don't have any children, we're done self.active_children.clear() except OSError: break # Now reap all defunct children. for pid in self.active_children.copy(): try: pid, _ = os.waitpid(pid, os.WNOHANG) # if the child hasn't exited yet, pid will be 0 and ignored by # discard() below self.active_children.discard(pid) except ChildProcessError: # someone else reaped it self.active_children.discard(pid) except OSError: pass def handle_timeout(self): """Wait for zombies after self.timeout seconds of inactivity. May be extended, do not override. """ self.collect_children() def service_actions(self): """Collect the zombie child processes regularly in the ForkingMixIn. service_actions is called in the BaseServer's serve_forver loop. """ self.collect_children() def process_request(self, request, client_address): """Fork a new subprocess to process the request.""" pid = os.fork() if pid: # Parent process if self.active_children is None: self.active_children = set() self.active_children.add(pid) self.close_request(request) return else: # Child process. # This must never return, hence os._exit()! try: self.finish_request(request, client_address) self.shutdown_request(request) os._exit(0) except: try: self.handle_error(request, client_address) self.shutdown_request(request) finally: os._exit(1) class ThreadingMixIn: """Mix-in class to handle each request in a new thread.""" # Decides how threads will act upon termination of the # main process daemon_threads = False def process_request_thread(self, request, client_address): """Same as in BaseServer but as a thread. In addition, exception handling is done here. """ try: self.finish_request(request, client_address) self.shutdown_request(request) except: self.handle_error(request, client_address) self.shutdown_request(request) def process_request(self, request, client_address): """Start a new thread to process the request.""" t = threading.Thread(target = self.process_request_thread, args = (request, client_address)) t.daemon = self.daemon_threads t.start() class ForkingUDPServer(ForkingMixIn, UDPServer): pass class ForkingTCPServer(ForkingMixIn, TCPServer): pass class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass if hasattr(socket, 'AF_UNIX'): class UnixStreamServer(TCPServer): address_family = socket.AF_UNIX class UnixDatagramServer(UDPServer): address_family = socket.AF_UNIX class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass class BaseRequestHandler: """Base class for request handler classes. This class is instantiated for each request to be handled. The constructor sets the instance variables request, client_address and server, and then calls the handle() method. To implement a specific service, all you need to do is to derive a class which defines a handle() method. The handle() method can find the request as self.request, the client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method can define arbitrary other instance variariables. """ def __init__(self, request, client_address, server): self.request = request self.client_address = client_address self.server = server self.setup() try: self.handle() finally: self.finish() def setup(self): pass def handle(self): pass def finish(self): pass # The following two classes make it possible to use the same service # class for stream or datagram servers. # Each class sets up these instance variables: # - rfile: a file object from which receives the request is read # - wfile: a file object to which the reply is written # When the handle() method returns, wfile is flushed properly class StreamRequestHandler(BaseRequestHandler): """Define self.rfile and self.wfile for stream sockets.""" # Default buffer sizes for rfile, wfile. # We default rfile to buffered because otherwise it could be # really slow for large data (a getc() call per byte); we make # wfile unbuffered because (a) often after a write() we want to # read and we need to flush the line; (b) big writes to unbuffered # files are typically optimized by stdio even when big reads # aren't. rbufsize = -1 wbufsize = 0 # A timeout to apply to the request socket, if not None. timeout = None # Disable nagle algorithm for this socket, if True. # Use only when wbufsize != 0, to avoid small packets. disable_nagle_algorithm = False def setup(self): self.connection = self.request if self.timeout is not None: self.connection.settimeout(self.timeout) if self.disable_nagle_algorithm: self.connection.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True) self.rfile = self.connection.makefile('rb', self.rbufsize) self.wfile = self.connection.makefile('wb', self.wbufsize) def finish(self): if not self.wfile.closed: try: self.wfile.flush() except socket.error: # An final socket error may have occurred here, such as # the local error ECONNABORTED. pass self.wfile.close() self.rfile.close() class DatagramRequestHandler(BaseRequestHandler): # XXX Regrettably, I cannot get this working on Linux; # s.recvfrom() doesn't return a meaningful client address. """Define self.rfile and self.wfile for datagram sockets.""" def setup(self): from io import BytesIO self.packet, self.socket = self.request self.rfile = BytesIO(self.packet) self.wfile = BytesIO() def finish(self): self.socket.sendto(self.wfile.getvalue(), self.client_address) lib64/python3.4/sysconfig.py000064400000060070152342604300011612 0ustar00"""Access to Python's configuration information.""" import os import sys from os.path import pardir, realpath __all__ = [ 'get_config_h_filename', 'get_config_var', 'get_config_vars', 'get_makefile_filename', 'get_path', 'get_path_names', 'get_paths', 'get_platform', 'get_python_version', 'get_scheme_names', 'parse_config_h', ] _INSTALL_SCHEMES = { 'posix_prefix': { 'stdlib': '{installed_base}/lib64/python{py_version_short}', 'platstdlib': '{platbase}/lib64/python{py_version_short}', 'purelib': '{base}/lib/python{py_version_short}/site-packages', 'platlib': '{platbase}/lib64/python{py_version_short}/site-packages', 'include': '{installed_base}/include/python{py_version_short}{abiflags}', 'platinclude': '{installed_platbase}/include/python{py_version_short}{abiflags}', 'scripts': '{base}/bin', 'data': '{base}', }, 'posix_home': { 'stdlib': '{installed_base}/lib/python', 'platstdlib': '{base}/lib/python', 'purelib': '{base}/lib/python', 'platlib': '{base}/lib/python', 'include': '{installed_base}/include/python', 'platinclude': '{installed_base}/include/python', 'scripts': '{base}/bin', 'data': '{base}', }, 'nt': { 'stdlib': '{installed_base}/Lib', 'platstdlib': '{base}/Lib', 'purelib': '{base}/Lib/site-packages', 'platlib': '{base}/Lib/site-packages', 'include': '{installed_base}/Include', 'platinclude': '{installed_base}/Include', 'scripts': '{base}/Scripts', 'data': '{base}', }, 'nt_user': { 'stdlib': '{userbase}/Python{py_version_nodot}', 'platstdlib': '{userbase}/Python{py_version_nodot}', 'purelib': '{userbase}/Python{py_version_nodot}/site-packages', 'platlib': '{userbase}/Python{py_version_nodot}/site-packages', 'include': '{userbase}/Python{py_version_nodot}/Include', 'scripts': '{userbase}/Scripts', 'data': '{userbase}', }, 'posix_user': { 'stdlib': '{userbase}/lib64/python{py_version_short}', 'platstdlib': '{userbase}/lib64/python{py_version_short}', 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', 'platlib': '{userbase}/lib64/python{py_version_short}/site-packages', 'include': '{userbase}/include/python{py_version_short}', 'scripts': '{userbase}/bin', 'data': '{userbase}', }, 'osx_framework_user': { 'stdlib': '{userbase}/lib/python', 'platstdlib': '{userbase}/lib/python', 'purelib': '{userbase}/lib/python/site-packages', 'platlib': '{userbase}/lib/python/site-packages', 'include': '{userbase}/include', 'scripts': '{userbase}/bin', 'data': '{userbase}', }, } _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', 'scripts', 'data') # FIXME don't rely on sys.version here, its format is an implementation detail # of CPython, use sys.version_info or sys.hexversion _PY_VERSION = sys.version.split()[0] _PY_VERSION_SHORT = sys.version[:3] _PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] _PREFIX = os.path.normpath(sys.prefix) _BASE_PREFIX = os.path.normpath(sys.base_prefix) _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) _CONFIG_VARS = None _USER_BASE = None def _safe_realpath(path): try: return realpath(path) except OSError: return path if sys.executable: _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) else: # sys.executable can be empty if argv[0] has been changed and Python is # unable to retrieve the real program name _PROJECT_BASE = _safe_realpath(os.getcwd()) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) # set for cross builds if "_PYTHON_PROJECT_BASE" in os.environ: _PROJECT_BASE = _safe_realpath(os.environ["_PYTHON_PROJECT_BASE"]) def _is_python_source_dir(d): for fn in ("Setup.dist", "Setup.local"): if os.path.isfile(os.path.join(d, "Modules", fn)): return True return False _sys_home = getattr(sys, '_home', None) if _sys_home and os.name == 'nt' and \ _sys_home.lower().endswith(('pcbuild', 'pcbuild\\amd64')): _sys_home = os.path.dirname(_sys_home) if _sys_home.endswith('pcbuild'): # must be amd64 _sys_home = os.path.dirname(_sys_home) def is_python_build(check_home=False): if check_home and _sys_home: return _is_python_source_dir(_sys_home) return _is_python_source_dir(_PROJECT_BASE) _PYTHON_BUILD = is_python_build(True) if _PYTHON_BUILD: for scheme in ('posix_prefix', 'posix_home'): _INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include' _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.' def _subst_vars(s, local_vars): try: return s.format(**local_vars) except KeyError: try: return s.format(**os.environ) except KeyError as var: raise AttributeError('{%s}' % var) def _extend_dict(target_dict, other_dict): target_keys = target_dict.keys() for key, value in other_dict.items(): if key in target_keys: continue target_dict[key] = value def _expand_vars(scheme, vars): res = {} if vars is None: vars = {} _extend_dict(vars, get_config_vars()) for key, value in _INSTALL_SCHEMES[scheme].items(): if os.name in ('posix', 'nt'): value = os.path.expanduser(value) res[key] = os.path.normpath(_subst_vars(value, vars)) return res def _get_default_scheme(): if os.name == 'posix': # the default scheme for posix is posix_prefix return 'posix_prefix' return os.name def _getuserbase(): env_base = os.environ.get("PYTHONUSERBASE", None) def joinuser(*args): return os.path.expanduser(os.path.join(*args)) if os.name == "nt": base = os.environ.get("APPDATA") or "~" if env_base: return env_base else: return joinuser(base, "Python") if sys.platform == "darwin": framework = get_config_var("PYTHONFRAMEWORK") if framework: if env_base: return env_base else: return joinuser("~", "Library", framework, "%d.%d" % sys.version_info[:2]) if env_base: return env_base else: return joinuser("~", ".local") def _parse_makefile(filename, vars=None): """Parse a Makefile-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. """ # Regexes needed for parsing Makefile (and similar syntaxes, # like old-style Setup files). import re _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") if vars is None: vars = {} done = {} notdone = {} with open(filename, errors="surrogateescape") as f: lines = f.readlines() for line in lines: if line.startswith('#') or line.strip() == '': continue m = _variable_rx.match(line) if m: n, v = m.group(1, 2) v = v.strip() # `$$' is a literal `$' in make tmpv = v.replace('$$', '') if "$" in tmpv: notdone[n] = v else: try: v = int(v) except ValueError: # insert literal `$' done[n] = v.replace('$$', '$') else: done[n] = v # do variable interpolation here variables = list(notdone.keys()) # Variables with a 'PY_' prefix in the makefile. These need to # be made available without that prefix through sysconfig. # Special care is needed to ensure that variable expansion works, even # if the expansion uses the name without a prefix. renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') while len(variables) > 0: for name in tuple(variables): value = notdone[name] m = _findvar1_rx.search(value) or _findvar2_rx.search(value) if m is not None: n = m.group(1) found = True if n in done: item = str(done[n]) elif n in notdone: # get it on a subsequent round found = False elif n in os.environ: # do it like make: fall back to environment item = os.environ[n] elif n in renamed_variables: if (name.startswith('PY_') and name[3:] in renamed_variables): item = "" elif 'PY_' + n in notdone: found = False else: item = str(done['PY_' + n]) else: done[n] = item = "" if found: after = value[m.end():] value = value[:m.start()] if item.strip() not in value: value += item value += after if "$" in after: notdone[name] = value else: try: value = int(value) except ValueError: done[name] = value.strip() else: done[name] = value variables.remove(name) if name.startswith('PY_') \ and name[3:] in renamed_variables: name = name[3:] if name not in done: done[name] = value else: # bogus variable reference (e.g. "prefix=$/opt/python"); # just drop it since we can't deal done[name] = value variables.remove(name) # strip spurious spaces for k, v in done.items(): if isinstance(v, str): done[k] = v.strip() # save the results in the global dictionary vars.update(done) return vars def get_makefile_filename(): """Return the path of the Makefile.""" if _PYTHON_BUILD: return os.path.join(_sys_home or _PROJECT_BASE, "Makefile") if hasattr(sys, 'abiflags'): config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) else: config_dir_name = 'config' return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') def _generate_posix_vars(): """Generate the Python module containing build-time variables.""" import pprint vars = {} # load the installed Makefile: makefile = get_makefile_filename() try: _parse_makefile(makefile, vars) except OSError as e: msg = "invalid Python installation: unable to open %s" % makefile if hasattr(e, "strerror"): msg = msg + " (%s)" % e.strerror raise OSError(msg) # load the installed pyconfig.h: config_h = get_config_h_filename() try: with open(config_h) as f: parse_config_h(f, vars) except OSError as e: msg = "invalid Python installation: unable to open %s" % config_h if hasattr(e, "strerror"): msg = msg + " (%s)" % e.strerror raise OSError(msg) # On AIX, there are wrong paths to the linker scripts in the Makefile # -- these paths are relative to the Python source, but when installed # the scripts are in another directory. if _PYTHON_BUILD: vars['BLDSHARED'] = vars['LDSHARED'] # There's a chicken-and-egg situation on OS X with regards to the # _sysconfigdata module after the changes introduced by #15298: # get_config_vars() is called by get_platform() as part of the # `make pybuilddir.txt` target -- which is a precursor to the # _sysconfigdata.py module being constructed. Unfortunately, # get_config_vars() eventually calls _init_posix(), which attempts # to import _sysconfigdata, which we won't have built yet. In order # for _init_posix() to work, if we're on Darwin, just mock up the # _sysconfigdata module manually and populate it with the build vars. # This is more than sufficient for ensuring the subsequent call to # get_platform() succeeds. name = '_sysconfigdata' if 'darwin' in sys.platform: import types module = types.ModuleType(name) module.build_time_vars = vars sys.modules[name] = module pybuilddir = 'build/lib.%s-%s' % (get_platform(), sys.version[:3]) if hasattr(sys, "gettotalrefcount"): pybuilddir += '-pydebug' os.makedirs(pybuilddir, exist_ok=True) destfile = os.path.join(pybuilddir, name + '.py') with open(destfile, 'w', encoding='utf8') as f: f.write('# system configuration generated and used by' ' the sysconfig module\n') f.write('build_time_vars = ') pprint.pprint(vars, stream=f) # Create file used for sys.path fixup -- see Modules/getpath.c with open('pybuilddir.txt', 'w', encoding='ascii') as f: f.write(pybuilddir) def _init_posix(vars): """Initialize the module as appropriate for POSIX systems.""" # _sysconfigdata is generated at build time, see _generate_posix_vars() from _sysconfigdata import build_time_vars vars.update(build_time_vars) def _init_non_posix(vars): """Initialize the module as appropriate for NT""" # set basic install directories vars['LIBDEST'] = get_path('stdlib') vars['BINLIBDEST'] = get_path('platstdlib') vars['INCLUDEPY'] = get_path('include') vars['EXT_SUFFIX'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) # # public APIs # def parse_config_h(fp, vars=None): """Parse a config.h-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. """ if vars is None: vars = {} import re define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") while True: line = fp.readline() if not line: break m = define_rx.match(line) if m: n, v = m.group(1, 2) try: v = int(v) except ValueError: pass vars[n] = v else: m = undef_rx.match(line) if m: vars[m.group(1)] = 0 return vars def get_config_h_filename(): """Return the path of pyconfig.h.""" if _PYTHON_BUILD: if os.name == "nt": inc_dir = os.path.join(_sys_home or _PROJECT_BASE, "PC") else: inc_dir = _sys_home or _PROJECT_BASE else: inc_dir = get_path('platinclude') return os.path.join(inc_dir, 'pyconfig-64.h') def get_scheme_names(): """Return a tuple containing the schemes names.""" return tuple(sorted(_INSTALL_SCHEMES)) def get_path_names(): """Return a tuple containing the paths names.""" return _SCHEME_KEYS def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): """Return a mapping containing an install scheme. ``scheme`` is the install scheme name. If not provided, it will return the default scheme for the current platform. """ if expand: return _expand_vars(scheme, vars) else: return _INSTALL_SCHEMES[scheme] def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): """Return a path corresponding to the scheme. ``scheme`` is the install scheme name. """ return get_paths(scheme, vars, expand)[name] def get_config_vars(*args): """With no arguments, return a dictionary of all configuration variables relevant for the current platform. On Unix, this means every variable defined in Python's installed Makefile; On Windows it's a much smaller set. With arguments, return a list of values that result from looking up each argument in the configuration variable dictionary. """ global _CONFIG_VARS if _CONFIG_VARS is None: _CONFIG_VARS = {} # Normalized versions of prefix and exec_prefix are handy to have; # in fact, these are the standard versions used most places in the # Distutils. _CONFIG_VARS['prefix'] = _PREFIX _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX _CONFIG_VARS['py_version'] = _PY_VERSION _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] _CONFIG_VARS['installed_base'] = _BASE_PREFIX _CONFIG_VARS['base'] = _PREFIX _CONFIG_VARS['installed_platbase'] = _BASE_EXEC_PREFIX _CONFIG_VARS['platbase'] = _EXEC_PREFIX _CONFIG_VARS['projectbase'] = _PROJECT_BASE try: _CONFIG_VARS['abiflags'] = sys.abiflags except AttributeError: # sys.abiflags may not be defined on all platforms. _CONFIG_VARS['abiflags'] = '' if os.name == 'nt': _init_non_posix(_CONFIG_VARS) if os.name == 'posix': _init_posix(_CONFIG_VARS) # For backward compatibility, see issue19555 SO = _CONFIG_VARS.get('EXT_SUFFIX') if SO is not None: _CONFIG_VARS['SO'] = SO # Setting 'userbase' is done below the call to the # init function to enable using 'get_config_var' in # the init-function. _CONFIG_VARS['userbase'] = _getuserbase() # Always convert srcdir to an absolute path srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE) if os.name == 'posix': if _PYTHON_BUILD: # If srcdir is a relative path (typically '.' or '..') # then it should be interpreted relative to the directory # containing Makefile. base = os.path.dirname(get_makefile_filename()) srcdir = os.path.join(base, srcdir) else: # srcdir is not meaningful since the installation is # spread about the filesystem. We choose the # directory containing the Makefile since we know it # exists. srcdir = os.path.dirname(get_makefile_filename()) _CONFIG_VARS['srcdir'] = _safe_realpath(srcdir) # OS X platforms require special customization to handle # multi-architecture, multi-os-version installers if sys.platform == 'darwin': import _osx_support _osx_support.customize_config_vars(_CONFIG_VARS) if args: vals = [] for name in args: vals.append(_CONFIG_VARS.get(name)) return vals else: return _CONFIG_VARS def get_config_var(name): """Return the value of a single variable using the dictionary returned by 'get_config_vars()'. Equivalent to get_config_vars().get(name) """ if name == 'SO': import warnings warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2) return get_config_vars().get(name) def get_platform(): """Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. for IRIX the architecture isn't particularly important (IRIX only runs on SGI hardware), but for Linux the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u irix-5.3 irix64-6.2 Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win-ia64 (64bit Windows on Itanium) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. """ if os.name == 'nt': # sniff sys.version for architecture. prefix = " bit (" i = sys.version.find(prefix) if i == -1: return sys.platform j = sys.version.find(")", i) look = sys.version[i+len(prefix):j].lower() if look == 'amd64': return 'win-amd64' if look == 'itanium': return 'win-ia64' return sys.platform if os.name != "posix" or not hasattr(os, 'uname'): # XXX what about the architecture? NT is Intel or Alpha return sys.platform # Set for cross builds explicitly if "_PYTHON_HOST_PLATFORM" in os.environ: return os.environ["_PYTHON_HOST_PLATFORM"] # Try to distinguish various flavours of Unix osname, host, release, version, machine = os.uname() # Convert the OS name to lowercase, remove '/' characters # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") osname = osname.lower().replace('/', '') machine = machine.replace(' ', '_') machine = machine.replace('/', '-') if osname[:5] == "linux": # At least on Linux/Intel, 'machine' is the processor -- # i386, etc. # XXX what about Alpha, SPARC, etc? return "%s-%s" % (osname, machine) elif osname[:5] == "sunos": if release[0] >= "5": # SunOS 5 == Solaris 2 osname = "solaris" release = "%d.%s" % (int(release[0]) - 3, release[2:]) # We can't use "platform.architecture()[0]" because a # bootstrap problem. We use a dict to get an error # if some suspicious happens. bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} machine += ".%s" % bitness[sys.maxsize] # fall through to standard osname-release-machine representation elif osname[:4] == "irix": # could be "irix64"! return "%s-%s" % (osname, release) elif osname[:3] == "aix": return "%s-%s.%s" % (osname, version, release) elif osname[:6] == "cygwin": osname = "cygwin" import re rel_re = re.compile(r'[\d.]+') m = rel_re.match(release) if m: release = m.group() elif osname[:6] == "darwin": import _osx_support osname, release, machine = _osx_support.get_platform_osx( get_config_vars(), osname, release, machine) return "%s-%s-%s" % (osname, release, machine) def get_python_version(): return _PY_VERSION_SHORT def _print_dict(title, data): for index, (key, value) in enumerate(sorted(data.items())): if index == 0: print('%s: ' % (title)) print('\t%s = "%s"' % (key, value)) def _main(): """Display all information sysconfig detains.""" if '--generate-posix-vars' in sys.argv: _generate_posix_vars() return print('Platform: "%s"' % get_platform()) print('Python version: "%s"' % get_python_version()) print('Current installation scheme: "%s"' % _get_default_scheme()) print() _print_dict('Paths', get_paths()) print() _print_dict('Variables', get_config_vars()) if __name__ == '__main__': _main() lib64/python3.4/__pycache__/os.cpython-34.pyc000064400000071637152342604300014524 0ustar00 e fZ0@s dZddlZddlZddlZejZddddddd d d d d ddddddddgZddZddZ dekrdZ dZ ddl Ty!ddl m Z ejdWnek rYnXddlZyddl mZWqek rYqXnpd ekrd Z d!Z ddlTy!ddlm Z ejdWnek rqYnXddlZddlZeje e[yddlmZWqek rYqXnd"ekr~d"Z d!Z ddlTy!ddlm Z ejdWnek r#YnXddlZddlZeje e[yddlmZWqek rzYqXn ed#eejd$e#d?d@e#dAdBe#dCdDe#dCdEe#dFd2e%Z&e$Z%e#d)d*e%Z'e$Z%e#dGdHe#dId,e#dJd.e#dKdLe#dMdNe%j(ee#dOdPe#dQd2e#dRd2e#dSdTedUredVre#dWdUne%Z)e$Z%e#d)d*e#d-d.e#d/d0e#dXdYe#dZd,ed[re#d\d.ne#d3d4e#d]d2e#d^d0e#d/d0e#dFd2e#d_d0e%Z*[%[["[#ndZ+d`Z,daZ-dbdcdddeZ.dfdgZ/dhdiZ0ejdedgdigdjddcdkdlZ1ejdle2ehe&krGe3ehe)krGdmdjddndcdoddpdqZ4drdsZ5ejdqnye6Wne7k riiZ6YnXdtduZ8dvdwZ9dxdyZ:dzd{Z;d|d}Z<d~dZ=ejdudwdyd{d}dgdddZ>dddZ?ddl@mAZAGdddeAZBy eCZDWne7k r?ddZDYnXdekr\ejdny eEZFWne7k rddZFYnXdekrejdnddZGeGZ6[GdddZHe d kZIejdeIr8ddZJeBe6jKeJeLeJeLeDeFZM[JdddZNejdnddZOeO\ZPZQ[Oedred redrdZRd`ZSZTejdddgddZUddZVddZWddZXddZYejddddgnedr3 ddZZddZ[ejddgnedrm ddZ\ddZ]ejddgnddddZ^GdddZ_ddZ`dS)aaOS routines for NT or Posix depending on what system we're on. This exports: - all functions from posix, nt or ce, e.g. unlink, stat, etc. - os.path is either posixpath or ntpath - os.name is either 'posix', 'nt' or 'ce'. - os.curdir is a string representing the current directory ('.' or ':') - os.pardir is a string representing the parent directory ('..' or '::') - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\') - os.extsep is the extension separator (always '.') - os.altsep is the alternate pathname separator (None or '/') - os.pathsep is the component separator used in $PATH etc - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n') - os.defpath is the default search path for executables - os.devnull is the file path of the null device ('/dev/null', etc.) Programs that import and use 'os' stand a better chance of being portable between different platforms. Of course, they must then only use functions that are defined by all platforms (e.g., unlink and opendir), and leave all pathname manipulation to os.path (e.g., split and join). NaltsepcurdirpardirseppathseplinesepdefpathnamepathdevnullSEEK_SETSEEK_CURSEEK_ENDfsencodefsdecode get_exec_pathfdopenpopenextsepcCs |tkS)N)globals)r r'/opt/alt/python34/lib64/python3.4/os.py_exists%src CsAyt|jSWn)tk r<ddt|DSYnXdS)NcSs&g|]}|ddkr|qS)r_r).0nrrr ,s z%_get_exports_list..)list__all__AttributeErrordir)modulerrr_get_exports_list(s r"posix )*)_exitr&)_have_functionsntz cezno os specific module foundzos.path)rrrrrrrr r'cCs0|tkr,|tkr,tjt|ndS)N)_globalsr'_setadd)strfnrrr_addusr/HAVE_FACCESSATaccess HAVE_FCHMODATchmod HAVE_FCHOWNATchown HAVE_FSTATATstatHAVE_FUTIMESATutime HAVE_LINKATlink HAVE_MKDIRATmkdir HAVE_MKFIFOATmkfifo HAVE_MKNODATmknod HAVE_OPENATopenHAVE_READLINKATreadlink HAVE_RENAMEATrenameHAVE_SYMLINKATsymlink HAVE_UNLINKATunlinkrmdirHAVE_UTIMENSAT HAVE_FCHDIRchdir HAVE_FCHMOD HAVE_FCHOWNHAVE_FDOPENDIRlistdir HAVE_FEXECVEexecveHAVE_FTRUNCATEtruncate HAVE_FUTIMENS HAVE_FUTIMESHAVE_FPATHCONFpathconfstatvfsfstatvfs HAVE_FSTATVFS HAVE_LCHFLAGSZchflags HAVE_LCHMODlchown HAVE_LCHOWN HAVE_LUTIMES HAVE_LSTATZ MS_WINDOWSiFcCstj|\}}|s3tj|\}}n|r|rtj| ryt|||Wntk rwYnXt}t|trttd}n||krdSnyt||Wn/t k r| stj | rnYnXdS)amakedirs(name [, mode=0o777][, exist_ok=False]) Super-mkdir; create a leaf directory and all intermediate ones. Works like mkdir, except that any intermediate path segment (not just the rightmost) will be created if it does not exist. If the target directory already exists, raise an OSError if exist_ok is False. Otherwise no exception is raised. This is recursive. ASCIIN) r splitexistsmakedirsFileExistsErrorr isinstancebytesr=OSErrorisdir)r modeexist_okheadtailcdirrrrrjs$    rjc Cst|tj|\}}|s=tj|\}}nxI|r|ryt|Wntk roPYnXtj|\}}q@WdS)aremovedirs(name) Super-rmdir; remove a leaf directory and all empty intermediate ones. Works like rmdir except that, if the leaf directory is successfully removed, directories corresponding to rightmost path segments will be pruned away until either the whole path is consumed or an error occurs. Errors during this latter phase are ignored -- they generally mean that a directory was not empty. N)rLr rhrn)r rrrsrrr removedirss  ruc Cstj|\}}|r>|r>tj| r>t|nt||tj|\}}|r|ryt|Wqtk rYqXndS)a<renames(old, new) Super-rename; create directories as necessary and delete any left empty. Works like rename, except creation of any intermediate directories needed to make the new pathname good is attempted first. After the rename, directories corresponding to rightmost path segments of the old name will be pruned until either the whole path is consumed or a nonempty directory is found. Note: this function can fail with the new directory structure made if you lack permissions needed to unlink the leaf directory or file. N)r rhrirjrGrurn)oldnewrrrsrrrrenames s    rxTc csBtjtjtj}}}yt|}WnBtk rq}z"|dk r[||ndSWYdd}~XnXgg} } x@|D]8} |||| r| j| q| j| qW|r|| | fVnxK| D]C} ||| } |s||  rt| |||DdHqqW|s>|| | fVndS)a Directory tree generator. For each directory in the directory tree rooted at top (including top itself, but excluding '.' and '..'), yields a 3-tuple dirpath, dirnames, filenames dirpath is a string, the path to the directory. dirnames is a list of the names of the subdirectories in dirpath (excluding '.' and '..'). filenames is a list of the names of the non-directory files in dirpath. Note that the names in the lists are just names, with no path components. To get a full path (which begins with top) to a file or directory in dirpath, do os.path.join(dirpath, name). If optional arg 'topdown' is true or not specified, the triple for a directory is generated before the triples for any of its subdirectories (directories are generated top down). If topdown is false, the triple for a directory is generated after the triples for all of its subdirectories (directories are generated bottom up). When topdown is true, the caller can modify the dirnames list in-place (e.g., via del or slice assignment), and walk will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, or to impose a specific order of visiting. Modifying dirnames when topdown is false is ineffective, since the directories in dirnames have already been generated by the time dirnames itself is generated. No matter the value of topdown, the list of subdirectories is retrieved before the tuples for the directory and its subdirectories are generated. By default errors from the os.listdir() call are ignored. If optional arg 'onerror' is specified, it should be a function; it will be called with one argument, an OSError instance. It can report the error to continue with the walk, or raise the exception to abort the walk. Note that the filename is available as the filename attribute of the exception object. By default, os.walk does not follow symbolic links to subdirectories on systems that support them. In order to get this functionality, set the optional argument 'followlinks' to true. Caution: if you pass a relative pathname for top, don't change the current working directory between resumptions of walk. walk never changes the current directory, and assumes that the client doesn't either. Example: import os from os.path import join, getsize for root, dirs, files in os.walk('python/Lib/email'): print(root, "consumes", end="") print(sum([getsize(join(root, name)) for name in files]), end="") print("bytes in", len(files), "non-directory files") if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories N)r islinkjoinrorSrnappendwalk) toptopdownonerror followlinksryrzronameserrdirsnondirsr new_pathrrrr|&s(;     r|.follow_symlinksdir_fdc cst|ddd|}t|td|}zR|s`tj|jr~tj|t|r~t|||||DdHnWdt |XdS)aDirectory tree generator. This behaves exactly like walk(), except that it yields a 4-tuple dirpath, dirnames, filenames, dirfd `dirpath`, `dirnames` and `filenames` are identical to walk() output, and `dirfd` is a file descriptor referring to the directory `dirpath`. The advantage of fwalk() over walk() is that it's safe against symlink races (when follow_symlinks is False). If dir_fd is not None, it should be a file descriptor open to a directory, and top should be relative; top will then be relative to that directory. (dir_fd is always supported for fwalk.) Caution: Since fwalk() yields file descriptors, those are only valid until the next iteration step, so you should dup() them if you want to keep them for a longer period. Example: import os for root, dirs, files, rootfd in os.fwalk('python/Lib/email'): print(root, "consumes", end="") print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]), end="") print("bytes in", len(files), "non-directory files") if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories rFrN) r7rCO_RDONLYstS_ISDIRst_moder samestat_fwalkclose)r}r~rrrorig_sttopfdrrrfwalks#"rc cst|}gg}}x|D]}y?tjt|d|jrW|j|n |j|Wq tk ry8tjt|d|ddjr|j|nWntk rw YnXYq Xq W|r||||fVnx|D]}y1t|d|d|} t|t d|} WnBt k rj} z"|dk rT|| ndSWYdd} ~ XnXzR|st j | t| rt j ||} t| | |||DdHnWdt| XqW|s||||fVndS)NrrF)rSrrr7rr{FileNotFoundErrorS_ISLNKrCrrnr rrzrr) rtoppathr~rrrrrr rdirfdrdirpathrrrrs<    $    "rcGst||dS)zpexecl(file, *args) Execute the executable file with argument list args, replacing the current process. N)execv)fileargsrrrexeclsrcGs(|d}t||dd|dS)zexecle(file, *args, env) Execute the executable file with argument list args and environment env, replacing the current process. reNr)rU)rrenvrrrexecles rcGst||dS)zexeclp(file, *args) Execute the executable file (which is searched for along $PATH) with argument list args, replacing the current process. N)execvp)rrrrrexeclpsrcGs(|d}t||dd|dS)zexeclpe(file, *args, env) Execute the executable file (which is searched for along $PATH) with argument list args and environment env, replacing the current process. reNrr)execvpe)rrrrrrexeclpes rcCst||dS)zexecvp(file, args) Execute the executable file (which is searched for along $PATH) with argument list args, replacing the current process. args may be a list or tuple of strings. N)_execvpe)rrrrrrsrcCst|||dS)zexecvpe(file, args, env) Execute the executable file (which is searched for along $PATH) with argument list args and environment env , replacing the current process. args may be a list or tuple of strings. N)r)rrrrrrrsrcCs|dk r!t}||f}nt}|f}t}tj|\}}|rb|||dSd}}d} t|} tdkrt|}tt| } nx| D]} tj | |} y|| |Wqt k rT} zZ| }t j d}| j t jkrB| j t jkrB|dkrB| }|} nWYdd} ~ XqXqW|rq|j| n|j|dS)Nr(rf)rUrenvironr rhrr rmaprzrnsysexc_infoerrnoENOENTENOTDIRwith_traceback)rrr exec_funcargrestrrrslast_exc saved_excsaved_tb path_listr fullnameetbrrrrs<        $  rcCsddl}|dkr!t}n|j|jdty|jd}Wntk rkd}YnXtry|d}Wnttfk rYn"X|dk rt dn|}|dk rt |t rt |}qnWdQX|dkrt }n|jtS)zReturns the sequence of directories that will be searched for the named executable (similar to a shell) when launching a process. *env* must be an environment variable dict or None. If *env* is None, os.environ will be used. rNignorePATHsPATHz*env cannot contain 'PATH' and b'PATH' keys)warningsrcatch_warnings simplefilter BytesWarningget TypeErrorsupports_bytes_environKeyError ValueErrorrlrmrrrhr)rrr path_listbrrrr=s.          )MutableMappingc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)_EnvironcCsC||_||_||_||_||_||_||_dS)N) encodekey decodekey encodevalue decodevalueputenvunsetenv_data)selfdatarrrrrrrrr__init__ms      z_Environ.__init__c CsKy|j|j|}Wn!tk r=t|dYnX|j|S)N)rrrr)rkeyvaluerrr __getitem__vs  z_Environ.__getitem__cCs?|j|}|j|}|j||||j|sz$_Environ.__repr__..)rrzritems)rr)rr__repr__s z_Environ.__repr__cCs t|S)N)dict)rrrrcopysz _Environ.copycCs!||kr|||srrcCs t|dS)N)_putenv)rrrrrsrcstdkrldd}|t}fdd}i}xitjD]\}}||||.check_strcs|jS)N)upper)r)encoderrrsz!_createenviron..encodekeycs;t|ts+tdt|jn|jdS)Nzstr expected, not %ssurrogateescape)rlr-rrrr)r)encodingrrrsz_createenviron..encodecs|jdS)Nr)decode)r)rrrrsz_createenviron..decode) r r-rrrgetfilesystemencodingrr _unsetenv)rrrrrrr)rrr_createenvirons"   rcCstj||S)zGet an environment variable, return None if it doesn't exist. The optional second argument can specify an alternate default. key, default and the result are str.)rr)rdefaultrrrgetenvsrrcCs/t|ts+tdt|jn|S)Nzbytes expected, not %s)rlrmrrr)rrrr _check_bytessrcCstj||S)zGet an environment variable, return None if it doesn't exist. The optional second argument can specify an alternate default. key, default and the result are bytes.)environbr)rrrrrgetenvbsrrcs[tjdkr!dndfdd}fdd}||fS)NmbcsstrictrcsOt|tr|St|tr2|jStdt|jdS)z Encode filename to the filesystem encoding with 'surrogateescape' error handler, return bytes unchanged. On Windows, use 'strict' error handler if the file system encoding is 'mbcs' (which is the default encoding). zexpect bytes or str, not %sN)rlrmr-rrrr)filename)rerrorsrrrs z_fscodec..fsencodecsOt|tr|St|tr2|jStdt|jdS)z Decode filename from the filesystem encoding with 'surrogateescape' error handler, return str unchanged. On Windows, use 'strict' error handler if the file system encoding is 'mbcs' (which is the default encoding). zexpect bytes or str, not %sN)rlr-rmrrrr)r)rrrrrs z_fscodec..fsdecode)rr)rrr)rrr_fscodecs     rforkspawnvrP_WAITP_NOWAIT P_NOWAITOc Cst}|sWy0|dkr.|||n||||WqtdYqXnw|tkrg|Sxdt|d\}}t|rqjqjt|rt| St|rt|St dqjWdS)Nrz"Not stopped, signaled or exited???) rr&rwaitpid WIFSTOPPED WIFSIGNALEDWTERMSIG WIFEXITED WEXITSTATUSrn)rprrrfuncpidwpidstsrrr _spawnvef$s&        rcCst|||dtS)aspawnv(mode, file, args) -> integer Execute file with arguments from args in a subprocess. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. N)rr)rprrrrrr?scCst||||tS)a:spawnve(mode, file, args, env) -> integer Execute file with arguments from args in a subprocess with the specified environment. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. )rrU)rprrrrrrspawnveHsrcCst|||dtS)a8spawnvp(mode, file, args) -> integer Execute file (which is looked for along $PATH) with arguments from args in a subprocess. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. N)rr)rprrrrrspawnvpTsr cCst||||tS)a\spawnvpe(mode, file, args, env) -> integer Execute file (which is looked for along $PATH) with arguments from args in a subprocess with the supplied environment. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. )rr)rprrrrrrspawnvpe^sr cGst|||S)aspawnl(mode, file, *args) -> integer Execute file with arguments from args in a subprocess. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. )r)rprrrrrspawnlpsr cGs'|d}t|||dd|S)a:spawnle(mode, file, *args, env) -> integer Execute file with arguments from args in a subprocess with the supplied environment. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. reNrr)r)rprrrrrrspawnleys r cGst|||S)aWspawnlp(mode, file, *args) -> integer Execute file (which is looked for along $PATH) with arguments from args in a subprocess with the supplied environment. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. )r )rprrrrrspawnlpsr cGs'|d}t|||dd|S)a]spawnlpe(mode, file, *args, env) -> integer Execute file (which is looked for along $PATH) with arguments from args in a subprocess with the supplied environment. If mode == P_NOWAIT return the pid of the process. If mode == P_WAIT return the process's exit code if it exits normally; otherwise return -SIG, where SIG is the signal that killed it. reNrr)r )rprrrrrrspawnlpes rrcCst|ts(tdt|n|d krGtd|n|dks_|dkrntdnddl}ddl}|dkr|j|ddd |jd |}t |j |j |S|j|ddd |jd |}t |j |j |SdS) Nz&invalid cmd type (%s, expected string)rwzinvalid mode %rrz+popen() does not support unbuffered streamsshellTstdoutbufsizestdin)rr) rlr-rrr subprocessioPopenPIPE _wrap_close TextIOWrapperrr)cmdrp bufferingrrprocrrrrs$        c@sXeZdZddZddZddZddZd d Zd d Zd S)rcCs||_||_dS)N)_stream_proc)rstreamrrrrrs z_wrap_close.__init__cCsH|jj|jj}|dkr,dStdkr<|S|d>SdS)Nrr()rrrwaitr )r returncoderrrrs   z_wrap_close.closecCs|S)Nr)rrrr __enter__sz_wrap_close.__enter__cGs|jdS)N)r)rrrrr__exit__sz_wrap_close.__exit__cCst|j|S)N)getattrr)rr rrr __getattr__sz_wrap_close.__getattr__cCs t|jS)N)iterr)rrrrrsz_wrap_close.__iter__N) rrrrrr$r%r'rrrrrrs     rcOsGt|ts(tdt|nddl}|j|||S)Nz&invalid fd type (%s, expected integer)r)rlintrrrrC)fdrkwargsrrrrrs )rzsupports_bytes_environ)zenvironbrr)a__doc__rrr7rbuiltin_module_namesZ_namesrrr"r rr#r&r{ ImportError posixpathr r'r(Zntpathextendr)modulesZos.pathrrrrrrrr rr*r/setr+supports_dir_fdsupports_effective_idsr, supports_fdsupports_follow_symlinksr r rrjrurxr|rCrSrrr NameErrorrrrrrrrr_collections_abcrrrrrrrrrrrrmrrrrrrrrrrrr r r r r rrrrrrrrs                        :                                                [ $!, /       #-5              #%       lib64/python3.4/__pycache__/fnmatch.cpython-34.pyc000064400000006112152342604300015505 0ustar00 e f[ @sdZddlZddlZddlZddlZddddgZddZejdd d d d d ZddZ ddZ ddZ dS)aFilename matching with shell patterns. fnmatch(FILENAME, PATTERN) matches according to the local convention. fnmatchcase(FILENAME, PATTERN) always takes case in account. The functions operate by translating the pattern into a regular expression. They cache the compiled regular expressions for speed. The function translate(PATTERN) returns a regular expression corresponding to PATTERN. (It does not compile it.) Nfilterfnmatch fnmatchcase translatecCs1tjj|}tjj|}t||S)aTest whether FILENAME matches PATTERN. Patterns are Unix shell style: * matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any char not in seq An initial period in FILENAME is not special. Both FILENAME and PATTERN are first case-normalized if the operating system requires it. If you don't want this, use fnmatchcase(FILENAME, PATTERN). )ospathnormcaser)namepatr ,/opt/alt/python34/lib64/python3.4/fnmatch.pyrsmaxsizetypedTcCsXt|tr<t|d}t|}t|d}n t|}tj|jS)Nz ISO-8859-1) isinstancebytesstrrrecompilematch)r Zpat_strZres_strresr r r _compile_pattern&s   rcCsg}tjj|}t|}tjtkrcxf|D]"}||r:|j|q:q:Wn9x6|D].}|tjj|rj|j|qjqjW|S)z3Return the subset of the list NAMES that match PAT.)rrrr posixpathappend)namesr resultrr r r r r0s    cCst|}||dk S)zTest whether FILENAME matches PATTERN, including case. This is a version of fnmatch() which doesn't case-normalize its arguments. N)r)r r rr r r r@s cCsdt|}}d}x||kr||}|d}|dkrU|d}q|dkrn|d}q|dkr|}||kr||d kr|d}n||kr||d kr|d}nx*||kr||d kr|d}qW||kr|d }q|||jd d }|d}|dd kred|dd}n|ddkrd |}nd||f}q|tj|}qW|dS)zfTranslate a shell PATTERN to a regular expression. There is no way to quote meta-characters. r*z.*?.[!]z\[\z\\^Nz%s[%s]z\Z(?ms))lenreplacerescape)r inrcjZstuffr r r rJs8             ) __doc__rrr functools__all__r lru_cacherrrrr r r r  s     $  lib64/python3.4/__pycache__/antigravity.cpython-34.pyo000064400000001517152342604300016446 0ustar00 e f@s5ddlZddlZejdddZdS)Nzhttp://xkcd.com/353/cCsztj|j}dd|dd|ddfD\}}td||dd||ddfdS)zCompute geohash() using the Munroe algorithm. >>> geohash(37.421542, -122.085589, b'2005-05-26-10458.68') 37.857713 -122.544543 cSs'g|]}dtjd|qS)z%fz0.)floatfromhex).0xr0/opt/alt/python34/lib64/python3.4/antigravity.py s zgeohash..N z %d%s %d%s)hashlibZmd5Z hexdigestprint)ZlatitudeZ longitudeZdatedowhpqrrrgeohashs3r)Z webbrowserr openrrrrrs   lib64/python3.4/__pycache__/statistics.cpython-34.pyc000064400000041406152342604300016264 0ustar00 e fdL @s|dZddddddddd d d g Zd d lZd d lZd dlmZd dlmZd dlm Z Gddde Z d ddZ ddZ ddZddZddZddZddZd d Zd!dZd"dZd#dZd$d%d Zd&d Zd d'd(Zd d)dZd d*dZd d+dZd d,dZd S)-aF Basic statistics module. This module provides functions for calculating statistics of data, including averages, variance, and standard deviation. Calculating averages -------------------- ================== ============================================= Function Description ================== ============================================= mean Arithmetic mean (average) of data. median Median (middle value) of data. median_low Low median of data. median_high High median of data. median_grouped Median, or 50th percentile, of grouped data. mode Mode (most common value) of data. ================== ============================================= Calculate the arithmetic mean ("the average") of data: >>> mean([-1.0, 2.5, 3.25, 5.75]) 2.625 Calculate the standard median of discrete data: >>> median([2, 3, 4, 5]) 3.5 Calculate the median, or 50th percentile, of data grouped into class intervals centred on the data values provided. E.g. if your data points are rounded to the nearest whole number: >>> median_grouped([2, 2, 3, 3, 3, 4]) #doctest: +ELLIPSIS 2.8333333333... This should be interpreted in this way: you have two data points in the class interval 1.5-2.5, three data points in the class interval 2.5-3.5, and one in the class interval 3.5-4.5. The median of these data points is 2.8333... Calculating variability or spread --------------------------------- ================== ============================================= Function Description ================== ============================================= pvariance Population variance of data. variance Sample variance of data. pstdev Population standard deviation of data. stdev Sample standard deviation of data. ================== ============================================= Calculate the standard deviation of sample data: >>> stdev([2.5, 3.25, 5.5, 11.25, 11.75]) #doctest: +ELLIPSIS 4.38961843444... If you have previously calculated the mean, you can pass it as the optional second argument to the four "spread" functions to avoid recalculating it: >>> data = [1, 2, 2, 4, 4, 4, 5, 6] >>> mu = mean(data) >>> pvariance(data, mu) 2.5 Exceptions ---------- A single exception is defined: StatisticsError is a subclass of ValueError. StatisticsErrorpstdev pvariancestdevvariancemedian median_low median_highmedian_groupedmeanmodeN)Fraction)Decimal)groupbyc@seZdZdS)rN)__name__ __module__ __qualname__rr//opt/alt/python34/lib64/python3.4/statistics.pyrqs c Csd}t|\}}i||6}|j}ttt|}xmt|tD]\\}} t||}x>tt| D]-\}}|d7}||d||| (type, sum, count) Return a high-precision sum of the given numeric data as a fraction, together with the type to be converted to and the count of items. If optional argument ``start`` is given, it is added to the total. If ``data`` is empty, ``start`` (defaulting to 0) is returned. Examples -------- >>> _sum([3, 2.25, 4.5, -0.5, 1.0], 0.75) (, Fraction(11, 1), 5) Some sources of round-off error will be avoided: >>> _sum([1e50, 1, -1e50] * 1000) # Built-in sum returns zero. (, Fraction(1000, 1), 3000) Fractions and Decimals are also supported: >>> from fractions import Fraction as F >>> _sum([F(2, 3), F(7, 5), F(1, 4), F(5, 6)]) (, Fraction(63, 20), 4) >>> from decimal import Decimal as D >>> data = [D("0.1375"), D("0.2108"), D("0.3061"), D("0.0419")] >>> _sum(data) (, Fraction(6963, 10000), 4) Mixed types are currently treated as an error, except that int is allowed. r Ncss$|]\}}t||VqdS)N)r ).0dnrrr sz_sum..) _exact_ratioget_coerceinttypermap _isfiniteAssertionErrorsumsorteditems) datastartcountrrZpartialsZ partials_getTtypvaluestotalrrr_sumws#     %r,c Cs4y|jSWntk r/tj|SYnXdS)N) is_finiteAttributeErrormathisfinite)xrrrr s r cCs |tk std||kr(|S|tks@|tkrD|S|tkrT|St||rg|St||rz|St|tr|St|tr|St|trt|tr|St|trt|tr|Sd}t||j|jfdS)zCoerce types T and S to a common type, or raise TypeError. Coercion rules are currently an implementation detail. See the CoerceTest test class in test_statistics for details. zinitial type T is boolz"don't know how to coerce %s and %sN)boolr!r issubclassr float TypeErrorr)r(Smsgrrrrs*  rcCsyt|tkr|jSy|j|jfSWnXtk ry|jSWn5tk ryt|SWntk rYnXYnXYnXWn8ttfk rt j | st |dfSYnXd}t |j t|jdS)zReturn Real number x to exact (numerator, denominator) pair. >>> _exact_ratio(0.25) (1, 4) x is expected to be an int, Fraction, Decimal or float. Nz0can't convert type '{}' to numerator/denominator)rr4as_integer_ratio numerator denominatorr._decimal_to_ratio OverflowError ValueErrorr/r0r!r5formatr)r1r7rrrrs$    rcCs|j\}}}|dkr>|j s4t|dfSd}x|D]}|d|}qKW|dkr}d| }n|d|9}d}|r| }n||fS) zConvert Decimal d to exact integer ratio (numerator, denominator). >>> from decimal import Decimal >>> _decimal_to_ratio(Decimal("2.6")) (26, 10) FrNNr r)r?rr@)Zas_tupler-r!)rZsignZdigitsZexpZnumZdigitZdenrrrr;s     r;c Cst||kr|St|tr=|jdkr=t}ny||SWn>tk rt|tr||j||jSYnXdS)z&Convert value to given numeric type T.rN)rr3rr:r4r5rr9)valuer(rrr_converts  rCcCstjt|j}|s%|S|dd}xEtdt|D].}||d|krI|d|}PqIqIW|S)Nr r) collectionsCounteriter most_commonrangelen)r%tableZmaxfreqirrr_counts&srLcCst||kr!t|}nt|}|dkrHtdnt|\}}}||ksott|||S)aReturn the sample arithmetic mean of data. >>> mean([1, 2, 3, 4, 4]) 2.8 >>> from fractions import Fraction as F >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)]) Fraction(13, 21) >>> from decimal import Decimal as D >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")]) Decimal('0.5625') If ``data`` is empty, StatisticsError will be raised. rz%mean requires at least one data point)rFlistrIrr,r!rC)r%rr(r+r'rrrr 6s  cCsut|}t|}|dkr3tdn|ddkrO||dS|d}||d||dSdS)aBReturn the median (middle value) of numeric data. When the number of data points is odd, return the middle data point. When the number of data points is even, the median is interpolated by taking the average of the two middle values: >>> median([1, 3, 5]) 3 >>> median([1, 3, 5, 7]) 4.0 r zno median for empty datarN)r#rIr)r%rrKrrrrQs     cCsct|}t|}|dkr3tdn|ddkrO||dS||ddSdS)a Return the low median of numeric data. When the number of data points is odd, the middle value is returned. When it is even, the smaller of the two middle values is returned. >>> median_low([1, 3, 5]) 3 >>> median_low([1, 3, 5, 7]) 3 r zno median for empty datarNrN)r#rIr)r%rrrrris    cCs?t|}t|}|dkr3tdn||dS)aReturn the high median of data. When the number of data points is odd, the middle value is returned. When it is even, the larger of the two middle values is returned. >>> median_high([1, 3, 5]) 3 >>> median_high([1, 3, 5, 7]) 5 r zno median for empty datarN)r#rIr)r%rrrrrs   rc Cs t|}t|}|dkr3tdn|dkrG|dS||d}x<||fD].}t|ttfrbtd|qbqbWy||d}Wn,tk rt|t|d}YnX|j|}|j |}|||d||S)aReturn the 50th percentile (median) of grouped continuous data. >>> median_grouped([1, 2, 2, 3, 4, 4, 4, 4, 4, 5]) 3.7 >>> median_grouped([52, 52, 53, 54]) 52.5 This calculates the median as the 50th percentile, and should be used when your data is continuous and grouped. In the above example, the values 1, 2, 3, etc. actually represent the midpoint of classes 0.5-1.5, 1.5-2.5, 2.5-3.5, etc. The middle value falls somewhere in class 3.5-4.5, and interpolation is used to estimate it. Optional argument ``interval`` represents the class interval, and defaults to 1. Changing the class interval naturally will change the interpolated 50th percentile value: >>> median_grouped([1, 3, 3, 5, 7], interval=1) 3.25 >>> median_grouped([1, 3, 3, 5, 7], interval=2) 3.5 This function does not check whether the data points are at least ``interval`` apart. r zno median for empty datarrNzexpected number but got %r) r#rIr isinstancestrbytesr5r4indexr')r%Zintervalrr1objLZcffrrrr s"     cCsYt|}t|dkr*|ddS|rItdt|n tddS)aReturn the most common data point from discrete or nominal data. ``mode`` assumes discrete data, and returns a single value. This is the standard treatment of the mode as commonly taught in schools: >>> mode([1, 1, 2, 3, 3, 3, 3, 4]) 3 This also works with nominal (non-numeric) data: >>> mode(["red", "blue", "blue", "red", "green", "red", "red"]) 'red' If there is not exactly one most common value, ``mode`` will raise StatisticsError. rr z.no unique mode; found %d equally common valueszno mode for empty dataN)rLrIr)r%rJrrrr s  csdkrt|ntfdd|D\}}}tfdd|D\}}}||kr||kst||dt|8}|dk std|||fS)a;Return sum of square deviations of sequence data. If ``c`` is None, the mean is calculated in one pass, and the deviations from the mean are calculated in a second pass. Otherwise, deviations are calculated from ``c`` as given. Use the second case with care, as it can lead to garbage results. Nc3s|]}|dVqdS)rNNr)rr1)crrrsz_ss..c3s|]}|VqdS)Nr)rr1)rVrrrsrNr z%negative sum of square deviations: %f)r r,r!rI)r%rVr(r+r'UZtotal2Zcount2r)rVr_sss ((rXcCsrt||kr!t|}nt|}|dkrHtdnt||\}}t||d|S)aReturn the sample variance of data. data should be an iterable of Real-valued numbers, with at least two values. The optional argument xbar, if given, should be the mean of the data. If it is missing or None, the mean is automatically calculated. Use this function when your data is a sample from a population. To calculate the variance from the entire population, see ``pvariance``. Examples: >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5] >>> variance(data) 1.3720238095238095 If you have already calculated the mean of your data, you can pass it as the optional second argument ``xbar`` to avoid recalculating it: >>> m = mean(data) >>> variance(data, m) 1.3720238095238095 This function does not check that ``xbar`` is actually the mean of ``data``. Giving arbitrary values for ``xbar`` may lead to invalid or impossible results. Decimals and Fractions are supported: >>> from decimal import Decimal as D >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) Decimal('31.01875') >>> from fractions import Fraction as F >>> variance([F(1, 6), F(1, 2), F(5, 3)]) Fraction(67, 108) rNz*variance requires at least two data pointsr)rFrMrIrrXrC)r%xbarrr(ssrrrrs&  cCs}t||kr!t|}nt|}|dkrHtdnt||}t||\}}t|||S)aReturn the population variance of ``data``. data should be an iterable of Real-valued numbers, with at least one value. The optional argument mu, if given, should be the mean of the data. If it is missing or None, the mean is automatically calculated. Use this function to calculate the variance from the entire population. To estimate the variance from a sample, the ``variance`` function is usually a better choice. Examples: >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25] >>> pvariance(data) 1.25 If you have already calculated the mean of the data, you can pass it as the optional second argument to avoid recalculating it: >>> mu = mean(data) >>> pvariance(data, mu) 1.25 This function does not check that ``mu`` is actually the mean of ``data``. Giving arbitrary values for ``mu`` may lead to invalid or impossible results. Decimals and Fractions are supported: >>> from decimal import Decimal as D >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) Decimal('24.815') >>> from fractions import Fraction as F >>> pvariance([F(1, 4), F(5, 4), F(1, 2)]) Fraction(13, 72) rz*pvariance requires at least one data point)rFrMrIrrXrC)r%murrZr(rrrr0s'  c CsCt||}y|jSWntk r>tj|SYnXdS)zReturn the square root of the sample variance. See ``variance`` for arguments and other details. >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) 1.0810874155219827 N)rsqrtr.r/)r%rYvarrrrras  c CsCt||}y|jSWntk r>tj|SYnXdS)zReturn the square root of the population variance. See ``pvariance`` for arguments and other details. >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) 0.986893273527251 N)rr\r.r/)r%r[r]rrrrqs  )__doc____all__rDr/Z fractionsr Zdecimalr itertoolsrr=rr,r rrr;rCrLr rrrr r rXrrrrrrrr]s8     9   %       1 */1lib64/python3.4/__pycache__/smtplib.cpython-34.pyc000064400000100551152342604300015541 0ustar00 e f; @sNdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddlmZddddd d d d d dddg ZdZdZdZdZdZejdejZGdddeZGdddeZGdddeZGdddeZGdd d eZGdd d eZGdd d eZ Gdd d eZ!Gdd d eZ"d dZ#d!d"Z$d#dZ%d$d%Z&d&d'Z'yddl(Z(Wne)k rd(Z*YnXd)Z*Gd*ddZ+e*raGd+d,d,e+Z,ej-d,nd-Z.Gd.d/d/e+Z/e0d0krJddlZd1d2Z1e1d3Z2e1d4j3d5Z4e5d6d7Z6x(ej7j8Z9e9 rPne6e9Z6qWe5d8e:e6e+d9Z;e;j<d:e;j=e2e4e6e;j>ndS);aSMTP/ESMTP client class. This should follow RFC 821 (SMTP), RFC 1869 (ESMTP), RFC 2554 (SMTP Authentication) and RFC 2487 (Secure SMTP over TLS). Notes: Please remember, when doing ESMTP, that the names of the SMTP service extensions are NOT the same thing as the option keywords for the RCPT and MAIL commands! Example: >>> import smtplib >>> s=smtplib.SMTP("localhost") >>> print(s.help()) This is Sendmail version 8.8.4 Topics: HELO EHLO MAIL RCPT DATA RSET NOOP QUIT HELP VRFY EXPN VERB ETRN DSN For more info use "HELP ". To report bugs in the implementation send email to sendmail-bugs@sendmail.org. For local information send email to Postmaster at your site. End of HELP info >>> s.putcmd("vrfy","someone@here") >>> s.getreply() (250, "Somebody OverHere ") >>> s.quit() N) body_encode)stderr SMTPExceptionSMTPServerDisconnectedSMTPResponseExceptionSMTPSenderRefusedSMTPRecipientsRefused SMTPDataErrorSMTPConnectError SMTPHeloErrorSMTPAuthenticationError quoteaddr quotedataSMTPiz s i z auth=(.*)c@seZdZdZdS)rz4Base class for all exceptions raised by this module.N)__name__ __module__ __qualname____doc__rr,/opt/alt/python34/lib64/python3.4/smtplib.pyrFs c@seZdZdZdS)rzNot connected to any SMTP server. This exception is raised when the server unexpectedly disconnects, or when an attempt is made to use the SMTP instance before connecting it to a server. N)rrrrrrrrrIs c@s"eZdZdZddZdS)ra2Base class for all exceptions that include an SMTP error code. These exceptions are generated in some instances when the SMTP server returns an error code. The error code is stored in the `smtp_code' attribute of the error, and the `smtp_error' attribute is set to the error message. cCs%||_||_||f|_dS)N) smtp_code smtp_errorargs)selfcodemsgrrr__init__Zs  zSMTPResponseException.__init__N)rrrrrrrrrrQs c@s"eZdZdZddZdS)rzSender address refused. In addition to the attributes set by on all SMTPResponseException exceptions, this sets `sender' to the string that the SMTP refused. cCs1||_||_||_|||f|_dS)N)rrsenderr)rrrrrrrrfs   zSMTPSenderRefused.__init__N)rrrrrrrrrr_s c@s"eZdZdZddZdS)rzAll recipient addresses refused. The errors for each recipient are accessible through the attribute 'recipients', which is a dictionary of exactly the same sort as SMTP.sendmail() returns. cCs||_|f|_dS)N) recipientsr)rrrrrrts zSMTPRecipientsRefused.__init__N)rrrrrrrrrrls c@seZdZdZdS)r z'The SMTP server didn't accept the data.N)rrrrrrrrr ys c@seZdZdZdS)r z&Error during connection establishment.N)rrrrrrrrr |s c@seZdZdZdS)r z"The server refused our HELO reply.N)rrrrrrrrr s c@seZdZdZdS)r zvAuthentication error. Most probably the server didn't accept the username/password combination provided. N)rrrrrrrrr s cCsStjj|\}}||fdkrK|jjdrC|Sd|Sd|S)zQuote a subset of the email addresses defined by RFC 821. Should be able to handle anything email.utils.parseaddr can handle. )r r )emailutils parseaddrstrip startswith) addrstring displaynameaddrrrrr s cCs2tjj|\}}||fdkr.|S|S)Nr )r r )r"r#r$)r'r(r)rrr _addr_onlysr*cCs"tjddtjdt|S)zQuote data for email. Double leading '.', and change Unix newline '\n', or Mac '\r' into Internet CRLF end-of-line. z(?m)^\.z..z(?:\r\n|\n|\r(?!\n)))resubCRLF)datarrrrs cCstjdd|S)Ns(?m)^\.s..)r+r,)Zbindatarrr_quote_periodssr/cCstjdt|S)Nz(?:\r\n|\n|\r(?!\n)))r+r,r-)r.rrr _fix_eolssr0FTc@seZdZdZdZdZdZdZdZdZ e Z ddde j dddZdd Zd d Zd d ZddZdddddZddZdddZddZdddZdddZdddZdd Zdd!d"Zd#d$Zd%d&Zd'd(Zgd)d*Zgd+d,Z d-d.Z!d/d0Z"e"Z#d1d2Z$d3d4Z%d5d6Z&dddd7d8Z'ggd9d:Z(ddgid;d<Z)d=d>Z*d?d@Z+dS)AraThis class manages a connection to an SMTP or ESMTP server. SMTP Objects: SMTP objects have the following attributes: helo_resp This is the message given by the server in response to the most recent HELO command. ehlo_resp This is the message given by the server in response to the most recent EHLO command. This is usually multiline. does_esmtp This is a True value _after you do an EHLO command_, if the server supports ESMTP. esmtp_features This is a dictionary, which, if the server supports ESMTP, will _after you do an EHLO command_, contain the names of the SMTP service extensions this server supports, and their parameters (if any). Note, all extension names are mapped to lower case in the dictionary. See each method's docstrings for details. In general, there is a method of the same name to perform each SMTP command. There is also a method called 'sendmail' that will do an entire mail transaction. rNehlor c Cs||_||_i|_||_|rc|j||\}}|dkrct||qcn|dk r{||_nhtj}d|kr||_nDd} ytj tj } Wntj k rYnXd| |_dS)aInitialize a new instance. If specified, `host' is the name of the remote host to which to connect. If specified, `port' specifies the port to which to connect. By default, smtplib.SMTP_PORT is used. If a host is specified the connect method is called, and if it returns anything other than a success code an SMTPConnectError is raised. If specified, `local_hostname` is used as the FQDN of the local host in the HELO/EHLO command. Otherwise, the local hostname is found using socket.getfqdn(). The `source_address` parameter takes a 2-tuple (host, port) for the socket to bind to as its source address before connecting. If the host is '' and port is 0, the OS default behavior will be used. N.z 127.0.0.1z[%s]) _hosttimeoutesmtp_featuressource_addressconnectr local_hostnamesocketZgetfqdnZ gethostbynameZ gethostnameZgaierror) rhostportr9r5r7rrZfqdnr)rrrrs&          z SMTP.__init__cCs|S)Nr)rrrr __enter__szSMTP.__enter__cGsbzPy7|jd\}}|dkr9t||nWntk rNYnXWd|jXdS)NZQUIT)docmdrrclose)rrrmessagerrr__exit__ s   z SMTP.__exit__cCs ||_dS)zSet the debug output level. A non-false value results in debug messages for connection and for all messages sent to and received from the server. N) debuglevel)rrCrrrset_debuglevelszSMTP.set_debuglevelcCsM|jdkr1td||f|jdtntj||f||jS)Nrz connect: tofile)rCprintr7rr:create_connection)rr;r<r5rrr _get_sockets  zSMTP._get_socket localhostc CsP|r||_n| r|jd|jdkr|jd}|dkr|d|||dd}}yt|}Wqtk rtdYqXqn|s|j}n|jdkrtd||fdt n|j |||j |_ d|_ |j\}}|jdkrFtd|dt n||fS)apConnect to a host on a given port. If the hostname ends with a colon (`:') followed by a number, and there is no port specified, that suffix will be stripped off and the number interpreted as the port number to use. Note: This method is automatically invoked by __init__, if a host is specified during instantiation. :rNznonnumeric portzconnect:rE)r7findrfindint ValueErrorOSError default_portrCrFrrHr5sockrEgetreply)rr;r<r7irrrrrr8&s(  % %   z SMTP.connectc Cs|jdkr+tdt|dtnt|dr|jrt|trd|jd}ny|jj |Wqt k r|j t dYqXn t ddS) zSend `s' to the server.rzsend:rErRasciizServer not connectedzplease run connect() firstN) rCrFreprrhasattrrR isinstancestrencodeZsendallrPr@r)rsrrrsendHs  z SMTP.sendcCsC|dkrd|tf}nd||tf}|j|dS)zSend a command to the server.r z%s%sz%s %s%sN)r-r\)rcmdrrYrrrputcmdWs z SMTP.putcmdcCsg}|jdkr-|jjd|_nxTy|jjtd}WnEtk r}z%|jtdt|WYdd}~XnX|s|jtdn|j dkrt dt |dt nt |tkr |jtd d n|j|d djd |dd }yt|}Wntk red}PYnX|d d dkr0Pq0q0Wdj|}|j dkrt d||fdt n||fS)aGet a reply from the server. Returns a tuple consisting of: - server response code (e.g. '250', or such, if all goes well) Note: returns -1 if it can't read response code. - server response string corresponding to response code (multiline responses are converted to a single, multiline string). Raises SMTPServerDisconnected if end-of-file is reached. NrbrKz Connection unexpectedly closed: zConnection unexpectedly closedrzreply:rEizLine too long.s -s zreply: retcode (%s); Msg: %s)rErRmakefilereadline_MAXLINErPr@rrYrCrFrVrlenrappendr%rNrOjoin)rresplineerZerrcodeerrmsgrrrrS_s@  #     z SMTP.getreplycCs|j|||jS)z-Send a command, and return its response code.)r^rS)rr]rrrrr?sz SMTP.docmdcCs>|jd|p|j|j\}}||_||fS)zwSMTP 'helo' command. Hostname to send for this command defaults to the FQDN of the local host. helo)r^r9rS helo_resp)rnamerrrrrrns z SMTP.heloc Csi|_|j|j|p!|j|j\}}|d krnt|dkrn|jtdn||_|dkr||fSd|_ t |jt st t |j|jjdjd}|d=x|D]}tj|}|r8|jjddd |jdd|jd[A-Za-z0-9][A-Za-z0-9\-]*) ?featureNrc)r6r^ehlo_msgr9rSrgr@r ehlo_resp does_esmtprXbytesAssertionErrorrVdecodesplit OLDSTYLE_AUTHmatchgetgroupsr+grouplowerstringendr%) rrprrrjeachZ auth_matchmruZparamsrrrr1s4      ' 1" 'z SMTP.ehlocCs|j|jkS)z7Does the server support a given SMTP service extension?)rr6)rZoptrrrhas_extnsz SMTP.has_extncCs|jd||jdS)z;SMTP 'help' command. Returns help text from server.helprK)r^rS)rrrrrrsz SMTP.helpcCs |jdS)z&SMTP 'rset' command -- resets session.rset)r?)rrrrrsz SMTP.rsetc Cs'y|jWntk r"YnXdS)aInternal 'rset' command which ignores any SMTPServerDisconnected error. Used internally in the library, since the server disconnected error should appear to the application when the *next* command is issued, if we are doing an internal "safety" reset. N)rr)rrrr_rsets z SMTP._rsetcCs |jdS)z-SMTP 'noop' command -- doesn't do anything :>noop)r?)rrrrrsz SMTP.noopcCsUd}|r+|jr+ddj|}n|jddt||f|jS)z0SMTP 'mail' command -- begins mail xfer session.r rtmailz FROM:%s%s)rxrir^r rS)rroptions optionlistrrrrs  z SMTP.mailcCsUd}|r+|jr+ddj|}n|jddt||f|jS)z;SMTP 'rcpt' command -- indicates 1 recipient for this mail.r rtrcptzTO:%s%s)rxrir^r rS)rZreciprrrrrrs  z SMTP.rcptcCs$|jd|j\}}|jdkrJtd||fdtn|dkrht||nt|trt|j d}nt |}|d dt kr|t }n|d t }|j ||j\}}|jdkrtd||fdtn||fSdS) aSMTP 'DATA' command -- sends message data to server. Automatically quotes lines beginning with a period per rfc821. Raises SMTPDataError if there is an unexpected reply to the DATA command; the return value from this method is the final response code received when the all data is sent. If msg is a string, lone '\r' and '\n' characters are converted to '\r\n' characters. If msg is bytes, it is transmitted as is. r.rzdata:rEibrUN.) r^rSrCrFrr rXrYr0rZr/bCRLFr\)rrrreplqrrrr.s"     z SMTP.datacCs |jdt||jS)z5SMTP 'verify' command -- checks for address validity.vrfy)r^r*rS)raddressrrrverifysz SMTP.verifycCs |jdt||jS)z.SMTP 'expn' command -- expands a mailing list.expn)r^r*rS)rrrrrr&sz SMTP.expncCs|jdkr|jdkrd|jdko?dkns|j\}}d|komdknst||qqndS)abCall self.ehlo() and/or self.helo() if needed. If there has been no previous EHLO or HELO command this session, this method tries ESMTP EHLO first. This method may raise the following exceptions: SMTPHeloError The server didn't reply properly to the helo greeting. Nri+)rorwr1rnr )rrrjrrrehlo_or_helo_if_needed-s &zSMTP.ehlo_or_helo_if_neededc sdd}dd}d}d}d}|j|jdsRtd n|jdj|||g}fd d |D} | std nx2| D]*} | |kr|jd |\} } | dkr|j|| ||\} } qn| |kr>|jd |d|||\} } n| |kr|jd d|t|jdddf\} } | dkr|jt|jddd\} } qn| dkr| | fSqWt| | dS)aALog in on an SMTP server that requires authentication. The arguments are: - user: The user name to authenticate with. - password: The password for the authentication. If there has been no previous EHLO or HELO command this session, this method tries ESMTP EHLO first. This method will return normally if the authentication was successful. This method may raise the following exceptions: SMTPHeloError The server didn't reply properly to the helo greeting. SMTPAuthenticationError The server didn't accept the username/ password combination. SMTPException No suitable authentication method was found. cSsTtj|}|dtj|jd|dj}t|jdddS)NrtrUZmd5eolr )base64Z decodebyteshmacZHMACrZZ hexdigest encode_base64)Z challengeuserpasswordZresponserrrencode_cram_md5Tsz#SMTP.login..encode_cram_md5cSs)d||f}t|jdddS)NZ%s%srUrr )rrZ)rrr[rrr encode_plainZsz SMTP.login..encode_plainZPLAINzCRAM-MD5ZLOGINrsz,SMTP AUTH extension not supported by server.cs"g|]}|kr|qSrr).0rs)advertised_authlistrr qs zSMTP.login..z(No suitable authentication method found.ZAUTHiNrtz%s %srUrr N)rr) rrrr6r|r?rrZr ) rrrrrZ AUTH_PLAINZ AUTH_CRAM_MD5Z AUTH_LOGINZpreferred_authsZauthlistZ authmethodrrjr)rrlogin>s:      '  #  . 0 z SMTP.logincCs:|j|jds(tdn|jd\}}|dkr!ts^tdn|dk r|dk rtdn|dk r|dk rtdn|dkrtjd |d |}n|j |j d |j |_ d|_ d|_ d|_i|_d |_nt||||fS) aPuts the connection to the SMTP server into TLS mode. If there has been no previous EHLO or HELO command this session, this method tries ESMTP EHLO first. If the server supports TLS, this will encrypt the rest of the SMTP session. If you provide the keyfile and certfile parameters, the identity of the SMTP server and client can be checked. This, however, depends on whether the socket module really checks the certificates. This method may raise the following exceptions: SMTPHeloError The server didn't reply properly to the helo greeting. starttlsz+STARTTLS extension not supported by server.ZSTARTTLSr2z&No SSL support included in this PythonNz4context and keyfile arguments are mutually exclusivez5context and certfile arguments are mutually exclusivecertfilekeyfileserver_hostnamer)rrrr? _have_ssl RuntimeErrorrOssl_create_stdlib_context wrap_socketrRr4rErorwr6rxr)rrrcontextrjZreplyrrrrs.         z SMTP.starttlsc Cs |jg}t|tr7t|jd}n|jr|jdri|jdt|nx|D]}|j|qpWn|j ||\}} |dkr|dkr|j n |j t || |ni} t|tr|g}nxv|D]n} |j | |\}} |dkrW|dkrW|| f| | >> import smtplib >>> s=smtplib.SMTP("localhost") >>> tolist=["one@one.org","two@two.org","three@three.org","four@four.org"] >>> msg = '''\ ... From: Me@my.org ... Subject: testin'... ... ... This is a test ''' >>> s.sendmail("me@my.org",tolist,msg) { "three@three.org" : ( 550 ,"User unknown" ) } >>> s.quit() In the above example, the message was accepted for delivery to three of the four addresses, and one was rejected, with the error code 550. If all addresses are accepted, then the method will return an empty dictionary. rUsizezsize=%drqi)rrXrYr0rZrxrrhrgrr@rrrrr.r ) r from_addrto_addrsr mail_options rcpt_optionsZ esmtp_optsZoptionrrjZsenderrsrrrrsendmailsF=                z SMTP.sendmailc Csd|jd}|dkr$d}n't|dkr?d}n td|dkr|d|kru||dn ||d}n|dkrd d ||d ||d ||d fD}dd tjj|D}ntj|} | d =| d=tj8} tj j | } | j | dd| j } WdQX|j ||| ||S)aConverts message to a bytestring and passes it to sendmail. The arguments are as for sendmail, except that msg is an email.message.Message object. If from_addr is None or to_addrs is None, these arguments are taken from the headers of the Message as described in RFC 2822 (a ValueError is raised if there is more than one set of 'Resent-' headers). Regardless of the values of from_addr and to_addr, any Bcc field (or Resent-Bcc field, when the Message is a resent) of the Message object won't be transmitted. The Message object is then serialized using email.generator.BytesGenerator and sendmail is called to transmit the message. z Resent-DateNr rKzResent-z0message has more than one 'Resent-' header blockZSenderFromcSs"g|]}|dk r|qS)Nr)rfrrrrNs z%SMTP.send_message..ToZBccZCccSsg|]}|dqS)rKr)rarrrrQs z Resent-Bcclinesepz )Zget_allrgrOr"r#Z getaddressescopyioBytesIOZ generatorZBytesGeneratorZflattengetvaluer) rrrrrrZresentZ header_prefixZ addr_fieldsZmsg_copyZbytesmsggZflatmsgrrr send_message(s.       "zSMTP.send_messagec CsVz)|j}d|_|r(|jnWd|j}d|_|rQ|jnXdS)z(Close the connection to the SMTP server.N)rEr@rR)rrErRrrrr@]s    z SMTP.closecCs?|jd}d|_|_i|_d|_|j|S)zTerminate the SMTP session.quitNF)r?rwror6rxr@)rresrrrrjs    z SMTP.quit),rrrrrCrErorvrwrx SMTP_PORTrQr:_GLOBAL_DEFAULT_TIMEOUTrr=rBrDrHr8r\r^rSr?rnr1rrrrrrrr.rrrrrrrrr@rrrrrrsT  +  "  2 3        P3f4 c @sOeZdZdZeZdddddejddddZddZ dS) SMTP_SSLa This is a subclass derived from SMTP that connects over an SSL encrypted socket (to use this class you need a socket module that was compiled with SSL support). If host is not specified, '' (the local host) is used. If port is omitted, the standard SMTP-over-SSL port (465) is used. local_hostname and source_address have the same meaning as they do in the SMTP class. keyfile and certfile are also optional - they can contain a PEM formatted private key and certificate chain file for the SSL connection. context also optional, can contain a SSLContext, and is an alternative to keyfile and certfile; If it is specified both keyfile and certfile must be None. r rNc Cs|dk r'|dk r'tdn|dk rN|dk rNtdn||_||_|dkrtjd|d|}n||_tj||||||dS)Nz4context and keyfile arguments are mutually exclusivez5context and certfile arguments are mutually exclusiverr)rOrrrrrrr) rr;r<r9rrr5r7rrrrrs     zSMTP_SSL.__init__cCsh|jdkr+td||fdtntj||f||j}|jj|d|j}|S)Nrzconnect:rEr) rCrFrr:rGr7rrr4)rr;r<r5Z new_socketrrrrHs  zSMTP_SSL._get_socket) rrrr SMTP_SSL_PORTrQr:rrrHrrrrrvs  ric@sIeZdZdZdZdeddddZdddd d ZdS) LMTPaLMTP - Local Mail Transfer Protocol The LMTP protocol, which is very similar to ESMTP, is heavily based on the standard SMTP client. It's common to use Unix sockets for LMTP, so our connect() method must support that as well as a regular host:port server. local_hostname and source_address have the same meaning as they do in the SMTP class. To specify a Unix socket, you must use an absolute path as the host, starting with a '/'. Authentication is supported, using the regular SMTP mechanism. When using a Unix socket, LMTP generally don't support or require any authentication, but your mileage might vary.Zlhlor NcCs#tj|||d|d|dS)zInitialize a new instance.r9r7N)rr)rr;r<r9r7rrrrsz LMTP.__init__rIrc Cs|ddkr)tj|||d|Sy8tjtjtj|_d|_|jj|Wn\tk r|jdkrt d|dt n|jr|jj nd|_YnX|j \}}|jdkrt d|dt n||fS)z=Connect to the LMTP daemon, on either a Unix or a TCP socket.r/r7Nz connect fail:rEzconnect:) rr8r:ZAF_UNIXZ SOCK_STREAMrRrErPrCrFrr@rS)rr;r<r7rrrrrr8s"    z LMTP.connect)rrrrrv LMTP_PORTrr8rrrrrs  r__main__cCs4tjj|dtjjtjjjS)Nz: )sysstdoutwriteflushstdinrer%)promptrrrrs rrr,zEnter message, end with ^D:r zMessage length is %drIrK)?rr:rr+Z email.utilsr"Z email.messageZemail.generatorrrrZemail.base64mimerrrr__all__rrr-rrfcompileIr}rPrrrrrr r r r r r*rr/r0r ImportErrorrrrrhrrrrZfromaddrr|ZtoaddrsrFrrrerkrgZserverrDrrrrrr!s                   ,/       lib64/python3.4/__pycache__/datetime.cpython-34.pyc000064400000155710152342604300015672 0ustar00 j f( @sdZddlZddlZddZdZdZdZd dd dd dd ddd dd dg Z d gZ dZ x/e ddD]Z e j e e e 7Z qW[ [ d d Zd dZddZddZddZedZedZedZedddks,tededksFtededks`tddZddddd d!d"d#d$d%d&d'd(g Zdd)d*d+d,d-d.d/gZd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd<d=Z d>d?Z!d@dAZ"dBdCZ#dDdEZ$GdFdGdGZ%e%dH e%_&e%dIdHdJdKdLdMdNdMdOdPe%_'e%dOde%_(GdQdRdRZ)e)Z*e)ddde)_&e)ddSde)_'e%dIde)_(GdTdUdUZ+e+Z,GdVdWdWZeZ-eddde_&edKdMdMdPe_'e%dOde_(GdXdYdYe)Z.e.ddde._&e.ddSddKdMdMdPe._'e%dOde._(dZd[Z/Gd\d]d]e+Z0e0j1e%de0_2e0j1e0j3e0_&e0j1e0j4e0_'e.d^dddUe0j2Z5ydd_l6TWne7k r_YnnX[[ [ [[[[[[[[ [!["[[[[#[*[[[[[[/[[[[-[,[[dd`l6mZdS)azConcrete date/time and related types. See http://www.iana.org/time-zones/repository/tz-link.html for time zone and DST data sources. NcCs$||krdS||kr dSdS)Nr)xyrr-/opt/alt/python34/lib64/python3.4/datetime.py_cmp srri'i۹7cCs.|ddko-|ddkp-|ddkS)zyear -> 1 if leap year, else 0.rdir)yearrrr_is_leap$srcCs*|d}|d|d|d|dS)z2year -> number of days before January 1st of year.rimr r ir)rrrrr_days_before_year(s rcCsLd|kodkns(t||dkrDt|rDdSt|S)z9year, month -> number of days in that month in that year.r )AssertionErrorr_DAYS_IN_MONTH)rmonthrrr_days_in_month-s(rcCsFd|kodkns(tdt||dkoDt|S)zCyear, month -> number of days in year preceding first day of month.rrzmonth must be in 1..12r)r_DAYS_BEFORE_MONTHr)rrrrr_days_before_month4s(rcCs~d|kodkns(tdt||}d|koN|knsctd|t|t|||S)z>year, month, day -> ordinal, considering 01-Jan-0001 as day 1.rrzmonth must be in 1..12zday must be in 1..%d)rrrr)rrdaydimrrr_ymd2ord9s (,rier imc Cs|d8}t|t\}}|dd}t|t\}}t|t\}}t|d\}}||d|d|7}|dks|dkr|dkst|dddfS|d ko|d kp|d k}|t|kst|d d ?}t||d ko!|}||kr\|d8}|t||d koT|8}n||8}d|kot||knst|||dfS)z@ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.riimr r rrr 2rr) divmod_DI400Y_DI100Y_DI4Yrrrrr) nZn400rZn100Zn4Zn1ZleapyearrZ precedingrrr_ord2ymdRs( $  ! +r(ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecZMonZTueZWedZThuZFriZSatZSunc CsUt|||dd}t|||}tj|||||||||f S)N)rr_timeZ struct_time) rmdhhmmssZdstflagZwdayZdnumrrr_build_struct_timesr1cCs.d|||f}|r*|d|7}n|S)Nz%02d:%02d:%02dz.%06dr)r.r/r0usresultrrr _format_timesr4cCs~d}d}d}g}|j}dt|}} x(|| kr^||} |d7}| dkrQ|| krD||} |d7}| dkr|dkrdt|dd}n|j|qN| dkr|dkrd}t|d r|j} | dk rd } | jdkr.| } d } nt| td d\} }|td d sltd|td d}d| | |f}qqnd|kst|j|qN| dkr-|dkrd}t|dr|j }|dk r|j dd}qqn|j|qN|d|| q[|dq7|| q7Wdj |}t j ||S)Nrr%fz%06d microsecondz utcoffset+-hoursminutesz whole minutez %c%02d%02dZtznamez%%)appendlengetattrhasattrr:daysr# timedeltarr@replacejoinr+strftime)objectformat timetupleZfreplaceZzreplaceZZreplaceZ newformatpushir'Zchoffsetsignhr,srrr_wrap_strftimes`                       rScCs#|dkrdSt|||S)N)rC)tzinfoZmethnameZ tzinfoargrrr_call_tzinfo_methods rUcCs9|dk r5t|t r5tdt|ndS)Nz4tzinfo.tzname() must return None or string, not '%s') isinstancestr TypeErrortype)namerrr _check_tznamesr[cCs|dkst|dkr"dSt|tsPtd|t|fn|tddsl|jrtd||fntd |kotdknstd||fndS) Nr:dstz3tzinfo.%s() must return None or timedelta, not '%s'r>rz9tzinfo.%s() must return a whole number of minutes, got %szV%s()=%s, must be must be strictly between -timedelta(hours=24) and timedelta(hours=24))z utcoffsetzdst)rrVrFrXrY microseconds ValueError)rZrOrrr_check_utc_offsets )r_cCst|tstdnt|ko5tknsVtdttf|nd|komdknstd|nt||}d|ko|knstd||ndS)Nz int expectedzyear must be in %d..%drrzmonth must be in 1..12zday must be in 1..%d)rVintrXMINYEARMAXYEARr^r)rrrrrrr_check_date_fieldssrccCst|tstdnd|ko5dknsLtd|nd|kocdknsztd|nd|kodknstd|nd|kodknstd |ndS) Nz int expectedrzhour must be in 0..23;zminute must be in 0..59zsecond must be in 0..59i?Bz microsecond must be in 0..999999)rVr`rXr^)hourminutesecondr7rrr_check_time_fieldssricCs/|dk r+t|t r+tdndS)Nz4tzinfo argument must be None or of a tzinfo subclass)rVrTrX)tzrrr_check_tzinfo_argsrkcCs,tdt|jt|jfdS)Nzcan't compare '%s' to '%s')rXrY__name__)rrrrr _cmperrorsrmcCsvt||\}}|d9}|dkr7||kn ||k}|se||krr|ddkrr|d7}n|S)zdivide a by b and round result to the nearest integer When the ratio is exactly half-way between two integers, the even integer is returned. rrr)r#)abqrZgreater_than_halfrrr_divide_and_rounds  $" rrc @seZdZdZdCZdddddddddZdd Zd d Zd d Ze ddZ e ddZ e ddZ ddZ e ZddZddZddZddZddZd d!ZeZd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Z d8d9Z!d:d;Z"d<d=Z#d>d?Z$d@dAZ%dBS)DrFaRepresent the difference between two datetime objects. Supported operators: - add, subtract timedelta - unary plus, minus, abs - compare to timedelta - multiply, divide by int In addition, datetime supports subtraction of two datetime objects returning a timedelta, and addition or subtraction of a datetime and a timedelta giving a datetime. Representation: (days, seconds, microseconds). Why? Because I felt like it. _days_seconds _microsecondsrcCsd}} } ||d7}||d|d7}||d7}t|trtj|\} }tj| d\} } | t| kstt| } |t|kstt|}n d} |}t| tstt| d kstt|tstt| dks.tt|trtj|\}}|t|ksjtt|}|| 7}t|d kstn| }t|tstt|d kstt|tstt|d\}}||7}| t|7} t| ts'tt| dks?t|d }t|dksatt|trc||7}t|d}t|d \}}|t|kst|t|kstt|d\}}|t|kst|t|kst|t|7}| t|7} t| tsHtt| dkstnt|d\}}t|d\}}||7}| t|7} t| tstt| dkstt|}||7}t|d}t| d kstt|dks)tt|ts>tt||ksVtt|} t| d\}} | |7} t| tstt| d!\}} ||7}t|tstt| trd| kod"knstt| tr&d| ko!dkns,tt j |}||_ | |_ | |_ t|dkr{td|n|S)#Nrr*<iig8@g @gg?r!g@rg.Ag@Ar i@BgGAiɚ;z$timedelta # of days is too large: %dg@iQiQ0ig@HiiQrxirxiiQiQ)rVfloat_mathmodfr`rabsr#roundrJ__new__rsrtru OverflowError)clsrEsecondsr]Z millisecondsr>r=Zweeksr-rRr2ZdayfracZdaysecondsfracZdaysecondswholeZ secondsfracZusdoubleselfrrrr~As            11   ztimedelta.__new__cCsu|jr0dd|jj|j|j|jfS|jrZdd|jj|j|jfSdd|jj|jfS)Nz%s(%d, %d, %d)z datetime.z %s(%d, %d)z%s(%d))ru __class__rlrsrt)rrrr__repr__s    ztimedelta.__repr__cCst|jd\}}t|d\}}d|||f}|jrodd}d||j|}n|jr|d|j}n|S)Nrvz %d:%02d:%02dcSs"|t|dkrdpdfS)NrrRr9)r|)r'rrrpluralsz!timedelta.__str__..pluralz %d day%s, z.%06d)r#rtrsru)rr/r0r.rRrrrr__str__s   ztimedelta.__str__cCs!|jd|jd|jdS)zTotal seconds in the duration.iQ r)i@Bi@B)rErr])rrrr total_secondssztimedelta.total_secondscCs|jS)rE)rs)rrrrrEsztimedelta.dayscCs|jS)r)rt)rrrrrsztimedelta.secondscCs|jS)r])ru)rrrrr]sztimedelta.microsecondscCsAt|tr=t|j|j|j|j|j|jStS)N)rVrFrsrtruNotImplemented)rotherrrr__add__s  ztimedelta.__add__cCsAt|tr=t|j|j|j|j|j|jStS)N)rVrFrsrtrur)rrrrr__sub__s  ztimedelta.__sub__cCst|tr| |StS)N)rVrFr)rrrrr__rsub__s ztimedelta.__rsub__cCst|j |j |j S)N)rFrsrtru)rrrr__neg__s ztimedelta.__neg__cCs|S)Nr)rrrr__pos__sztimedelta.__pos__cCs|jdkr| S|SdS)Nr)rs)rrrr__abs__sztimedelta.__abs__cCst|tr4t|j||j||j|St|tr~|j}|j\}}tddt |||St S)Nr) rVr`rFrsrtrury_to_microsecondsas_integer_ratiorrr)rrusecrnrorrr__mul__s   ztimedelta.__mul__cCs|jd|jd|jS)Nr!ii@BiQ)rsrtru)rrrrrsztimedelta._to_microsecondscCsit|ttfstS|j}t|trB||jSt|tretdd||SdS)Nr)rVr`rFrr)rrrrrr __floordiv__s ztimedelta.__floordiv__cCst|tttfstS|j}t|trE||jSt|trmtddt||St|tr|j\}}tddt|||SdS)Nr)rVr`ryrFrrrrr)rrrrnrorrr __truediv__$s ztimedelta.__truediv__cCs9t|tr5|j|j}tdd|StS)Nr)rVrFrr)rrrqrrr__mod__0sztimedelta.__mod__cCsJt|trFt|j|j\}}|tdd|fStS)Nr)rVrFr#rr)rrrprqrrr __divmod__6s  ztimedelta.__divmod__cCs*t|tr"|j|dkSdSdS)NrF)rVrFr)rrrrr__eq__?sztimedelta.__eq__cCs*t|tr"|j|dkSdSdS)NrT)rVrFr)rrrrr__ne__Esztimedelta.__ne__cCs3t|tr"|j|dkSt||dS)Nr)rVrFrrm)rrrrr__le__Ksztimedelta.__le__cCs3t|tr"|j|dkSt||dS)Nr)rVrFrrm)rrrrr__lt__Qsztimedelta.__lt__cCs3t|tr"|j|dkSt||dS)Nr)rVrFrrm)rrrrr__ge__Wsztimedelta.__ge__cCs3t|tr"|j|dkSt||dS)Nr)rVrFrrm)rrrrr__gt__]sztimedelta.__gt__cCs.t|tstt|j|jS)N)rVrFrr _getstate)rrrrrrcsztimedelta._cmpcCst|jS)N)hashr)rrrr__hash__gsztimedelta.__hash__cCs+|jdkp*|jdkp*|jdkS)Nr)rsrtru)rrrr__bool__jsztimedelta.__bool__cCs|j|j|jfS)N)rsrtru)rrrrrqsztimedelta._getstatecCs|j|jfS)N)rr)rrrr __reduce__tsztimedelta.__reduce__N)z_daysz_secondsz _microseconds)&rl __module__ __qualname____doc__ __slots__r~rrrpropertyrErr]r__radd__rrrrrr__rmul__rrrrrrrrrrrrrrrrrrrrrF.sF  p                   rFiɚ;rEr=rdr>rerr]i?Bc@seZdZdZdDZddddZedd Zed d Zed d Z ddZ ddZ ddZ ddZ ddZeZeddZeddZeddZddZd d!Zdddd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZeZ d6d7Z!d8d9Z"d:d;Z#d<d=Z$d>d?Z%d@dAZ&dBdCZ'dS)EdateaConcrete date type. Constructors: __new__() fromtimestamp() today() fromordinal() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ __add__, __radd__, __sub__ (add/radd only with timedelta arg) Methods: timetuple() toordinal() weekday() isoweekday(), isocalendar(), isoformat() ctime() strftime() Properties (readonly): year, month, day _year_month_dayNcCst|trmt|dkrmd|dko<dknrm|dkrmtj|}|j||St|||tj|}||_||_||_ |S)zVConstructor. Arguments: year, month, day (required, base 1) r rrrN) rVbytesrBrJr~_date__setstatercrrr)rrrrrrrrr~s!,    z date.__new__c Cs:tj|\ }}}}}}}} } ||||S)z;Construct a date from a POSIX timestamp (like time.time()).)r+ localtime) rtrr,r-r.r/r0weekdayjdayr\rrr fromtimestamps*zdate.fromtimestampcCstj}|j|S)z"Construct a date from time.time().)r+timer)rrrrrtodays z date.todaycCs%t|\}}}||||S)zContruct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. )r()rr'rr,r-rrr fromordinalszdate.fromordinalcCs'dd|jj|j|j|jfS)a5Convert to formal string, for repr(). >>> dt = datetime(2010, 1, 1) >>> repr(dt) 'datetime.datetime(2010, 1, 1, 0, 0)' >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc) >>> repr(dt) 'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)' z%s(%d, %d, %d)z datetime.)rrlrrr)rrrrrs z date.__repr__cCs;|jdpd}dt|t|j|j|jfS)zReturn ctime() style string.r*z%s %s %2d 00:00:00 %04d) toordinal _DAYNAMES _MONTHNAMESrrr)rrrrrctimes  z date.ctimecCst|||jS)zFormat using strftime().)rSrL)rfmtrrrrIsz date.strftimecCs)t|dkr|j|St|S)Nr)rBrIrW)rrrrr __format__s zdate.__format__cCsd|j|j|jfS)zReturn the date formatted according to ISO. This is 'YYYY-MM-DD'. References: - http://www.w3.org/TR/NOTE-datetime - http://www.cl.cam.ac.uk/~mgk25/iso-time.html z%04d-%02d-%02d)rrr)rrrr isoformats zdate.isoformatcCs|jS)z year (1-9999))r)rrrrrsz date.yearcCs|jS)z month (1-12))r)rrrrrsz date.monthcCs|jS)z day (1-31))r)rrrrrszdate.daycCs%t|j|j|jddddS)z9Return local time tuple compatible with time.localtime().rrr)r1rrr)rrrrrLszdate.timetuplecCst|j|j|jS)zReturn proleptic Gregorian ordinal for the year, month and day. January 1 of year 1 is day 1. Only the year, month and day values contribute to the result. )rrrr)rrrrrszdate.toordinalcCsh|dkr|j}n|dkr0|j}n|dkrH|j}nt|||t|||S)z;Return a new date with new values for the specified fields.N)rrrrcr)rrrrrrrrGs      z date.replacecCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrr(sz date.__eq__cCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrr-sz date.__ne__cCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrr2sz date.__le__cCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrr7sz date.__lt__cCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrr<sz date.__ge__cCs&t|tr"|j|dkStS)Nr)rVrrr)rrrrrrAsz date.__gt__cCsnt|tst|j|j|j}}}|j|j|j}}}t|||f|||fS)N)rVrrrrrr)rrrr,r-Zy2Zm2Zd2rrrrFsz date._cmpcCst|jS)zHash.)rr)rrrrrLsz date.__hash__cCs^t|trZ|j|j}d|ko9tknrKtj|StdntS)zAdd a date to a timedelta.rzresult out of range) rVrFrrE _MAXORDINALrrrr)rrorrrrRs  z date.__add__cCsZt|tr!|t|j St|trV|j}|j}t||StS)z.Subtract two dates, or a date and a timedelta.)rVrFrErrr)rrdays1days2rrrr]s  z date.__sub__cCs|jddS)z:Return day of the week, where Monday == 0 ... Sunday == 6.r)r*)r)rrrrrgsz date.weekdaycCs|jdpdS)z:Return day of the week, where Monday == 1 ... Sunday == 7.r*)r)rrrr isoweekdaymszdate.isoweekdaycCs|j}t|}t|j|j|j}t||d\}}|dkr|d8}t|}t||d\}}n8|dkr|t|dkr|d7}d}qn||d|dfS)aReturn a 3-tuple containing ISO year, week number, and weekday. The first ISO week of the year is the (Mon-Sun) week containing the year's first Thursday; everything else derives from that. The first week is 1; Monday is 1 ... Sunday is 7. ISO calendar algorithm taken from http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm r*rr4)r_isoweek1mondayrrrr#)rr week1mondayrZweekrrrr isocalendarrs        zdate.isocalendarcCs7t|jd\}}t|||j|jgfS)N)r#rrrr)ryhiylorrrrszdate._getstatecCsot|dks3d|dko-dkn rBtdn|\}}|_|_|d||_dS)Nr rrrznot enough argumentsr)rBrXrrr)rstringrrrrr __setstates3zdate.__setstatecCs|j|jfS)N)rr)rrrrrszdate.__reduce__)z_yearz_monthz_day)(rlrrrrr~ classmethodrrrrrrIrrrrrrrrLrrGrrrrrrrrrrrrrrrrrrrrrr|sF                      rrc@sXeZdZdZfZddZddZddZdd Zd d Z d S) rTz}Abstract base class for time zone info classes. Subclasses must override the name(), utcoffset() and dst() methods. cCstddS)z%datetime -> string name of time zone.z&tzinfo subclass must override tzname()N)NotImplementedError)rdtrrrr@sz tzinfo.tznamecCstddS)z:datetime -> minutes east of UTC (negative for west of UTC)z)tzinfo subclass must override utcoffset()N)r)rrrrrr:sztzinfo.utcoffsetcCstddS)zdatetime -> DST offset in minutes east of UTC. Return 0 if DST not in effect. utcoffset() must include the DST offset. z#tzinfo subclass must override dst()N)r)rrrrrr\sz tzinfo.dstcCst|tstdn|j|k r<tdn|j}|dkrctdn|j}|dkrtdn||}|r||7}|j}|dkrtdqn||S)z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfNz0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultz;fromutc(): dt.dst gave inconsistent results; cannot convert)rVdatetimerXrTr^r:r\)rrZdtoffZdtdstdeltarrrfromutcs"        ztzinfo.fromutccCst|dd}|r$|}nf}t|dd}|rN|}nt|ddpcd}|dkr|j|fS|j||fSdS)N__getinitargs__ __getstate____dict__)rCr)rZ getinitargsargsgetstatestaterrrrs    ztzinfo.__reduce__N) rlrrrrr@r:r\rrrrrrrTs     rTc@seZdZdZdddddddZeddZedd Zed d Zed d Z eddZ ddZ ddZ ddZ ddZddZddZdddZdd Zd!d"d#Zd$d%Zd&d'ZeZd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zddddd2d3d4Zd5d6Zd7d8Zd9d:Zd;d<Z dS)=ra6Time with time zone. Constructors: __new__() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ Methods: strftime() isoformat() utcoffset() tzname() dst() Properties (readonly): hour, minute, second, microsecond, tzinfo rNcCstj|}t|trJt|dkrJ|j||pBd|St|t||||||_||_ ||_ ||_ ||_ |S)zConstructor. Arguments: hour, minute (required) second, microsecond (default to zero) tzinfo (default to None) r)N) rJr~rVrrB_time__setstaterkri_hour_minute_second _microsecond_tzinfo)rrfrgrhr7rTrrrrr~s !      z time.__new__cCs|jS)z hour (0-23))r)rrrrrfsz time.hourcCs|jS)z minute (0-59))r)rrrrrgsz time.minutecCs|jS)z second (0-59))r)rrrrrh!sz time.secondcCs|jS)zmicrosecond (0-999999))r)rrrrr7&sztime.microsecondcCs|jS)ztimezone info object)r)rrrrrT+sz time.tzinfocCs0t|tr(|j|dddkSdSdS)N allow_mixedTrF)rVrr)rrrrrr4sz time.__eq__cCs0t|tr(|j|dddkSdSdS)NrTr)rVrr)rrrrrr:sz time.__ne__cCs3t|tr"|j|dkSt||dS)Nr)rVrrrm)rrrrrr@sz time.__le__cCs3t|tr"|j|dkSt||dS)Nr)rVrrrm)rrrrrrFsz time.__lt__cCs3t|tr"|j|dkSt||dS)Nr)rVrrrm)rrrrrrLsz time.__ge__cCs3t|tr"|j|dkSt||dS)Nr)rVrrrm)rrrrrrRsz time.__gt__Fc CsSt|tst|j}|j}d}}||krFd}n$|j}|j}||k}|rt|j|j|j|j f|j|j|j|j fS|dks|dkr|rdSt dn|jd|j|t dd}|jd|j|t dd} t||j|j f| |j|j fS)NTrz$cannot compare naive and aware timesrvr>r) rVrrrr:rrrrrrXrF) rrrmytzottzmyoffotoff base_compareZmyhhmmZothhmmrrrrXs,          %%z time._cmpcCs|j}|s&t|jdSttd|jd|j|tdd\}}|tdd s}td|tdd}d|kodknrtt|||j |j St|||j |j fS)zHash.rr=r>rz whole minuter!) r:rrr#rFrfrgrrrhr7)rtzoffrQr,rrrrts  z time.__hash__:cCs|j}|dk r|jdkr7d}| }nd}t|tdd\}}|tdd s{td|tdd}d|kod knstd ||||f}n|S) z2Return formatted timezone offset (+xx:xx) or None.Nrr<r;r=rr>z whole minuter!z %s%02d%s%02d)r:rEr#rFr)rsepoffrPr.r/rrr_tzstrs    "z time._tzstrcCs|jdkr(d|j|jf}n%|jdkrGd|j}nd}dd|jj|j|j|f}|jdk r|d dd kst|dd d |jd }n|S) z%Convert to formal string, for repr().rz, %d, %dz, %dr9z %s(%d, %d%s)z datetime.Nr)z , tzinfo=%rrr)rrrrlrrrr)rrRrrrrs"z time.__repr__cCsDt|j|j|j|j}|j}|r@||7}n|S)zReturn the time formatted according to ISO. This is 'HH:MM:SS.mmmmmm+zz:zz', or 'HH:MM:SS+zz:zz' if self.microsecond == 0. )r4rrrrr)rrRrjrrrrs    ztime.isoformatc Cs:ddd|j|j|jdddf }t|||S)z{Format using strftime(). The date part of the timestamp passed to underlying strftime should not be used. ilrrr)rrrrS)rrrLrrrrIs z time.strftimecCs)t|dkr|j|St|S)Nr)rBrIrW)rrrrrrs ztime.__format__cCs6|jdkrdS|jjd}td||S)zQReturn the timezone offset in minutes east of UTC (negative west of UTC).Nr:)rr:r_)rrOrrrr:s  ztime.utcoffsetcCs3|jdkrdS|jjd}t||S)aReturn the timezone name. Note that the name is 100% informational -- there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. N)rr@r[)rrZrrrr@s  z time.tznamecCs6|jdkrdS|jjd}td||S)afReturn 0 if DST is not in effect, or the DST offset (in minutes eastward) if DST is in effect. This is purely informational; the DST offset has already been added to the UTC offset returned by utcoffset() if applicable, so there's no need to consult dst() unless you're interested in displaying the DST info. Nr\)rr\r_)rrOrrrr\s  ztime.dstTcCs|dkr|j}n|dkr0|j}n|dkrH|j}n|dkr`|j}n|dkrx|j}nt||||t|t|||||S)z;Return a new time with new values for the specified fields.NT)rfrgrhr7rTrirkr)rrfrgrhr7rTrrrrGs           z time.replacecCsM|js|jrdS|jp+td}td|jd|j|kS)NTrr=r>)rhr7r:rFrfrg)rrOrrrrsz time.__bool__cCs{t|jd\}}t|d\}}t|j|j|j|||g}|jdkrj|fS||jfSdS)Nr)r#rrrrrr)rus2us3us1 basestaterrrrsztime._getstatecCst|dks"|ddkr1tdn|\|_|_|_}}}|d>|Bd>|B|_|dkst|tr||_ntd|dS)Nr)rr!zan integer is requiredzbad tzinfo state arg %r) rBrXrrrrrV _tzinfo_classr)rrrTrrrrrrr s"! ztime.__setstatecCst|jfS)N)rr)rrrrrsztime.__reduce__)!rlrrrr~rrfrgrhr7rTrrrrrrrrrrrrrIrr:r@r\rGrrrrrrrrrs<               rc @seZdZdZejd^Zdddddddd d Zed d Zed dZ eddZ eddZ eddZ e ddZe dddZe ddZe dddZe ddZe dd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zdddddddd-d.d/Zdd0d1Zd2d3Zd4d5d6Zd7d8Zd9d:Ze d;d<Zd=d>Z d?d@Z!dAdBZ"dCdDZ#dEdFZ$dGdHZ%dIdJZ&dKdLZ'dMdNZ(dOdPdQZ)dRdSZ*e*Z+dTdUZ,dVdWZ-dXdYZ.dZd[Z/d\d]Z0dS)_rzdatetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) The year, month and day arguments are required. tzinfo may be None, or an instance of a tzinfo subclass. The remaining arguments may be ints. rrrrrNrc Cst|trQt|dkrQtj||dd} | j||| St|t||||tj||||} || _|| _ || _ || _ || _ | S)Nrr ) rVrrBrr~_datetime__setstaterkrirrrrr) rrrrrfrgrhr7rTrrrrr~)s!      zdatetime.__new__cCs|jS)z hour (0-23))r)rrrrrf;sz datetime.hourcCs|jS)z minute (0-59))r)rrrrrg@szdatetime.minutecCs|jS)z second (0-59))r)rrrrrhEszdatetime.secondcCs|jS)zmicrosecond (0-999999))r)rrrrr7Jszdatetime.microsecondcCs|jS)ztimezone info object)r)rrrrrTOszdatetime.tzinfoc Cstj|\}}t|d}|dkrH|d7}|d8}n#|dkrk|d8}|d7}n|rztjntj}||\ }}} } } } } }}t| d} |||| | | | ||S)zConstruct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. g.Ai@Brrre)rzr{r}r+gmtimermin)rrutcrjZfracr2Z converterrr,r-r.r/r0rrr\rrr_fromtimestampTs      'zdatetime._fromtimestampcCsGt||j||dk |}|dk rC|j|}n|S)zConstruct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. N)rkrr)rrrjr3rrrrhs   zdatetime.fromtimestampcCs|j|ddS)z6Construct a naive UTC datetime from a POSIX timestamp.TN)r)rrrrrutcfromtimestampuszdatetime.utcfromtimestampcCstj}|j||S)zBConstruct a datetime from time.time() and optional time zone info.)r+rr)rrjrrrrnows z datetime.nowcCstj}|j|S)z*Construct a UTC datetime from time.time().)r+rr)rrrrrutcnows zdatetime.utcnowc Csst|tstdnt|ts<tdn||j|j|j|j|j|j |j |j S)z8Construct a datetime from a given date and a given time.z%date argument must be a date instancez%time argument must be a time instance) rV _date_classrX _time_classrrrrfrgrhr7rT)rrrrrrcombineszdatetime.combinecCsd|j}|dkr!d}n|r0d}nd}t|j|j|j|j|j|j|S)z9Return local time tuple compatible with time.localtime().Nrrr)r\r1rrrrfrgrh)rr\rrrrLs    zdatetime.timetuplec Csf|jdkrTtj|j|j|j|j|j|jdddf |j dS|t j SdS)zReturn POSIX timestamp as floatNrg.Arrr) rr+Zmktimerrrrfrgrhr7_EPOCHr)rrrr timestamps zdatetime.timestampcCsu|j}|r||8}n|j|j|j}}}|j|j|j}}}t||||||dS)z4Return UTC time tuple compatible with time.gmtime().r)r:rrrrfrgrhr1)rrOrr,r-r.r/r0rrr utctimetuples   zdatetime.utctimetuplecCst|j|j|jS)zReturn the date part.)rrrr)rrrrrsz datetime.datecCst|j|j|j|jS)z'Return the time part, with tzinfo None.)rrfrgrhr7)rrrrrsz datetime.timecCs%t|j|j|j|j|jS)z'Return the time part, with same tzinfo.)rrfrgrhr7r)rrrrtimetzszdatetime.timetzTc Cs |dkr|j}n|dkr0|j}n|dkrH|j}n|dkr`|j}n|dkrx|j}n|dkr|j}n|dkr|j}n|dkr|j}nt|||t ||||t |t ||||||||S)z?Return a new datetime with new values for the specified fields.NT) rrrrfrgrhr7rTrcrirkr) rrrrrfrgrhr7rTrrrrGs*                 zdatetime.replacec Cs|dkr:|jdkr*tdn|ttdd}tj|}t|dd}y|j}|j}Wnt k r|ttj |dd}tj o|j dk}|rtj ntj }|td|krt|tj|}n t|}YqXXttd||}nt|tsXtdn|j} | dkr|tdn|| kr|S|j} | dkrtdn|| jd|} |j| S)Nz'astimezone() requires an aware datetimerrr)rz)tz argument must be an instance of tzinforT)rTr^rrFr+rrZ tm_gmtoffZtm_zoneAttributeErrorrZdaylightZtm_isdstZaltzonetimezoner@rVrXr:rGr) rrjZtsZlocaltmZlocalZgmtoffZzonerr\rZmyoffsetrrrr astimezones:    #     zdatetime.astimezonecCsM|jdpd}dt|t|j|j|j|j|j|jfS)zReturn ctime() style string.r*z%s %s %2d %02d:%02d:%02d %04d) rrrrrrrrr)rrrrrr s zdatetime.ctimeTcCsd|j|j|j|ft|j|j|j|j}|j}|dk r|j dkrud}| }nd}t |t dd\}}|t dd st d |t dd}|d |||f7}n|S) aReturn the time formatted according to ISO. This is 'YYYY-MM-DD HH:MM:SS.mmmmmm', or 'YYYY-MM-DD HH:MM:SS' if self.microsecond == 0. If self.tzinfo is not None, the UTC offset is also attached, giving 'YYYY-MM-DD HH:MM:SS.mmmmmm+HH:MM' or 'YYYY-MM-DD HH:MM:SS+HH:MM'. Optional argument sep specifies the separator between date and time, default 'T'. z%04d-%02d-%02d%cNrr<r;r=rr>z whole minutez %s%02d:%02d) rrrr4rrrrr:rEr#rFr)rrrRrrPr.r/rrrrs      zdatetime.isoformatcCs|j|j|j|j|j|j|jg}|d dkrJ|d =n|d dkrd|d =ndjtt |}dd|j j |f}|j dk r|d ddkst |ddd|j d}n|S)z%Convert to formal string, for repr().rrz, z%s(%s)z datetime.Nrz , tzinfo=%rrrrrrr)rrrrrrrrHmaprWrrlrr)rLrRrrrr0s  "zdatetime.__repr__cCs|jddS)zConvert to string, for str().r )r)rrrrr?szdatetime.__str__cCsddl}|j|||S)zKstring, format -> new datetime parsed from a string (like time.strptime()).rN) _strptimeZ_strptime_datetime)rZ date_stringrKrrrrstrptimeCs zdatetime.strptimecCs6|jdkrdS|jj|}td||S)zQReturn the timezone offset in minutes east of UTC (negative west of UTC).Nr:)rr:r_)rrOrrrr:Is  zdatetime.utcoffsetcCs#t|jd|}t||S)aReturn the timezone name. Note that the name is 100% informational -- there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. r@)rUrr[)rrZrrrr@Rs zdatetime.tznamecCs6|jdkrdS|jj|}td||S)afReturn 0 if DST is not in effect, or the DST offset (in minutes eastward) if DST is in effect. This is purely informational; the DST offset has already been added to the UTC offset returned by utcoffset() if applicable, so there's no need to consult dst() unless you're interested in displaying the DST info. Nr\)rr\r_)rrOrrrr\]s  z datetime.dstcCsCt|tr(|j|dddkSt|ts;tSdSdS)NrTrF)rVrrrr)rrrrrrns zdatetime.__eq__cCsCt|tr(|j|dddkSt|ts;tSdSdS)NrTr)rVrrrr)rrrrrrvs zdatetime.__ne__cCsFt|tr"|j|dkSt|ts5tSt||dS)Nr)rVrrrrrm)rrrrrr~s zdatetime.__le__cCsFt|tr"|j|dkSt|ts5tSt||dS)Nr)rVrrrrrm)rrrrrrs zdatetime.__lt__cCsFt|tr"|j|dkSt|ts5tSt||dS)Nr)rVrrrrrm)rrrrrrs zdatetime.__ge__cCsFt|tr"|j|dkSt|ts5tSt||dS)Nr)rVrrrrrm)rrrrrrs zdatetime.__gt__Fc Cs/t|tst|j}|j}d}}||krFd}n$|j}|j}||k}|rt|j|j|j|j |j |j |j f|j|j|j|j |j |j |j fS|dks|dkr|rdSt dn||}|jdkrdS|r+dp.dS)NTrz(cannot compare naive and aware datetimesrrr)rVrrrr:rrrrrrrrrXrE) rrrrrrrrZdiffrrrrs0           z datetime._cmpc Cst|tstSt|jd|jd|jd|jd|j}||7}t|j d\}}t|d\}}d|j kot knrt j tj|j t||||jd|jStd d S) zAdd a datetime and a timedelta.r=r>rr]irvrrTzresult out of rangeN)rVrFrrrrrrr#rrErrrrrrr]rr)rrrrfZremrgrhrrrrs         zdatetime.__add__c Cst|ts+t|tr'|| StS|j}|j}|j|jd|jd}|j|jd|jd}t|||||j|j}|j |j kr|S|j }|j }||kr|S|dks|dkr t dn|||S)z6Subtract two datetimes, or a datetime and a timedelta.rviNz(cannot mix naive and timezone-aware time) rVrrFrrrrrrrr:rX) rrrrZsecs1Zsecs2baserrrrrrs(       zdatetime.__sub__cCs|j}|dkr,t|jdSt|j|j|j}|jd|jd|j }tt |||j |S)Nrirv) r:rrrrrrrfrgrhrFr7)rrrErrrrrs   zdatetime.__hash__c Cst|jd\}}t|jd\}}t|d\}}t|||j|j|j|j|j|||g }|j dkr|fS||j fSdS)Nr) r#rrrrrrrrr)rrrrrrrrrrrszdatetime._getstatec Cs|\ }}|_|_|_|_|_}}}|d||_|d>|Bd>|B|_|dksxt|tr||_ nt d|dS)Nrrzbad tzinfo state arg %r) rrrrrrrrVrrrX)rrrTrrrrrrrrrs 3 zdatetime.__setstatecCs|j|jfS)N)rr)rrrrr szdatetime.__reduce__)z_hourz_minutez_secondz _microsecondz_tzinfo)1rlrrrrrr~rrfrgrhr7rTrrrrrrrrLrrrrrGrrrrrr r:r@r\rrrrrrrrrrrrrrrrrrrsd       .             rcCsMd}t|dd}|dd}||}||krI|d7}n|S)Nr rr)r*)r)rZTHURSDAYZfirstdayZ firstweekdayrrrrrs   rc@seZdZd ZeZeddZedddZdd Z d d Z d d Z ddZ ddZ ddZddZddZddZeddddZe ZeddZdS)!r_offset_namecCst|tstdn||jkrC|s:|jSd}nt|tsatdn|j|ko~|jknstdn|j dks|j ddkrtdn|j ||S)Nzoffset must be a timedeltazname must be a stringzYoffset must be a timedelta strictly between -timedelta(hours=24) and timedelta(hours=24).rrvzAoffset must be a timedelta representing a whole number of minutes) rVrFrX_OmittedrrW _minoffset _maxoffsetr^r]r_create)rrOrZrrrr~#s "ztimezone.__new__NcCs%tj|}||_||_|S)N)rTr~r r )rrOrZrrrrr6s  ztimezone._createcCs)|jdkr|jfS|j|jfS)zpickle supportN)r r )rrrrr=s ztimezone.__getinitargs__cCs&t|tkrdS|j|jkS)NF)rYrr )rrrrrrCsztimezone.__eq__cCs t|jS)N)rr )rrrrrHsztimezone.__hash__cCs^||jkrdS|jdkr=dd|jj|jfSdd|jj|j|jfS)aConvert to formal string, for repr(). >>> tz = timezone.utc >>> repr(tz) 'datetime.timezone.utc' >>> tz = timezone(timedelta(hours=-5), 'EST') >>> repr(tz) "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')" zdatetime.timezone.utcNz%s(%r)z datetime.z %s(%r, %r))rr rrlr )rrrrrKs  ztimezone.__repr__cCs |jdS)N)r@)rrrrr]sztimezone.__str__cCs2t|ts|dkr"|jStddS)Nz8utcoffset() argument must be a datetime instance or None)rVrr rX)rrrrrr:`sztimezone.utcoffsetcCsQt|ts|dkrA|jdkr:|j|jS|jStddS)Nz5tzname() argument must be a datetime instance or None)rVrr _name_from_offsetr rX)rrrrrr@fs ztimezone.tznamecCs/t|ts|dkrdStddS)Nz2dst() argument must be a datetime instance or None)rVrrX)rrrrrr\nsz timezone.dstcCsHt|tr8|j|k r-tdn||jStddS)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rVrrTr^r rX)rrrrrrts  ztimezone.fromutcr=rdr>recCsl|tdkr"d}| }nd}t|tdd\}}|tdd}dj|||S)Nrr<r;r=rr>zUTC{}{:02d}:{:02d})rFr#rK)rrPr=restr>rrrrs ztimezone._name_from_offset)z_offsetz_name)rlrrrrJr r~rrrrrrrr:r@r\rrFrr staticmethodrrrrrrs"           ri)*)r)8rrr+ZmathrzrrarbrrrZdbmrrArrrrrr$r%r&rr(rrr1r4rSrUr[r_rcrirkrmrrrFrmaxZ resolutionrrrTrrrrrrrrrrZ _datetime ImportErrorrrrrs    .          ?   9     J !C3! m     lib64/python3.4/__pycache__/abc.cpython-34.pyo000064400000017223152342604300014633 0ustar00 e f!@sdZddlmZddZGdddeZGdddeZGd d d eZ Gd d d e Z Gd ddde Z ddZ dS)z3Abstract Base Classes (ABCs) according to PEP 3119.)WeakSetcCs d|_|S)aA decorator indicating abstract methods. Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal 'super' call mechanisms. Usage: class C(metaclass=ABCMeta): @abstractmethod def my_abstract_method(self, ...): ... T)__isabstractmethod__)funcobjr(/opt/alt/python34/lib64/python3.4/abc.pyabstractmethod s rcs.eZdZdZdZfddZS)abstractclassmethodaO A decorator indicating abstract classmethods. Similar to abstractmethod. Usage: class C(metaclass=ABCMeta): @abstractclassmethod def my_abstract_classmethod(cls, ...): ... 'abstractclassmethod' is deprecated. Use 'classmethod' with 'abstractmethod' instead. Tcsd|_tj|dS)NT)rsuper__init__)selfcallable) __class__rrr 0s zabstractclassmethod.__init__)__name__ __module__ __qualname____doc__rr rr)r rrs rcs.eZdZdZdZfddZS)abstractstaticmethodaO A decorator indicating abstract staticmethods. Similar to abstractmethod. Usage: class C(metaclass=ABCMeta): @abstractstaticmethod def my_abstract_staticmethod(...): ... 'abstractstaticmethod' is deprecated. Use 'staticmethod' with 'abstractmethod' instead. Tcsd|_tj|dS)NT)rr r )r r )r rrr Hs zabstractstaticmethod.__init__)rrrrrr rr)r rr5s rc@seZdZdZdZdS)abstractpropertyak A decorator indicating abstract properties. Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal 'super' call mechanisms. Usage: class C(metaclass=ABCMeta): @abstractproperty def my_abstract_property(self): ... This defines a read-only property; you can also define a read-write abstract property using the 'long' form of property declaration: class C(metaclass=ABCMeta): def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx) 'abstractproperty' is deprecated. Use 'property' with 'abstractmethod' instead. TN)rrrrrrrrrrMs rcsaeZdZdZdZfddZddZddd Zd d Zd d Z S)ABCMetaaiMetaclass for defining Abstract Base Classes (ABCs). Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as 'virtual subclasses' -- these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won't show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()). rcstj||||}dd|jD}xb|D]Z}xQt|dtD]:}t||d}t|ddrW|j|qWqWWq;Wt||_t|_ t|_ t|_ t j |_|S)NcSs.h|]$\}}t|ddr|qS)rF)getattr).0namevaluerrr s  z"ABCMeta.__new__..__abstractmethods__rF)r __new__itemsrsetadd frozensetrr _abc_registry _abc_cache_abc_negative_cacher_abc_invalidation_counter_abc_negative_cache_version)mclsrbases namespacecls abstractsbaser)r rrrs      zABCMeta.__new__cCsrt|tstdnt||r1|St||rOtdn|jj|tjd7_|S)zsRegister a virtual subclass of an ABC. Returns the subclass, to allow usage as a class decorator. zCan only register classesz'Refusing to create an inheritance cycle) isinstancetype TypeError issubclass RuntimeErrorr rrr#)r(subclassrrrregisterszABCMeta.registerNcCstd|j|jfd|tdtjd|xXt|jjD]A}|jdrMt ||}td||fd|qMqMWdS)z'Debug helper to print the ABC registry.z Class: %s.%sfilezInv.counter: %s_abc_z%s: %rN) printrrrr#sorted__dict__keys startswithr)r(r3rrrrr_dump_registrys  zABCMeta._dump_registrycs|j}|jkrdSt|}||krfjtjkrY|jkrYdSj|Stfdd||hDS)z'Override for isinstance(instance, cls).TFc3s|]}j|VqdS)N)__subclasscheck__)rc)r(rr sz,ABCMeta.__instancecheck__..) r r!r-r$rr#r"r;any)r(instancer1subtyper)r(r__instancecheck__s     zABCMeta.__instancecheck__cCsL||jkrdS|jtjkr@t|_tj|_n||jkrSdS|j|}|tk r|r|jj|n|jj||S|t |dfkr|jj|dSx4|j D])}t ||r|jj|dSqWx7|j D])}t ||r |jj|dSq W|jj|dS)z'Override for issubclass(subclass, cls).TF__mro__) r!r$rr#rr"__subclasshook__NotImplementedrrr r/__subclasses__)r(r1okrclssclsrrrr;s4  zABCMeta.__subclasscheck__) rrrrr#rr2r:rAr;rr)r rrms   rc@seZdZdZdS)ABCzVHelper class that provides a standard way to create an ABC using inheritance. N)rrrrrrrrrIs rI metaclasscCstjS)zReturns the current ABC cache token. The token is an opaque object (supporting equality testing) identifying the current version of the ABC cache for virtual subclasses. The token changes with every call to ``register()`` on any ABC. )rr#rrrrget_cache_tokensrKN)r _weakrefsetrr classmethodr staticmethodrpropertyrr-rrIrKrrrrs  }lib64/python3.4/__pycache__/binhex.cpython-34.pyc000064400000032345152342604300015351 0ustar00 e fh6@s9dZddlZddlZddlZddlZdddgZGdddeZdZdZ dZ d Z d Z Gd d d Z d dZGdddZGdddZGdddZGdddZddZGdddZGdddZGdddZddZdS)zMacintosh binhex compression/decompression. easy interface: binhex(inputfilename, outputfilename) hexbin(inputfilename, outputfilename) NbinhexhexbinErrorc@seZdZdS)rN)__name__ __module__ __qualname__rr+/opt/alt/python34/lib64/python3.4/binhex.pyrs i@sc@seZdZddZdS)FInfocCsd|_d|_d|_dS)Nz????r)TypeCreatorFlags)selfrrr __init__0s  zFInfo.__init__N)rrrrrrrr r /s r c Cst}tj|dJ}|jd}d|krEd|_n|jdd|j}WdQXtjj |\}}|j ddd}|||dfS) NrbirZTEXT:-r ) r ioopenreadr seektellospathsplitreplace)namefinfofpdataZdsizedirfilerrr getfileinfo5s   r%c@s@eZdZddZddZddZddZd S) openrsrccGsdS)Nr)rargsrrr rCszopenrsrc.__init__cGsdS)Nr)rr'rrr rFsz openrsrc.readcGsdS)Nr)rr'rrr writeIszopenrsrc.writecCsdS)Nr)rrrr closeLszopenrsrc.closeN)rrrrrr)r*rrrr r&Bs    r&c@sFeZdZdZddZddZddZdd Zd S) _Hqxcoderenginez(Write data to the coder in 3-byte chunkscCs,||_d|_d|_td|_dS)Nr(r )ofpr"hqxdataLINELENlinelen)rr,rrr rRs   z_Hqxcoderengine.__init__cCs|j||_t|j}|dd}|jd|}|j|d|_|s`dS|jtj||_|jddS)Nr)r"lenr-binasciib2a_hqx_flush)rr"ZdatalenZtodorrr r)Xsz_Hqxcoderengine.writecCsd}x]|t|j|jkre||j}|jj|j||dt|_|}q W|j|d|_|r|jj|jdndS)Nrs s: )r1r-r/r,r)r.)rZforcefirstlastrrr r4cs !  z_Hqxcoderengine._flushcCsL|jr(|jtj|j|_n|jd|jj|`dS)Nr )r"r-r2r3r4r,r*)rrrr r*ns    z_Hqxcoderengine.closeN)rrr__doc__rr)r4r*rrrr r+Os   r+c@s:eZdZdZddZddZddZdS) _Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscCs||_d|_dS)Nr()r,r")rr,rrr rxs z_Rlecoderengine.__init__cCsX|j||_t|jtkr)dStj|j}|jj|d|_dS)Nr()r"r1REASONABLY_LARGEr2 rlecode_hqxr,r))rr"rledatarrr r)|s z_Rlecoderengine.writecCsE|jr.tj|j}|jj|n|jj|`dS)N)r"r2r:r,r)r*)rr;rrr r*s   z_Rlecoderengine.closeN)rrrr7rr)r*rrrr r8us   r8c@speZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)BinHexc Cs|\}}}}d}t|trH|}tj|d}d}nyx|jdt|} t| |_d|_|dkrt }n||_ ||_ |j ||t |_Wn|r|jnYnXdS)NFwbTs0(This file must be converted with BinHex 4.0) :r) isinstancestrrrr)r+r8r,crcr dlenrlen _writeinfo _DID_HEADERstater*) rZname_finfo_dlen_rlenr,rr rArBZclose_on_errorZofnameZhqxerrrr rs*          zBinHex.__init__c Cst|}|dkr'tdnt|g|jdd}|j|j}}t|tr{|jd}nt|tr|jd}n||}tj d|j }tj d|j |j } |||| } |j | |jdS)N?zFilename too longzlatin-1sz>hz>ii)r1rbytesencoder rr>r?structpackrrArB_write _writecrc) rrr nldZtpZcrZd2Zd3Zd4inforrr rCs     zBinHex._writeinfocCs,tj||j|_|jj|dS)N)r2crc_hqxr@r,r))rr"rrr rKsz BinHex._writecCsJ|jdkrd}nd}|jjtj||jd|_dS)Nrz>hz>H)r@r,r)rIrJ)rZfmtrrr rLs  zBinHex._writecrccCsE|jtkrtdn|jt||_|j|dS)NzWriting data at the wrong time)rErDrrAr1rK)rr"rrr r)sz BinHex.writecCs?|jdkr(td|jfn|jt|_dS)NrzIncorrect data size, diff=%r)rArrBrL _DID_DATArE)rrrr close_datas zBinHex.close_datacCsa|jtkr|jn|jtkr:tdn|jt||_|j|dS)Nz'Writing resource data at the wrong time)rErQrRrrBr1rK)rr"rrr write_rsrcs  zBinHex.write_rsrcc Cs|jdkrdSzp|jtkr2|jn|jtkrPtdn|jdkrxtd|jfn|jWdd|_|j}|`|jXdS)NzClose at the wrong timerz$Incorrect resource-datasize, diff=%r)rErQrRrrBrLr,r*)rr,rrr r*s   z BinHex.closeN) rrrrrCrKrLr)rRrSr*rrrr r<s       r<cCst|}t||}tj|d}x*|jd}|sIPn|j|q0W|j|jt|d}x*|jd}|sPn|j |qW|j|jdS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a fileriN) r%r<rrrr)rRr*r&rS)inpoutr r,ifprNrrr rs$    c@s:eZdZdZddZddZddZdS) _Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCs||_d|_dS)Nr)rVeof)rrVrrr rs z_Hqxdecoderengine.__init__c Csd}|}x|dkr|jr(|S|ddd}|jj|}xjytj|\}|_PWntjk rYnX|jjd}|stdn||}qOW||}|t|}| r|j rtdqqW|S)z&Read at least wtd bytes (or until EOF)r(rrr0r zPremature EOF on binhex file)rXrVrr2Za2b_hqxZ Incompleterr1)rZtotalwtdZdecdatawtdr"Z decdatacurnewdatarrr rs,  z_Hqxdecoderengine.readcCs|jjdS)N)rVr*)rrrr r*&sz_Hqxdecoderengine.closeN)rrrr7rrr*rrrr rWs   rWc@sFeZdZdZddZddZddZdd Zd S) _RledecoderenginezRead data via the RLE-codercCs(||_d|_d|_d|_dS)Nr(r)rV pre_buffer post_bufferrX)rrVrrr r,s   z_Rledecoderengine.__init__cCs_|t|jkr2|j|t|jn|jd|}|j|d|_|S)N)r1r^_fill)rrZrvrrr r2s z_Rledecoderengine.readcCsH|j|jj|d|_|jjrU|jtj|j|_d|_dSt|j}|jddtdtkr|d}nv|jddtkr|d}nP|jd dtdkr|d}n&|jd d tkrn |d}|jtj|jd||_|j|d|_dS) NrYr(r0sr rrcrb) r]rVrrXr^r2Z rledecode_hqxr1RUNCHAR)rrZmarkrrr r_9s&    !     z_Rledecoderengine._fillcCs|jjdS)N)rVr*)rrrr r*\sz_Rledecoderengine.closeN)rrrr7rrr_r*rrrr r\)s    #r\c@speZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)HexBincCst|tr$tj|d}nxJ|jd}|sKtdn|dkr]q'n|dkr'Pq'q'Wt|}t||_d|_ |j dS)Nrr zNo binhex data founds :r) r>r?rrrrrWr\rVr@ _readheader)rrVZchZhqxifprrr r`s    zHexBin.__init__cCs.|jj|}tj||j|_|S)N)rVrr2rPr@)rr1r"rrr _readvsz HexBin._readcCsntjd|jjddd@}|jd@|_||jkratd|j|fnd|_dS)Nz>hrrizCRC error, computed %x, read %x)rIunpackrVrr@r)rZfilecrcrrr _checkcrc{s &zHexBin._checkcrccCs |jd}|jt|}|jd}|j|dd}|dd}tjd|ddd}tjd |dd d|_tjd |d d d|_||_t|_||j_ ||j_ ||j_ t |_ dS)Nr rYr z>h rz>lrlrmrnrorp)riordrkrIrjrArBFNamer rr rrDrE)rr1ZfnameresttypeZcreatorflagsrrr rhs  ##     zHexBin._readheadercGs|jtkrtdn|rC|d}t||j}n |j}d}x3t||kr||j|t|}qUW|j||_|S)NzRead data at wrong timerr()rErDrminrAr1ri)rnr`rrr rs  !z HexBin.readcCsS|jtkrtdn|jr<|j|j}n|jt|_dS)Nzclose_data at wrong time)rErDrrArirkrQ)rdummyrrr rRs   zHexBin.close_datacGs|jtkr|jn|jtkr:tdn|r_|d}t||j}n |j}|j||_|j|S)Nz Read resource data at wrong timer)rErDrRrQrrvrBri)rrwrrr read_rsrcs   zHexBin.read_rsrcc Cs]|jdkrdSz,|jr4|j|j}n|jWdd|_|jjXdS)N)rErBryrkrVr*)rrxrrr r*s  z HexBin.closeN) rrrrrirkrhrrRryr*rrrr rf_s       rfcCst|}|j}|s'|j}ntj|d}x*|jd}|sUPn|j|q<W|j|j|j d}|rt |d}|j|x*|j d}|sPn|j|qW|jn|jdS)z6hexbin(infilename, outfilename) - Decode binhexed filer=iN) rfr rrrrrr)r*rRryr&)rTrUrVr r,rNrrr rs.       )r7rrrIr2__all__ ExceptionrrDrQr9r.rdr r%r&r+r8r<rrWr\rfrrrrr s,      &^ *6hlib64/python3.4/__pycache__/base64.cpython-34.pyo000064400000043263152342604300015175 0ustar00 e fN@szdZddlZddlZddlZddddddd d d d d dddddddgZeefZddZdddZ ddddZ ddZ ddZ ej ddZej ddZddZddZd Zdadad!d Zddd"d Zd#d Zdd$d Zdadad%Zd&Zdddd'd(Zd)dd*dd+dd,dd-dZd)dd,dd.d/d0dZd1Z da!da"da#dd2d Z$d3dZ%d4Z&e&d5d6Z'd7dZ(d8dZ)d9d:Z*d;dZ+d<d=Z,d>dZ-d?d@Z.dAdBZ/dCdDZ0e1dEkrve/ndS)FzDBase16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodingsNencodedecode encodebytes decodebytes b64encode b64decode b32encode b32decode b16encode b16decode b85encode b85decode a85encode a85decodestandard_b64encodestandard_b64decodeurlsafe_b64encodeurlsafe_b64decodecCst|trDy|jdSWqDtk r@tdYqDXnt|trW|Syt|jSWn+tk rtd|j j dYnXdS)Nasciiz4string argument should contain only ASCII charactersz>argument should be a bytes-like object or ASCII string, not %r) isinstancestrrUnicodeEncodeError ValueError bytes_types memoryviewtobytes TypeError __class____name__)sr +/opt/alt/python34/lib64/python3.4/base64.py_bytes_from_decode_data"s  r"cCsBtj|dd}|dk r>|jtjd|S|S)aSEncode a byte string using Base64. s is the byte string to encode. Optional altchars must be a byte string of length 2 which specifies an alternative alphabet for the '+' and '/' characters. This allows an application to e.g. generate url or filesystem safe Base64 strings. The encoded byte string is returned. Ns+/)binascii b2a_base64 translatebytes maketrans)raltcharsencodedr r r!r3s  FcCszt|}|dk rBt|}|jtj|d}n|rmtjd| rmtjdntj|S)aDecode a Base64 encoded byte string. s is the byte string to decode. Optional altchars must be a string of length 2 which specifies the alternative alphabet used instead of the '+' and '/' characters. The decoded string is returned. A binascii.Error is raised if s is incorrectly padded. If validate is False (the default), non-base64-alphabet characters are discarded prior to the padding check. If validate is True, non-base64-alphabet characters in the input result in a binascii.Error. Ns+/s^[A-Za-z0-9+/]*={0,2}$zNon-base64 digit found) r"r'r(r)rematchr%Error a2b_base64)rr*Zvalidater r r!rEs   cCs t|S)zEncode a byte string using the standard Base64 alphabet. s is the byte string to encode. The encoded byte string is returned. )r)rr r r!r]scCs t|S)aDecode a byte string encoded with the standard Base64 alphabet. s is the byte string to decode. The decoded byte string is returned. binascii.Error is raised if the input is incorrectly padded or if there are non-alphabet characters present in the input. )r)rr r r!rdss+/s-_cCst|jtS)zEncode a byte string using a url-safe Base64 alphabet. s is the byte string to encode. The encoded byte string is returned. The alphabet uses '-' instead of '+' and '_' instead of '/'. )rr'_urlsafe_encode_translation)rr r r!rrscCs%t|}|jt}t|S)aXDecode a byte string encoded with the standard Base64 alphabet. s is the byte string to decode. The decoded byte string is returned. binascii.Error is raised if the input is incorrectly padded or if there are non-alphabet characters present in the input. The alphabet uses '-' instead of '+' and '_' instead of '/'. )r"r'_urlsafe_decode_translationr)rr r r!r{s s ABCDEFGHIJKLMNOPQRSTUVWXYZ234567cstdkrAddtDfddDadnt|tset|j}nt|d}|r|td|}nt}t j }t}x{t dt|dD]a}||||dd}|||d?||d ?d @||d ?d @||d @7}qW|d krGd |dd|dkrd|dds zb32encode..cs'g|]}D]}||qqSr r )r2ab)b32tabr r!r4s rbigi r#s======s====s====ir$) _b32tab2 _b32alphabetrrrrlenr( bytearrayint from_bytesrange)rZleftoverr+rIZb32tab2r3cr )r7r!rs4    +    c Csftdkr(ddttDant|}t|drVtjdn|dk rt|}|jtj dd|}n|r|j }nt|}|j d}|t|}t }t}xt d t|dD]}|||d}d } y'x |D]} | d >|| } q"WWn$tk retjd dYnX|| jd d 7}qW|r\| d |K} | jd d } |d kr| dd|dds zb32decode..zIncorrect paddings01OrArr8zNon-base32 digit foundr9r#r@r>r?r=r$rQrCrQrBrQ)_b32rev enumeraterEr"rFr%r.r'r(r)upperrstriprGrJKeyErrorto_bytes) rcasefoldZmap01lZpadcharsdecodedZb32revr3ZquantaaccrKlastr r r!r sJ    "        cCstj|jS)zrEncode a byte string using Base16. s is the byte string to encode. The encoded byte string is returned. )r%ZhexlifyrU)rr r r!r scCsRt|}|r!|j}ntjd|rEtjdntj|S)aDecode a Base16 encoded byte string. s is the byte string to decode. Optional casefold is a flag specifying whether a lowercase alphabet is acceptable as input. For security purposes, the default is False. The decoded byte string is returned. binascii.Error is raised if s were incorrectly padded or if there are non-alphabet characters present in the string. s [^0-9A-F]zNon-base16 digit found)r"rUr,searchr%r.Z unhexlify)rrYr r r!r s s<~s~>c st|ts$t|j}nt| d}|rL|d|}ntjdt|dj|}fdd|D}|r| r|d dkrdd |d .r#r_rr8r$r$r$r$) rrrrrFstructStructZunpackjoin) r6rbrcpadrdrepaddingZwordschunksr )rbrcrdrer! _85encode&s&  rmrewrapcolrjadobecstdkr>ddtddDaddtDant|tt|d||rltnrt|rdnd fd dtd tD}|rt|ddkr|jd qnd j|n|rt 7nS)a Encode a byte string using Ascii85. b is the byte string to encode. The encoded byte string is returned. foldspaces is an optional flag that uses the special short sequence 'y' instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This feature is not supported by the "standard" Adobe encoding. wrapcol controls whether the output should have newline ('\n') characters added to it. If this is non-zero, each output line will be at most this many characters long. pad controls whether the input string is padded to a multiple of 4 before encoding. Note that the btoa implementation always pads. adobe controls whether the encoded byte sequence is framed with <~ and ~>, which is used by the Adobe implementation. NcSsg|]}t|fqSr )r()r2r3r r r!r4Us za85encode..!vcSs'g|]}tD]}||qqSr ) _a85chars)r2r5r6r r r!r4Vs Tr>r#cs$g|]}||qSr r )r2r3)resultrnr r!r4^s rrfs r$) rrrJ _a85chars2rm _A85STARTmaxrFappendri_A85END)r6rernrjrorlr )rsrnr!r>s"    ignorecharss c Cst|}|r^|jto-|jtsKtdjttn|dd}ntjdj }g}|j }g}|j }|j } x?|dD]3} d| kodknrQ|| t |dkrd} x |D]} d | | d } qWy||| Wn$tj k rCtd d YnX| qq| dkr|rrtdn|dq|r| dkr|rtdn|dq| |krqqtd| qWdj|} dt |} | r| d | } n| S)acDecode an Ascii85 encoded byte string. s is the byte string to decode. foldspaces is a flag that specifies whether the 'y' short sequence should be accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature is not supported by the "standard" Adobe encoding. adobe controls whether the input sequence is in Adobe Ascii85 format (i.e. is framed with <~ and ~>). ignorechars should be a byte string containing characters to ignore from the input. This should only contain whitespace characters, and by default contains all whitespace characters in ASCII. zAAscii85 encoded byte sequences must be bracketed by {!r} and {!r}r>z!Iur?!rr8rarpzAscii85 overflowNr_zz inside Ascii85 5-tuplesr`zy inside Ascii85 5-tuples zNon-Ascii85 digit found: %crfrRsuuuurpuzy)r" startswithruendswithrxrformatrgrhpackrwclearrFerrorri)r6rerorypackIr[Zdecoded_appendcurrZ curr_appendZ curr_clearxr\rsrkr r r!risP            sU0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~cCsHtdkr5ddtDaddtDant|tt|S)zEncode an ASCII-encoded byte array in base85 format. If pad is true, the input is padded with "\0" so its length is a multiple of 4 characters before encoding. NcSsg|]}t|fqSr )r()r2r3r r r!r4s zb85encode..cSs'g|]}tD]}||qqSr ) _b85chars)r2r5r6r r r!r4s )r _b85alphabet _b85chars2rm)r6rjr r r!r s c CstdkrCdgdax'ttD]\}}|t|)warningswarnDeprecationWarningr)rrr r r! encodestrings   rcCst|tj|S)z6Decode a bytestring of base-64 data into a bytestring.)rr%r/)rr r r!r's cCs)ddl}|jdtdt|S)zLegacy alias of decodebytes().rNz7decodestring() is a deprecated alias, use decodebytes()r>)rrrr)rrr r r! decodestring,s   rc Cs|ddl}ddl}y)|j|jddd\}}Wn`|jk r}z=|j|_t|td|jd|jdWYdd}~XnXt}xj|D]b\}}|dkrt}n|dkrt }n|d krt }n|d krt dSqW|r_|dd kr_t |dd }|||jj WdQXn||j j |jj dS) zSmall main programrNr#Zdeutzusage: %s [-d|-e|-u|-t] [file|-] -d, -u: decode -e: encode (default) -t: encode and decode string 'Aladdin:open sesame'r>z-ez-dz-uz-t-rb)sysgetoptargvrstderrstdoutprintexitrrtestopenbufferstdin) rrZoptsargsrfuncor5fr r r!main5s0)       rcCsRd}tt|t|}tt|t|}tt|dS)NsAladdin:open sesame)rreprrr)Zs0s1s2r r r!rOs  r__main__)2__doc__r,rgr%__all__r(rGrr"rrrrr)r0r1rrrErDrSrr r r rrrtrurxrmrrrrrrr r Z MAXLINESIZErrrrrrrrrrrr r r r!sh             (K $+C *      lib64/python3.4/__pycache__/_dummy_thread.cpython-34.pyo000064400000011331152342604300016721 0ustar00 i f@sdZdddddddgZdZeZid dZd dZd dZd dZdddZ ddZ Gddde Z da daddZdS)a/Drop-in replacement for the thread module. Meant to be used as a brain-dead substitute so that threaded code does not need to be rewritten for when the thread module is not present. Suggested usage is:: try: import _thread except ImportError: import _dummy_thread as _thread errorstart_new_threadexit get_ident allocate_lockinterrupt_mainLockTypec Cst|ttkr*tdnt|ttkrTtdnday|||Wn/tk rYnddl}|jYnXdatrdat ndS)aDummy implementation of _thread.start_new_thread(). Compatibility is maintained by making sure that ``args`` is a tuple and ``kwargs`` is a dictionary. If an exception is raised and it is SystemExit (which can be done by _thread.exit()) it is caught and nothing is done; all other exceptions are printed out by using traceback.print_exc(). If the executed function calls interrupt_main the KeyboardInterrupt will be raised when the function returns. z2nd arg must be a tuplez3rd arg must be a dictFNT) typetuple TypeErrordict_main SystemExit traceback print_exc _interruptKeyboardInterrupt)Zfunctionargskwargsrr2/opt/alt/python34/lib64/python3.4/_dummy_thread.pyrs   cCs tdS)z'Dummy implementation of _thread.exit().N)rrrrrr=scCsdS)zDummy implementation of _thread.get_ident(). Since this module should only be used when _threadmodule is not available, it is safe to assume that the current process is the only thread. Thus a constant can be safely returned. rrrrrrAscCstS)z0Dummy implementation of _thread.allocate_lock().)rrrrrrJsNcCs|dk rtdndS)z-Dummy implementation of _thread.stack_size().Nz'setting thread stack size not supportedr )r)sizerrr stack_sizeNs rcCstS)z0Dummy implementation of _thread._set_sentinel().)rrrrr _set_sentinelTsrc@s^eZdZdZddZddddZeZdd Zd d Zd d Z dS)raClass implementing dummy implementation of _thread.LockType. Compatibility is maintained by maintaining self.locked_status which is a boolean that stores the state of the lock. Pickling of the lock, though, should not be done since if the _thread module is then used with an unpickled ``lock()`` from here problems could occur from this class not having atomic methods. cCs d|_dS)NF) locked_status)selfrrr__init__cszLockType.__init__NrcCse|dks|rd|_dS|js5d|_dS|dkr]ddl}|j|ndSdS)aDummy implementation of acquire(). For blocking calls, self.locked_status is automatically set to True and returned appropriately based on value of ``waitflag``. If it is non-blocking, then the value is actually checked and not set if it is already acquired. This is all done so that threading.Condition's assert statements aren't triggered and throw a little fit. NTr F)rtimeZsleep)rZwaitflagZtimeoutr!rrracquirefs      zLockType.acquirecCs|jdS)N)release)rtypvaltbrrr__exit__szLockType.__exit__cCs|jstnd|_dS)zRelease the dummy lock.FT)rr)rrrrr#s   zLockType.releasecCs|jS)N)r)rrrrlockedszLockType.lockedr) __name__ __module__ __qualname____doc__r r" __enter__r'r#r(rrrrrXs    FTcCstrtndadS)z^Set _interrupt flag to True to have start_new_thread raise KeyboardInterrupt upon exiting.TN)rrrrrrrrs l)r,__all__ TIMEOUT_MAX RuntimeErrorrrrrrrrobjectrrrrrrrr s    8lib64/python3.4/__pycache__/modulefinder.cpython-34.pyo000064400000041621152342604300016562 0ustar00 e f}[@sdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z e j !e j de ddlZWdQXeejjdgZeejjdgZeejjdgZeejjdgZeegZeejgZiZdd ZiZd d ZGd d d ZGdddZddZedkry eZ Wne!k re"dYnXndS)z3Find modules used by a script, using introspection.Nignore LOAD_CONST IMPORT_NAME STORE_NAME STORE_GLOBALcCstj|gj|dS)N)packagePathMap setdefaultappend)Z packagenamepathr 1/opt/alt/python34/lib64/python3.4/modulefinder.pyAddPackagePath!sr cCs|t|r?r@)rrAdirrZextrBrCr r r load_fileqs zModuleFinder.load_filer5c Cs|jdd|||||j|d|}|j||\}}|j||}|se|S|jr|j||ndS)N import_hookr/)r4determine_parentfind_head_package load_tailrensure_fromlist) rrcallerfromlistr/parentqtailmr r r rJxs zModuleFinder.import_hookcCs|jdd||| s)|dkr=|jdddS|j}|dkr|jrh|d8}n|dkr|j|}|jdd||S|jd|krtdndj|jdd| }|j|}|jdd||S|jr0|j|}|jdd||Sd|kr|j d}|d|}|j|}|jdd||S|jdddS) NrKrzdetermine_parent -> Noner5zdetermine_parent ->.zrelative importpath too deep) r6r7rrr#count ImportErrorjoinrErfind)rrOr/ZpnamerQr2r r r rKs<      #     zModuleFinder.determine_parentcCs>|jdd||d|krX|jd}|d|}||dd}n |}d}|rd|j|f}n|}|j|||}|r|jdd||f||fS|r|}d}|j|||}|r|jdd||f||fSn|jdd|td |dS) NrUrLrVr5r:z%s.%szfind_head_package ->z"raise ImportError: No module namedzNo module named )r6findr import_moduler7rX)rrQrr2headrSZqnamerRr r r rLs.   zModuleFinder.find_head_packagecCs|jdd|||}x|r|jd}|dkrOt|}n|d|||dd}}d|j|f}|j|||}|s|jdd|td|qqW|jdd ||S) NrUrMrVrr5z%s.%sz"raise ImportError: No module namedzNo module named z load_tail ->)r6r[lenrr\r7rX)rrRrSrTr2r]Zmnamer r r rMs  %zModuleFinder.load_tailcCs|jdd|||x|D]}|dkri|s|j|}|rf|j||dqfqq t||s d|j|f}|j|||}|std|qq q WdS)NrUrN*r5z%s.%szNo module named )r4find_all_submodulesrNhasattrrr\rX)rrTrPZ recursivesuballsubnameZsubmodr r r rNs  zModuleFinder.ensure_fromlistc CsB|js dSi}g}|tjjdd7}|tjjdd7}|tjjdd7}x|jD]}ytj|}Wn(tk r|j dd|wqYnXx||D]t}d}xF|D]>}t |} || d|kr|d| }PqqW|r|dkr|||YnX|jdd||S||jkry|jdddS|r|jdkr|jdddSy+|j||o|j|\}}}Wn)tk r|jddddSYnXz|j||||}Wd|r+|j nX|rEt |||n|jdd||S)NrIr\zimport_module ->zimport_module -> None) r6r#KeyErrorr7r$r find_modulerXr@closesetattr)rZpartnamefqnamerQrTrBrArCr r r r\s6  "  zModuleFinder.import_modulec Cs|\}}}|jdd||o'd||tjkrf|j||}|jdd||S|tjkrt|jd|d} n|tjkryt j j |j} WnEt k r} z%|jddt | |WYdd} ~ XnXtj| } nd} |j|}||_| rt|jrX|j| } n| |_|j| |n|jdd||S)Nr8r@rBzload_module -> execzraise ImportError: )r6r>Z PKG_DIRECTORY load_packager7r?compilereadZ PY_COMPILEDre _bootstrap_validate_bytecode_headerrXr0marshalloads add_modulerr(replace_paths_in_coder scan_code) rrurBrA file_infosuffixmodetyperTcoZ marshal_dataexcr r r r@s2   zModuleFinder.load_modulecCsQ||jkri|j|~s z*ModuleFinder.scan_code..r/rVr)rrrrrr#getrupdaterrrK RuntimeErrorr isinstancerr)rrrTrscannerZwhatr1rrPZ have_starZmmr/rQrr r r rqsH              zModuleFinder.scan_codec Cs|jdd||tj|}|r4|}n|j|}||_|g|_|jtj|g|_|jd|j\}}}z1|j|||||j dd||SWd|r|j nXdS)Nr8rxrzload_package ->) r6rrrrrrrrr@r7rs)rrurArrTrBZbufrCr r r rxs   zModuleFinder.load_packagecCs5||jkr|j|St||j|<}|S)N)r#r)rrurTr r r rs zModuleFinder.add_modulecCs|dk r |jd|}n|}||jkrW|jdd|t|n|dkr|tjkrddddtjffS|j}ntj ||S)NrVrIzfind_module -> Excludedr:) rr'r7rXr"builtin_module_namesr>Z C_BUILTINr rr)rrr rQrr r r rrs   zModuleFinder.find_modulecCsttddtddt|jj}xa|D]Y}|j|}|jrntdddntdddtd ||jpd q?W|j\}}|rttd xF|D];}t|j|j}td |d dj|qWn|r~ttdddtdxF|D];}t|j|j}td |d dj|q<WndS)zPrint a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. z %-25s %sNameFile----Pr*r+rTz%-25sr:zMissing modules:?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)zNamer)rr) r-sortedr#rlrrany_missing_mayber$rY)rrlkeyrTmissingmayberZmodsr r r reports0     #  zModuleFinder.reportcCs|j\}}||S)zReturn a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. )r)rrrr r r any_missingszModuleFinder.any_missingcCs.g}g}x|jD]}||jkr1qn|jd}|dkr_|j|qn||dd}|d|}|jj|}|dk r||j|kr|j|q ||jkrq |jr|j|q |j|q|j|qW|j|j||fS)aReturn two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. rVrr5N) r$r'rZr r#rrrsort)rrrrr2rdZpkgnameZpkgr r r rs0       zModuleFinder.any_missing_maybecCstjj|j}}xD|jD]9\}}|j|r#||t|d}Pq#q#W|jr||jkr||kr|j dd||fn|j dd|f|jj |nt |j }xMt t|D]9}t||t|r|j||||ropnameindexrrrrrrrr rrrr!rrrKeyboardInterruptr-r r r r s>              ;   lib64/python3.4/__pycache__/cmd.cpython-34.pyo000064400000032220152342604300014643 0ustar00 e f :@sXdZddlZddlZdgZdZejejdZGdddZdS)a A generic class to build line-oriented command interpreters. Interpreters constructed with this class obey the following conventions: 1. End of file on input is processed as the command 'EOF'. 2. A command is parsed out of each line by collecting the prefix composed of characters in the identchars member. 3. A command `foo' is dispatched to a method 'do_foo()'; the do_ method is passed a single argument consisting of the remainder of the line. 4. Typing an empty line repeats the last command. (Actually, it calls the method `emptyline', which may be overridden in a subclass.) 5. There is a predefined `help' method. Given an argument `topic', it calls the command `help_topic'. With no arguments, it lists all topics with defined help_ functions, broken into up to three topics; documented commands, miscellaneous help topics, and undocumented commands. 6. The command '?' is a synonym for `help'. The command '!' is a synonym for `shell', if a do_shell method exists. 7. If completion is enabled, completing commands will be done automatically, and completing of commands args is done by calling complete_foo() with arguments text, line, begidx, endidx. text is string we are matching against, all returned matches must begin with it. line is the current input line (lstripped), begidx and endidx are the beginning and end indexes of the text being matched, which could be used to provide different completion depending upon which position the argument is in. The `default' method may be overridden to intercept commands for which there is no do_ method. The `completedefault' method may be overridden to intercept completions for commands that have no complete_ method. The data member `self.ruler' sets the character used to draw separator lines in the help messages. If empty, no ruler line is drawn. It defaults to "=". If the value of `self.intro' is nonempty when the cmdloop method is called, it is printed out on interpreter startup. This value may be overridden via an optional argument to the cmdloop() method. The data members `self.doc_header', `self.misc_header', and `self.undoc_header' set the headers used for the help function's listings of documented functions, miscellaneous topics, and undocumented functions respectively. NCmdz(Cmd) _c@s?eZdZdZeZeZdZdZ dZ dZ dZ dZ dZdZd Zd ddd d Zdd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Z d+d,Z!d-d.d/Z"dS)0raA simple framework for writing line-oriented command interpreters. These are often useful for test harnesses, administrative tools, and prototypes that will later be wrapped in a more sophisticated interface. A Cmd instance or subclass instance is a line-oriented interpreter framework. There is no good reason to instantiate Cmd itself; rather, it's useful as a superclass of an interpreter class you define yourself in order to inherit Cmd's methods and encapsulate action methods. =Nz(Documented commands (type help ):zMiscellaneous help topics:zUndocumented commands:z*** No help on %sZtabcCs^|dk r||_n tj|_|dk r<||_n tj|_g|_||_dS)aInstantiate a line-oriented interpreter framework. The optional argument 'completekey' is the readline name of a completion key; it defaults to the Tab key. If completekey is not None and the readline module is available, command completion is done automatically. The optional arguments stdin and stdout specify alternate input and output file objects; if not specified, sys.stdin and sys.stdout are used. N)stdinsysstdoutcmdqueue completekey)selfr rr r (/opt/alt/python34/lib64/python3.4/cmd.py__init__Ls       z Cmd.__init__cCs|j|jrw|jrwyCddl}|j|_|j|j|j|jdWqwt k rsYqwXnz=|dk r||_ n|j r|j j t |j dnd}x|s|jr|jjd}n|jr"yt|j}Wqutk rd}YquXnS|j j |j|j j|jj}t|sfd}n|jd}|j|}|j|}|j||}qW|jWd|jr|jry ddl}|j|jWqt k rYqXnXdS)zRepeatedly issue a prompt, accept input, parse an initial prefix off the received input, and dispatch to action methods, passing them the remainder of the line as argument. rNz : complete EOFz )preloop use_rawinputr readlineZ get_completerZ old_completerZ set_completercompleteparse_and_bind ImportErrorintror writestrr popinputpromptEOFErrorflushrlenrstripprecmdonecmdpostcmdpostloop)r rrstopliner r rcmdloopbsN                z Cmd.cmdloopcCs|S)zHook method executed just before the command line is interpreted, but after the input prompt is generated and issued. r )r r'r r rr"sz Cmd.precmdcCs|S)z?Hook method executed just after a command dispatch is finished.r )r r&r'r r rr$sz Cmd.postcmdcCsdS)z>Hook method executed once when the cmdloop() method is called.Nr )r r r rrsz Cmd.preloopcCsdS)zYHook method executed once when the cmdloop() method is about to return. Nr )r r r rr%sz Cmd.postloopcCs|j}|sdd|fS|ddkrFd|dd}nF|ddkrt|dr|d|dd}qdd|fSndt|}}x-||kr|||jkr|d}qW|d|||dj}}|||fS) zParse the line into a command name and a string containing the arguments. Returns a tuple containing (command, args, line). 'command' and 'args' may be None if the line couldn't be parsed. Nr?zhelp r!Zdo_shellzshell )striphasattrr identchars)r r'incmdargr r r parselines  "'z Cmd.parselinec Cs|j|\}}}|s(|jS|dkrA|j|S||_|dkrbd|_n|dkr{|j|Syt|d|}Wntk r|j|SYnX||SdS)ahInterpret the argument as though it had been typed in response to the prompt. This may be overridden, but should not normally need to be; see the precmd() and postcmd() methods for useful execution hooks. The return value is a flag indicating whether interpretation of commands by the interpreter should stop. Nrrdo_)r2 emptylinedefaultlastcmdgetattrAttributeError)r r'r0r1funcr r rr#s          z Cmd.onecmdcCs|jr|j|jSdS)zCalled when an empty line is entered in response to the prompt. If this method is not overridden, it repeats the last nonempty command entered. N)r6r#)r r r rr4s z Cmd.emptylinecCs|jjd|dS)zCalled on an input line when the command prefix is not recognized. If this method is not overridden, it prints an error message and returns. z*** Unknown syntax: %s N)r r)r r'r r rr5sz Cmd.defaultcGsgS)zMethod called to complete an input line when no command-specific complete_*() method is available. By default, it returns an empty list. r )r ignoredr r rcompletedefaultszCmd.completedefaultcs'd|fdd|jDS)Nr3cs/g|]%}|jr|ddqS)N) startswith).0a)dotextr r s z%Cmd.completenames..) get_names)r textr:r )r@r completenamess zCmd.completenamesc Cs*|dkrddl}|j}|j}t|t|}|j|}|j|}|dkr|j|\} } } | dkr|j} qyt|d| } Wqt k r|j} YqXn |j } | |||||_ ny|j |SWnt k r%dSYnXdS)zReturn the next possible completion for 'text'. If a command has not been entered, then complete against command list. Otherwise try to call complete_ to get list of completions. rNrZ complete_) rZget_line_bufferlstripr Z get_begidxZ get_endidxr2r;r7r8rDZcompletion_matches IndexError) r rCstaterZorigliner'ZstrippedZbegidxZendidxr0argsZfooZcompfuncr r rrs*          z Cmd.completecCs t|jS)N)dir __class__)r r r rrBsz Cmd.get_namescsHt|j}tfdd|jD}t||BS)Nc3s6|],}|jddr|ddVqdS)help_rN)r=)r>r?)rHr r sz$Cmd.complete_help..)setrDrBlist)r rHZcommandsZtopicsr )rHr complete_helps%zCmd.complete_helpc Cs?|ryt|d|}Wntk ry>t|d|j}|rj|jjdt|dSWntk rYnX|jjdt|j|fdSYnX|n|j}g}g}i}x;|D]3}|dddkrd||dd Ncs)g|]}t|ts|qSr ) isinstancer)r>r.)rOr rrAds z!Cmd.columnize..z list[i] not a string for i in %sz, rz%s rrz rh) r rranger TypeErrorjoinmaprmaxrVljust)r rOZ displaywidthZ nonstringssizeZnrowsZncolsZ colwidthsZtotwidthcolZcolwidthrowr.xZtextsr )rOrrcZsZ%             z Cmd.columnize)#__name__ __module__ __qualname__rSPROMPTr IDENTCHARSr-rbr6rrWrYrZr\rTrrr(r"r$rr%r2r#r4r5r;rDrrBrPrarXrcr r r rr4s< 4           . ) rSstringr__all__rvZ ascii_lettersZdigitsrwrr r r r+s  lib64/python3.4/__pycache__/enum.cpython-34.pyo000064400000037723152342604300015061 0ustar00 e f"T@sddlZddlmZddlmZmZdddgZddZd d Zd d Z d dZ Gddde Z dZ GdddeZGddddeZ Gdddee ZddZddZdS)N) OrderedDict)MappingProxyTypeDynamicClassAttributeEnumIntEnumuniquecCs+t|dp*t|dp*t|dS)z5Returns True if obj is a descriptor, False otherwise.__get____set__ __delete__)hasattr)objr )/opt/alt/python34/lib64/python3.4/enum.py_is_descriptorsrcCsl|dd|ddko+dknok|dddkok|dd dkokt|dkS) z3Returns True if a __dunder__ name, False otherwise.N___r)len)namer r r _is_dunders0rcCs`|d|dkodkno_|dddko_|dddko_t|dkS)z1Returns True if a _sunder_ name, False otherwise.rrrrr)r)rr r r _is_sunders$rcCs"dd}||_d|_dS)z"Make the given class un-picklable.cSstd|dS)Nz%r cannot be pickled) TypeError)selfprotor r r_break_on_call_reduce"sz6_make_class_unpicklable.._break_on_call_reducez N) __reduce_ex__ __module__)clsr r r r_make_class_unpicklable s  r$cs:eZdZdZfddZfddZS) _EnumDictzTrack enum member order and ensure member names are not reused. EnumMeta will use the names found in self._member_names as the enumeration member names. cstjg|_dS)N)super__init__ _member_names)r) __class__r rr'/s z_EnumDict.__init__cst|rtdnst|r*nd||jkrLtd|nBt|s||kr{td||n|jj|ntj||dS)zChanges anything not dundered or not a descriptor. If an enum member name is used twice, an error is raised; duplicate values are not checked for. Single underscore (sunder) names are reserved. z(_names_ are reserved for future Enum usezAttempted to reuse key: %rzKey already defined as: %rN) r ValueErrorrr(rrappendr& __setitem__)rkeyvalue)r)r rr,3s    z_EnumDict.__setitem__)__name__r" __qualname____doc__r'r,r r )r)rr%(s r%c sBeZdZdZeddZfddZddZdd dd dd dd d ZddZ fddZ ddZ ddZ ddZ ddZddZeddZddZd d!Zfd"d#Zdd dd dd dd$d%Zed&d'Zed(d)ZS)*EnumMetazMetaclass for EnumcCstS)N)r%)metaclsr#basesr r r __prepare__TszEnumMeta.__prepare__c s4|j|\}|j|\}}}fddjD}xjD] } | =qYWt|dh@} | rtdjdj| ntj|||} g| _ t | _ | _ i| _ dkr6tk r6d} tfd d | Ds3t| q3q6nx[jD]P} || }t|tsk|f}n|}tkr|f}n|s|| }t|d s||_qn0|| |}t|d s||_n|j}| |_| |_|j|xI| j jD](\} }|j|jkr!|}Pq!q!W| j j| || j | cs z$EnumMeta.__new__..mrozInvalid enum member name: {0},r!__getnewargs_ex____getnewargs__ __reduce__c3s|]}|jkVqdS)N)__dict__)r6m) member_typer r sz#EnumMeta.__new__.._value___repr____str__ __format__)r<z__getnewargs__ __reduce_ex__z __reduce__)z__repr__z__str__z __format__rG) _get_mixins_ _find_new_r(setr*formatjoinr&__new___member_names_r _member_map_ _member_type__value2member_map_objectanyr$ isinstancetupler rC_name_ __objclass__r'itemsr+rgetattrsetattrr__new_member__)r3r#r4r8 first_enumrMsave_newuse_argsmembersrZ invalid_names enum_classmethods member_namer.argsZ enum_memberZcanonical_memberZ class_methodZ obj_methodZ enum_method)r))r8rArrMXsx                       zEnumMeta.__new__cCsdS)z6 classes/types should always be True. Tr )rr r r__bool__szEnumMeta.__bool__Nmodulequalnametypec Cs>|dkr|j||S|j||d|d|d|S)aEither returns an existing member, or creates a new enum class. This method is used both when an enum class is given a value to match to an enumeration member (i.e. Color(3)) and for the functional API (i.e. Color = Enum('Color', names='red green blue')). When used for the functional API: `value` will be the name of the new class. `names` should be either a string of white-space/comma delimited names (values will start at 1), or an iterator/mapping of name, value pairs. `module` should be set to the module this class is being created in; if it is not set, an attempt to find that module will be made, but if it fails the class will not be picklable. `qualname` should be set to the actual location this class can be found at in its module; by default it is set to the global scope. If this is not correct, unpickling will fail in some circumstances. `type`, if set, will be mixed in as the first base class. Nrerfrg)rM_create_)r#r.namesrerfrgr r r__call__s zEnumMeta.__call__cCst||o|j|jkS)N)rTrVrO)r#memberr r r __contains__szEnumMeta.__contains__cs9||jkr%td|jntj|dS)Nz%s: cannot delete Enum member.)rOAttributeErrorr/r& __delattr__)r#attr)r)r rrnszEnumMeta.__delattr__cCsddddg|jS)Nr)r1 __members__r")rN)rr r r__dir__szEnumMeta.__dir__c CsRt|rt|ny|j|SWn!tk rMt|dYnXdS)a5Return the enum member matching `name` We use __getattr__ instead of descriptors or inserting into the enum class' __dict__ in order to support `name` and `value` being both properties for enum members (which live in the class' __dict__) and enum members themselves. N)rrmrOKeyError)r#rr r r __getattr__s  zEnumMeta.__getattr__cCs |j|S)N)rO)r#rr r r __getitem__szEnumMeta.__getitem__csfddjDS)Nc3s|]}j|VqdS)N)rO)r6r)r#r rrB sz$EnumMeta.__iter__..)rN)r#r )r#r__iter__ szEnumMeta.__iter__cCs t|jS)N)rrN)r#r r r__len__ szEnumMeta.__len__cCs t|jS)zReturns a mapping of member name->value. This mapping lists all enum members, including aliases. Note that this is a read-only view of the internal mapping. )rrO)r#r r rrpszEnumMeta.__members__cCs d|jS)Nz )r/)r#r r rrDszEnumMeta.__repr__cs fddtjDS)Nc3s|]}j|VqdS)N)rO)r6r)r#r rrBsz(EnumMeta.__reversed__..)reversedrN)r#r )r#r __reversed__szEnumMeta.__reversed__csG|jjdi}||kr0tdntj||dS)zBlock attempts to reassign Enum members. A simple assignment to the class namespace only changes one of the several possible ways to get an Enum member from the Enum class, resulting in an inconsistent Enumeration. rOzCannot reassign members.N)r?getrmr& __setattr__)r#rr.Z member_map)r)r rrz s zEnumMeta.__setattr__cCs|j}|dkr|fn ||f}|j||}t|trf|jddj}nt|ttfrt|dtrddt|dD}nxG|D]?} t| tr| || } } n | \} } | || value. Nr; rcSs"g|]\}}||fqSr r )r6ier r r As z%EnumMeta._create_..rrr/)r)r5rTstrreplacesplitrUlist enumeraterMsys _getframe f_globalsrmr*r$r"r0)r#Z class_namerirerfrgr3r4r8itemrbZ member_valuer`excr r rrh-s0 !(        zEnumMeta._create_cCs|sttfSd}}xA|D]9}|tk r!t|tr!|jr!tdq!q!Wt|ts|tdnt|dts|d}|d}nTxQ|djD]B}t|tr|dkr|}qq|dkr|}qqW||fS)zReturns the type for creating enum members, and the first inherited enum class. bases: the tuple of bases that was given to __new__ NzCannot extend enumerationszHnew enumerations must be created as `ClassName([mixin_type,] enum_type)`rrr)rRr issubclassrNr__mro__)r4rAr\baser r rrH\s(           zEnumMeta._get_mixins_c Cs|jdd}|dk }|dkrx~dD]j}xQ||fD]C}t||d}|ddjtjtjhkrD|}PqDqDW|dk r1Pq1q1Wtj}n|tjkrd}nd}|||fS)a Returns the __new__ to be used for creating the enum members. classdict: the class dictionary given to __new__ member_type: the data type whose __new__ will be used by default first_enum: enumeration to check for an overriding __new__ rMNr[FT)z__new_member__z__new__)ryrYrMrRr) r8rAr\rMr]methodZpossibletargetr^r r rrIs(       zEnumMeta._find_new_)r/r"r0r1 classmethodr5rMrdrjrlrnrqrsrtrurvpropertyrprDrxrzrh staticmethodrHrIr r )r)rr2Rs& l !         !/-r2c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ e ddZ e ddZ edddZdS)rzRGeneric enumeration. Derive from this class to define new enumerations. c Cst||kr|Sy||jkr3|j|SWn?tk rux*|jjD]}|j|krT|SqTWYnXtd||jfdS)Nz%r is not a valid %s)rgrQrrOvaluesrCr*r/)r#r.rkr r rrMs  z Enum.__new__cCsd|jj|j|jfS)Nz <%s.%s: %r>)r)r/rVrC)rr r rrDsz Enum.__repr__cCsd|jj|jfS)Nz%s.%s)r)r/rV)rr r rrEsz Enum.__str__cCs3dd|jjD}dddddg|S)NcSs6g|],}|jD]}|ddkr|qqS)rr)r?)r6r#r@r r rr~s  z Enum.__dir__..r)r1r"rr.)r)r:)rZadded_behaviorr r rrqs z Enum.__dir__cCsF|jtkr$t}t|}n|j}|j}|j||S)N)rPrRrrCrF)rZ format_specr#valr r rrFs   zEnum.__format__cCs t|jS)N)hashrV)rr r r__hash__sz Enum.__hash__cCs|j|jffS)N)r)rC)rrr r rr!szEnum.__reduce_ex__cCs|jS)zThe name of the Enum member.)rV)rr r rrsz Enum.namecCs|jS)zThe value of the Enum member.)rC)rr r rr.sz Enum.valueNcsttj|}|r(t|}n|}fdd|jD}|||d|}t|_|j|j|||<|S)z[ Create a new Enum subclass that replaces a collection of global constants cs+i|]!\}}|r||qSr r )r6rr.)filterr rr9s z!Enum._convert..re)varsrmodulesrX_reduce_ex_by_namer!updaterp)r#rrersourcemodule_globalsr_r )rr_converts   z Enum._convert)r/r"r0r1rMrDrErqrFrr!rrr.rrr r r rrs        metaclassc@seZdZdZdS)rz.Enum where members are also (and must be) intsN)r/r"r0r1r r r rr s cCs|jS)N)r)rrr r rr$srcCsg}xE|jjD]4\}}||jkr|j||jfqqW|rdjdd|D}td||fn|S)z?Class decorator for enumerations ensuring unique member values.z, cSs&g|]\}}d||fqS)z%s -> %sr )r6aliasrr r rr~/s zunique..z duplicate values found in %r: %s)rprXrr+rLr*)Z enumerationZ duplicatesrrkZ alias_detailsr r rr's)r collectionsrtypesrr__all__rrrr$dictr%rrgr2intrrrr r r rs     'gh lib64/python3.4/__pycache__/symtable.cpython-34.pyc000064400000026051152342604300015711 0ustar00 i f @sdZddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZddlZdddddgZd dZGd d d ZeZGd ddeZGd ddeZGdddeZGdddeZedkrddlZddlZeejdZej Z!WdQXee!ej"j#ejdddZ$xBe$j%D]1Z&e$j'e&Z(e)e(e(j*e(j+qWndS)z2Interface to the compiler's internal symbol tablesN)USE DEF_GLOBAL DEF_LOCAL DEF_PARAM DEF_IMPORT DEF_BOUNDOPT_IMPORT_STAR SCOPE_OFF SCOPE_MASKFREELOCALGLOBAL_IMPLICITGLOBAL_EXPLICITCELLsymtable SymbolTableClassFunctionSymbolcCs"tj|||}t||S)N) _symtabler_newSymbolTable)codefilenameZ compile_typetopr-/opt/alt/python34/lib64/python3.4/symtable.pyr sc@s4eZdZddZddZddZdS)SymbolTableFactorycCstj|_dS)N)weakrefWeakValueDictionary_SymbolTableFactory__memo)selfrrr__init__szSymbolTableFactory.__init__cCsK|jtjkrt||S|jtjkr>t||St||S)N)typer TYPE_FUNCTIONr TYPE_CLASSrr)r tablerrrrnews   zSymbolTableFactory.newcCsQ||f}|jj|d}|dkrM|j||}|j|z<{0}SymbolTable for {1} in {2}>) __class__rr+r.nameformatr/)r Zkindrrr__repr__,s   zSymbolTable.__repr__cCs||jjtjkrdS|jjtjkr2dS|jjtjkrKdS|jjdksxtdj|jjdS) NmoduleZfunctionclasszunexpected type: {0})r9r:r;)r.r"rZ TYPE_MODULEr#r$AssertionErrorr5)r rrrget_type9szSymbolTable.get_typecCs |jjS)N)r.id)r rrrget_idCszSymbolTable.get_idcCs |jjS)N)r.r4)r rrrget_nameFszSymbolTable.get_namecCs |jjS)N)r.lineno)r rrr get_linenoIszSymbolTable.get_linenocCs&t|jjtjko"|jj S)N)boolr.r"rr# optimized)r rrr is_optimizedLszSymbolTable.is_optimizedcCst|jjS)N)rCr.nested)r rrr is_nestedPszSymbolTable.is_nestedcCst|jjS)N)rCr.children)r rrr has_childrenSszSymbolTable.has_childrencCsdS)z7Return true if the scope uses exec. Deprecated method.Fr)r rrrhas_execVszSymbolTable.has_execcCst|jjt@S)z&Return true if the scope uses import *)rCr.rDr)r rrrhas_import_starZszSymbolTable.has_import_starcCs|jjjS)N)r.symbolskeys)r rrrget_identifiers^szSymbolTable.get_identifierscCsa|jj|}|dkr]|jj|}|j|}t|||}|j|js z+SymbolTable.get_symbols..)rN)r r)r r get_symbolsiszSymbolTable.get_symbolscs fddjjDS)Ncs1g|]'}|jkrt|jqSr)r4rr/)rSst)r4r rrrUms z0SymbolTable.__check_children..)r.rH)r r4r)r4r rZ__check_childrenlszSymbolTable.__check_childrencsfddjjDS)Ncs"g|]}t|jqSr)rr/)rSrW)r rrrUrs z,SymbolTable.get_children..)r.rH)r r)r r get_childrenqszSymbolTable.get_childrenN)r+r,r-r!r6r=r?r@rBrErGrIrJrKrNrRrVrOrXrrrrr%s              c@sdeZdZdZdZdZdZddZddZddZ dd Z d d Z dS) rNcs&tfddjDS)Ncs,g|]"}jj|r|qSr)r.rL)rSrT)r test_funcrrrUs z.Function.__idents_matching..)tuplerN)r rYr)r rYrZ__idents_matching~szFunction.__idents_matchingcCs1|jdkr*|jdd|_n|jS)NcSs|t@S)N)r)xrrrsz)Function.get_parameters..)_Function__params_Function__idents_matching)r rrrget_parametersszFunction.get_parameterscsI|jdkrBttffdd}|j||_n|jS)Ncs|t?t@kS)N)r r )r[)locsrrr\sz%Function.get_locals..)_Function__localsr rr^)r testr)r`r get_localss  zFunction.get_localscsI|jdkrBttffdd}|j||_n|jS)Ncs|t?t@kS)N)r r )r[)globrrr\sz&Function.get_globals..)_Function__globalsr rr^)r rbr)rdr get_globalss  zFunction.get_globalscCs7|jdkr0dd}|j||_n|jS)NcSs|t?t@tkS)N)r r r )r[rrrr\sz$Function.get_frees..)_Function__freesr^)r is_freerrr get_freess zFunction.get_frees) r+r,r-r]rargrer^r_rcrfrirrrrrvs     c@s"eZdZdZddZdS)rNcCsR|jdkrKi}x!|jjD]}d||j)r5rm)r rrrr6szSymbol.__repr__cCs|jS)N)rm)r rrrr@szSymbol.get_namecCst|jtj@S)N)rCrnrr)r rrr is_referencedszSymbol.is_referencedcCst|jt@S)N)rCrnr)r rrr is_parameterszSymbol.is_parametercCst|jttfkS)N)rCror r)r rrr is_globalszSymbol.is_globalcCst|jtkS)N)rCror)r rrris_declared_globalszSymbol.is_declared_globalcCst|jt@S)N)rCrnr)r rrris_localszSymbol.is_localcCst|jtkS)N)rCror )r rrrrhszSymbol.is_freecCst|jt@S)N)rCrnr)r rrr is_importedszSymbol.is_importedcCst|jt@S)N)rCrnr)r rrr is_assignedszSymbol.is_assignedcCs t|jS)aReturns true if name binding introduces new namespace. If the name is used as the target of a function or class statement, this will be true. Note that a single name can be bound to multiple objects. If is_namespace() is true, the name may also be bound to other objects, like an int or list, that does not introduce a new namespace. )rCrp)r rrr is_namespaces zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)rp)r rrrget_namespacesszSymbol.get_namespacescCs/t|jdkr$tdn|jdS)zReturns the single namespace bound to this name. Raises ValueError if the name is bound to multiple namespaces. r9z$name is bound to multiple namespacesr)lenrp ValueError)r rrr get_namespaceszSymbol.get_namespace)r+r,r-r!r6r@rqrrrsrtrurhrvrwrxryr|rrrrrs            __main__r9exec),__doc__rrrrrrrrr r r r r rrr__all__rrrobjectrrrrr+ossysopenargvfreadsrcpathsplitmodrNrTrRinfoprintrurxrrrrs& ^   Q& @ )lib64/python3.4/__pycache__/_osx_support.cpython-34.pyo000064400000024606152342604300016655 0ustar00 i fJ @sdZddlZddlZddlZddddgZd0Zd1ZdZdddZddZ ddZ da ddZ ddZ ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,dZd-dZd.dZd/dZdS)2zShared OS X support functions.Ncompiler_fixupcustomize_config_varscustomize_compilerget_platform_osxCFLAGSLDFLAGSCPPFLAGS BASECFLAGS BLDSHAREDLDSHAREDCCCXX PY_CFLAGS PY_LDFLAGS PY_CPPFLAGSPY_CORE_CFLAGSZ_OSX_SUPPORT_INITIAL_cCs|dkrtjd}n|jtj}tjj|\}}tjdkrn|dkrn|d}ntjj|sx9|D]1}tjj ||}tjj|r|SqWdS|SdS)zTries to find 'executable' in the directories listed in 'path'. A string listing directories separated by 'os.pathsep'; defaults to os.environ['PATH']. Returns the complete filename or None if not found. NPATHwin32z.exe) osenvironsplitpathseppathsplitextsysplatformisfilejoin) executablerpathsbaseZextpfr#1/opt/alt/python34/lib64/python3.4/_osx_support.py_find_executables   r%cCsddl}yddl}|j}Wn.tk rXtdtjfd}YnX|j|F}d||jf}tj |s|j j dj SdSWdQXdS)z0Output from successful command execution or NonerNz/tmp/_osx_support.%szw+bz%s 2>/dev/null >'%s'zutf-8) contextlibtempfileZNamedTemporaryFile ImportErroropenrgetpidclosingnamesystemreaddecodestrip)Z commandstringr&r'fpcmdr#r#r$ _read_output7s   r3cCs#t|p"td|fp"dS)z0Find a build tool on current path or using xcrunz/usr/bin/xcrun -find %s)r%r3)Ztoolnamer#r#r$_find_build_toolJs r5cCstdkrdaytd}Wntk r6YqXztjd|j}Wd|jX|dk rdj|jdj dddaqntS)z*Return the OS X system version as a stringNr4z0/System/Library/CoreServices/SystemVersion.plistz=ProductUserVisibleVersion\s*(.*?).) _SYSTEM_VERSIONr)OSErrorresearchr.closergroupr)r"mr#r#r$_get_system_versionSs     1r@cCs4x-t|D]}|jtr ||=q q WdS)z-Remove original unmodified values for testingN)list startswith_INITPRE) _config_varskr#r#r$_remove_original_valuesqsrFcCsM|j|d}||kr?t||kr?||t|sz-_supports_universal_builds..r6r4 F)rNrO)r@tupler ValueErrorbool)Z osx_versionr#r#r$_supports_universal_buildss & rScCsDdtjkr|S|djd}}t|sFtd}n^tjj|jdrtd|j ddf}|rd|krtd}qn|st d n||kr@xxt D]m}||kr|tjkr||j}|d kr|n|d |d/dev/nullrUz'"'"'z-arch\s+ppc\w*\srV) rrr;r<r-rXr]r^rI)rDZstatusrHr`r#r#r$_remove_unsupported_archss   rbcCsdtjkrtjd}xmtD]b}||kr#d||kr#||}tjdd|}|d|}t|||q#q#Wn|S)z2Allow override of all archs with ARCHFLAGS env var ARCHFLAGSz-archz -arch\s+\w+\srV)rrr]r;r^rI)rDZarchrHr`r#r#r$_override_all_archss   rdcCs|jdd}tjd|}|dk r|jd}tjj|sx^tD]S}||krX|tjkrX||}tj dd|}t |||qXqXWqn|S)z+Remove references to any SDKs not availablerr4z-isysroot\s+(\S+)Nr7z-isysroot\s+\S+(?:\s|$)rV) rGr;r<r>rrexistsr]rr^rI)rDcflagsr?ZsdkrHr`r#r#r$_check_for_unavailable_sdks    rgc Csd}}t|}ts,d}}nd|k}d|k}|sYdtjkrxAy$|jd}|||d=Wq\tk rPYq\Xq\Wndtjkr| r|tjdj}n|rxAy$|jd}|||d=Wqtk rPYqXqWnd}d|krI|jd}||d}n,d|kru|jd}||d}n|rtjj| rd d l m }|j d ||j d n|S) ae This function will strip '-isysroot PATH' and '-arch ARCH' from the compile flags if the user has specified one them in extra_compile_flags. This is needed because '-arch ARCH' adds another architecture to the build, without a way to remove an architecture. Furthermore GCC will barf if multiple '-isysroot' arguments are present. FTz-archz -isysrootrcr8Nr7r)logz4Compiling with an SDK that doesn't seem to exist: %sz$Please check your Xcode installation) rArSrrindexrQrrisdirZ distutilsrhwarn)Z compiler_soZcc_argsZ stripArchZ stripSysrootriZsysrootidxrhr#r#r$r0sF             cCs.tst|nt|t||S)aCustomize Python build configuration variables. Called internally from sysconfig with a mutable mapping containing name/value pairs parsed from the configured makefile used to build this interpreter. Returns the mapping updated as needed to reflect the environment in which the interpreter is running; in the case of a Python from a binary installer, the installed environment may be very different from the build environment, i.e. different OS levels, different built tools, different available CPU architectures. This customization is performed whenever distutils.sysconfig.get_config_vars() is first called. It may be used in environments where no compilers are present, i.e. when installing pure Python dists. Customization of compiler paths and detection of unavailable archs is deferred until the first extension module build is requested (in distutils.sysconfig.customize_compiler). Currently called from distutils.sysconfig )rSrardrg)rDr#r#r$rps     cCs"t|t|t||S)zCustomize compiler path and configuration variables. This customization is performed when the first extension module build is requested in distutils.sysconfig.customize_compiler). )r\rbrd)rDr#r#r$rs   c Cs |jdd}tp|}|p*|}|r|}d}|jtd|jdd}|ry0tdd|jddd D}Wqtk rd}YqXnd}|dkrd |jkrd }tjd|}tt t |}t |dkr(|d}q|dkr=d }q|d krRd}q|d!krgd}q|d"kr|d}q|d#krd}qtd|fq|dkrt j d$krd}qq|d%krt j d&krd}qd}qn|||fS)'z Filter values for get_platform()MACOSX_DEPLOYMENT_TARGETr4Zmacosxrcss|]}t|VqdS)N)rJ)rKrLr#r#r$rMsz#get_platform_osx..r6rr8rNrOz-archZfatz -arch\s+(\S+)r7i386ppcx86_64ZintelZfat3ppc64Zfat64Z universalz%Don't know machine value for archs=%r PowerPCPower_Macintosh)rNr)rNr)rNrO)rnro)rnrp)rnrorp)rqrp)rnrorqrpl)rsrtl)rGr@rCrPrrQr0r;findallsortedsetlenrmaxsize)rDosnamereleasemachineZmacverZ macreleaserfZarchsr#r#r$rsP   0                 ) zCFLAGSzLDFLAGSzCPPFLAGSz BASECFLAGS BLDSHAREDLDSHAREDCCCXXz PY_CFLAGSz PY_LDFLAGSz PY_CPPFLAGSzPY_CORE_CFLAGS)r}r~rr)__doc__rr;r__all__r]rZrCr%r3r5r9r@rFrIrSr\rarbrdrgrrrrr#r#r#r$s<           >  (   @ ) lib64/python3.4/__pycache__/glob.cpython-34.pyc000064400000005500152342604300015010 0ustar00 e f @sdZddlZddlZddlZddgZddZddZddZd d Zej d Z ej d Z d dZ ddZ ddZdS)zFilename globbing utility.NglobiglobcCstt|S)aReturn a list of paths matching a pathname pattern. The pattern may contain simple shell-style wildcards a la fnmatch. However, unlike fnmatch, filenames starting with a dot are special cases that are not matched by '*' and '?' patterns. )listr)pathnamer)/opt/alt/python34/lib64/python3.4/glob.pyr s ccstjj|\}}t|se|rGtjj|ra|Vqantjj|ra|VndS|std|DdHdS||krt|rt|}n |g}t|rt}nt}x<|D]4}x+|||D]}tjj ||VqWqWdS)aReturn an iterator which yields the paths matching a pathname pattern. The pattern may contain simple shell-style wildcards a la fnmatch. However, unlike fnmatch, filenames starting with a dot are special cases that are not matched by '*' and '?' patterns. N) ospathsplit has_magiclexistsisdirglob1rglob0join)rdirnamebasenamedirsZ glob_in_dirnamerrrrs(       c Cs|s6t|tr*ttjd}q6tj}nytj|}Wntk ragSYnXt|sdd|D}ntj||S)NASCIIcSs"g|]}t|s|qSr) _ishidden).0xrrr Hs zglob1..) isinstancebytesrcurdirlistdirOSErrorrfnmatchfilter)rpatternnamesrrrr=s    rcCsN|s"tjj|rJ|gSn(tjjtjj||rJ|gSgS)N)rr r r r)rrrrrrKs  !rz([*?[])s([*?[])cCs:t|tr!tj|}ntj|}|dk S)N)rrmagic_check_bytessearch magic_check)smatchrrrr Zsr cCs|ddkS)Nr...)r(r*r)r rrrrasrcCsVtjj|\}}t|tr<tjd|}ntjd|}||S)z#Escape all special characters. s[\1]z[\1])rr splitdriverrr#subr%)rZdriverrrescapeds r-)__doc__rrer__all__rrrrcompiler%r#r rr-rrrrs     )    lib64/python3.4/__pycache__/operator.cpython-34.pyo000064400000030752152342604300015743 0ustar00 h f#4@ssdZddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4g4Zd5d6lmZd7d%Zd8d"Zd9d Zd:d)Zd;d Z d<d Z d=d+Z d>d3Z d?dZ d@dZdAdZdBdZdCdZdDd ZdEdZdFdZeZdGd$ZdHd'ZdId(ZdJd*ZdKd,ZdLd-ZdMd.ZdNd/ZdOd1ZdPd2ZdQd4ZdRdZ dSdZ!dTdZ"dUdZ#dVd Z$dWdZ%dXd0Z&d5dYd#Z'GdZddZ(Gd[ddZ)Gd\d&d&Z*d]dZ+d^dZ,d_dZ-d`dZ.dadZ/dbdZ0dcdZ1dddZ2dedZ3dfdZ4dgdZ5dhd Z6did!Z7yd5djl8TWne9k r\YnXd5dkl8mZeZ:eZ;eZ<eZ=e Z>e Z?e Z@eZAeZBeZCeZDeZEeZFeZGeZHeZIeZJeZKeZLeZMeZNeZOeZPeZQeZRe ZSe!ZTe#ZUe$ZVe&ZWe+ZXe,ZYe-ZZe.Z[e/Z\e0Z]e1Z^e2Z_e3Z`e4Zae5Zbe6Zce7ZddlS)mas Operator Interface This module exports a set of functions corresponding to the intrinsic operators of Python. For example, operator.add(x, y) is equivalent to the expression x+y. The function names are those used for special methods; variants without leading and trailing '__' are also provided for convenience. This is the pure Python implementation of the module. absaddand_ attrgetterconcatcontainscountOfdelitemeqfloordivgegetitemgtiaddiandiconcat ifloordivilshiftimodimulindexindexOfinvinvertioripowirshiftis_is_notisub itemgetteritruedivixorle length_hintlshiftlt methodcallermodmulnenegnot_or_pospowrshiftsetitemsubtruedivtruthxor)rcCs ||kS)zSame as a < b.)abr6r6-/opt/alt/python34/lib64/python3.4/operator.pyr%scCs ||kS)zSame as a <= b.r6)r7r8r6r6r9r"scCs ||kS)zSame as a == b.r6)r7r8r6r6r9r #scCs ||kS)zSame as a != b.r6)r7r8r6r6r9r)'scCs ||kS)zSame as a >= b.r6)r7r8r6r6r9r +scCs ||kS)zSame as a > b.r6)r7r8r6r6r9r /scCs| S)zSame as not a.r6)r7r6r6r9r+5scCs|r dSdS)z*Return True if a is true, False otherwise.TFr6)r7r6r6r9r39scCs ||kS)zSame as a is b.r6)r7r8r6r6r9r=scCs ||k S)zSame as a is not b.r6)r7r8r6r6r9rAscCs t|S)zSame as abs(a).)_abs)r7r6r6r9rGscCs||S)zSame as a + b.r6)r7r8r6r6r9rKscCs||@S)zSame as a & b.r6)r7r8r6r6r9rOscCs||S)zSame as a // b.r6)r7r8r6r6r9r SscCs |jS)zSame as a.__index__().) __index__)r7r6r6r9rWscCs|S)z Same as ~a.r6)r7r6r6r9r[scCs||>S)zSame as a << b.r6)r7r8r6r6r9r$`scCs||S)zSame as a % b.r6)r7r8r6r6r9r'dscCs||S)zSame as a * b.r6)r7r8r6r6r9r(hscCs| S)z Same as -a.r6)r7r6r6r9r*lscCs||BS)zSame as a | b.r6)r7r8r6r6r9r,pscCs| S)z Same as +a.r6)r7r6r6r9r-tscCs||S)zSame as a ** b.r6)r7r8r6r6r9r.xscCs||?S)zSame as a >> b.r6)r7r8r6r6r9r/|scCs||S)zSame as a - b.r6)r7r8r6r6r9r1scCs||S)zSame as a / b.r6)r7r8r6r6r9r2scCs||AS)zSame as a ^ b.r6)r7r8r6r6r9r4scCs9t|ds1dt|j}t|n||S)z%Same as a + b, for a and b sequences. __getitem__z!'%s' object can't be concatenated)hasattrtype__name__ TypeError)r7r8msgr6r6r9rscCs ||kS)z(Same as b in a (note reversed operands).r6)r7r8r6r6r9rscCs4d}x'|D]}||kr |d7}q q W|S)z)Return the number of times b occurs in a.r5r6)r7r8countir6r6r9rs   cCs ||=dS)zSame as del a[b].Nr6)r7r8r6r6r9rscCs||S)z Same as a[b].r6)r7r8r6r6r9r scCs=x6t|D]\}}||kr |Sq WtddS)z!Return the first index of b in a.z$sequence.index(x): x not in sequenceN) enumerate ValueError)r7r8rDjr6r6r9rs cCs|||= 0. z/'%s' object cannot be interpreted as an integerz'__length_hint__ must be integer, not %sr5z$__length_hint__() should return >= 0) isinstanceintr>r?r@len__length_hint__AttributeErrorNotImplementedrF)objdefaultrAZhintvalr6r6r9r#s4        c@s.eZdZdZddZddZdS)raV Return a callable object that fetches the given attribute(s) from its operand. After f = attrgetter('name'), the call f(r) returns r.name. After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date). After h = attrgetter('name.first', 'name.last'), the call h(r) returns (r.name.first, r.name.last). cs|sQt|ts$tdn|jdfdd}||_n7ttt|f|fdd}||_dS)Nzattribute name must be a string.cs$xD]}t||}qW|S)N)getattr)rOname)namesr6r9funcs z!attrgetter.__init__..funccstfddDS)Nc3s|]}|VqdS)Nr6).0getter)rOr6r9 sz4attrgetter.__init__..func..)tuple)rO)getters)rOr9rVs)rIstrr@split_callrZmapr)selfattrZattrsrVr6)r[rUr9__init__s zattrgetter.__init__cCs |j|S)N)r^)r`rOr6r6r9__call__szattrgetter.__call__N)r? __module__ __qualname____doc__rbrcr6r6r6r9rs  c@s.eZdZdZddZddZdS)rz Return a callable object that fetches the given item(s) from its operand. After f = itemgetter(2), the call f(r) returns r[2]. After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3]) csPs$fdd}||_n(ffdd}||_dS)Ncs|S)Nr6)rO)itemr6r9rVsz!itemgetter.__init__..funccstfddDS)Nc3s|]}|VqdS)Nr6)rWrD)rOr6r9rYsz4itemgetter.__init__..func..)rZ)rO)items)rOr9rVs)r^)r`rgrhrVr6)rgrhr9rbs   zitemgetter.__init__cCs |j|S)N)r^)r`rOr6r6r9rc szitemgetter.__call__N)r?rdrerfrbrcr6r6r6r9rs  c@s.eZdZdZddZddZdS)r&z Return a callable object that calls the given method on its operand. After f = methodcaller('name'), the call f(r) returns r.name(). After g = methodcaller('name', 'date', foo=1), the call g(r) returns r.name('date', foo=1). cOs^t|dkr'd}t|n|d}|d|_|dd|_||_dS)Nz9methodcaller needs at least one argument, the method namer5rB)rKr@_name_args_kwargs)argskwargsrAr`r6r6r9rbs  zmethodcaller.__init__cCst||j|j|jS)N)rSrjrkrl)r`rOr6r6r9rcszmethodcaller.__call__N)r?rdrerfrbrcr6r6r6r9r& s  cCs||7}|S)zSame as a += b.r6)r7r8r6r6r9r#s cCs||M}|S)zSame as a &= b.r6)r7r8r6r6r9r(s cCs?t|ds1dt|j}t|n||7}|S)z&Same as a += b, for a and b sequences.r<z!'%s' object can't be concatenated)r=r>r?r@)r7r8rAr6r6r9r-s  cCs||}|S)zSame as a //= b.r6)r7r8r6r6r9r5s cCs||K}|S)zSame as a <<= b.r6)r7r8r6r6r9r:s cCs||;}|S)zSame as a %= b.r6)r7r8r6r6r9r?s cCs||9}|S)zSame as a *= b.r6)r7r8r6r6r9rDs cCs||O}|S)zSame as a |= b.r6)r7r8r6r6r9rIs cCs||C}|S)zSame as a **= b.r6)r7r8r6r6r9rNs cCs||L}|S)zSame as a >>= b.r6)r7r8r6r6r9rSs cCs||8}|S)zSame as a -= b.r6)r7r8r6r6r9rXs cCs||}|S)zSame as a /= b.r6)r7r8r6r6r9r ]s cCs||N}|S)zSame as a ^= b.r6)r7r8r6r6r9r!bs )*)rfN)erf__all__builtinsrr:r%r"r r)r r r+r3rrrrr rrrr$r'r(r*r,r-r.r/r1r2r4rrrrr rr0r#rrr&rrrrrrrrrrrr r! _operator ImportError__lt____le____eq____ne____ge____gt____not____abs____add____and__ __floordiv__r;__inv__ __invert__ __lshift____mod____mul____neg____or____pos____pow__ __rshift____sub__ __truediv____xor__ __concat__ __contains__ __delitem__r< __setitem____iadd____iand__ __iconcat__ __ifloordiv__ __ilshift____imod____imul____ior____ipow__ __irshift____isub__ __itruediv____ixor__r6r6r6r9 s                                  )              lib64/python3.4/__pycache__/cgi.cpython-34.pyc000064400000072203152342604300014633 0ustar00 i fe@sRdZdZddlmZmZmZddlmZddlZddl Z ddl Z ddl m Z ddlmZddlmZddlZddlZddlZd d d d d dddddddddgZdadaddZddZddZddZeadade jddd d Zddd!d Z ddd"d Z!d#dZ"d$d%Z#d&dZ$Gd'd d Z%Gd(d d Z&e jd)d*Z'ddddd+dZ(e jd,dZ)d-dZ*d.dZ+d/dZ,d0dZ-dd1dZ.d2d3Z/e0d4krNe'ndS)5zSupport module for CGI (Common Gateway Interface) scripts. This module defines a number of utilities for use by CGI scripts written in Python. z2.6)StringIOBytesIO TextIOWrapper)MappingN) FeedParser)Message)warnMiniFieldStorage FieldStorageparseparse_qs parse_qslparse_multipart parse_headerprint_exception print_environ print_formprint_directoryprint_argumentsprint_environ_usageescapec Gs[tr8t r8yttdaWq8tk r4Yq8XntsGtantat|dS)aWrite a log message, if there is a log file. Even though this function is called initlog(), you should always use log(); log is a variable that is set either to initlog (initially), to dolog (once the log file has been opened), or to nolog (when logging is disabled). The first argument is a format string; the remaining arguments (if any) are arguments to the % operator, so e.g. log("%s: %s", "a", "b") will write "a: b" to the log file, followed by a newline. If the global logfp is not None, it should be a file object to which log data is written. If the global logfp is None, the global logfile may be a string giving a filename to open, in append mode. This file should be world writable!!! If the file can't be opened, logging is silently disabled (since there is no safe place where we could send an error message). aN)logfilelogfpopenOSErrornologlogdolog)allargsr!(/opt/alt/python34/lib64/python3.4/cgi.pyinitlog:s   r#cGstj||ddS)z=Write a log message to the log file. See initlog() for docs. N)rwrite)Zfmtargsr!r!r"r]srcGsdS)z9Dummy function, assigned to log when logging is disabled.Nr!)r r!r!r"rasrcCs)datrtjdantadS)zClose the log file.rN)rrcloser#rr!r!r!r"closeloges   r(c Cs|dkrtj}nt|dr3|j}nd}t|trT|j}nd|krmd|drCZhttprIZnextpartZlastpartZpartdictZ terminatorbytesdataheadersrDlineslinekeyZparamsrJr!r!r"rs|                   ccsx|dddkr|dd}|jd}xR|dkr|jdd||jdd|dr|jd|d}q;W|dkrt|}n|d|}|jV||d}qWdS)Nr1;r"z\"rF)findcountlenstrip)sendfr!r!r" _parseparam-s;  rccCstd|}|j}i}x|D]}|jd}|dkr)|d|jj}||ddj}t|dkr|d|d kodknr|dd }|jdd jd d}n|||| d krNdi}} n d i}} ||_| |_"d| kr| dj|j|_#n d|_#d}d|jkryt$|jd}Wnt%k rYnXt&r|t&krt%dqn||_'|jdkr-|r-||_nd|_(|_)d|_*|d kr_|j+n6|dddkr|j,|||n |j-dS)aConstructor. Read multipart/* until last part. Arguments, all optional: fp : file pointer; default: sys.stdin.buffer (not used when the request method is GET) Can be : 1. a TextIOWrapper object 2. an object whose read() and readline() methods return bytes headers : header dictionary-like object; default: taken from environ as per CGI spec outerboundary : terminating multipart boundary (for internal use only) environ : environment dictionary; default: os.environ keep_blank_values: flag indicating whether blank values in percent-encoded forms should be treated as blank strings. A true value indicates that blanks should be retained as blank strings. The default false value indicates that blank values are to be ignored and treated as if they were not included. strict_parsing: flag indicating what to do with parsing errors. If false (the default), errors are silently ignored. If true, errors raise a ValueError exception. limit : used internally to read parts of multipart/form-data forms, to exit from the reading loop when reached. It is the difference between the form content-length and the number of bytes already read encoding, errors : the encoding and error handler used to decode the binary stream to strings. Must be the same as the charset defined for the page sending the form (content-type : meta http-equiv or header) r+r*NZHEADr/r1rsurrogateescapez!application/x-www-form-urlencodedz content-typer,r-r.zcontent-lengthz?headers must be mapping or an instance of email.message.Messager:rOzfp must be file pointerz#outerboundary must be bytes, not %srzcontent-dispositionrJrtz text/plainrIrHzMaximum content length exceeded z multipart/rK).r@rAupper qs_on_postr2r<encodelocalegetpreferredencodingrr5rr TypeErrorrVr3r6r>rr4r)errorsrTrvrp outerboundary bytes_readlimitrryrzrJrt _binary_filerx innerboundaryr7r9r8lengthrurwdoneread_urlencoded read_multi read_single)rmr>rVrr?r@rArr)rmethodrEZcdisprCrBZclenr!r!r"rns+                                        zFieldStorage.__init__c Cs*y|jjWntk r%YnXdS)N)rwr'AttributeError)rmr!r!r"__del__3s zFieldStorage.__del__cCsd|j|j|jfS)z"Return a printable representation.zFieldStorage(%r, %r, %r))rJrtrl)rmr!r!r"ro9szFieldStorage.__repr__cCst|jS)N)iterkeys)rmr!r!r"__iter__>szFieldStorage.__iter__cCs{|dkrt|n|jrV|jjd|jj}|jjdn!|jdk rq|j}nd}|S)Nrlr)rrwseekr:ru)rmrJrlr!r!r" __getattr__As   zFieldStorage.__getattr__cCs|jdkrtdng}x0|jD]%}|j|kr.|j|q.q.W|slt|nt|dkr|dS|SdS)zDictionary style indexing.Nz not indexabler1r)rurrJrRKeyErrorr^)rmrYfounditemr!r!r" __getitem__NszFieldStorage.__getitem__cCsH||kr@||}t|tr6dd|DS|jSn|SdS)z8Dictionary style get() method, including 'value' lookup.cSsg|]}|jqSr!)rl).0xr!r!r" as z)FieldStorage.getvalue..N)r5rurl)rmrYdefaultrlr!r!r"getvalue\s    zFieldStorage.getvaluecCsB||kr:||}t|tr0|djS|jSn|SdS)z! Return the first value received.rN)r5rurl)rmrYrrlr!r!r"getfirstgs     zFieldStorage.getfirstcCsK||krC||}t|tr6dd|DS|jgSngSdS)z Return list of received values.cSsg|]}|jqSr!)rl)rrr!r!r"rws z(FieldStorage.getlist..N)r5rurl)rmrYrlr!r!r"getlistrs    zFieldStorage.getlistcCs>|jdkrtdnttdd|jDS)zDictionary style keys() method.Nz not indexablecss|]}|jVqdS)N)rJ)rrr!r!r" sz$FieldStorage.keys..)rurset)rmr!r!r"r}szFieldStorage.keyscs>|jdkrtdntfdd|jDS)z%Dictionary style __contains__ method.Nz not indexablec3s|]}|jkVqdS)N)rJ)rr)rYr!r"rsz,FieldStorage.__contains__..)rurany)rmrYr!)rYr" __contains__szFieldStorage.__contains__cCst|jS)z Dictionary style len(x) support.)r^r)rmr!r!r"__len__szFieldStorage.__len__cCs+|jdkrtdnt|jS)NzCannot be converted to bool.)rurbool)rmr!r!r"__bool__szFieldStorage.__bool__cCs|jj|j}t|tsItd|jt|jfn|j|j |j }|j r~|d|j 7}ng|_ t jj||j|jd|j d|j }x-|D]%\}}|j jt||qW|jdS)z+Internal: read data in query string format.z%s should return bytes, got %sr0r)rN)r>r:rr5rTr9rvrpr;r)rr~rur=r r r@rArRr skip_lines)rmrEqueryrYrlr!r!r"rs   zFieldStorage.read_urlencodedc Cs|j}t|s+td|fng|_|jrtjj|j|j|j d|j d|j }x0|D]%\}}|jj t ||qwWn|jp|j}|jj} t| tstd|jt| jfn|jt| 7_xG| jd|jkrV| rV|jj} |jt| 7_qWx+t} d} x-|jj} | | 7} | jslPqlqlW| sPn|jt| 7_| j| j|j |j | j} d| kr| d=n||j| |||||j|j|j |j }|j|j7_|jj ||js}|j|jkoxdknrZPqZqZW|j d S) z/Internal: read a part that is itself multipart.z&Invalid boundary in multipart form: %rr)rz%s should return bytes, got %ss--rHzcontent-lengthrN)!rrMr9rur~r=r r r@rAr)rrRr FieldStorageClass __class__r>rOr5rTrvrprr^r_rZfeedr;r'rrrr)rmr?r@rAZibrrYrlklassZ first_lineparserZhdr_textrUrVpartr!r!r"rsV            +zFieldStorage.read_multicCsD|jdkr&|j|jn |j|jjddS)zInternal: read an atomic part.rN)r read_binaryr read_linesrwr)rmr!r!r"rs    zFieldStorage.read_singleicCs|j|_|j}|dkrx|dkr|jjt||j}t|tst d|jt |j fn|j t |7_ |sd|_Pn|jj||t |}q'WndS)zInternal: read binary data.rz%s should return bytes, got %sr1NrK) make_filerwrr>r:minbufsizer5rTr9rvrprr^rr%)rmZtodorUr!r!r"rs   zFieldStorage.read_binarycCsV|jrt|_|_nt|_|_|jrH|jn |jdS)z0Internal: read lines until EOF or outerboundary.N)rrrw_FieldStorage__filerrread_lines_to_outerboundaryread_lines_to_eof)rmr!r!r"rs    zFieldStorage.read_linescCs|jdk rk|jjt|dkrk|j|_|jj}|jj|d|_qkn|jr|jj|n"|jj|j|j |j dS)z line is always bytes, not stringNi) rtellr^rrwrr%rr;r)r)rmrXrUr!r!r"Z__writes zFieldStorage.__writecCsRxK|jjd}|jt|7_|s=d|_Pn|j|qWdS)zInternal: read lines until EOF.r1NirK)r>rOrr^r_FieldStorage__write)rmrXr!r!r"rs zFieldStorage.read_lines_to_eofc Csd|j}|d}d}d}d}xz||jkr?Pn|jjd }|jt|7_|t|7}|sd|_Pn|dkr||}d}n|jdr|r|j}||krPn||krd|_Pqn|}|j dr)d}|d d}d}nh|j d rWd }|d d}d}n:|j drd}|d d}d }n d}d }|j ||q,Wd S)zInternal: read lines until outerboundary. Data is read as bytes: boundaries and line ends must be converted to bytes for comparisons. s--rHTrr1rs s NrFs FirKrLrKrK) rrr>rOrr^rrPrQendswithr) rm next_boundary last_boundaryZdelimlast_line_lfendZ_readrX strippedlineZodelimr!r!r"rsP             z(FieldStorage.read_lines_to_outerboundarycCs|j s|jrdSd|j}|d}d}x|jjd}|jt|7_|sqd|_Pn|jdr|r|j}||krPn||krd|_Pqn|jd}q7WdS) z5Internal: skip lines until outer boundary if defined.Ns--Tr1rs irK)rrr>rOrr^rr_)rmrrrrXrr!r!r"rLs&       zFieldStorage.skip_linescCs6|jrtjdStjdd|jddSdS)aOverridable: return a readable & writable file. The file will be used as follows: - data is written to it - seek(0) - data is read from it The file is opened in binary mode for files, in text mode for other fields This version opens a temporary file for reading and writing, and immediately deletes (unlinks) it. The trick (on Unix!) is that the file can still be used, but it can't be opened by another process, and it will automatically be deleted when it is closed or when the current process terminates. If you want a more permanent file, you derive a class which overrides this method. If you want a visible temporary file that is nevertheless automatically deleted when the script terminates, try defining a __del__ method in a derived class which unlinks the temporary files you have created. zwb+zw+r)newliner$N)rtempfileZ TemporaryFiler))rmr!r!r"rbs   zFieldStorage.make_filei )rprqrrrsosr?rnrrorrrrrrrrrrrrrrrrrrrrrrr!r!r!r"r js8 *             6    1 cCstdttjt_ybt}ttt|t|t dd}|dd}td|Wnt YnXtdda y/t}ttt|t|Wnt YnXd S) zRobust test CGI script, usable as main program. Write minimal HTTP headers and dump all information provided to the script in HTML form. zContent-type: text/htmlcSstddS)Nz,testing print_exception() -- italics?)execr!r!r!r"rbsztest..fcSs |dS)Nr!)rbr!r!r"gsztest..gz9

    What follows is a test, not an actual exception:

    z*

    Second try with a small maxlen...

    2N) printr2stdoutstderrr rrrrrrr8)r?formrbrr!r!r"tests4            rcCs|dkr$tj\}}}nddl}ttd|j|||j||}tdtjdj|ddtj|df~dS)Nrz+

    Traceback (most recent call last):

    z
    %s%s
    rr1rKrK) r2exc_info tracebackr format_tbformat_exception_onlyhtmlrrS)rvrltbrrrur!r!r"rs   cCs|t|j}ttdtdx7|D]/}tdtj|dtj||q4WtdtdS)z#Dump the shell environment as HTML.z

    Shell Environment:

    z
    z
    z
    z
    N)sortedrrrr)r?rrYr!r!r"rs   - cCst|j}ttd|s6tdntdx}|D]u}tdtj|ddd||}tdtjtt|d td tjt|qGWtd td S) z$Dump the contents of a form as HTML.z

    Form Contents:

    z

    No form fields.z

    z
    :ra zzz
    z
    N)rrrrrreprrv)rrrYrlr!r!r"rs    ! '! cCsttdytj}WnAtk rd}z!tdtjt|WYdd}~XnXttj|tdS)z#Dump the current directory as HTML.z#

    Current Working Directory:

    zOSError:N)rrgetcwdrrrstr)pwdmsgr!r!r"rs /cCs0ttdtttjtdS)Nz

    Command Line Arguments:

    )rr2r<r!r!r!r"rs   cCstddS)z9Dump a list of environment variables used by CGI as HTML.a

    These environment variables could have been set:

    • AUTH_TYPE
    • CONTENT_LENGTH
    • CONTENT_TYPE
    • DATE_GMT
    • DATE_LOCAL
    • DOCUMENT_NAME
    • DOCUMENT_ROOT
    • DOCUMENT_URI
    • GATEWAY_INTERFACE
    • LAST_MODIFIED
    • PATH
    • PATH_INFO
    • PATH_TRANSLATED
    • QUERY_STRING
    • REMOTE_ADDR
    • REMOTE_HOST
    • REMOTE_IDENT
    • REMOTE_USER
    • REQUEST_METHOD
    • SCRIPT_NAME
    • SERVER_NAME
    • SERVER_PORT
    • SERVER_PROTOCOL
    • SERVER_ROOT
    • SERVER_SOFTWARE
    In addition, HTTP headers sent by the server may be passed in the environment as well. Here are some common variable names:
    • HTTP_ACCEPT
    • HTTP_CONNECTION
    • HTTP_HOST
    • HTTP_PRAGMA
    • HTTP_REFERER
    • HTTP_USER_AGENT
    N)rr!r!r!r"rs'cCshtdtdd|jdd}|jdd}|jdd }|rd|jd d }n|S) zDeprecated API.z1cgi.escape is deprecated, use html.escape instead stacklevelrFr0z&z>r[z")rrGrh)r`Zquoter!r!r"rs cCs:ddl}t|tr$d}nd}|j||S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer5rTmatch)r`rZ _vb_patternr!r!r"rM"s   rM__main__)1rs __version__iorrr collectionsrr2rZ urllib.parser=Z email.parserrZ email.messagerwarningsrrrr__all__rrr#rrr(rr8r?r r r rrcrr r rrrrrrrrrMrpr!r!r!r"s\            #   E d '   / lib64/python3.4/__pycache__/__phello__.foo.cpython-34.pyo000064400000000206152342604300016740 0ustar00 i f@@sdS)Nrrr3/opt/alt/python34/lib64/python3.4/__phello__.foo.pyslib64/python3.4/__pycache__/imp.cpython-34.pyc000064400000023213152342604300014653 0ustar00 e f' @sFdZddlmZmZmZmZmZmZmZm Z m Z m Z yddlm Z Wne k rzdZ YnXddlmZmZmZddlmZddlmZddlZddlZddlZddlZddlZddlZejdedZd Zd Zd Zd Z d Z!dZ"dZ#dZ$dZ%ddZ&ddZ'ddZ(dddZ)ddZ*ddZ+GdddZ,Gd d!d!Z-Gd"d#d#e-ej.Z/dd$d%Z0Gd&d'd'e-eZ1dd(d)Z2d*d+Z3d,d-Z4dd.d/Z5d0d1Z6dS)2zThis module provides the components needed to build your own __import__ function. Undocumented functions are obsolete. In most cases it is preferred you consider using the importlib module's functionality over this module. ) lock_held acquire_lock release_lockget_frozen_objectis_frozen_package init_builtin init_frozen is_builtin is_frozen_fix_co_filename) load_dynamicN)SourcelessFileLoader_ERR_MSG _SpecMethods) machinery)utilzhthe imp module is deprecated in favour of importlib; see the module's documentation for alternative uses cCs tj|S)z_**DEPRECATED** Create a new module. The module is not entered into sys.modules. )types ModuleType)namer(/opt/alt/python34/lib64/python3.4/imp.py new_module/sr cCstjS)zH**DEPRECATED** Return the magic number for .pyc or .pyo files. )r MAGIC_NUMBERrrrr get_magic:sr"cCs tjjS)z,Return the magic tag for .pyc or .pyo files.)sysimplementation cache_tagrrrrget_tagBsr&cCstj||S)a**DEPRECATED** Given the path to a .py file, return the path to its .pyc/.pyo file. The .py file does not need to exist; this simply returns the path to the .pyc/.pyo file calculated as if the .py file were imported. The extension will be .pyc unless sys.flags.optimize is non-zero, then it will be .pyo. If debug_override is not None, then it must be a boolean and is used in place of sys.flags.optimize. If sys.implementation.cache_tag is None then NotImplementedError is raised. )rcache_from_source)pathdebug_overriderrrr'Gsr'cCs tj|S)a**DEPRECATED** Given the path to a .pyc./.pyo file, return the path to its .py file. The .pyc/.pyo file does not need to exist; this simply returns the path to the .py file calculated to correspond to the .pyc/.pyo file. If path does not conform to PEP 3147 format, ValueError will be raised. If sys.implementation.cache_tag is None then NotImplementedError is raised. )rsource_from_cache)r(rrrr*Ys r*cCsNddtjD}ddtjD}ddtjD}|||S)z**DEPRECATED**cSsg|]}|dtfqS)rb) C_EXTENSION).0srrr is z get_suffixes..cSsg|]}|dtfqS)r) PY_SOURCE)r-r.rrrr/js cSsg|]}|dtfqS)r+) PY_COMPILED)r-r.rrrr/ks )rEXTENSION_SUFFIXESSOURCE_SUFFIXESBYTECODE_SUFFIXES) extensionssourcebytecoderrr get_suffixesgsr9c@s.eZdZdZddZddZdS) NullImporterz-**DEPRECATED** Null import object. cCsL|dkr!tdddn'tjj|rHtdd|ndS)Nzempty pathnamer(zexisting directory) ImportErrorosr(isdir)selfr(rrr__init__xs zNullImporter.__init__cCsdS)zAlways returns None.Nr)r?fullnamerrr find_module~szNullImporter.find_moduleN)__name__ __module__ __qualname____doc__r@rBrrrrr:ps  r:cs=eZdZdZdfddZfddZS)_HackedGetDatazMCompatibility support for 'file' arguments of various load_*() functions.Ncs tj||||_dS)N)superr@file)r?rAr(rI) __class__rrr@sz_HackedGetData.__init__csw|jrc||jkrc|jjs0|j}nt|jd|_}||jSWdQXntj|SdS)z;Gross hack to contort loader to deal w/ load_*()'s bad API.r0N)rIr(closedopenreadrHget_data)r?r(rI)rJrrrNs  z_HackedGetData.get_data)rCrDrErFr@rNrr)rJrrGs rGc@seZdZdZdS)_LoadSourceCompatibilityz5Compatibility support for implementing load_source().N)rCrDrErFrrrrrOs rOcCst|||}tj||d|}t|}|tjkr^|jtj|}n |j}tj |||_ |j |j _ |S)Nloader) rOrspec_from_file_locationrr#modulesexecloadrSourceFileLoader __loader____spec__rP)rpathnamerIrPspecmethodsmodulerrr load_sources  r\c@seZdZdZdS)_LoadCompiledCompatibilityz7Compatibility support for implementing load_compiled().N)rCrDrErFrrrrr]s r]cCst|||}tj||d|}t|}|tjkr^|jtj|}n |j}t|||_ |j |j _ |S)z**DEPRECATED**rP) r]rrQrr#rRrSrTr rVrWrP)rrXrIrPrYrZr[rrr load_compileds  r^cCstjj|rtjddtjdd}xU|D]5}tjj|d|}tjj|r=Pq=q=Wtdj |nt j ||dg}t |}|t jkr|jt j|S|jSdS)z**DEPRECATED**Nr@z{!r} is not a packagesubmodule_search_locations)r=r(r>rr4r5joinexists ValueErrorformatrrQrr#rRrSrT)rr(r6 extensionrYrZrrr load_packages   rec Cs|\}}}|rI|jd  s1d|krItdj|n?|dkr|tthkrdj|}t|n|tkrt|||S|tkrt|||S|tkrtdk r|dkr t |d}t|||SWdQXqt|||Sni|t kr8t ||S|t krNt |S|tkrdt|Sdj||}t|d |dS) z**DEPRECATED** Load a module, given information returned by find_module(). The module name must include the full package name, if any. r0U+zinvalid file open mode {!r}Nz.file object required for import (type code {})r+z*Don't know how to import {} (type code {})r)r0rf) startswithrbrcr1r2r\r^r,r rL PKG_DIRECTORYre C_BUILTINr PY_FROZENrr<) rrIfilenameZdetailssuffixmodetype_msgZ opened_filerrr load_modules."         rqc Cs,t|ts-tdjt|n9t|tdtfsftdjt|n|dkrt|rddddtffSt |rddddt ffSt j }nx|D]}t j j||}xbdtjdgD]M}d|}t j j||}t j j|rd|ddtffSqWxRtD]D\}}}||} t j j|| }t j j|rSPqSqSWqPqWttj|d|d} d |krt|d } tj| jd} WdQXnt||d | } | ||||ffS) a,**DEPRECATED** Search for a module. If path is omitted or None, search for a built-in, frozen or special module and continue search in sys.path. The module name cannot contain '.'; to search for a submodule of a package, pass the submodule name and the package's __path__. z'name' must be a str, not {}Nz%'list' must be None or a list, not {}r;z.pyrr@rbr+encoding) isinstancestr TypeErrorrctypelist RuntimeErrorr rjr rkr#r(r=r`rr5isfilerir9r<rrLtokenizedetect_encodingreadline) rr(entryZpackage_directoryrmZpackage_file_nameZ file_pathrnro file_namersrIrrrrBs@          rBcCs tj|S)zw**DEPRECATED** Reload the module and return it. The module must have been successfully imported before. ) importlibreload)r[rrrr3sr)7rF_imprrrrrrrr r r r r<Zimportlib._bootstrapr rrrrrr=r#r{rwarningswarnPendingDeprecationWarningZ SEARCH_ERRORr1r2r,Z PY_RESOURCErirjrkZPY_CODERESOURCEZIMP_HOOKr r"r&r'r*r9r:rGrUrOr\r]r^rerqrBrrrrrsTF               #4lib64/python3.4/__pycache__/_sitebuiltins.cpython-34.pyo000064400000007135152342604300016764 0ustar00 f f+ @sXdZddlZGdddeZGdddeZGdddeZdS) z= The objects used by the site module to add custom builtins. Nc@s7eZdZddZddZdddZdS)QuittercCs||_||_dS)N)nameeof)selfrrr2/opt/alt/python34/lib64/python3.4/_sitebuiltins.py__init__s zQuitter.__init__cCsd|j|jfS)NzUse %s() or %s to exit)rr)rrrr__repr__szQuitter.__repr__Nc Cs,ytjjWnYnXt|dS)N)sysstdinclose SystemExit)rcoderrr__call__s zQuitter.__call__)__name__ __module__ __qualname__rr rrrrrr s   rc@sReZdZdZdZffddZddZddZd d Zd S) _Printerzninteractive prompt objects for printing the license text, a list of contributors and the copyright notice.csJddl||_||_d|_fdd|D|_dS)Nrcs2g|](}D]}jj||qqSr)pathjoin).0dirfilename)filesosrr (s z%_Printer.__init__..)r_Printer__name_Printer__data_Printer__lines_Printer__filenames)rrdatardirsr)rrrr#s     z_Printer.__init__cCs|jr dSd}xO|jD]D}y)t|d}|j}WdQXPWqtk r`YqXqW|sw|j}n|jd|_t|j|_dS)Nr ) rr openreadOSErrorrsplitlen_Printer__linecnt)rr!rfprrr__setup,s    z_Printer.__setupcCsH|jt|j|jkr2dj|jSd|jfdSdS)Nr$z!Type %s() to see the full %s text)_Printer__setupr)rMAXLINESrr)rrrrr <s z_Printer.__repr__c Cs|jd}d}xy6x/t|||jD]}t|j|q3WWntk rdPYqX||j7}d}x1|dkrt|}|dkr{d}q{q{W|dkrPqqWdS)Nz0Hit Return for more, or q (and Return) to quit: rq)r0r1)r.ranger/printr IndexErrorinput)rpromptlinenoikeyrrrrCs"       z_Printer.__call__N) rrr__doc__r/rr.r rrrrrrs   rc@s.eZdZdZddZddZdS)_Helpera3Define the builtin 'help'. This is a wrapper around pydoc.help that provides a helpful message when 'help' is typed at the Python interactive prompt. Calling help() at the Python prompt starts an interactive help session. Calling help(thing) prints help for the python object 'thing'. cCsdS)NzHType help() for interactive help, or help(object) for help about object.r)rrrrr bsz_Helper.__repr__cOsddl}|j||S)Nr)pydochelp)rargskwdsr<rrrres z_Helper.__call__N)rrrr:r rrrrrr;Xs  r;)r:r objectrrr;rrrrs ;lib64/python3.4/__pycache__/_osx_support.cpython-34.pyc000064400000024606152342604300016641 0ustar00 i fJ @sdZddlZddlZddlZddddgZd0Zd1ZdZdddZddZ ddZ da ddZ ddZ ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,dZd-dZd.dZd/dZdS)2zShared OS X support functions.Ncompiler_fixupcustomize_config_varscustomize_compilerget_platform_osxCFLAGSLDFLAGSCPPFLAGS BASECFLAGS BLDSHAREDLDSHAREDCCCXX PY_CFLAGS PY_LDFLAGS PY_CPPFLAGSPY_CORE_CFLAGSZ_OSX_SUPPORT_INITIAL_cCs|dkrtjd}n|jtj}tjj|\}}tjdkrn|dkrn|d}ntjj|sx9|D]1}tjj ||}tjj|r|SqWdS|SdS)zTries to find 'executable' in the directories listed in 'path'. A string listing directories separated by 'os.pathsep'; defaults to os.environ['PATH']. Returns the complete filename or None if not found. NPATHwin32z.exe) osenvironsplitpathseppathsplitextsysplatformisfilejoin) executablerpathsbaseZextpfr#1/opt/alt/python34/lib64/python3.4/_osx_support.py_find_executables   r%cCsddl}yddl}|j}Wn.tk rXtdtjfd}YnX|j|F}d||jf}tj |s|j j dj SdSWdQXdS)z0Output from successful command execution or NonerNz/tmp/_osx_support.%szw+bz%s 2>/dev/null >'%s'zutf-8) contextlibtempfileZNamedTemporaryFile ImportErroropenrgetpidclosingnamesystemreaddecodestrip)Z commandstringr&r'fpcmdr#r#r$ _read_output7s   r3cCs#t|p"td|fp"dS)z0Find a build tool on current path or using xcrunz/usr/bin/xcrun -find %s)r%r3)Ztoolnamer#r#r$_find_build_toolJs r5cCstdkrdaytd}Wntk r6YqXztjd|j}Wd|jX|dk rdj|jdj dddaqntS)z*Return the OS X system version as a stringNr4z0/System/Library/CoreServices/SystemVersion.plistz=ProductUserVisibleVersion\s*(.*?).) _SYSTEM_VERSIONr)OSErrorresearchr.closergroupr)r"mr#r#r$_get_system_versionSs     1r@cCs4x-t|D]}|jtr ||=q q WdS)z-Remove original unmodified values for testingN)list startswith_INITPRE) _config_varskr#r#r$_remove_original_valuesqsrFcCsM|j|d}||kr?t||kr?||t|sz-_supports_universal_builds..r6r4 F)rNrO)r@tupler ValueErrorbool)Z osx_versionr#r#r$_supports_universal_buildss & rScCsDdtjkr|S|djd}}t|sFtd}n^tjj|jdrtd|j ddf}|rd|krtd}qn|st d n||kr@xxt D]m}||kr|tjkr||j}|d kr|n|d |d/dev/nullrUz'"'"'z-arch\s+ppc\w*\srV) rrr;r<r-rXr]r^rI)rDZstatusrHr`r#r#r$_remove_unsupported_archss   rbcCsdtjkrtjd}xmtD]b}||kr#d||kr#||}tjdd|}|d|}t|||q#q#Wn|S)z2Allow override of all archs with ARCHFLAGS env var ARCHFLAGSz-archz -arch\s+\w+\srV)rrr]r;r^rI)rDZarchrHr`r#r#r$_override_all_archss   rdcCs|jdd}tjd|}|dk r|jd}tjj|sx^tD]S}||krX|tjkrX||}tj dd|}t |||qXqXWqn|S)z+Remove references to any SDKs not availablerr4z-isysroot\s+(\S+)Nr7z-isysroot\s+\S+(?:\s|$)rV) rGr;r<r>rrexistsr]rr^rI)rDcflagsr?ZsdkrHr`r#r#r$_check_for_unavailable_sdks    rgc Csd}}t|}ts,d}}nd|k}d|k}|sYdtjkrxAy$|jd}|||d=Wq\tk rPYq\Xq\Wndtjkr| r|tjdj}n|rxAy$|jd}|||d=Wqtk rPYqXqWnd}d|krI|jd}||d}n,d|kru|jd}||d}n|rtjj| rd d l m }|j d ||j d n|S) ae This function will strip '-isysroot PATH' and '-arch ARCH' from the compile flags if the user has specified one them in extra_compile_flags. This is needed because '-arch ARCH' adds another architecture to the build, without a way to remove an architecture. Furthermore GCC will barf if multiple '-isysroot' arguments are present. FTz-archz -isysrootrcr8Nr7r)logz4Compiling with an SDK that doesn't seem to exist: %sz$Please check your Xcode installation) rArSrrindexrQrrisdirZ distutilsrhwarn)Z compiler_soZcc_argsZ stripArchZ stripSysrootriZsysrootidxrhr#r#r$r0sF             cCs.tst|nt|t||S)aCustomize Python build configuration variables. Called internally from sysconfig with a mutable mapping containing name/value pairs parsed from the configured makefile used to build this interpreter. Returns the mapping updated as needed to reflect the environment in which the interpreter is running; in the case of a Python from a binary installer, the installed environment may be very different from the build environment, i.e. different OS levels, different built tools, different available CPU architectures. This customization is performed whenever distutils.sysconfig.get_config_vars() is first called. It may be used in environments where no compilers are present, i.e. when installing pure Python dists. Customization of compiler paths and detection of unavailable archs is deferred until the first extension module build is requested (in distutils.sysconfig.customize_compiler). Currently called from distutils.sysconfig )rSrardrg)rDr#r#r$rps     cCs"t|t|t||S)zCustomize compiler path and configuration variables. This customization is performed when the first extension module build is requested in distutils.sysconfig.customize_compiler). )r\rbrd)rDr#r#r$rs   c Cs |jdd}tp|}|p*|}|r|}d}|jtd|jdd}|ry0tdd|jddd D}Wqtk rd}YqXnd}|dkrd |jkrd }tjd|}tt t |}t |dkr(|d}q|dkr=d }q|d krRd}q|d!krgd}q|d"kr|d}q|d#krd}qtd|fq|dkrt j d$krd}qq|d%krt j d&krd}qd}qn|||fS)'z Filter values for get_platform()MACOSX_DEPLOYMENT_TARGETr4Zmacosxrcss|]}t|VqdS)N)rJ)rKrLr#r#r$rMsz#get_platform_osx..r6rr8rNrOz-archZfatz -arch\s+(\S+)r7i386ppcx86_64ZintelZfat3ppc64Zfat64Z universalz%Don't know machine value for archs=%r PowerPCPower_Macintosh)rNr)rNr)rNrO)rnro)rnrp)rnrorp)rqrp)rnrorqrpl)rsrtl)rGr@rCrPrrQr0r;findallsortedsetlenrmaxsize)rDosnamereleasemachineZmacverZ macreleaserfZarchsr#r#r$rsP   0                 ) zCFLAGSzLDFLAGSzCPPFLAGSz BASECFLAGS BLDSHAREDLDSHAREDCCCXXz PY_CFLAGSz PY_LDFLAGSz PY_CPPFLAGSzPY_CORE_CFLAGS)r}r~rr)__doc__rr;r__all__r]rZrCr%r3r5r9r@rFrIrSr\rarbrdrgrrrrr#r#r#r$s<           >  (   @ ) lib64/python3.4/__pycache__/fractions.cpython-34.pyo000064400000045506152342604300016103 0ustar00 e fZ@sdZddlmZddlZddlZddlZddlZddlZddgZddZ ej j Z ej j ZejdejejBZGdddejZdS) z+Fraction, infinite-precision, real numbers.)DecimalNFractiongcdcCs"x|r|||}}qW|S)zCalculate the Greatest Common Divisor of a and b. Unless b==0, the result will have the same sign as b (so that when b is divided by it, the result comes out positive). )abrr./opt/alt/python34/lib64/python3.4/fractions.pyrs aC \A\s* # optional whitespace at the start, then (?P[-+]?) # an optional sign, then (?=\d|\.\d) # lookahead for digit or .digit (?P\d*) # numerator (possibly empty) (?: # followed by (?:/(?P\d+))? # an optional denominator | # or (?:\.(?P\d*))? # an optional fractional part (?:E(?P[-+]?\d+))? # and optional exponent ) \s*\Z # and optional whitespace to finish csbeZdZdZdQZddfddZedd Zed d Zd d dZ e ddZ e ddZ ddZ ddZddZddZeeej\ZZddZeeej\ZZddZeeej\ZZdd Zeeej\ZZ d!d"Z!d#d$Z"d%d&Z#d'd(Z$d)d*Z%d+d,Z&d-d.Z'd/d0Z(d1d2Z)d3d4Z*d5d6Z+d7d8Z,dd9d:Z-d;d<Z.d=d>Z/d?d@Z0dAdBZ1dCdDZ2dEdFZ3dGdHZ4dIdJZ5dKdLZ6dMdNZ7dOdPZ8S)Rra]This class implements rational numbers. In the two-argument form of the constructor, Fraction(8, 6) will produce a rational number equivalent to 4/3. Both arguments must be Rational. The numerator defaults to 0 and the denominator defaults to 1 so that Fraction(3) == 3 and Fraction() == 0. Fractions can also be constructed from: - numeric strings similar to those accepted by the float constructor (for example, '-2.3' or '1e10') - strings of the form '123/456' - float and Decimal instances - other Rational instances (including integers) _numerator _denominatorrNc stt|j|}|dkrt|tjrR|j|_|j|_ |St|t rtj |}|j|_|j |_ |St|t rtj |}|j|_|j |_ |St|trtj|}|dkrtd|nt|jdpd}|jd}|rBt|}nd}|jd}|rdt|}||t|}||9}n|jd } | rt| } | d kr|d| 9}q|d| 9}n|jd d kr | }q qctd nTt|tjrWt|tjrW|j|j|j|j}}n td|d krtd|nt||} || |_|| |_ |S)aConstructs a Rational. Takes a string like '3/2' or '1.5', another Rational instance, a numerator/denominator pair, or a float. Examples -------- >>> Fraction(10, -8) Fraction(-5, 4) >>> Fraction(Fraction(1, 7), 5) Fraction(1, 35) >>> Fraction(Fraction(1, 7), Fraction(2, 3)) Fraction(3, 14) >>> Fraction('314') Fraction(314, 1) >>> Fraction('-35/4') Fraction(-35, 4) >>> Fraction('3.1415') # conversion from numeric string Fraction(6283, 2000) >>> Fraction('-47e-2') # string may include a decimal exponent Fraction(-47, 100) >>> Fraction(1.47) # direct construction from float (exact conversion) Fraction(6620291452234629, 4503599627370496) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(Decimal('1.47')) Fraction(147, 100) Nz Invalid literal for Fraction: %rZnum0denomdecimal exprsign-z2argument should be a string or a Rational instancez+both arguments should be Rational instanceszFraction(%s, 0))superr__new__ isinstancenumbersRational numeratorr denominatorr float from_floatr from_decimalstr_RATIONAL_FORMATmatch ValueErrorintgrouplen TypeErrorZeroDivisionErrorr) clsrrselfvaluemr rZscalerg) __class__rrrIsf                  zFraction.__new__cCst|tjr||St|tsStd|j|t|jfntj|r~t d||jfntj |rt d||jfn||j S)zConverts a finite float to a rational number, exactly. Beware that Fraction.from_float(0.3) != Fraction(3, 10). z.%s.from_float() only takes floats, not %r (%s)zCannot convert %r to %s.) rrIntegralrr$__name__typemathisnanr isinf OverflowErroras_integer_ratio)r&frrrrs "zFraction.from_floatcCs5ddlm}t|tjr7|t|}n7t||sntd|j|t|jfn|j rt d||jfn|j rt d||jfn|j \}}}tdjtt|}|r| }n|dkr||d|S||d| SdS)zAConverts a finite Decimal instance to a rational number, exactly.r)rz2%s.from_decimal() only takes Decimals, not %r (%s)zCannot convert %s to %s.rN)rrrrr,r!r$r-r.Z is_infiniter2Zis_nanr Zas_tuplejoinmapr)r&ZdecrrZdigitsrrrrrs&"    zFraction.from_decimali@Bc Cs+|dkrtdn|j|kr4t|Sd\}}}}|j|j}}xg||}|||} | |krPn|||||| f\}}}}||||}}q\W|||} t|| ||| |} t||} t| |t| |kr#| S| SdS)aWClosest Fraction to self with denominator at most max_denominator. >>> Fraction('3.141592653589793').limit_denominator(10) Fraction(22, 7) >>> Fraction('3.141592653589793').limit_denominator(100) Fraction(311, 99) >>> Fraction(4321, 8765).limit_denominator(10000) Fraction(4321, 8765) r z$max_denominator should be at least 1rN)rr r r)r r rr abs) r'Zmax_denominatorZp0Zq0Zp1Zq1ndrZq2kZbound1Zbound2rrrlimit_denominators&    & zFraction.limit_denominatorcCs|jS)N)r )rrrrrszFraction.numeratorcCs|jS)N)r )rrrrrszFraction.denominatorcCsd|j|jfS)z repr(self)zFraction(%s, %s))r r )r'rrr__repr__szFraction.__repr__cCs4|jdkrt|jSd|j|jfSdS)z str(self)r z%s/%sN)r rr )r'rrr__str__s zFraction.__str__cstfdd}djd|_j|_fdd}djd|_j|_||fS)aGenerates forward and reverse operators given a purely-rational operator and a function from the operator module. Use this like: __op__, __rop__ = _operator_fallbacks(just_rational_op, operator.op) In general, we want to implement the arithmetic operations so that mixed-mode operations either call an implementation whose author knew about the types of both arguments, or convert both to the nearest built in type and do the operation there. In Fraction, that means that we define __add__ and __radd__ as: def __add__(self, other): # Both types have numerators/denominator attributes, # so do the operation directly if isinstance(other, (int, Fraction)): return Fraction(self.numerator * other.denominator + other.numerator * self.denominator, self.denominator * other.denominator) # float and complex don't have those operations, but we # know about those types, so special case them. elif isinstance(other, float): return float(self) + other elif isinstance(other, complex): return complex(self) + other # Let the other type take over. return NotImplemented def __radd__(self, other): # radd handles more types than add because there's # nothing left to fall back to. if isinstance(other, numbers.Rational): return Fraction(self.numerator * other.denominator + other.numerator * self.denominator, self.denominator * other.denominator) elif isinstance(other, Real): return float(other) + float(self) elif isinstance(other, Complex): return complex(other) + complex(self) return NotImplemented There are 5 different cases for a mixed-type addition on Fraction. I'll refer to all of the above code that doesn't refer to Fraction, float, or complex as "boilerplate". 'r' will be an instance of Fraction, which is a subtype of Rational (r : Fraction <: Rational), and b : B <: Complex. The first three involve 'r + b': 1. If B <: Fraction, int, float, or complex, we handle that specially, and all is well. 2. If Fraction falls back to the boilerplate code, and it were to return a value from __add__, we'd miss the possibility that B defines a more intelligent __radd__, so the boilerplate should return NotImplemented from __add__. In particular, we don't handle Rational here, even though we could get an exact answer, in case the other type wants to do something special. 3. If B <: Fraction, Python tries B.__radd__ before Fraction.__add__. This is ok, because it was implemented with knowledge of Fraction, so it can handle those instances before delegating to Real or Complex. The next two situations describe 'b + r'. We assume that b didn't know about Fraction in its implementation, and that it uses similar boilerplate code: 4. If B <: Rational, then __radd_ converts both to the builtin rational type (hey look, that's us) and proceeds. 5. Otherwise, __radd__ tries to find the nearest common base ABC, and fall back to its builtin type. Since this class doesn't subclass a concrete type, there's no implementation to fall back to, so we need to try as hard as possible to return an actual value, or the user will get a TypeError. csnt|ttfr"||St|trDt||St|trft||StSdS)N)rr!rrcomplexNotImplemented)rr)fallback_operatormonomorphic_operatorrrforwardqs z-Fraction._operator_fallbacks..forward__cs}t|tjr||St|tjrJt|t|St|tjrut|t|StSdS)N)rrrZRealrComplexr?r@)rr)rArBrrreverse}s z-Fraction._operator_fallbacks..reverseZ__r)r-__doc__)rBrArCrFr)rArBr_operator_fallbacks!sP    zFraction._operator_fallbackscCs/t|j|j|j|j|j|jS)za + b)rrr)rrrrr_addsz Fraction._addcCs/t|j|j|j|j|j|jS)za - b)rrr)rrrrr_subsz Fraction._subcCs!t|j|j|j|jS)za * b)rrr)rrrrr_mulsz Fraction._mulcCs!t|j|j|j|jS)za / b)rrr)rrrrr_divsz Fraction._divcCstj||S)za // b)r/floor)rrrrr __floordiv__szFraction.__floordiv__cCstj||S)za // b)r/rM)rrrrr __rfloordiv__szFraction.__rfloordiv__cCs||}|||S)za % br)rrdivrrr__mod__s zFraction.__mod__cCs||}|||S)za % br)rrrPrrr__rmod__s zFraction.__rmod__cCst|tjr|jdkrq|j}|dkrQt|j||j|St|j| |j| Sqt|t|Snt||SdS)za ** b If b is not an integer, the result will be a float or complex since roots are generally irrational. If b is an integer, the result will be rational. r rN) rrrrrrr r r)rrZpowerrrr__pow__s   zFraction.__pow__cCsz|jdkr)|jdkr)||jSt|tjrRt|j|j|S|jdkrl||jS|t|S)za ** br r) r r rrrrrrr)rrrrr__rpow__s  zFraction.__rpow__cCst|j|jS)z++a: Coerces a subclass instance to Fraction)rr r )rrrr__pos__szFraction.__pos__cCst|j |jS)z-a)rr r )rrrr__neg__szFraction.__neg__cCstt|j|jS)zabs(a))rr8r r )rrrr__abs__szFraction.__abs__cCs1|jdkr|j |j S|j|jSdS)ztrunc(a)rN)r r )rrrr __trunc__szFraction.__trunc__cCs|j|jS)zWill be math.floor(a) in 3.0.)rr)rrrr __floor__szFraction.__floor__cCs|j |j S)zWill be math.ceil(a) in 3.0.)rr)rrrr__ceil__szFraction.__ceil__cCs|dkrxt|j|j\}}|d|jkr>|S|d|jkrY|dS|ddkrm|S|dSndt|}|dkrtt|||Stt|||SdS)zOWill be round(self, ndigits) in 3.0. Rounds half toward even. Nr rr)divmodrrr8rround)r'ZndigitsrMZ remainderZshiftrrr __round__s   zFraction.__round__cCslt|jtdt}|s(t}nt|j|t}|dkrQ|n| }|dkrhdS|S)z hash(self)r[rr )powr _PyHASH_MODULUS _PyHASH_INFr8r )r'ZdinvZhash_resultrrr__hash__s  zFraction.__hash__cCst|tjr4|j|jko3|j|jkSt|tjra|jdkra|j }nt|t rt j |st j |rd|kS||j|kSntSdS)za == brgN)rrrr rr rrEimagrealrr/r0r1rr@)rrrrr__eq__,s!  zFraction.__eq__cCst|tjr3||j|j|j|jSt|trtj |s`tj |rm|d|S|||j |Snt SdS)acHelper for comparison operators, for internal use only. Implement comparison between a Rational instance `self`, and either another Rational instance or a float `other`. If `other` is not a Rational instance or a float, return NotImplemented. `op` should be one of the six standard comparison operators. gN) rrrr rr rrr/r0r1rr@)r'otheroprrr_richcmp?s  zFraction._richcmpcCs|j|tjS)za < b)rkoperatorlt)rrrrr__lt__UszFraction.__lt__cCs|j|tjS)za > b)rkrlgt)rrrrr__gt__YszFraction.__gt__cCs|j|tjS)za <= b)rkrlle)rrrrr__le__]szFraction.__le__cCs|j|tjS)za >= b)rkrlge)rrrrr__ge__aszFraction.__ge__cCs |jdkS)za != 0r)r )rrrr__bool__eszFraction.__bool__cCs|jt|ffS)N)r+r)r'rrr __reduce__kszFraction.__reduce__cCs,t|tkr|S|j|j|jS)N)r.rr+r r )r'rrr__copy__nszFraction.__copy__cCs,t|tkr|S|j|j|jS)N)r.rr+r r )r'memorrr __deepcopy__sszFraction.__deepcopy__)z _numeratorz _denominator)9r- __module__ __qualname__rG __slots__r classmethodrrr<propertyrrr=r>rHrIrladd__add____radd__rJsub__sub____rsub__rKmul__mul____rmul__rLtruediv __truediv__ __rtruediv__rNrOrQrRrSrTrUrVrWrXrYrZr^rerhrkrnrprrrtrurvrwryrr)r+rr1sV d7   k                          )rGrrr/rrlresys__all__r hash_infomodulusrbinfrccompileVERBOSE IGNORECASErrrrrrrs         lib64/python3.4/__pycache__/shutil.cpython-34.pyc000064400000100367152342604300015404 0ustar00 i fޛ1@sdZddlZddlZddlZddlmZddlZddlZddlZddl Z yddl Z [ dZ Wne k rdZ YnXyddl mZWne k rdZYnXyddlmZWne k rdZYnXdd d d d d ddddddddddddddddddd gZGd!ddeZGd"d d eZGd#ddeZGd$ddeZGd%d&d&eZGd'd(d(eZd}d+dZd,d-Zd.dd/d Zd.dd0d Zeed1r4d.dd2d3Zn d4d3Zd.dd5d Z d.dd6d Z!d.dd7d Z"d8dZ#dde"dd9dZ$d:d;Z%d<d=Z&ej'ejej(ej)hej*koej+ej,koejej-kZ.ddd>dZ/e.e/_0d?d@Z1dAdZ2dBdCZ3dDdEZ4dFdGZ5dHddddddIdJZ6dddKdLZ7ddddMdNZ8ie6d~gdPfdQ6e6dgdRfdS6e8gdTfdU6Z9e re6dgdWfe9dXd_d`Z?ddZdadZ@dbdZAdcddZBdedfZCdgdhZDididjgeDgdPfdQ6dkgeDgdRfdS6dlgeCgdTfdU6ZEe rdmgeDgdWfeEdX._nopcstt|S)N)getattrr-)rL)rRr!r"lookupszcopystat..lookupcs)tt|}|tjkr%|SS)N)rSr-supports_follow_symlinks)rLr?)rRr!r"rTsr8utimerBst_flagsZchflags EOPNOTSUPPrG)rXzENOTSUP)r-r.r;r8rDr: st_atime_ns st_mtime_nsNotImplementedErrorr,rWr/rFrSrN) r1r2r4ZfollowrTr@modewhyerrr!)rRr"rs,+!   'cCs`tjj|r6tjj|tjj|}nt||d|t||d||S)a3Copy data and mode bits ("cp src dst"). Return the file's destination. The destination may be a directory. If follow_symlinks is false, symlinks won't be followed. This resembles GNU's "cp -P src dst". If source and destination are the same file, a SameFileError will be raised. r4)r-r.isdirjoinbasenamerr)r1r2r4r!r!r"r s $cCs`tjj|r6tjj|tjj|}nt||d|t||d||S)zCopy data and all stat info ("cp -p src dst"). Return the file's destination." The destination may be a directory. If follow_symlinks is false, symlinks won't be followed. This resembles GNU's "cp -P src dst". r4)r-r.r_r`rarr)r1r2r4r!r!r"r s $csfdd}|S)zFunction that can be used as copytree() ignore parameter. Patterns is a sequence of glob-style patterns that are used to exclude filescs:g}x'D]}|jtj||q Wt|S)N)extendfnmatchfilterset)r.rJ ignored_namespattern)patternsr!r"_ignore_patternss z)ignore_patterns.._ignore_patternsr!)rhrir!)rhr"rscCstj|}|dk r-|||}n t}tj|g}x|D]} | |krhqPntjj|| } tjj|| } ytjj| r=tj| } |rtj| | t | | d| qutjj |  r|rwPntjj | r-t | | |||qu|| | n8tjj | rht | | |||n || | WqPt k r} z|j| jdWYdd} ~ XqPtk r}z!|j| | t|fWYdd}~XqPXqPWyt ||Wn\tk re}z<t|dddkrS|j||t|fnWYdd}~XnX|r{t |n|S)aRecursively copy a directory tree. The destination directory must not already exist. If exception(s) occur, an Error is raised with a list of reasons. If the optional symlinks flag is true, symbolic links in the source tree result in symbolic links in the destination tree; if it is false, the contents of the files pointed to by symbolic links are copied. If the file pointed by the symlink doesn't exist, an exception will be added in the list of errors raised in an Error exception at the end of the copy process. You can set the optional ignore_dangling_symlinks flag to true if you want to silence this exception. Notice that this has no effect on platforms that don't support os.symlink. The optional ignore argument is a callable. If given, it is called with the `src` parameter, which is the directory being visited by copytree(), and `names` which is the list of `src` contents, as returned by os.listdir(): callable(src, names) -> ignored_names Since copytree() is called recursively, the callable will be called once for each directory that is copied. It returns a list of names relative to the `src` directory that should not be copied. The optional copy_function argument is a callable that will be used to copy each file. It will be called with the source path and the destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. Nr4rZwinerror)r-listdirremakedirsr.r`r;r=r<rexistsr_r rrbrOr/appendstrrS)r1r2symlinksignoreZ copy_functionZignore_dangling_symlinksrJrferrorsrLZsrcnameZdstnamelinktor^r]r!r!r"r sL$      &32c$Csy%tjj|r$tdnWn2tk rY|tjj|tjdSYnXg}ytj|}Wn+tk r|tj|tjYnXx|D]}tjj||}ytj|j }Wntk rd}YnXt j |rt ||qytj |Wqtk rQ|tj |tjYqXqWytj|Wn+tk r|tj|tjYnXdS)Nz%Cannot call rmtree on a symbolic linkr)r-r.r;r/sysexc_inforjr`rCr:r8S_ISDIR_rmtree_unsafeunlinkrmdir)r.onerrorrJrLfullnamer\r!r!r"rv_s6       " rvc 0Cs@g}ytj|}WnGtk rb}z'||_|tj|tjWYdd}~XnXx|D]}tjj||}y(tj|d|dd}|j }Wntk rd}YnXtj |rytj |tj d|} Wn+tk r#|tj |tjYq8Xztjj |tj| rt| ||ytj|d|Wqtk r|tj|tjYqXnAytdWn.tk r|tjj|tjYnXWdtj| Xqjytj|d|Wqjtk r7|tj|tjYqjXqjWdS)Ndir_fdr4Frz%Cannot call rmtree on a symbolic link)r-rjr/filenamersrtr.r`r8r:rur>O_RDONLYsamestatfstat_rmtree_safe_fdrxr;closerw) topfdr.ryrJr^rLrzorig_str\dirfdr!r!r"rsD ,      ! % rc!Cs|rdd}n|dkr0dd}ntrt|trWtj|}nytj|}Wn/tk r|tj|tjdSYnXytj |tj }Wn/tk r|tj|tjdSYnXztj j |tj |rZt|||ytj|Wqtk rV|tj|tjYqXnAytdWn.tk r|tj j|tjYnXWdtj|Xn t||SdS)aRecursively delete a directory tree. If ignore_errors is set, errors are ignored; otherwise, if onerror is set, it is called to handle the error with arguments (func, path, exc_info) where func is platform and implementation dependent; path is the argument to that function that caused it to fail; and exc_info is a tuple returned by sys.exc_info(). If ignore_errors is false and onerror is None, an exception is raised. cWsdS)Nr!)rOr!r!r"ryszrmtree..onerrorNcWsdS)Nr!)rOr!r!r"rysz%Cannot call rmtree on a symbolic link)_use_fd_functions isinstancebytesr-fsdecoderC Exceptionrsrtr>r}r.r~rrrxr/r;rrv)r. ignore_errorsryrfdr!r!r"r s<       ! %cCs5tjjtjjpd}tjj|j|S)N)r-r.sepaltseprarstrip)r.rr!r!r" _basenamesrc Cs`|}tjj|r~t||r;tj||dStjj|t|}tjj|r~td|q~nytj||Wnt k r[tjj |rtj |}tj ||tj |nttjj|r=t||rtd||fnt||ddt|nt||tj |YnX|S)a0Recursively move a file or directory to another location. This is similar to the Unix "mv" command. Return the file or directory's destination. If the destination is a directory or a symlink to a directory, the source is moved inside the directory. The destination path must not already exist. If the destination already exists but is not a directory, it may be overwritten depending on os.rename() semantics. If the destination is on our current filesystem, then rename() is used. Otherwise, src is copied to the destination and then removed. Symlinks are recreated under the new name if os.rename() fails because of cross filesystem renames. A lot more could be done here... A look at a mv.c shows a lot of the issues this implementation glosses over. Nz$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.roT)r-r.r_r3renamer`rrlrr/r;r=r<rw _destinsrcr r r )r1r2Zreal_dstrrr!r!r"r s.   cCsut|}t|}|jtjjs@|tjj7}n|jtjjsh|tjj7}n|j|S)N)rendswithr-r.r startswith)r1r2r!r!r"rs  rc Cs_tdks|dkrdSyt|}Wntk rFd}YnX|dk r[|dSdS)z"Returns a gid, given a group name.N)rKeyError)rLresultr!r!r"_get_gid(s   rc Cs_tdks|dkrdSyt|}Wntk rFd}YnX|dk r[|dSdS)z"Returns an uid, given a user name.Nr)rr)rLrr!r!r"_get_uid4s   rgzipc sidd6dd6}idd6} tr>d|d._set_uid_gidzw|%srd)_BZ2_SUPPORTED ValueErrorr7getr-r.dirnamerlinforkrrtarfiler>addr) base_namebase_dircompressverbosedry_runrrloggerZtar_compressionZ compress_extZ archive_name archive_dirrtarr!)rrrrr" _make_tarball@s4         rc Cs~|rd}nd}ddlm}ddlm}y |d|||gd|Wn"|k rytd|YnXdS) Nz-rz-rqr)DistutilsExecError)spawnziprzkunable to create zip file '%s': could neither import the 'zipfile' module nor find a standalone zip utility)Zdistutils.errorsrZdistutils.spawnrr)r zip_filenamerrZ zipoptionsrrr!r!r"_call_external_zip~s    rcCsN|d}tjj|}|rmtjj| rm|dk rT|jd|n|smtj|qmnyddl}Wntk rd}YnX|dkrt||||n|dk r|jd||n|sJ|j |dd|j H}tjj |} |j | | |dk rA|jd| nxtj |D]\} } } xdt| D]V} tjj tjj| | } |j | | |dk rm|jd| qmqmWxs| D]k} tjj tjj| | } tjj| r|j | | |dk r9|jd| q9qqWqQWWdQXn|S) amCreate a zip file from all the files under 'base_dir'. The output zip file will be named 'base_name' + ".zip". Uses either the "zipfile" Python module (if available) or the InfoZIP "zip" utility (if installed and found on the default search path). If neither tool is available, raises ExecError. Returns the name of the output zip file. z.zipNz creating %srz#creating '%s' and adding '%s' to itwZ compressionz adding '%s')r-r.rrlrrkzipfile ImportErrorrZipFileZ ZIP_DEFLATEDnormpathr(walksortedr`isfile)rrrrrrrrZzfr.dirpathZdirnames filenamesrLr!r!r" _make_zipfilesH         !  ! 'rrzgzip'ed tar-fileZgztarzuncompressed tar filerzZIP filerrzbzip2'ed tar-fileZbztarcCs'ddtjD}|j|S)zReturns a list of supported formats for archiving and unarchiving. Each element of the returned sequence is a tuple (name, description) cSs&g|]\}}||dfqS)rr!).0rLregistryr!r!r" s z'get_archive_formats..)_ARCHIVE_FORMATSitemssort)formatsr!r!r"rs  rcCs|dkrg}nt|s4td|nt|ttfsXtdnxE|D]=}t|ttf st|dkr_tdq_q_W|||ft|.)_UNPACK_FORMATSrr)rr!r!r"r(s  c Csi}x9tjD]+\}}x|dD]}|||r(r) r| extract_dirrrrrLtargetdatafr!r!r"_unpack_zipfilees0    rcCs^ytj|}Wn%tjk r:td|YnXz|j|Wd|jXdS)z:Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` z/%s is not a compressed or uncompressed tar fileN)rr>ZTarErrorr$Z extractallr)r|rZtarobjr!r!r"_unpack_tarfilesrz.tar.gzz.tgzz.tarz.zipz.bz2cCsIxBtjD]4\}}x%|dD]}|j|r$|Sq$Wq WdS)Nr)rrr)r|rLrrr!r!r"_find_unpack_formats  rcCs|dkrtj}n|dk ryt|}Wn'tk r^tdj|YnX|d}|||t|dnbt|}|dkrtdj|nt|d}tt|d}||||dS)aUnpack an archive. `filename` is the name of the archive. `extract_dir` is the name of the target directory, where the archive is unpacked. If not provided, the current working directory is used. `format` is the archive format: one of "zip", "tar", or "gztar". Or any other registered format. If not provided, unpack_archive will use the filename extension and see if an unpacker was registered for that extension. In case none is found, a ValueError is raised. NzUnknown unpack format '{0}'rrzUnknown archive format '{0}') r-rrrrr7dictrr$)r|rr7rrrPr!r!r"rs      statvfs disk_usageZusageztotal used freecCsVtj|}|j|j}|j|j}|j|j|j}t|||S)zReturn disk usage statistics about the given path. Returned value is a named tuple with attributes 'total', 'used' and 'free', which are the amount of total, used and free space, in bytes. )r-rf_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)r.r@freetotalusedr!r!r"rs ntcCs/tj|\}}||}t|||S)zReturn disk usage statistics about the given path. Returned values is a named tuple with attributes 'total', 'used' and 'free', which are the amount of total, used and free space, in bytes. )rZ _getdiskusager)r.rrrr!r!r"rs cCs|dkr'|dkr'tdn|}|}|dkrHd}nBt|trt|}|dkrtdj|qn|dkrd}nBt|tst|}|dkrtdj|qntj |||dS)zChange owner user and group of the given path. user and group can be the uid/gid or the user/group names, and in that case, they are converted to their respective uid/gid. Nzuser and/or group must be setrzno such user: {!r}zno such group: {!r}r) rrrnr LookupErrorr7intrr-r)r.userrZ_userZ_groupr!r!r"rs"        PcCsyttjd}Wnttfk r7d}YnXyttjd}Wnttfk rod}YnX|dks|dkrytjtjj}Wn't t fk rtj |}YnX|dkr|j }n|dkr|j }qntj ||fS)aGet the size of the terminal window. For each of the two dimensions, the environment variable, COLUMNS and LINES respectively, is checked. If the variable is defined and the value is a positive integer, it is used. When COLUMNS or LINES is not defined, which is the common case, the terminal connected to sys.__stdout__ is queried by invoking os.get_terminal_size. If the terminal size cannot be successfully queried, either because the system doesn't support querying, or because we are not connected to a terminal, the value given in fallback parameter is used. Fallback defaults to (80, 24) which is the default size used by many terminal emulators. The value returned is a named tuple of type os.terminal_size. ZCOLUMNSrZLINES)rr-environrrrrs __stdout__fileno NameErrorr/ terminal_sizecolumnslines)Zfallbackrrsizer!r!r"rs$     c sdd}tjjr5||r1SdS|dkr\tjjdtj}n|sfdS|jtj}tj dkrtj |kr|j dtj ntjjddjtj}t fd d |Drg}qfd d |D}n g}t }xu|D]m}tjj|}||kr-|j|x9|D].} tjj|| } || |re| SqeWq-q-WdS) a3Given a command, mode, and a PATH string, return the path which conforms to the given mode on the PATH, or None if there is no such file. `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result of os.environ.get("PATH"), or can be overridden with a custom search path. cSs5tjj|o4tj||o4tjj| S)N)r-r.rlaccessr_)r?r\r!r!r" _access_checkFs$zwhich.._access_checkNPATHwin32rZPATHEXTrc3s*|] }jj|jVqdS)N)lowerr)rr)cmdr!r" cszwhich..csg|]}|qSr!r!)rr)r r!r"rfs zwhich..)r-r.rrrdefpathrpathseprsplatformrinsertanyrer0rr`) r r\r.rZpathextfilesseendirZnormdirZthefilerLr!)r r"r9s8  !       i@)compresszgzip)rN)rzbzip2)rr)Sr#r-rsr8Zos.pathrrc collectionsrFrrrrpwdrZgrpr__all__r/rrrrr$rr%rr3rrr,rNrr r rr rvrr>rwrxsupports_dir_fdrj supports_fdrUrr Zavoids_symlink_attacksrr rrrrrrrrrrrrrrrrrrrrrrm namedtuplerrrLrrrF_OKX_OKrr!r!r!r"s                    6 Y ! , 5   1 =6    6    %   %     +lib64/python3.4/__pycache__/asyncore.cpython-34.pyc000064400000043053152342604300015715 0ustar00 j fR@sdZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZee e eeeefZyeWnek riZYnXddZGdddeZeeefZdd Zd d Z d d Z!ddZ"ddddZ#ddddZ$e$Z%ddddddZ&GdddZ'Gddde'Z(ddZ)dddd Z*ej+d!krddl,Z,Gd"d#d#Z-Gd$d%d%e'Z.ndS)&aBasic infrastructure for asynchronous socket service clients and servers. There are only two ways to have a program on a single processor do "more than one thing at a time". Multi-threaded programming is the simplest and most popular way to do it, but there is another very different technique, that lets you have nearly all the advantages of multi-threading, without actually using multiple threads. it's really only practical if your program is largely I/O bound. If your program is CPU bound, then pre-emptive scheduled threads are probably what you really need. Network servers are rarely CPU-bound, however. If your operating system supports the select() system call in its I/O library (and nearly all do), then you can use it to juggle multiple communication channels at once; doing other work while your I/O is taking place in the "background." Although this strategy can seem strange and complex, especially at first, it is in many ways easier to understand and control than multi-threaded programming. The module documented here solves many of the difficult problems for you, making the task of building sophisticated high-performance network servers and clients a snap. N) EALREADY EINPROGRESS EWOULDBLOCK ECONNRESETEINVALENOTCONN ESHUTDOWNEISCONNEBADF ECONNABORTEDEPIPEEAGAIN errorcodec CsOytj|SWn7tttfk rJ|tkr>t|Sd|SYnXdS)NzUnknown error %s)osstrerror ValueError OverflowError NameErrorr)errr-/opt/alt/python34/lib64/python3.4/asyncore.py _strerrorDs  rc@seZdZdS)ExitNowN)__name__ __module__ __qualname__rrrrrLs rc Cs;y|jWn&tk r%Yn|jYnXdS)N)handle_read_event_reraised_exceptions handle_error)objrrrreadQs  r c Cs;y|jWn&tk r%Yn|jYnXdS)N)handle_write_eventrr)rrrrwriteYs  r"c Cs;y|jWn&tk r%Yn|jYnXdS)N)handle_expt_eventrr)rrrr _exceptionas  r$cCsyz|tj@r|jn|tj@r7|jn|tj@rQ|jn|tjtjBtj B@ry|j nWntt k r}z/|j dt kr|jn |j WYdd}~Xn&tk rYn|jYnXdS)Nr)selectPOLLINrPOLLOUTr!POLLPRIr#ZPOLLHUPZPOLLERRZPOLLNVAL handle_closeOSErrorargs _DISCONNECTEDrr)rflagserrr readwriteis"        r/gc Cs|dkrt}n|rg}g}g}xt|jD]v\}}|j}|j}|rz|j|n|r|j r|j|n|s|r@|j|q@q@Wg|ko|ko|knrtj|dSy%t j ||||\}}}Wnt k r/dSYnXx9|D]1}|j |}|dkr^q7nt |q7Wx9|D]1}|j |}|dkrqsnt |qsWx<|D]1}|j |}|dkrqnt|qWndS)N) socket_maplistitemsreadablewritableappend acceptingtimeZsleepr%InterruptedErrorgetr r"r$) timeoutmaprwr.fdrZis_rZis_wrrrpoll}sJ     ' %        r?c CsK|dkrt}n|dk r4t|d}ntj}|rGxt|jD]t\}}d}|jr|tjtjBO}n|j r|j r|tj O}n|rY|j ||qYqYWy|j|}Wnt k rg}YnXxE|D]:\}}|j|}|dkr3qnt||qWndS)Nir)r0intr%r?r1r2r3r&r(r4r6r'registerr8r9r/)r:r;Zpollsterr>rr-r<rrrpoll2s.        rBg>@FcCs|dkrt}n|r3ttdr3t}nt}|dkrbxJ|r^|||qHWn0x-|r|dkr||||d}qeWdS)Nr?r)r0hasattrr%rBr?)r:Zuse_pollr;countZpoll_funrrrloops      rFc@seZdZdZdZdZdZdZdZe dgZ ddddZ ddZ e Z ddd Zdd d Zejejd d ZdddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Z d(d)d*Z!d+d,Z"d-d.Z#d/d0Z$d1d2Z%d3d4Z&d5d6Z'd7d8Z(d9d:Z)d;d<Z*d=d>Z+d?d@Z,dAdBZ-dS)C dispatcherFNwarningcCs|dkrt|_n ||_d|_|r|jd|j||d|_y|j|_Wqtk r}z:|j dt t fkrd|_n|j |WYdd}~XqXn d|_ dS)NrTF)r0_map_fileno setblocking set_socket connectedZ getpeernameaddrr*r+rr del_channelsocket)selfsockr;rrrr__init__s         zdispatcher.__init__c Cs|jjd|jjg}|jr?|jr?|jdn|jrX|jdn|jdk ry|jd|jWqtk r|jt|jYqXnddj |t |fS)N.Z listeningrMz%s:%dz <%s at %#x> ) __class__rrr6rNr5rM TypeErrorreprjoinid)rQZstatusrrr__repr__s  zdispatcher.__repr__cCs)|dkr|j}n|||jrrrrOs      zdispatcher.del_channelcCs?||f|_tj||}|jd|j|dS)Nr)Zfamily_and_typerPrKrL)rQZfamilytyperRrrr create_sockets zdispatcher.create_socketcCs)||_|j|_|j|dS)N)rPfilenorJr\)rQrRr;rrrrL%s zdispatcher.set_socketc CsRy9|jjtjtj|jjtjtjdBWntk rMYnXdS)NrC)rPZ setsockopt SOL_SOCKETZ SO_REUSEADDR getsockoptr*)rQrrrset_reuse_addr+s   zdispatcher.set_reuse_addrcCsdS)NTr)rQrrrr3<szdispatcher.readablecCsdS)NTr)rQrrrr4?szdispatcher.writablecCs=d|_tjdkr-|dkr-d}n|jj|S)NTnt)r6rnamerPlisten)rQZnumrrrrfFs  zdispatcher.listencCs||_|jj|S)N)rNrPbind)rQrNrrrrgLs zdispatcher.bindcCsd|_d|_|jj|}|tttfksT|tkratj dkra||_ dS|dt fkr||_ |j nt |t|dS)NFTrccer)zntrh)rM connectingrPZ connect_exrrrrrrerNr handle_connect_eventr*r)rQZaddressrrrrconnectPs     zdispatcher.connectcCsy|jj\}}Wn]tk r1dSYnRtk rx}z(|jdtttfkrcdSWYdd}~Xn X||fSdS)Nr)rPacceptrWr*r+rr r )rQZconnrNwhyrrrrl^s zdispatcher.acceptcCsy|jj|}|SWn`tk r|}z@|jdtkrFdS|jdtkrg|jdSWYdd}~XnXdS)Nr)rPsendr*r+rr,r))rQdataresultrmrrrrnls zdispatcher.sendcCs~y.|jj|}|s)|jdS|SWnItk ry}z)|jdtkrd|jdSWYdd}~XnXdS)Nr)rPrecvr)r*r+r,)rQZ buffer_sizerormrrrrrys  zdispatcher.recvcCsd|_d|_d|_|j|jdk ry|jjWqtk r}z$|jdtt fkrynWYdd}~XqXndS)NFr) rMr6rirOrPcloser*r+rr )rQrmrrrrss    zdispatcher.closec Csyt|j|}Wn.tk rFtd|jj|fYn9Xdi|jjd6|d6}tj|tdd|SdS)Nz!%s instance has no attribute '%s'zA%(me)s.%(attr)s is deprecated; use %(me)s.socket.%(attr)s insteadmeattr stacklevel)getattrrPAttributeErrorrVrwarningswarnDeprecationWarning)rQruZretattrmsgrrr __getattr__s zdispatcher.__getattr__cCstjjdt|dS)Nzlog: %s )sysstderrr"str)rQmessagerrrlogszdispatcher.loginfocCs*||jkr&td||fndS)Nz%s: %s)ignore_log_typesprint)rQrr]rrrlog_infoszdispatcher.log_infocCsP|jr|jn6|jsB|jr5|jn|jn |jdS)N)r6 handle_acceptrMrirj handle_read)rQrrrrs      zdispatcher.handle_read_eventcCs_|jjtjtj}|dkr?t|t|n|jd|_d|_dS)NrTF) rPrar`SO_ERRORr*rhandle_connectrMri)rQrrrrrjs    zdispatcher.handle_connect_eventcCs=|jr dS|js/|jr/|jq/n|jdS)N)r6rMrirj handle_write)rQrrrr!s    zdispatcher.handle_write_eventcCsB|jjtjtj}|dkr4|jn |jdS)Nr)rPrar`rr) handle_expt)rQrrrrr#s  zdispatcher.handle_expt_eventc Csnt\}}}}yt|}Wndt|}YnX|jd||||fd|jdS)Nz)<__repr__(self) failed for object at %0x>z:uncaptured python exception, closing channel %s (%s:%s %s)error)compact_tracebackrXrZrr))rQZniltvtbinfoZ self_reprrrrrszdispatcher.handle_errorcCs|jdddS)Nz!unhandled incoming priority eventrH)r)rQrrrrszdispatcher.handle_exptcCs|jdddS)Nzunhandled read eventrH)r)rQrrrrszdispatcher.handle_readcCs|jdddS)Nzunhandled write eventrH)r)rQrrrrszdispatcher.handle_writecCs|jdddS)Nzunhandled connect eventrH)r)rQrrrrszdispatcher.handle_connectcCs,|j}|dk r(|j|ndS)N)rlhandle_accepted)rQZpairrrrrs  zdispatcher.handle_acceptcCs|j|jdddS)Nzunhandled accepted eventrH)rsr)rQrRrNrrrrs zdispatcher.handle_acceptedcCs|jdd|jdS)Nzunhandled close eventrH)rrs)rQrrrr)szdispatcher.handle_close).rrrdebugrMr6riclosingrN frozensetrrSr[__str__r\rOrPZAF_INETZ SOCK_STREAMr^rLrbr3r4rfrgrkrlrnrrrsr~rrrrjr!r#rrrrrrrr)rrrrrGsN                       rGc@sReZdZddddZddZddZdd Zd d ZdS) dispatcher_with_sendNcCs tj|||d|_dS)Nrq)rGrS out_buffer)rQrRr;rrrrSszdispatcher_with_send.__init__cCs?d}tj||jdd}|j|d|_dS)Nri)rGrnr)rQZnum_sentrrr initiate_sendsz"dispatcher_with_send.initiate_sendcCs|jdS)N)r)rQrrrrsz!dispatcher_with_send.handle_writecCs|j pt|jS)N)rMlenr)rQrrrr4szdispatcher_with_send.writablecCsA|jr#|jdt|n|j||_|jdS)Nz sending %s)rrrXrr)rQrorrrrn!s zdispatcher_with_send.send)rrrrSrrr4rnrrrrrs    rcCstj\}}}g}|s0tdnxD|rv|j|jjj|jjjt|j f|j }q3W~|d\}}}dj dd|D}|||f|||fS)Nztraceback does not existrCrUcSsg|]}d|qS)z [%s|%s|%s]r).0xrrr <s z%compact_traceback..) rexc_infoAssertionErrorr5tb_framef_code co_filenameco_namer tb_linenotb_nextrY)rrtbrfileZfunctionlinerrrrr+s    rcCs|dkrt}nxt|jD]}y|jWq(tk r}z'|jdtkrgn |ssnWYdd}~Xq(tk rYq(|snYq(Xq(W|jdS)Nr) r0r1valuesrsr*r+r rclear)r;Z ignore_allrrrr close_all?s    rposixc@sseZdZddZddZddZddZd d d ZeZeZ d d Z ddZ d S) file_wrappercCstj||_dS)N)rdupr>)rQr>rrrrSfszfile_wrapper.__init__cCs4|jdkr&tjd|tn|jdS)Nrzunclosed file %r)r>rzr{ResourceWarningrs)rQrrr__del__iszfile_wrapper.__del__cGstj|j|S)N)rr r>)rQr+rrrrrnszfile_wrapper.recvcGstj|j|S)N)rr"r>)rQr+rrrrnqszfile_wrapper.sendNcCs9|tjkr)|tjkr)| r)dStddS)Nrz-Only asyncore specific behaviour implemented.)rPr`rNotImplementedError)rQlevelZoptnameZbuflenrrrrats zfile_wrapper.getsockoptcCs0|jdkrdStj|jd|_dS)NrrCr)r>rrs)rQrrrrsszfile_wrapper.closecCs|jS)N)r>)rQrrrr_szfile_wrapper.fileno) rrrrSrrrrnrar r"rsr_rrrrras      rc@s+eZdZdddZddZdS)file_dispatcherNc Cstj|d|d|_y|j}Wntk r@YnX|j|tj|tjd}|tj B}tj|tj |dS)NTr) rGrSrMr_ryset_filefcntlZF_GETFLr O_NONBLOCKZF_SETFL)rQr>r;r-rrrrSs    zfile_dispatcher.__init__cCs/t||_|jj|_|jdS)N)rrPr_rJr\)rQr>rrrrszfile_dispatcher.set_file)rrrrSrrrrrrs  r)/__doc__r%rPrr7rzrerrnorrrrrrrr r r r r rrr,r0rr ExceptionrKeyboardInterrupt SystemExitrr r"r$r/r?rBZpoll3rFrGrrrrerrrrrrr/sB      X        *:  'lib64/python3.4/__pycache__/copyreg.cpython-34.pyo000064400000010726152342604300015557 0ustar00 i f @sdZdddddgZiZdddZddZyeWnek rXYnXd d Zeeeed d ZdZ ddZ ddZ ddZ ddZ iZiZiZddZddZddZdS)zHelper to provide extensibility for pickle. This is only useful to add pickle support for extension types defined in C, not for instances of user-defined classes. pickle constructor add_extensionremove_extensionclear_extension_cacheNcCsBt|stdn|t|<|dk r>t|ndS)Nz$reduction functions must be callable)callable TypeErrordispatch_tabler)ob_typepickle_functionconstructor_obr ,/opt/alt/python34/lib64/python3.4/copyreg.pyr s    cCst|stdndS)Nzconstructors must be callable)rr)objectr r r rs cCst|j|jffS)N)complexrealimag)cr r r pickle_complex"srcCsY|tkrtj|}n7|j||}|jtjkrU|j||n|S)N)r__new____init__)clsbasestateobjr r r _reconstructor)s  r cCs+x;|jjD]'}t|dr |jt@ r Pq q Wt}|tkrSd}n1||jkrxtd|jn||}|j||f}y |j}Wn[t k rt |ddrtdny |j }Wnt k rd}YnXYn X|}|rt ||fSt |fSdS)N __flags__zcan't pickle %s objects __slots__zNa class that defines __slots__ without defining __getstate__ cannot be pickled) __class____mro__hasattrr _HEAPTYPErr__name__ __getstate__AttributeErrorgetattr__dict__r)selfprotorrargsgetstatedictr r r _reduce_ex6s.         r-cGs|j||S)N)r)rr*r r r __newobj__Wsr.cCs|j|||S)zUsed by pickle protocol 4, instead of __newobj__ to allow classes with keyword-only arguments to be pickled correctly. )r)rr*kwargsr r r __newobj_ex__Zsr0c Cs|jjd}|dk r"|Sg}t|ds:nx|jD]}d|jkrD|jd}t|tr|f}nxl|D]a}|dkrqq|jdr|jd r|jd|j |fq|j|qWqDqDWy ||_ WnYnX|S) aReturn a list of slot names for a given class. This needs to find slots defined by the class and its bases, so we can't simply return the __slots__ attribute. We must walk down the Method Resolution Order and concatenate the __slots__ of each class found there. (This assumes classes don't modify their __slots__ attribute to misrepresent their slots after the class is defined.) __slotnames__Nrr' __weakref____z_%s%s)z__dict__z __weakref__) r'getr!r isinstancestr startswithendswithappendr#r1)rnamesrslotsnamer r r _slotnames`s,       r=cCst|}d|ko#dkns7tdn||f}tj||krqtj||krqdS|tkrtd|t|fn|tkrtd|t|fn|t|<|t|s.     !   8  lib64/python3.4/__pycache__/crypt.cpython-34.pyo000064400000004605152342604300015247 0ustar00 e fW@s]dZddlZddlZddlmZddlmZ ej ej dZ eZ Gddde ddZdd d Zdd d Zed dddZeddddZeddddZeddddZgZxQeeefD]@ZedeZereeejkrejeqqWeje[[dS)zEWrapper to the POSIX crypt library call and associated functionality.N) SystemRandom) namedtuplez./c@s"eZdZdZddZdS)_MethodziClass representing a salt method per the Modular Crypt Format or the legacy 2-character crypt method.cCsdj|jS)Nz)formatname)selfr*/opt/alt/python34/lib64/python3.4/crypt.py__repr__sz_Method.__repr__N)__name__ __module__ __qualname____doc__r rrrr r s rz name ident salt_chars total_sizecCsg|dkrtd}n|jr4dj|jnd}|djddt|jD7}|S)zsGenerate a salt for the specified method. If not specified, the strongest available method will be used. Nrz${}$css|]}tjtVqdS)N)_srZchoice _saltchars).0charrrr szmksalt..)methodsZidentrjoinrangeZ salt_chars)methodsrrr mksalts   !)rcCs:|dkst|tr*t|}ntj||S)aRReturn a string representing the one-way hash of a password, with a salt prepended. If ``salt`` is not specified or is ``None``, the strongest available method will be selected and a salt generated. Otherwise, ``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as returned by ``crypt.mksalt()``. N) isinstancerr_cryptcrypt)ZwordZsaltrrr r#s rZCRYPT ZMD51"ZSHA2565?ZSHA5126jr)rrstringZ_stringZrandomrZ _SystemRandom collectionsrZ _namedtupleZ ascii_lettersZdigitsrrrrrZ METHOD_CRYPTZ METHOD_MD5Z METHOD_SHA256Z METHOD_SHA512r_methodZ_resultlenZ total_sizeappendrrrr s(      lib64/python3.4/__pycache__/platform.cpython-34.pyo000064400000074704152342604300015741 0ustar00 e f@sdZdZdZddlZddlZddlZddlZddlZy ejZ Wn0e k rej dkrdZ nd Z YnXd Z ej d ejZejd d d ddZddZej dejZej dejZej dejZdZd$d%Zd d d ed&d'd(Zd d d ed)d*Zd+dd,d-Zd d.d/Zej d0Zd d d dd1d2Zi d3d6d5d6d6d6d8d6d9d6d;d6d<d6d=d6d?d6d@d6dBd6Zid6d6dCd6dDd6dEd6dFd6dGd6ZdHdIZ d d d d dJdKZ!dLdMZ"d dd dNdOZ#dPdQZ$d d dddRdSZ%dTdUZ&dVdWZ'd dXdYZ(dZd[Z)d d\d]Z*d d^d_Z+idd6dd6dd6Z,ejd d dcddZ-ej.dedfZ/da0dgdhZ1didjZ2dkdlZ3dmdnZ4dodpZ5dqdrZ6dsdtZ7ej duejZ8ej dvejZ9ej dwZ:ej dxZ;iZ<ddydzZ=d{d|Z>d}d~Z?ddZ@ddZAddZBddZCddZDiZEddddZ eFdkrdejGkphdejGkZHdejGkodejGkZIeJe eIeHejKdndS)a8 This module tries to retrieve as much platform-identifying data as possible. It makes this information available via function APIs. If called from the command line, it prints the platform information concatenated as single string to stdout. The output format is useable as part of a filename. a Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee or royalty is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation or portions thereof, including modifications, that you make. EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! z1.0.7Ndoswin32win16ZNULz /dev/nullz/etcsC(__libc_init)|(GLIBC_([0-9.]+))|(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)i@cCsttjdr'tjj|}nt|d}|j|}d}xQd|ksfd|kr{tj||}nd}|s|j|}|sPnd}qNndd|jD\}} } } } } |r| rd }n| r&|d krd }| }q| |kr| }qni| r|d krd }| rY| |krY| }n| r|t |  d| kr|| }qqn|j }qNW|j ||fS) a Tries to determine the libc version that the file executable (which defaults to the Python interpreter) is linked against. Returns a tuple of strings (lib,version) which default to the given parameters in case the lookup fails. Note that the function has intimate knowledge of how different libc versions add symbols to the executable and thus is probably only useable for executables compiled using gcc. The file is read and scanned in chunks of chunksize bytes. realpathrbrslibcsGLIBCNcSs1g|]'}|dk r'|jdn|qS)Nlatin1)decode).0sr -/opt/alt/python34/lib64/python3.4/platform.py s zlibc_ver..Zlibcglibc) hasattrospathropenread _libc_searchsearchgroupslenendclose) executablelibversionZ chunksizefZbinaryposmZlibcinitrZ glibcversionZsoZthreadsZ soversionr r r libc_versF "        # r!c Cstjjdrd}xtdD]y}|j}t|dkr%|\}}nq%|dkrv|j}q%|dkr%|jd}|d}q%q%W|||fStjjdrxYtdD]H}|jd}t|dkr|dd krd |d |fSqWntjjd rtjd } xHt t| d ddD]*} | | d d dkr[| | =q[q[W| r| j d}| dd d }|||fSn|||fS)z Tries some special tricks to get the distribution information in case the default method fails. Currently supports older SuSE Linux, Caldera OpenLinux and Slackware Linux distributions. z/var/adm/inst-log/infoSuSEZMIN_DIST_VERSIONZ DIST_IDENT-z/etc/.installedrZ OpenLinuxz/usr/lib/setupNzslack-version- slackwarer(r() rrexistsrsplitrstripisdirlistdirrangesort) distnameridlineZtvtagvaluevaluesZpkgZverfilesnr r r _dist_try_harders:     "# r7z(\w+)[-_](release|version)z'(.+) release ([\d.]+)[^(]*(?:\((.+)\))?z1([^0-9]+)(?: release )?([\d.]+)[^(]*(?:\((.+)\))?r"debianfedoraredhatcentosmandrakemandrivarocksr' yellowdoggentoo UnitedLinux turbolinuxarchmageiacCsd}d}tj|}|dk r7t|jStj|}|dk rbt|jS|jj}|r|d}t|dkr|d}qnd||fS)Nrrr%)_lsb_release_versionmatchtupler_release_versionr+r*r) firstlinerr1r lr r r _parse_release_files   rKr%cCs:ytjt}Wntk r4|||fSYnX|jxd|D]L}tj|}|dk rF|j\}} ||kr|}PqqFqFWt|||St tj j t|ddddd} | j } WdQXt | \}} } |r|r|}n| r| }n| r-| }n|||fS)a Tries to determine the name of the Linux OS distribution name. The function first looks for a distribution release file in /etc and then reverts to _dist_try_harder() in case no suitable files are found. supported_dists may be given to define the set of Linux distributions to look for. It defaults to a list of currently supported Linux distributions identified by their release file name. If full_distribution_name is true (default), the full distribution read from the OS is returned. Otherwise the short name taken from supported_dists is used. Returns a tuple (distname, version, id) which default to the args given as parameters. Nrencodingzutf-8errorssurrogateescape)rr- _UNIXCONFDIROSErrorr/_release_filenamerFrr7rrjoinreadlinerK)r0rr1supported_distsfull_distribution_nameZetcfiler Z _distnameZdummyrrIZ_versionZ_idr r r linux_distribution+s0          rXcCst|||d|ddS)aS Tries to determine the name of the Linux OS distribution name. The function first looks for a distribution release file in /etc and then reverts to _dist_try_harder() in case no suitable files are found. Returns a tuple (distname, version, id) which default to the args given as parameters. rUrVr)rX)r0rr1rUr r r distcsrYrLcCs5ddl}|jdtddtj|||S)z! Portable popen() interface. rNzuse os.popen instead stacklevelr#)warningswarnDeprecationWarningrpopen)cmdmodebufsizer[r r r r^us r^c Cs|jd}|r%|j|nytt|}Wntk rR|}YnXttt|}dj|dd}|S)z Normalize the version and build strings and return a single version string using the format major.minor.build (or patchlevel). .N)r*appendmapint ValueErrorliststrrS)rbuildrJZintsZstringsr r r _norm_version}s  rkz'(?:([\w ]+) ([\w.]+) .*\[.* ([\d.]+)\])c Cs;tj|kr|||fSx~dD]i}y7t|}|j}|jr_tdnWn(tk r}zw#WYdd}~Xq#XPq#W|||fS|j}tj|}|dk r.|j \}}}|d dkr|dd }n|d dkr|dd }nt |}n|||fS) a+ Tries to figure out the OS version used and returns a tuple (system, release, version). It uses the "ver" shell command for this which is known to exists on Windows, DOS. XXX Others too ? In case this fails, the given parameters are used as defaults. vercommand /c ver cmd /c verzcommand failedNr%rb)rlrmrnr(r(r(r() sysplatformr^rrrQr+ _ver_outputrFrrk) systemreleaserZsupported_platformsr_pipeinfoZwhyr r r r _syscmd_vers,        rvZ2000ZXPZ 2003Serverr#Zpost2003Vista78z8.1rczpost8.1Z10 Zpost10Z 2008ServerZ 2008ServerR2Z 2012ServerZ 2012ServerR2Zpost2012ServerR2cs|dks$|dkr1|dkr1|||fSddlm}m}m}m}m}m}ddlmm } Gfddd|} |d} |d } d } }x]|| kr| d9} || }| j | | j |t |}|s|||fSqW| j |d}|s8|||fS||}| j|d|| sd| rq|||fS|| }| j|d |||s|||fS|jjd ?}|jjd @}|jjd ?}|||fS)Nryr#r)c_bufferPOINTERbyrefcreate_unicode_buffer StructureWinDLL)DWORDHANDLEcseZdZdfdfdfdfdfdfdfdfd fd fd fd fd fg ZdS)z*_get_real_winver..VS_FIXEDFILEINFOZ dwSignatureZdwStrucVersionZdwFileVersionMSZdwFileVersionLSdwProductVersionMSdwProductVersionLSZdwFileFlagsMaskZ dwFileFlagsZdwFileOSZ dwFileTypeZ dwFileSubtypeZ dwFileDateMSZ dwFileDateLSN)__name__ __module__ __qualname__Z_fields_r )rr r VS_FIXEDFILEINFOs             rkernel32rri)Zctypesr}r~rrrrZctypes.wintypesrrZGetModuleFileNameWZ_handlerZGetFileVersionInfoSizeWZGetFileVersionInfoWZVerQueryValueWcontentsrr)majminrjr}r~rrrrrrrrZname_lenZ actual_lennamesizeZ ver_blockZpvir )rr _get_real_winvers:$ .        ' rc(Cs'yddlm}Wn"tk r8||||fSYnXy&ddlm}m}m}m}Wn4tk rddlm}m}m}m}YnX|} t | dd\} } } dj | | | }t j | | fpt j | dfp|}| dd| | fkrzydj | j }Wqztk rv|ddd krrd |dd}nYqzXnt| d ddkrtj | | fptj | dfp|}nd} z5y&||d } || d d}WnYnXWd| r|| nX||||fS)Nr)getwindowsversion) OpenKeyEx QueryValueExCloseKeyHKEY_LOCAL_MACHINErcz {0}.{1}.{2}r#zSP{} z Service Pack ZSPZ product_typez,SOFTWARE\Microsoft\Windows NT\CurrentVersionZ CurrentType)ror ImportErrorwinregrrrr_winregrformat_WIN32_CLIENT_RELEASESgetZservice_pack_majorAttributeErrorgetattr_WIN32_SERVER_RELEASES)rsrcsdptyperrrrrZwinverrrrjkeyr r r win32_ver$sD & '     rcCsd}tjj|sdSyddl}Wntk rDdSYnXt|d}|j|}WdQX|d}d }tjj}|d krd}n|||fS) Nz0/System/Library/CoreServices/SystemVersion.plistrrZProductVersionrppcPower MacintoshZPowerPC)rrr)rr) rrr)plistlibrrloadunamemachine)fnrrZplrs versioninforr r r _mac_ver_xmlTs     rcCs&t}|dk r|S|||fS)a< Get MacOS version information and return it as tuple (release, versioninfo, machine) with versioninfo being a tuple (version, dev_stage, non_release_version). Entries which cannot be determined are set to the parameter values which default to ''. All tuple entries are strings. N)r)rsrrrur r r mac_verjs  rc CsTddlm}y'|j|}|dkr2|S|SWntk rO|SYnXdS)Nr)System) java.langrZ getPropertyr)rdefaultrr4r r r _java_getprop}s  rc Csyddl}Wn"tk r4||||fSYnXtd|}td|}|\}}}td|}td|}td|}|||f}|\}} } td| } td |}td | } || | f}||||fS) a] Version interface for Jython. Returns a tuple (release, vendor, vminfo, osinfo) with vminfo being a tuple (vm_name, vm_release, vm_vendor) and osinfo being a tuple (os_name, os_version, os_arch). Values which cannot be determined are set to the defaults given as parameters (which all default to ''). rNz java.vendorz java.versionz java.vm.namezjava.vm.vendorzjava.vm.versionz java.os.archz java.os.namezjava.os.version)rrr) rsvendorvminfoosinfojavaZvm_nameZ vm_releaseZ vm_vendoros_name os_versionos_archr r r java_vers"  rc Cs|dkrd|||fS|dkr|dkrB|||fS|jd}|ryt|d}Wntk rYqX|d}t||dsz_platform.. _/\:;"()unknownrz--r%Nr(r()rSfilterrreplace)argsrpZcleanedr r r _platforms$%  rcCsTyddl}Wntk r(|SYnXy|jSWntk rO|SYnXdS)z8 Helper to determine the node name of this machine. rN)socketrZ gethostnamerQ)rrr r r _nodes   rcCsetjj|}xLtjj|r`tjjtjjtjj|tj|}qW|S)zT In case filepath is a symlink, follow it until a real file is reached. )rrabspathislinknormpathrSdirnamereadlink)filepathr r r _follow_symlinkss  1rc Cstjdkr|Sytjd|tf}Wnttfk rN|SYnX|jj}|j }| sz|r~|S|SdS)z. Interface to the system's uname command. rrrzuname %s 2> %sN)rzwin32zwin16) rorprr^DEV_NULLrrQrr+r)Zoptionrroutputrcr r r _syscmd_unames   rc Cstjd kr|St|}y+tjd|gdtjdtj}Wnttfk rh|SYnX|j dj d}|j }| s|r|S|Sd S) z Interface to the system's file command. The function uses the -b option of the file command to have it omit the filename in its output. Follow the symlinks. It returns default in case the command should fail. rrrrWstdoutstderrrzlatin-1N)zdoszwin32zwin16) rorpr subprocessPopenPIPEZSTDOUTrrQZ communicater wait)targetrprocrrr r r _syscmd_file-s     r WindowsPErMSDOSc Cs|scddl}y|jd}Wn$|jk rK|jd}YnXt|dd}n|r{t|d}nd}| r|tjkrtjtkrttj\}}|r|}n|r|}qn||fSd|kr||fSd |krd }n*d |kr$d }nd |kr9d}nd|krNd}nTd|krxd|krod}qd}n*d|krd}nd|krd}n||fS)a Queries the given executable (defaults to the Python interpreter binary) for various architecture information. Returns a tuple (bits, linkage) which contains information about the bit architecture and the linkage format used for the executable. Both values are returned as strings. Values that cannot be determined are returned as given by the parameter presets. If bits is given as '', the sizeof(pointer) (or sizeof(long) on Python version < 1.5.2) is used as indicator for the supported pointer size. The function relies on the system's "file" command to do the actual work. This is available on most if not all Unix platforms. On some non-Unix platforms where the "file" command does not exist and the executable is set to the Python interpreter binary defaults from _default_architecture are used. rNPrJZbitrrz32-bit32bitZN32Zn32bitz64-bitrZELFZPErrZCOFFzMS-DOSr) structZcalcsizeerrorrirrorrp_default_architecture)rbitslinkagerrZfileoutbrJr r r architectureQsL                      r uname_resultz-system node release version machine processorcCsd}tdk rtSd}ytj\}}}}}Wntk rUd}YnX|sttd|||||f rW|rtj}d}d}t}d}nd}|dkrPt \}}}} |r|rd}n|s/dtj krtj j dd}q/tj j dd}n|sPtj j d|}qPn|rt |\}}}|d krd }q|d kr|d krd }d |dd krd}qd}qn|dkr|s|dkrd}qd}nd }qW|dddkrWt \}} } } d}dj| }|sT| }qTqWn|dkr| sv|dkr|}d}nyddl} Wntk rYqX| jdd\}}|dkrd}qd}n|stdd}n|dkr d}n|dkr"d}n|dkr7d}n|dkrLd}n|dkrad}n|dkrvd}n|d kr|d krd }d}nt||||||atS)an Fairly portable uname interface. Returns a tuple of strings (system, node, release, version, machine, processor) identifying the underlying platform. Note that unlike the os.uname function this also returns possible processor information as an additional tuple entry. Entries which cannot be determined are set to ''. rNrr%rZPROCESSOR_ARCHITEW6432ZPROCESSOR_ARCHITECTUREZPROCESSOR_IDENTIFIERzMicrosoft WindowsrZ Microsoftz6.0rcrxrrZ16bitrJavaz, ZOpenVMS0zSYI$_CPUZAlphaZVAXz-pr)zwin32zwin16) _uname_cacherrrrhrrorprrenvironrrvrrSvms_librZgetsyirr)Z no_os_uname processorrrnodersrrZuse_syscmd_verrrrrrrZcsidZ cpu_numberr r r rs    +                                   rcCs tjS)z Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. An empty string is returned if the value cannot be determined. )rrrr r r r rr4srrcCs tjS)z Returns the computer's network name (which may not be fully qualified) An empty string is returned if the value cannot be determined. )rrr r r r r=srcCs tjS)z Returns the system's release, e.g. '2.2.0' or 'NT' An empty string is returned if the value cannot be determined. )rrsr r r r rsGsrscCs tjS)z Returns the system's release version, e.g. '#3 on degas' An empty string is returned if the value cannot be determined. )rrr r r r rPsrcCs tjS)zt Returns the machine type, e.g. 'i386' An empty string is returned if the value cannot be determined. )rrr r r r rYsrcCs tjS)a Returns the (true) processor name, e.g. 'amdk6' An empty string is returned if the value cannot be determined. Note that many platforms do not provide this information or simply return the same value as for machine(), e.g. NetBSD does this. )rrr r r r rbs rzB([\w.+]+)\s*\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*\[([^\]]+)\]?z;IronPython\s*([\d\.]+)(?: \(([\d\.]+)\))? on (.NET [\d\.]+)zU([\d.]+)\s*\(IronPython\s*[\d.]+\s*\(([\d.]+)\) on ([\w.]+ [\d.]+(?: \(\d+-bit\))?)\)zE([\w.+]+)\s*\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*\[PyPy [^\]]+\]?cCs|dkrtj}ntj|d}|dk r:|Sd|krd}|jdrmtj|}ntj|}|dkrtdt |n|j \}}}d}d}n=tj jdr8d}t j|}|dkrtdt |n|j \}}}} } tj }nd|krd}t j|}|dkr~td t |n|j \}}}} d}nct j|}|dkrtd t |n|j \}}}} }d }|d | }ttd r&tj\} } } n0ttdrJtj\} } } n d} d} |jd} t| dkr| jddj| }n||| | |||f}|t|<|S)a Returns a parsed version of Python's sys.version as tuple (name, version, branch, revision, buildno, builddate, compiler) referring to the Python implementation name, version, branch, revision, build number, build date/time as string and the compiler identification string. Note that unlike the Python sys.version, the returned value for the Python version will always include the patchlevel (it defaults to '.0'). The function returns empty strings for tuple entries that cannot be determined. sys_version may be given to parse an alternative version string, e.g. if the version was read from a different Python interpreter. NZ IronPythonz*failed to parse IronPython sys.version: %srrZJythonz&failed to parse Jython sys.version: %sZPyPyz$failed to parse PyPy sys.version: %sz'failed to parse CPython sys.version: %sZCPythonr _mercurial subversionrbr#r)ror_sys_version_cacher startswith_ironpython_sys_version_parserrF _ironpython26_sys_version_parserrgreprrrp_sys_version_parser_pypy_sys_version_parserrrrr*rrdrS) sys_versionresultrrFrZ alt_versionZcompilerZbuildnoZ builddateZ buildtimerbranchZrevisionrJr r r _sys_versionsn              r cCs tdS)aR Returns a string identifying the Python implementation. Currently, the following implementations are identified: 'CPython' (C implementation of Python), 'IronPython' (.NET implementation of Python), 'Jython' (Java implementation of Python), 'PyPy' (Python implementation of Python). r)r r r r r python_implementations r cCs tdS)z Returns the Python version as string 'major.minor.patchlevel' Note that unlike the Python sys.version, the returned value will always include the patchlevel (it defaults to 0). r%)r r r r r python_versionsr cCsttdjdS)z Returns the Python version as tuple (major, minor, patchlevel) of strings. Note that unlike the Python sys.version, the returned value will always include the patchlevel (it defaults to 0). r%rb)rGr r*r r r r python_version_tuples rcCs tdS)z Returns a string identifying the Python implementation branch. For CPython this is the Subversion branch from which the Python binary was built. If not available, an empty string is returned. r#)r r r r r python_branchs rcCs tdS)z Returns a string identifying the Python implementation revision. For CPython this is the Subversion revision from which the Python binary was built. If not available, an empty string is returned. rc)r r r r r python_revisions rcCstddS)zh Returns a tuple (buildno, builddate) stating the Python build number and date as strings. rry)r r r r r python_build+srcCs tdS)zS Returns a string identifying the compiler used for compiling Python. ry)r r r r r python_compiler3src Cs[tj||fd}|dk r(|St\}}}}}}||krXd}n|r|t|||\}}}n|dkrt|\} } } } |rt||} qGt|||| } nw|d krYtd\}}}|r"| r"t||||d|||} qGttj \}}t||||d||} n|dkrt \}}}\}}}|s| rt|||} qGt|||d|||} n|dkr|rt||} qGt|||} nH|rt||} n0t tj \}}t||||||} | t||f<| S) a Returns a single string identifying the underlying platform with as much useful information as possible (but no more :). The output is intended to be human readable rather than machine parseable. It may look different on different platforms and this is intended. If "aliased" is true, the function will use aliases for various platforms that report system names which differ from their common names, e.g. SunOS will be reported as Solaris. The system_alias() function is used to implement this. Setting terse to true causes the function to return only the absolute minimum information needed to identify the platform. NrrLinuxwithrZonZMacOS)r) _platform_cacherrrrrrYr!rorrr)aliasedterser rrrrsrrrZrelZversrrrpr0Z distversionZdistidZlibcnameZ libcversionrLvrrrrrrr r r rp?sR           rp__main__rz--terseZ nonaliasedz --nonaliased)doswin32win16)zSuSEr8r9r:r;r<r=r>z slackwarer?r@rArBrCrDr()rrr)rwr)rwr%)rwr#)rwN)ryr)ryr%)ryr#)ryrc)ryN)r|r)r|N)rwr#)ryr)ryr%)ryr#)ryrc)ryN)rrr)rrr)rrr)rz WindowsPE)rzWindows)rzMSDOS)L__doc__Z __copyright__ __version__ collectionsrorrerdevnullrrrprPcompileASCIIrrr!r7rRrErHZ_supported_distsrKrXrYr^rkrqrvrrrrrrrrrrrrrrrr namedtuplerrrrrrrsrrrrrrrrr r r rrrrrrrargvrrprintexitr r r r  sf 0       8 0      5  /   ;0  # 6   T       d   S lib64/python3.4/__pycache__/cgitb.cpython-34.pyc000064400000025470152342604300015165 0ustar00 j f /@s%dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddZ gZ ddZ ddZd d Zd d Zd dZdddZdddZGdddZejZddddddZdS)aMore comprehensive traceback formatting for Python scripts. To enable this module, do: import cgitb; cgitb.enable() at the top of your script. The optional arguments to enable() are: display - if true, tracebacks are displayed in the web browser logdir - if set, tracebacks are written to files in this directory context - number of lines of source code to show for each stack frame format - 'text' or 'html' controls the output format By default, tracebacks are displayed but not saved, the context is 5 lines and the output format is 'html' (for backwards compatibility with the original use of this module) Alternatively, if you have caught an exception and want cgitb to display it for you, call cgitb.handler(). The optional argument to handler() is a 3-item tuple (etype, evalue, etb) just like the value of sys.exc_info(). The default handler displays output as HTML. NcCsdS)zAReturn a string that resets the CGI and browser to a known state.a' --> --> rrr*/opt/alt/python34/lib64/python3.4/cgitb.pyreset#srcCs|rd|dSdSdS)Nzzr)textrrrsmall.s rcCs|rd|dSdSdS)Nzz rr)rrrrstrong4s rcCs|rd|dSdSdS)Nzzrr)rrrrgrey:s r cCs||krd||fS||jkr:d|j|fSd|jkr|jd}t|tikr||krd||fSqt||rdt||fSndtfS)z9Find the value for a given name in the given environment.localglobal __builtins__builtinN) f_globalstypehasattrgetattr __UNDEF__)nameframelocalsbuiltinsrrrlookup@s   rcCs2gdddtf\}}}}}xtj|D]\}} } } } |tjkr\Pn|tjkr| tjkr|dkr|tk rt|| t}|j|| ||fqq$t | ||\} }|j| | |fn/| dkr||d7}|}n d\}}| }q4W|S)zEScan one logical line of Python and look up values of variables used.Nr.)Nr) rtokenizegenerate_tokensNEWLINENAMEkeywordkwlistrappendr)readerrrvarsZ lasttokenparentprefixvalueZttypetokenstartendlinewhererrrscanvarsPs"$%       r*c" s|\}}}t|tr*|j}ndtjjddtj}tjtj}dt j j dt t j j t|dd|d|d }d td d d }g} tj||} x| D]\} } } }}r.tjjdt j j f}n d}tj| \}}}}d}| dkrdt | tj||||ddd}ni| gfdd}t|| |}dd||fg}|dk r| |}x|D]}td d tt|t|d }|krpd|t j j|f}|jd|n3d|t j j|f}|jdt||d7}qWnig}}x|D]\}}} ||krqnd||<| tk r|d-kr"d!|t |}n8|d"kr=t |}n|t |jd#d.}|jd$|t j j| fq|j|d%qW|jdttd&j|| jd'd(j|qWd)t t j j t|t j j t|fg}!xet|D]W}|ddd*krEq#nt j jt ||} |!jd+||| fq#W|dj| dj|!d,t j j djt!j"|||S)/z9Return a nice HTML document describing a given traceback.zPython rz: zz%sz#ffffffz#6622aaz
    z

    A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

    zz r+z  z
    %s?rzin formatvaluecSsdtjj|S)N=)pydochtmlrepr)r$rrrszhtml..c s<d|d.readerz+%s%s %sz Nz=>%s%sz&%sz  %s%sz%sr3r r z %s r rz %s = %sz undefinedz, zF %s
     z

    %s: %s_z
    %s%s = %sz )zglobalzbuiltin)# isinstancer__name__sysversionsplit executabletimectimer/r0Zheadingrescapestrrinspectgetinnerframesospathabspath getargvaluesformatargvaluesr*lenZ preformatrr rr1joindirr tracebackformat_exception)"einfocontextetypeevalueetbpyverdateheadindentframesrecordsrr6funclinesindexlinkargsvarargsvarkwrcallr r!rowsir(numdonedumprr)r$ exceptionr)r7r8rr0es| "@      .       && r0c sl|\}}}t|tr*|j}ndtjjddtj}tjtj}dt |||fd}g}t j ||} x*| D]"\} } } } }rt j jpdt j| \}}}}d}| dkr/d| t j||||d d d }ni| gfd d }t|| |}d|fg}|dk r| |}x<| D]1}d|}|j||j|d7}qWnig}}x|D]\}}}||krqnd||<|tk rz|dkr.d|}n&|dkrT||jdd}n|jd|tjj|fq|j|dqW|jdj||jddj|qWdt |t |fg}xIt|D];}tjjt||}|jdd ||fqW|dj|dj|ddjtj|||S)!z:Return a plain text document describing a given traceback.zPython rz: z %s %s %s z A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred. r,rzin r-cSsdtjj|S)Nr.)r/rr1)r$rrrr2sztext..c s<d|d.readerz %s %sNz%5d r3r zglobal r rz%s = %sz undefinedr9z %s z%s: %sz %s%s = %s zc The above is a description of an error in a Python program. Here is the original traceback: %s r;z )r<rr=r>r?r@rArBrCrErFrGrHrIrJrKrLr*rrstriprr/rr1rNrOrrPrQ) rRrSrTrUrVrWrXrYr[r\rr6r]r^r_rarbrcrrdr r!rerfr(rgrhrirr)r$rjr)r7r8rrs^ "           &rc@sLeZdZdZdddddddZdd Zdd d ZdS) Hookz?A hook to replace sys.excepthook that shows tracebacks in HTML.r3Nr+r0cCs:||_||_||_|p'tj|_||_dS)N)displaylogdirrSr>stdoutr7format)selfrorprSr7rrrrr__init__s    z Hook.__init__cCs|j|||fdS)N)handle)rsrTrUrVrrr__call__ sz Hook.__call__c Cs|ptj}|jdkr7|jjtn|jdkrLtpOt}d}y|||j}Wn&dj t j |}d}YnX|j r|r|j ddj dd}|jjd |d q|jj|d n|jjd |jdk rd dg|jdk}tjd|d|j\}}y7tj|d}|j||jd|} Wnd|} YnX|jdkr|jjd| q|jj| d ny|jjWnYnXdS)Nr0FrT&z&z r9z*

    A problem occurred in a Python script. z.txtz.htmlsuffixrOwz*%s contains the description of this error.z*Tried to save traceback to %s, but failed.z

    %s

    )r>exc_inforrr7writerr0rrSrNrPrQroreplacerptempfileZmkstemprHfdopencloseflush) rsinfoZ formatterZplaindocryfdrIr7msgrrrrusB  !  z Hook.handle)r= __module__ __qualname____doc__rtrvrurrrrrns   rnr3c Cs(td|d|d|d|t_dS)aInstall an exception handler that formats tracebacks as HTML. The optional argument 'display' can be set to 0 to suppress sending the traceback to the browser, and 'logdir' can be set to a directory to cause tracebacks to be written to files there.rorprSrrN)rnr> excepthook)rorprSrrrrrenable9sr)rrFrr4rHr/r>r~rBrrPrrrrr rr*r0rrnruZhandlerrrrrrs,                ZA8 lib64/python3.4/__pycache__/tty.cpython-34.pyo000064400000002172152342604300014723 0ustar00 e fo@shdZddlTddgZdZdZdZdZdZd Zd Z e d dZ e d dZ d S)zTerminal utilities.)*setraw setcbreakcCst|}|tttBtBtBtB@|t<|tt@|t<|t t t B@|t <|t t B|t <|t ttBtBtB@|t s   lib64/python3.4/__pycache__/genericpath.cpython-34.pyc000064400000006645152342604300016371 0ustar00 j f* @sdZddlZddlZddddddd d d d d g ZddZdd Zdd ZddZddZddZ ddZ ddZ dd Z dd Z dd ZddZdS)z Path operations common to more than one OS Do not use directly. The OS specific modules import the appropriate functions from this module themselves. N commonprefixexistsgetatimegetctimegetmtimegetsizeisdirisfilesamefile sameopenfilesamestatc Cs.ytj|Wntk r)dSYnXdS)zDTest whether a path exists. Returns False for broken symbolic linksFT)osstatOSError)pathr0/opt/alt/python34/lib64/python3.4/genericpath.pyrs   c Cs<ytj|}Wntk r+dSYnXtj|jS)z%Test whether a path is a regular fileF)r rrS_ISREGst_mode)rstrrrr s   c Cs<ytj|}Wntk r+dSYnXtj|jS)zs"         lib64/python3.4/__pycache__/chunk.cpython-34.pyc000064400000012226152342604300015200 0ustar00 f f1@sdZGdddZdS)aSimple class to read IFF chunks. An IFF chunk (used in formats such as AIFF, TIFF, RMFF (RealMedia File Format)) has the following structure: +----------------+ | ID (4 bytes) | +----------------+ | size (4 bytes) | +----------------+ | data | | ... | +----------------+ The ID is a 4-byte string which identifies the type of chunk. The size field (a 32-bit value, encoded using big-endian byte order) gives the size of the whole chunk, including the 8-byte header. Usually an IFF-type file consists of one or more chunks. The proposed usage of the Chunk class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end of the file, creating a new instance will fail with an EOFError exception. Usage: while True: try: chunk = Chunk(file) except EOFError: break chunktype = chunk.getname() while True: data = chunk.read(nbytes) if not data: pass # do something with data The interface is file-like. The implemented methods are: read, close, seek, tell, isatty. Extra methods are: skip() (called by close, skips to the end of the chunk), getname() (returns the name (ID) of the chunk) The __init__ method has one required argument, a file-like object (including a chunk instance), and one optional argument, a flag which specifies whether or not chunks are aligned on 2-byte boundaries. The default is 1, i.e. aligned. c@seZdZdddddZddZddZd d Zd d Zd ddZddZ dddZ ddZ dS)ChunkTFcCsddl}d|_||_|r-d}nd}||_|jd|_t|jdkrltny*|j|d|jdd|_ Wn|j k rtYnX|r|j d|_ nd|_ y|jj |_ Wn!ttfk rd|_Yn Xd|_dS) NF><LT)structclosedalignfileread chunknamelenEOFErrorZ unpack_from chunksizeerror size_readtelloffsetAttributeErrorOSErrorseekable)selfr r Z bigendianZ inclheaderrZstrflagr*/opt/alt/python34/lib64/python3.4/chunk.py__init__4s,      *  zChunk.__init__cCs|jS)z*Return the name (ID) of the current chunk.)r )rrrrgetnameNsz Chunk.getnamecCs|jS)z%Return the size of the current chunk.)r)rrrrgetsizeRsz Chunk.getsizec Cs+|js'z|jWdd|_XndS)NT)r skip)rrrrcloseVs z Chunk.closecCs|jrtdndS)NzI/O operation on closed fileF)r ValueError)rrrrisatty]s z Chunk.isattyrcCs|jrtdn|js0tdn|dkrL||j}n|dkrh||j}n|dks||jkrtn|jj|j |d||_dS)zSeek to specified position into the chunk. Default position is 0 (start of chunk). If the file is not seekable, this will result in an error. zI/O operation on closed filez cannot seekrN) r r rrrr RuntimeErrorr seekr)rposwhencerrrr%bs     z Chunk.seekcCs|jrtdn|jS)NzI/O operation on closed file)r r r)rrrrrus z Chunk.tellr"cCs|jrtdn|j|jkr.dS|dkrM|j|j}n||j|jkrv|j|j}n|jj|}|jt||_|j|jkr|jr|jd@r|jjd}|jt||_n|S)zRead at most size bytes from the chunk. If size is omitted or negative, read until the end of the chunk. zI/O operation on closed filerr")r r rrr r rr )rsizedatadummyrrrr zs     z Chunk.readc Cs|jrtdn|jry^|j|j}|jrW|jd@rW|d}n|jj|d|j||_dSWqtk rYqXnxM|j|jkrt d|j|j}|j |}|st qqWdS)zSkip the rest of the chunk. If you are not interested in the contents of the chunk, this method should be called so that the file points to the start of the next chunk. zI/O operation on closed filer"Ni ) r r rrrr r r%rminr r)rnr+rrrrs"    z Chunk.skipN) __name__ __module__ __qualname__rrrrr!r%rr rrrrrr3s      rN)__doc__rrrrr1slib64/python3.4/__pycache__/difflib.cpython-34.pyo000064400000166063152342604300015514 0ustar00 e f? @sdZddddddddd d d g Zd d lZd dlmZed dZddZGdddZddddZ ddZ GdddZ d d l Z e j djddZdddZddZdddddd d!d Zd"d#Zdddddd d$dZd ed%dZd d ed&d'Zd(Zd)Zd*Zd+ZGd,d d eZ[ d-dZd.d/Zed0krend S)1ae Module difflib -- helpers for computing deltas between objects. Function get_close_matches(word, possibilities, n=3, cutoff=0.6): Use SequenceMatcher to return list of the best "good enough" matches. Function context_diff(a, b): For two lists of strings, return a delta in context diff format. Function ndiff(a, b): Return a delta: the difference between `a` and `b` (lists of strings). Function restore(delta, which): Return one of the two sequences that generated an ndiff delta. Function unified_diff(a, b): For two lists of strings, return a delta in unified diff format. Class SequenceMatcher: A flexible class for comparing pairs of sequences of any type. Class Differ: For producing human-readable deltas from sequences of lines of text. Class HtmlDiff: For producing HTML side by side comparison with change highlights. get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNK IS_LINE_JUNK context_diff unified_diffHtmlDiffMatchN) namedtupleza b sizecCs|rd||SdS)Ng@g?)matcheslengthrr,/opt/alt/python34/lib64/python3.4/difflib.py_calculate_ratio&s rc@seZdZdZddddddZddZd d Zd d Zd dZddZ ddZ ddZ dddZ ddZ ddZddZdS)ra SequenceMatcher is a flexible class for comparing pairs of sequences of any type, so long as the sequence elements are hashable. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980's by Ratcliff and Obershelp under the hyperbolic name "gestalt pattern matching". The basic idea is to find the longest contiguous matching subsequence that contains no "junk" elements (R-O doesn't address junk). The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that "look right" to people. SequenceMatcher tries to compute a "human-friendly diff" between two sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the longest *contiguous* & junk-free matching subsequence. That's what catches peoples' eyes. The Windows(tm) windiff has another interesting notion, pairing up elements that appear uniquely in each sequence. That, and the method here, appear to yield more intuitive difference reports than does diff. This method appears to be the least vulnerable to synching up on blocks of "junk lines", though (like blank lines in ordinary text files, or maybe "

    " lines in HTML files). That may be because this is the only method of the 3 that has a *concept* of "junk" . Example, comparing two strings, and considering blanks to be "junk": >>> s = SequenceMatcher(lambda x: x == " ", ... "private Thread currentThread;", ... "private volatile Thread currentThread;") >>> .ratio() returns a float in [0, 1], measuring the "similarity" of the sequences. As a rule of thumb, a .ratio() value over 0.6 means the sequences are close matches: >>> print(round(s.ratio(), 3)) 0.866 >>> If you're only interested in where the sequences match, .get_matching_blocks() is handy: >>> for block in s.get_matching_blocks(): ... print("a[%d] and b[%d] match for %d elements" % block) a[0] and b[0] match for 8 elements a[8] and b[17] match for 21 elements a[29] and b[38] match for 0 elements Note that the last tuple returned by .get_matching_blocks() is always a dummy, (len(a), len(b), 0), and this is the only case in which the last tuple element (number of elements matched) is 0. If you want to know how to change the first sequence into the second, use .get_opcodes(): >>> for opcode in s.get_opcodes(): ... print("%6s a[%d:%d] b[%d:%d]" % opcode) equal a[0:8] b[0:8] insert a[8:8] b[8:17] equal a[8:29] b[17:38] See the Differ class for a fancy human-friendly file differencer, which uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. See also function get_close_matches() in this module, which shows how simple code building on SequenceMatcher can be used to do useful work. Timing: Basic R-O is cubic time worst case and quadratic time expected case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear. Methods: __init__(isjunk=None, a='', b='') Construct a SequenceMatcher. set_seqs(a, b) Set the two sequences to be compared. set_seq1(a) Set the first sequence to be compared. set_seq2(b) Set the second sequence to be compared. find_longest_match(alo, ahi, blo, bhi) Find longest matching block in a[alo:ahi] and b[blo:bhi]. get_matching_blocks() Return list of triples describing matching subsequences. get_opcodes() Return list of 5-tuples describing how to turn a into b. ratio() Return a measure of the sequences' similarity (float in [0,1]). quick_ratio() Return an upper bound on .ratio() relatively quickly. real_quick_ratio() Return an upper bound on ratio() very quickly. NTcCs6||_d|_|_||_|j||dS)a!Construct a SequenceMatcher. Optional arg isjunk is None (the default), or a one-argument function that takes a sequence element and returns true iff the element is junk. None is equivalent to passing "lambda x: 0", i.e. no elements are considered to be junk. For example, pass lambda x: x in " \t" if you're comparing lines as sequences of characters, and don't want to synch up on blanks or hard tabs. Optional arg a is the first of two sequences to be compared. By default, an empty string. The elements of a must be hashable. See also .set_seqs() and .set_seq1(). Optional arg b is the second of two sequences to be compared. By default, an empty string. The elements of b must be hashable. See also .set_seqs() and .set_seq2(). Optional arg autojunk should be set to False to disable the "automatic junk heuristic" that treats popular elements as junk (see module documentation for more information). N)isjunkabautojunkset_seqs)selfrrrrrrr__init__s;  zSequenceMatcher.__init__cCs|j||j|dS)zSet the two sequences to be compared. >>> s = SequenceMatcher() >>> s.set_seqs("abcd", "bcde") >>> s.ratio() 0.75 N)set_seq1set_seq2)rrrrrrrs zSequenceMatcher.set_seqscCs0||jkrdS||_d|_|_dS)aMSet the first sequence to be compared. The second sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq1("bcde") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq2(). N)rmatching_blocksopcodes)rrrrrrs zSequenceMatcher.set_seq1cCsC||jkrdS||_d|_|_d|_|jdS)aMSet the second sequence to be compared. The first sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq2("abcd") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq1(). N)rrr fullbcount_SequenceMatcher__chain_b)rrrrrrs   zSequenceMatcher.set_seq2c Cs\|j}i|_}x9t|D]+\}}|j|g}|j|q#Wt|_}|j}|rx0|jD]"}||r~|j |q~q~Wx|D] }||=qWnt|_ }t |} |j rX| dkrX| dd} x<|j D].\}} t | | kr |j |q q Wx|D] }||=qDWndS)Nd)rb2j enumerate setdefaultappendsetbjunkrkeysaddZbpopularlenritems) rrr$ieltindicesZjunkrZpopularnZntestZidxsrrrZ __chain_b)s,       zSequenceMatcher.__chain_bcCs|j|j|j|jjf\}}}}||d} } } i} g} xt||D]}| j}i}x|j||| D]z}||krqn||krPn||ddd}||<|| kr||d||d|} } } qqW|} q]Wxm| |kr| |kr||| d r|| d|| dkr| d| d| d} } } qWx_| | |kr| | |kr||| |  r|| | || | kr| d7} qWxl| |krQ| |krQ||| drQ|| d|| dkrQ| d| d| d} } } qWx^| | |kr| | |kr||| | r|| | || | kr| d} qUWt| | | S)aFind longest matching block in a[alo:ahi] and b[blo:bhi]. If isjunk is not defined: Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where alo <= i <= i+k <= ahi blo <= j <= j+k <= bhi and for all (i',j',k') meeting those conditions, k >= k' i <= i' and if i == i', j <= j' In other words, of all maximal matching blocks, return one that starts earliest in a, and of all those maximal matching blocks that start earliest in a, return the one that starts earliest in b. >>> s = SequenceMatcher(None, " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) Match(a=0, b=4, size=5) If isjunk is defined, first the longest matching block is determined as above, but with the additional restriction that no junk element appears in the block. Then that block is extended as far as possible by matching (only) junk elements on both sides. So the resulting block never matches on junk except as identical junk happens to be adjacent to an "interesting" match. Here's the same example as before, but considering blanks to be junk. That prevents " abcd" from matching the " abcd" at the tail end of the second sequence directly. Instead only the "abcd" can match, and matches the leftmost "abcd" in the second sequence: >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) Match(a=1, b=0, size=4) If no blocks match, return (alo, blo, 0). >>> s = SequenceMatcher(None, "ab", "c") >>> s.find_longest_match(0, 2, 0, 1) Match(a=0, b=0, size=0) r r#)rrr$r) __contains__rangegetr )raloahiblobhirrr$ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr.Zj2lengetZnewj2lenjkrrrfind_longest_matchPsB8-    + $# $#z"SequenceMatcher.find_longest_matchcCs|jdk r|jSt|jt|j}}d|d|fg}g}x|r'|j\}}}}|j||||\} } } } | rS|j| || kr|| kr|j|| || fn| | |kr$| | |kr$|j| | || | |fq$qSqSW|jd} }}g}xw|D]o\}}}| ||kr|||kr||7}qM|r|j| ||fn|||} }}qMW|r|j| ||fn|j||dftt t j ||_|jS)aReturn list of triples describing matching subsequences. Each triple is of the form (i, j, n), and means that a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in i and in j. New in Python 2.5, it's also guaranteed that if (i, j, n) and (i', j', n') are adjacent triples in the list, and the second is not the last triple in the list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe adjacent equal blocks. The last triple is a dummy, (len(a), len(b), 0), and is the only triple with n==0. >>> s = SequenceMatcher(None, "abxcd", "abcd") >>> list(s.get_matching_blocks()) [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)] Nr ) rr,rrpopr;r'sortlistmapr _make)rlalbZqueuerr5r6r7r8r.r9r:xi1j1Zk1Z non_adjacenti2j2Zk2rrrget_matching_blockss8 %  +   z#SequenceMatcher.get_matching_blockscCs|jdk r|jSd}}g|_}x|jD]\}}}d}||krp||krpd}n*||krd}n||krd}n|r|j|||||fn||||}}|r:|jd||||fq:q:W|S)a[Return list of 5-tuples describing how to turn a into b. Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the tuple preceding it, and likewise for j1 == the previous j2. The tags are strings, with these meanings: 'replace': a[i1:i2] should be replaced by b[j1:j2] 'delete': a[i1:i2] should be deleted. Note that j1==j2 in this case. 'insert': b[j1:j2] should be inserted at a[i1:i1]. Note that i1==i2 in this case. 'equal': a[i1:i2] == b[j1:j2] >>> a = "qabxcd" >>> b = "abycdf" >>> s = SequenceMatcher(None, a, b) >>> for tag, i1, i2, j1, j2 in s.get_opcodes(): ... print(("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % ... (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))) delete a[0:1] (q) b[0:0] () equal a[1:3] (ab) b[0:2] (ab) replace a[3:4] (x) b[2:3] (y) equal a[4:6] (cd) b[3:5] (cd) insert a[6:6] () b[5:6] (f) Nr rreplacedeleteinsertequal)rrHr')rr.r9Zansweraibjsizetagrrr get_opcodess$       #zSequenceMatcher.get_opcodesc cs|j}|sdg}n|dddkr|d\}}}}}|t||||t||||f|d>> from pprint import pprint >>> a = list(map(str, range(1,40))) >>> b = a[:] >>> b[8:8] = ['i'] # Make an insertion >>> b[20] += 'x' # Make a replacement >>> b[23:28] = [] # Make a deletion >>> b[30] += 'y' # Make another replacement >>> pprint(list(SequenceMatcher(None,a,b).get_grouped_opcodes())) [[('equal', 5, 8, 5, 8), ('insert', 8, 8, 8, 9), ('equal', 8, 11, 9, 12)], [('equal', 16, 19, 17, 20), ('replace', 19, 20, 20, 21), ('equal', 20, 22, 21, 23), ('delete', 22, 27, 23, 23), ('equal', 27, 30, 23, 26)], [('equal', 31, 34, 27, 30), ('replace', 34, 35, 30, 31), ('equal', 35, 38, 31, 34)]] rLr r#N)zequalr r#r r#rSrS)rQmaxminr'r,) rr1ZcodesrPrDrFrErGZnngrouprrrget_grouped_opcodes<s(  66 6* -z#SequenceMatcher.get_grouped_opcodescCsBtdd|jD}t|t|jt|jS)aReturn a measure of the sequences' similarity (float in [0,1]). Where T is the total number of elements in both sequences, and M is the number of matches, this is 2.0*M / T. Note that this is 1 if the sequences are identical, and 0 if they have nothing in common. .ratio() is expensive to compute if you haven't already computed .get_matching_blocks() or .get_opcodes(), in which case you may want to try .quick_ratio() or .real_quick_ratio() first to get an upper bound. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.quick_ratio() 0.75 >>> s.real_quick_ratio() 1.0 css|]}|dVqdS)r#NrSr).0Ztriplerrr sz(SequenceMatcher.ratio..)sumrHrr,rr)rrrrrrationszSequenceMatcher.ratiocCs|jdkrMi|_}x.|jD] }|j|dd|| 0. Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities that don't score at least that similar to word are ignored. The best (no more than n) matches among the possibilities are returned in a list, sorted by similarity score, most similar first. >>> get_close_matches("appel", ["ape", "apple", "peach", "puppy"]) ['apple', 'ape'] >>> import keyword as _keyword >>> get_close_matches("wheel", _keyword.kwlist) ['while'] >>> get_close_matches("Apple", _keyword.kwlist) [] >>> get_close_matches("accept", _keyword.kwlist) ['except'] r zn must be > 0: %rgg?z cutoff must be in [0.0, 1.0]: %rcSsg|]\}}|qSrr)rXZscorerCrrr s z%get_close_matches..) ValueErrorrrrr]r\r[r'heapqnlargest)ZwordZ possibilitiesr1cutoffresultsrCrrrrs      cCsDdt|}}x*||kr?|||kr?|d7}qW|S)z} Return number of `ch` characters at the start of `line`. Example: >>> _count_leading(' abc', ' ') 3 r r#)r,)linechr.r1rrr_count_leadings rkc@speZdZdZddddZddZddZd d Zd d Zd dZ ddZ dS)ra Differ is a class for comparing sequences of lines of text, and producing human-readable differences or deltas. Differ uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. Each line of a Differ delta begins with a two-letter code: '- ' line unique to sequence 1 '+ ' line unique to sequence 2 ' ' line common to both sequences '? ' line not present in either input sequence Lines beginning with '? ' attempt to guide the eye to intraline differences, and were not present in either input sequence. These lines can be confusing if the sequences contain tab characters. Note that Differ makes no claim to produce a *minimal* diff. To the contrary, minimal diffs are often counter-intuitive, because they synch up anywhere possible, sometimes accidental matches 100 pages apart. Restricting synch points to contiguous matches preserves some notion of locality, at the occasional cost of producing a longer diff. Example: Comparing two texts. First we set up the texts, sequences of individual single-line strings ending with newlines (such sequences can also be obtained from the `readlines()` method of file-like objects): >>> text1 = ''' 1. Beautiful is better than ugly. ... 2. Explicit is better than implicit. ... 3. Simple is better than complex. ... 4. Complex is better than complicated. ... '''.splitlines(keepends=True) >>> len(text1) 4 >>> text1[0][-1] '\n' >>> text2 = ''' 1. Beautiful is better than ugly. ... 3. Simple is better than complex. ... 4. Complicated is better than complex. ... 5. Flat is better than nested. ... '''.splitlines(keepends=True) Next we instantiate a Differ object: >>> d = Differ() Note that when instantiating a Differ object we may pass functions to filter out line and character 'junk'. See Differ.__init__ for details. Finally, we compare the two: >>> result = list(d.compare(text1, text2)) 'result' is a list of strings, so let's pretty-print it: >>> from pprint import pprint as _pprint >>> _pprint(result) [' 1. Beautiful is better than ugly.\n', '- 2. Explicit is better than implicit.\n', '- 3. Simple is better than complex.\n', '+ 3. Simple is better than complex.\n', '? ++\n', '- 4. Complex is better than complicated.\n', '? ^ ---- ^\n', '+ 4. Complicated is better than complex.\n', '? ++++ ^ ^\n', '+ 5. Flat is better than nested.\n'] As a single multi-line string it looks like this: >>> print(''.join(result), end="") 1. Beautiful is better than ugly. - 2. Explicit is better than implicit. - 3. Simple is better than complex. + 3. Simple is better than complex. ? ++ - 4. Complex is better than complicated. ? ^ ---- ^ + 4. Complicated is better than complex. ? ++++ ^ ^ + 5. Flat is better than nested. Methods: __init__(linejunk=None, charjunk=None) Construct a text differencer, with optional filters. compare(a, b) Compare two sequences of lines; generate the resulting delta. NcCs||_||_dS)a Construct a text differencer, with optional filters. The two optional keyword parameters are for filter functions: - `linejunk`: A function that should accept a single string argument, and return true iff the string is junk. The module-level function `IS_LINE_JUNK` may be used to filter out lines without visible characters, except for at most one splat ('#'). It is recommended to leave linejunk None; as of Python 2.3, the underlying SequenceMatcher class has grown an adaptive notion of "noise" lines that's better than any static definition the author has ever been able to craft. - `charjunk`: A function that should accept a string of length 1. The module-level function `IS_CHARACTER_JUNK` may be used to filter out whitespace characters (a blank or tab; **note**: bad idea to include newline in this!). Use of IS_CHARACTER_JUNK is recommended. N)linejunkcharjunk)rrlrmrrrrMs zDiffer.__init__c cst|j||}x|jD]\}}}}}|dkrd|j||||||} n|dkr|jd|||} na|dkr|jd|||} n:|dkr|jd|||} ntd|f| Dd Hq"Wd S) a Compare two sequences of lines; generate the resulting delta. Each sequence must contain individual single-line strings ending with newlines. Such sequences can be obtained from the `readlines()` method of file-like objects. The delta generated also consists of newline- terminated strings, ready to be printed as-is via the writeline() method of a file-like object. Example: >>> print(''.join(Differ().compare('one\ntwo\nthree\n'.splitlines(True), ... 'ore\ntree\nemu\n'.splitlines(True))), ... end="") - one ? ^ + ore ? ^ - two - three ? - + tree + emu rIrJ-rK+rL zunknown tag %rN)rrlrQ_fancy_replace_dumprc) rrrcruncherrPr5r6r7r8grrrcomparees" !   zDiffer.compareccs1x*t||D]}d|||fVqWdS)z4Generate comparison results for a same-tagged range.z%s %sN)r3)rrPrClohir.rrrrrsz Differ._dumpc cs||||krG|jd|||}|jd|||}n0|jd|||}|jd|||}x||fD]} | DdHqWdS)Nrorn)rr) rrr5r6rr7r8firstsecondrtrrr_plain_replaceszDiffer._plain_replaceccsd\}}t|j} d\} } xt||D]} || } | j| xt||D]}||}|| kr| dkrd|| } } qdqdn| j|| j|krd| j|krd| j|krd| j|| }}}qdqdWq7W||kr^| dkrG|j||||||DdHdS| | d}}}nd} |j ||||||DdH||||}}| dkrd}}| j ||x| j D]\}}}}}||||}}|dkr"|d|7}|d|7}q|dkr?|d |7}q|d kr\|d |7}q|d kr|d |7}|d |7}qt d|fqW|j ||||DdHn d|V|j ||d|||d|DdHdS)aL When replacing one block of lines with another, search the blocks for *similar* lines; the best-matching pair (if any) is used as a synch point, and intraline difference marking is done on the similar pair. Lots of work, but often worth it. Example: >>> d = Differ() >>> results = d._fancy_replace(['abcDefghiJkl\n'], 0, 1, ... ['abcdefGhijkl\n'], 0, 1) >>> print(''.join(results), end="") - abcDefghiJkl ? ^ ^ ^ + abcdefGhijkl ? ^ ^ ^ Gz??Ng?rrI^rJrnrKrorLrpzunknown tag %rz r#)r{r|)NN)rrmr3rrr]r\r[rz _fancy_helperrrQrc_qformat)rrr5r6rr7r8Z best_ratiorfrsZeqiZeqjr9rNr.rMZbest_iZbest_jZaeltZbeltatagsbtagsrPZai1Zai2Zbj1Zbj2rArBrrrrqsX        %  !!  "     zDiffer._fancy_replaceccsg}||krZ||kr?|j||||||}q|jd|||}n'||kr|jd|||}n|DdHdS)Nrnro)rqrr)rrr5r6rr7r8rtrrrr~s  ! zDiffer._fancy_helperccstt|dt|d}t|t|d|d}t|t|d|d}||dj}||dj}d|V|rdd||fVnd|V|rdd||fVndS)a Format "?" output and deal with leading tabs. Example: >>> d = Differ() >>> results = d._qformat('\tabcDefghiJkl\n', '\tabcdefGhijkl\n', ... ' ^ ^ ^ ', ' ^ ^ ^ ') >>> for line in results: print(repr(line)) ... '- \tabcDefghiJkl\n' '? \t ^ ^ ^\n' '+ \tabcdefGhijkl\n' '? \t ^ ^ ^\n'  Nrpz- z? %s%s z+ )rUrkrstrip)rZalineZblinerrZcommonrrrr s""  zDiffer._qformat) r^r_r`rarrurrrzrqr~rrrrrrs \ )   ^ z \s*(?:#\s*)?$cCs||dk S)z Return 1 for ignorable line: iff `line` is blank or contains a single '#'. Examples: >>> IS_LINE_JUNK('\n') True >>> IS_LINE_JUNK(' # \n') True >>> IS_LINE_JUNK('hello\n') False Nr)riZpatrrrr?sz cCs ||kS)z Return 1 for ignorable character: iff `ch` is a space or tab. Examples: >>> IS_CHARACTER_JUNK(' ') True >>> IS_CHARACTER_JUNK('\t') True >>> IS_CHARACTER_JUNK('\n') False >>> IS_CHARACTER_JUNK('x') False r)rjZwsrrrrOscCsP|d}||}|dkr-dj|S|s@|d8}ndj||S)z Convert range to the "ed" formatr#z{}z{},{})format)startstop beginningrrrr_format_range_unifiedfs     rr ccsd}xtd||j|D]} |sd}|rIdj|nd} |rddj|nd} dj|| |Vdj|| |Vn| d| d} } t| d | d }t| d | d }d j|||Vx| D]\}}}}}|dkr>x!|||D]}d|Vq%Wqn|dkrqx$|||D]}d|Vq[Wn|dkrx$|||D]}d|VqWqqWq"WdS)a Compare two sequences of lines; generate the delta as a unified diff. Unified diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with ---, +++, or @@) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The unidiff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the ISO 8601 format. Example: >>> for line in unified_diff('one two three four'.split(), ... 'zero one tree four'.split(), 'Original', 'Current', ... '2005-01-26 23:30:50', '2010-04-02 10:20:52', ... lineterm=''): ... print(line) # doctest: +NORMALIZE_WHITESPACE --- Original 2005-01-26 23:30:50 +++ Current 2010-04-02 10:20:52 @@ -1,4 +1,4 @@ +zero one -two -three +tree four FNTz {}rz --- {}{}{}z +++ {}{}{}r r#rRz@@ -{} +{} @@{}rLrprIrJrnrKrorS>replacedelete>rinsert)rrWrr)rrfromfiletofile fromfiledate tofiledater1linetermstartedrVfromdatetodaterxlast file1_range file2_rangerPrDrFrErGrirrrr qs.)"    cCsX|d}||}|s'|d8}n|dkr@dj|Sdj|||dS)z Convert range to the "ed" formatr#z{}z{},{})r)rrrrrrr_format_range_contexts     rc cstdddddddd}d } xtd ||j|D]} | sd } |rjd j|nd } |rd j|nd } dj|| |Vdj|| |Vn| d| d} }d|Vt| d|d}dj||Vtdd| DroxW| D]L\}}}}}|dkrx(|||D]}|||VqNWqqWnt| d|d}dj||Vtdd| DrCxW| D]L\}}}}}|dkrx(|||D]}|||VqWqqWqCqCWd S)ah Compare two sequences of lines; generate the delta as a context diff. Context diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with *** or ---) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The context diff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the ISO 8601 format. If not specified, the strings default to blanks. Example: >>> print(''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(True), ... 'zero\none\ntree\nfour\n'.splitlines(True), 'Original', 'Current')), ... end="") *** Original --- Current *************** *** 1,4 **** one ! two ! three four --- 1,4 ---- + zero one ! tree four rKz+ rJz- rIz! rLz FNTz {}rz *** {}{}{}z --- {}{}{}r r#z***************rz *** {} ****{}css*|] \}}}}}|dkVqdS)rIrJN>replacedeleter)rXrP_rrrrYszcontext_diff..rRrz --- {} ----{}css*|] \}}}}}|dkVqdS)rIrKN>replaceinsertr)rXrPrrrrrY srS)dictrrWrrany)rrrrrrr1rprefixrrVrrrxrrrPrDrFrrirrErGrrrrs2,!"   cCst||j||S)a Compare `a` and `b` (lists of strings); return a `Differ`-style delta. Optional keyword parameters `linejunk` and `charjunk` are for filter functions (or None): - linejunk: A function that should accept a single string argument, and return true iff the string is junk. The default is None, and is recommended; as of Python 2.3, an adaptive notion of "noise" lines is used that does a good job on its own. - charjunk: A function that should accept a string of length 1. The default is module-level function IS_CHARACTER_JUNK, which filters out whitespace characters (a blank or tab; note: bad idea to include newline in this!). Tools/scripts/ndiff.py is a command-line front-end to this function. Example: >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) >>> print(''.join(diff), end="") - one ? ^ + ore ? ^ - two - three ? - + tree + emu )rru)rrrlrmrrrrs"c#sddl}|jdt||||ddgfddfddfdd }|}|dkrxCt|VqWn1|d 7}d}xddg|} } d } xL| d krt|\} } } | |}| | | f| |<| d 7} qW| |kr2d V|}n | }d} x1|rq| |}| d 7} | |V|d 8}qAW|d }xJ|rt|\} } } | r|d }n |d 8}| | | fVqWqWdS) aReturns generator yielding marked up from/to side by side differences. Arguments: fromlines -- list of text lines to compared to tolines tolines -- list of text lines to be compared to fromlines context -- number of context lines to display on each side of difference, if None, all from/to text lines will be generated. linejunk -- passed on to ndiff (see ndiff documentation) charjunk -- passed on to ndiff (see ndiff documentation) This function returns an iterator which returns a tuple: (from line tuple, to line tuple, boolean flag) from/to line tuple -- (line num, line text) line num -- integer or None (to indicate a context separation) line text -- original line text with following markers inserted: '\0+' -- marks start of added text '\0-' -- marks start of deleted text '\0^' -- marks start of changed text '\1' -- marks end of added/deleted/changed text boolean flag -- None indicates context separation, True indicates either "from" or "to" line contains a change, otherwise False. This function/iterator was originally developed to generate side by side file difference for making HTML pages (see HtmlDiff class for example usage). Note, this function utilizes the ndiff function to generate the side by side difference markup. Optional ndiff arguments may be passed to this function and they in turn will be passed to ndiff. r Nz (\++|\-+|\^+)c sH||d7<|dkr;|||jdddfS|dkr|jd|jd}}g}|dd}j||x_|ddd D]J\}\} } |d| d||| | d || d}qW|dd}n:|jddd}|s(d }nd||d }|||fS) aReturns line of text with user's change markup and line formatting. lines -- list of lines from the ndiff generator to produce a line of text from. When producing the line of text to return, the lines used are removed from this list. format_key -- '+' return first line in list with "add" markup around the entire line. '-' return first line in list with "delete" markup around the entire line. '?' return first line in list with add/delete/change intraline markup (indices obtained from second line) None return first line in list with no markup side -- indice into the num_lines list (0=from,1=to) num_lines -- from/to current line number. This is NOT intended to be a passed parameter. It is present as a keyword argument to maintain memory of the current line numbers between calls of this function. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r#Nr r?cSs3|j|jdd|jg|jdS)Nr#r )r'rVspan)Z match_objectsub_inforrrrecord_sub_infos&z3_mdiff.._make_line..record_sub_inforprS)r<sub) linesZ format_keysideZ num_linestextZmarkersrrkeyZbeginend) change_rerr _make_line^s  ! &< z_mdiff.._make_linec 3s_g}d\}}xFxOt|dkrfy|jtWqtk rb|jdYqXqWdjdd|D}|jdr|}nR|jdr|dd|dd d fVqn|jd r|d 8}|d dd d fVqn|jdrK|d dd }}|d d}}n|jdr|d d|dd d fVqng|jdr|dd|d d d fVqn,|jd r|d 8}|d dd d fVqn|jdr3|d 7}d |dd d fVqn|jdrod |dd }}|d d}}n~|jdr|d 7}d |dd d fVqnE|jdr|d d d d|d d dfVqnx|dkr|d 7}dVqWx|dkr0|d 8}d VqW|jdrItq||d fVqWd S)!aYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from a differencing iterator, processes them and yields them. When it can it yields both a "from" and a "to" line, otherwise it will yield one or the other. In addition to yielding the lines of from/to text, a boolean flag is yielded to indicate if the text line(s) have differences in them. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r rXrcSsg|]}|dqS)r r)rXrirrrrbs z2_mdiff.._line_iterator..z-?+?rr#Tz--++rnN--?+--+- z-+?z-?+z+--ro+ +-rpFr)r r )rrr)rrrr)NrTrr)rNT)r,r'next StopIterationjoin startswith)rZnum_blanks_pendingZnum_blanks_to_yieldrh from_lineto_line)rdiff_lines_iteratorrr_line_iteratorsl   & &&   0     z_mdiff.._line_iteratorc3s}gg}}xxt|dks@t|dkrt|\}}}|dk rw|j||fn|dk r|j||fqqW|jd\}}|jd\}}|||p|fVqWdS)atYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from the line iterator. Its difference from that iterator is that this function always yields a pair of from/to text lines (with the change indication). If necessary it will collect single from/to lines until it has a matching pair from/to pair to yield. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r N)r,rr'r<)Z line_iterator fromlinestolinesrr found_diffZfromDiffZto_diff)rrr_line_pair_iterators  '  z#_mdiff.._line_pair_iteratorr#F)NNN)recompilerr)rrcontextrlrmrrZline_pair_iteratorZlines_to_writeindexZ contextLinesrrrr.r)rrrrr_mdiff4sJ" 8[              ram %(table)s%(legend)s aH table.diff {font-family:Courier; border:medium;} .diff_header {background-color:#e0e0e0} td.diff_header {text-align:right} .diff_next {background-color:#c0c0c0} .diff_add {background-color:#aaffaa} .diff_chg {background-color:#ffff77} .diff_sub {background-color:#ffaaaa}aZ %(header_row)s %(data_rows)s
    a
    Legends
    Colors
     Added 
    Changed
    Deleted
    Links
    (f)irst change
    (n)ext change
    (t)op
    c@seZdZdZeZeZeZeZdZddde ddZ dddd d d Z d d Z ddZ ddZddZddZddZddZdddd ddZdS)r a{For producing HTML side by side comparison with change highlights. This class can be used to create an HTML table (or a complete HTML file containing the table) showing a side by side, line by line comparison of text with inter-line and intra-line change highlights. The table can be generated in either full or contextual difference mode. The following methods are provided for HTML generation: make_table -- generates HTML for a single side by side table make_file -- generates complete HTML file with a single side by side table See tools/scripts/diff.py for an example usage of this class. r NcCs(||_||_||_||_dS)aHtmlDiff instance initializer Arguments: tabsize -- tab stop spacing, defaults to 8. wrapcolumn -- column number where lines are broken and wrapped, defaults to None where lines are not wrapped. linejunk,charjunk -- keyword arguments passed into ndiff() (used to by HtmlDiff() to generate the side by side HTML differences). See ndiff() documentation for argument default values and descriptions. N)_tabsize _wrapcolumn _linejunk _charjunk)rtabsizeZ wrapcolumnrlrmrrrrs   zHtmlDiff.__init__rFcCsD|jtd|jd|jd|j||||d|d|S)aReturns HTML file of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). ZstylesZlegendtablernumlines)_file_templater_styles_legend make_table)rrrfromdesctodescrrrrr make_files    zHtmlDiff.make_filecsNfddfdd|D}fdd|D}||fS)aReturns from/to line lists with tabs expanded and newlines removed. Instead of tab characters being replaced by the number of spaces needed to fill in to the next tab stop, this function will fill the space with tab characters. This is done so that the difference algorithms can identify changes in a file when tabs are replaced by spaces and vice versa. At the end of the HTML generation, the tab characters will be replaced with a nonbreakable space. csO|jdd}|jj}|jdd}|jddjdS)Nrprrr)rI expandtabsrr)ri)rrr expand_tabssz2HtmlDiff._tab_newline_replace..expand_tabscsg|]}|qSrr)rXri)rrrrbs z1HtmlDiff._tab_newline_replace..csg|]}|qSrr)rXri)rrrrbs r)rrrr)rrr_tab_newline_replaces  zHtmlDiff._tab_newline_replacec Csv|s|j||fdSt|}|j}||ks[||jdd|krr|j||fdSd}d}d}x||kr ||kr ||dkr|d7}||}|d7}q||dkr|d7}d}q|d7}|d7}qW|d|} ||d} |rL| d} d|| } n|j|| f|j|d| dS) aBuilds list of text lines by splitting text lines at wrap point This function will determine if the input text line needs to be wrapped (split) into separate lines. If so, the first wrap point will be determined and the first line appended to the output text line list. This function is used recursively to handle the second part of the split line to further split it. NrrRr rr#r>)r'r,rcount _split_line) rZ data_listZline_numrrOrTr.r1markZline1Zline2rrrrs8   )       zHtmlDiff._split_linec csx|D]\}}}|dkr6|||fVqn||\}}\}}gg} } |j| |||j| ||xZ| s| r| r| jd}nd}| r| jd}nd}|||fVqWqWdS)z5Returns iterator that splits (wraps) mdiff text linesNr rrp)rrp)rrp)rr<) rdiffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistrrr _line_wrappers   zHtmlDiff._line_wrapperc Csggg}}}x|D]\}}}y<|j|jd|||j|jd||Wn,tk r|jd|jdYnX|j|qW|||fS)zCollects mdiff output into separate lists Before storing the mdiff from/to data into a list, it is converted into a single line of text with HTML markup. r r#N)r' _format_line TypeError)rrrrflaglistrrrrrr_collect_liness   zHtmlDiff._collect_linesc Csy%d|}d|j||f}Wntk r?d}YnX|jddjddjdd }|jd d j}d |||fS) aReturns HTML markup of "from" / "to" text lines side -- 0 or 1 indicating "from" or "to" text flag -- indicates if difference on line linenum -- line number (used for line number column) text -- line text to be marked up z%dz id="%s%s"r&z&rz>%s%s)_prefixrrIr)rrrZlinenumridrrrr2s   *zHtmlDiff._format_linecCs<dtj}dtj}tjd7_||g|_dS)zCreate unique anchor prefixeszfrom%d_zto%d_r#N)r _default_prefixr)rZ fromprefixtoprefixrrr _make_prefixIs  zHtmlDiff._make_prefixcCsY|jd}dgt|}dgt|}d \} } d} xt|D]x\} } | r| sd} | } td| |g} d|| f|| <| d7} d|| f|| nz2 No Differences Found z( Empty File z!fz#t)r F)rr,r%rT)rrrrrrrnext_id next_hrefZnum_chgZ in_changerr.rrrr_convert_flagsTs:          zHtmlDiff._convert_flagsc Cs|j|j||\}}|r1|}nd}t|||d|jd|j}|jrv|j|}n|j|\} } } |j| | | ||\} } } } } g}dd}x}t t | D]i}| |dkr|dkrD|j dqDq|j || || || || || |fqW|sT|rudd d |d d |f}nd }|j t d d j|d |d|jd}|jddjddjddjddjddS)aReturns HTML table of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). Nrlrmz1 %s%sz%%s%s r z) z %s%s%s%sz!
    z+%srZ data_rows header_rowrr#Z+zZ-zZ^zrzrz )rrrrrrrrrr3r,r'_table_templaterrrrI)rrrrrrrZ context_linesrrrrrrrhZfmtr.rrrrrrsJ    $      zHtmlDiff.make_table)r^r_r`rarrrrrrrrrrrrrrrrrrrrr ts&     7    / c csy"idd6dd6t|}Wn"tk rFtd|YnXd|f}x6|D].}|dd|krZ|ddVqZqZWdS)a0 Generate one of the two sequences that generated a delta. Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract lines originating from file 1 or 2 (parameter `which`), stripping off line prefixes. Examples: >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) >>> diff = list(diff) >>> print(''.join(restore(diff, 1)), end="") one two three >>> print(''.join(restore(diff, 2)), end="") ore tree emu z- r#z+ rz)unknown delta choice (must be 1 or 2): %rz N)intKeyErrorrc)ZdeltaZwhichrPprefixesrirrrrs"   cCs%ddl}ddl}|j|S)Nr )doctestdifflibZtestmod)rrrrr_testsr__main__) ra__all__rd collectionsr Z _namedtupler rrrrkrrrmatchrrrr rrrrrrrrobjectr rrr^rrrrsL    0 O  G J$  ]  lib64/python3.4/__pycache__/stringprep.cpython-34.pyc000064400000032504152342604300016266 0ustar00 f fu2 @sdZddlmZejdks+tddZedddd d d d d dddg eeddZ ddZ idd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d&6d'd(6d)d*6d+d,6d-d.6d/d06d1d26d3d46d5d66d7d86d9d:6d;d<6d)d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6ddde6dVdf6dXdg6dZdh6d\di6d^dj6d`dk6dbdl6dddm6dndo6dpdq6drds6dtdu6dvdw6dxdy6dzd{6d|d}6dnd~6dpd6drd6dtd6dvd6dxd6dzd6d|d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d!d6dd6dd6dd6dd6dd6dd6dd6d%d6dd6dd6dd6d'd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d7d6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d d,6d-d.6d/d06d1d26d3d46d5d66d7d86d9d:6d;d<6d9d=6d>d?6d@dA6dBdC6dDdE6dFdG6dDdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUdV6dWdX6dYdZ6d[d\6d]d^6d_d`6dadb6dcdd6dedf6dgdh6didj6dkdl6dmdn6dodp6dqdr6dqds6dtdu6dvdw6dxdy6dzd{6d|d}6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd 6dd 6dd 6dd 6dd 6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6dd#6dd$6dd%6dd&6dd'6dd(6dd)6dd*6d~d+6dd,6dd-6dd.6dd/6dd06dd16dd26dd36dd46dd56dd66dd76dd86dd96dd:6dd;6dd<6dd=6dd>6dd?6dd@6ddA6ddB6ddC6ddD6d~dE6ddF6ddG6ddH6ddI6ddJ6ddK6ddL6ddM6ddN6ddO6ddP6ddQ6ddR6ddS6ddT6ddU6ddV6ddW6ddX6ddY6ddZ6dd[6dd\6dd]6dd^6d~d_6dd`6dda6ddb6ddc6ddd6dde6ddf6ddg6ddh6ddi6ddj6ddk6ddl6ddm6ddn6ddo6ddp6ddq6ddr6dds6ddt6ddu6ddv6ddw6ddx6d~dy6ddz6dd{6dd|6dd}6dd~6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d+d6dd6dd6d>d6dd6dd6d-d6d!d6d9d6dd6dd6dd6dd6dd6d7d6d;d6d-d6d)d6dd6d/d6d5d6dd6dd6dd6d)d6dd6d+d6dd6dd6d>d6dd6dd6d-d6d!d6d9d6dd6dd6dd6dd6dd6d7d6d;d6d-d6d)d6dd6d/d6d5d6dd6dd6dd6d)d6dd6d+d6dd 6dd 6d>d 6dd 6dd 6d-d6d!d6d9d6dd6dd6dd6dd6dd6d7d6d;d6d-d6d)d6dd6d/d6d5d6dd6dd6dd6d)d 6dd!6d+d"6dd#6dd$6d>d%6dd&6dd'6d-d(6d!d)6d9d*6dd+6dd,6dd-6dd.6dd/6d7d06d;d16d-d26d)d36dd46d/d56d5d66dd76dd86dd96d)d:6dd;6d+d<6dd=6dd>6d>d?6dd@6ddA6d-dB6d!dC6d9dD6ddE6ddF6ddG6ddH6ddI6d7dJ6d;dK6d-dL6d)dM6ddN6d/dO6d5dP6ddQ6ddR6ddS6d)dT6Z dUdVZ dWdXZ dYdZZd[d\Zd]d^Zd_d`Zedadbdcd ddddedgeeddfeedgdheedidjeedkdlZdmdnZdodpZdqdrZdsdtZdudvZeedidwZdxdyZeedzd{Zd|d}Zed~dddgeeddeedgdhZddZedgeeddZddZddZ ddZ!dS(zLibrary that exposes various tables found in the StringPrep RFC 3454. There are two kinds of tables: sets, for which a member test is provided, and mappings, for which a mapping function is provided. ) ucd_3_2_0z3.2.0cCsStj|dkrdSt|}d|ko<dknrEdS|d@dkS)NZCnFii)rr) unicodedatacategoryord)codecr //opt/alt/python34/lib64/python3.4/stringprep.py in_table_a1 s  r iOii i i i i i i` iiicCst|tkS)N)rb1_set)rr r r in_table_b1sruμZssui̇i0uʼniIsiuǰiuιiEu ιizuΐiuΰiuσiuβiuθiuυiuύiuϋiuφiuπiuκiuρiiuεiuեւiuẖiuẗiuẘiuẙiuaʾiuṡiuὐiPuὒiRuὔiTuὖiVuἀιiuἁιiuἂιiuἃιiuἄιiuἅιiuἆιiuἇιiiiiiiiiiuἠιiuἡιiuἢιiuἣιiuἤιiuἥιiuἦιiuἧιiiiiiiiiiuὠιiuὡιiuὢιiuὣιiuὤιiuὥιiuὦιiuὧιiiiiiiiiiuὰιiuαιiuάιiuᾶiuᾶιiiiuὴιiuηιiuήιiuῆiuῆιiiuῒiiuῖiuῗiuῢiiuῤiuῦiuῧiuὼιiuωιiuώιiuῶiuῶιiiZrsi r i!u°ci!uɛi!u°fi !hi !i !i !ii!i!li!ni!noi!pi!qi!ri!i!i!Zsmi !Zteli!!Ztmi"!zi$!i(!bi,!i-!ei0!fi1!mi3!uγi>!i?!diE!Zhpaiq3Zauis3Zoviu3Zpai3Znai3uμai3Zmai3Zkai3Zkbi3Zmbi3Zgbi3Zpfi3Znfi3uμfi3hzi3Zkhzi3Zmhzi3Zghzi3Zthzi3i3Zkpai3Zmpai3Zgpai3Zpvi3Znvi3uμvi3Zmvi3Zkvi3i3Zpwi3Znwi3uμwi3Zmwi3kwi3i3ukωi3umωi3Zbqi3uc∕kgi3zco.i3Zdbi3Zgyi3Zhpi3Zkki3Zkmi3Zphi3Zppmi3Zpri3Zsvi3wbi3ZffiZfiiZfliZffiiZfflistiiuմնiuմեiuմիiuվնiuմխiaiiiiiigiiiji ki i i i oiiiiitiuiviwixiyiii4i5i6i7i8i9i:i;i<i=i>i?i@iAiBiCiDiEiFiGiHiIiJiKiLiMihiiijikiliminioipiqirisitiuiviwixiyizi{i|i}i~iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii i i iiiiiiiiiiiiiii8i9i;i<i=i>i@iAiBiCiDiFiJiKiLiMiNiOiPiliminioipiqirisitiuiviwixiyizi{i|i}i~iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii i i i i iiiiiiiiiiiiiiiiiii i!i<i=i>i?i@iAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUipiqirisitiuiviwixiyizi{i|i}i~iiiiiiiiiiiuαiiiuδiiuζiuηiiiiuλiiuνiuξiuοiiiiiuτiiiuχiuψiuωiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiii i!i"i#i$i%i&i'i(i)i*i+i,i-i.i/i0i1i2i3i4iGiViWiXiYiZi[i\i]i^i_i`iaibicidieifigihiiijikiliminiiiiiiiiiiiiiiiiiiiiiiiiiiicCs/tjt|}|dk r%|S|jS)N) b3_exceptionsgetrlower)rrr r r map_table_b3s r3cCsdt|}tjd|}djdd|D}tjd|}||kr\|S|SdS)NZNFKCcSsg|]}t|qSr )r3).0Zchr r r s z map_table_b2..)r3rZ normalizejoin)r%ZalrZblr r r r map_table_b2s  r8cCs |dkS)N r )rr r r in_table_c11sr:cCstj|dko|dkS)NZsr9)rr)rr r r in_table_c12sr<cCstj|dkS)Nr;)rr)rr r r in_table_c11_c12sr=cCs%t|dko$tj|dkS)NCc)rrr)rr r r in_table_c21sr@iiii( i) id ij ip iiisi{cCs?t|}|dkrdStj|dkr5dS|tkS)Nr>Fr?T)rrr c22_specials)rr r r r in_table_c22s   rBcCs%tj|dkp$t|tkS)Nr?)rrrrA)rr r r in_table_c21_c22srCcCstj|dkS)NZCo)rr)rr r r in_table_c3srDcCs@t|}|dkrdS|dkr,dSt|d@dkS)NiFiT)rFrE)r)rr r r r in_table_c4s    rGcCstj|dkS)NZCs)rr)rr r r in_table_c5srHicCst|tkS)N)rc6_set)rr r r in_table_c6srJi/i/cCst|tkS)N)rc7_set)rr r r in_table_c7srLi@iAi i i* i/ cCst|tkS)N)rc8_set)rr r r in_table_c8srNii icCst|tkS)N)rc9_set)rr r r in_table_c9srPcCstj|dkS)NRAL)rQrR)r bidirectional)rr r r in_table_d1 srTcCstj|dkS)NL)rrS)rr r r in_table_d2srVN)"__doc__rrZunidata_versionAssertionErrorr setlistrangerrr0r3r8r:r<r=r@rArBrCrDrGrHrIrJrKrLrMrNrOrPrTrVr r r r s~ @      p       > "  lib64/python3.4/__pycache__/_markupbase.cpython-34.pyc000064400000021344152342604300016362 0ustar00 e f9@s}dZddlZejdjZejdjZejdZejdZejdZ[Gdd d Z dS) zShared support for scanning document type declarations in HTML and XHTML. This module is used as a foundation for the html.parser module. It has no documented public API and should not be used directly. Nz[a-zA-Z][-_.a-zA-Z0-9]*\s*z(\'[^\']*\'|"[^"]*")\s*z--\s*>z ]\s*]\s*>z]\s*>c@seZdZdZddZddZddZdd Zd d Zd Z d dZ dddZ dddZ ddZ ddZddZddZddZddZd d!Zd"S)# ParserBaseziParser base class which provides some common support methods used by the SGML/HTML and XHTML parsers.cCs"|jtkrtdndS)Nz)_markupbase.ParserBase must be subclassed) __class__r RuntimeError)selfr0/opt/alt/python34/lib64/python3.4/_markupbase.py__init__szParserBase.__init__cCstddS)Nz.subclasses of ParserBase must override error())NotImplementedError)rmessagerrrerror szParserBase.errorcCsd|_d|_dS)Nr)linenooffset)rrrrreset$s zParserBase.resetcCs|j|jfS)z&Return current line number and offset.)r r)rrrrgetpos(szParserBase.getposcCs||kr|S|j}|jd||}|rm|j||_|jd||}||d|_n|j|||_|S)N r )rawdatacountr rindexr)rijrZnlinesposrrr updatepos0s  zParserBase.updateposc Cst|j}|d}|||dks5td|||ddkrW|dS|||ddkrudSt|}|||ddkr|j|S||d kr|j|S|j||\}}|d kr|S|d krd|_nxh||kro||}|dkro||d|}|d krZ|j|n |j||dS|d krt ||}|sdS|j }n|d kr|j||\} }n||jkr|d}nv|d krG|d kr|j |d|}q\|dkr7|j d|q\|j dn|j d|||d kr|SqWdS)Nz-rz--[rZdoctypez"'Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZattlistlinktypelinkelementz&unsupported '[' char in %s declarationz"unexpected '[' char in declarationz!unexpected %r char in declaration)rrr">relementrlinkr") rAssertionErrorlen parse_commentparse_marked_section _scan_name_decl_othercharsZ handle_decl unknown_decl_declstringlit_matchend_parse_doctype_subsetr ) rrrrnZdecltypecdatamnamerrrparse_declaration@sZ  "                 zParserBase.parse_declarationr cCs|j}|||ddks/td|j|d|\}}|dkr[|S|dkrtj||d}nD|dkrtj||d}n|jd ||d||sdS|r|jd}|j||d|n|j dS)Nzr7includer:r6ignore>r=ifelser") rr%r)_markedsectionclosesearch_msmarkedsectioncloser startr+r-)rrreportrZsectNamermatchrrrr(s  &   zParserBase.parse_marked_sectioncCs|j}|||ddkr3|jdntj||d}|sSdS|r|jd}|j||d|n|jdS)Nz a, b, c abc_to_rgb(a, b, c) --> r, g, b All inputs and outputs are triples of floats in the range [0.0...1.0] (with the exception of I and Q, which covers a slightly larger range). Inputs outside the valid range may cause exceptions or invalid outputs. Supported color systems: RGB: Red, Green, Blue components YIQ: Luminance, Chrominance (used by composite video signals) HLS: Hue, Luminance, Saturation HSV: Hue, Saturation, Value rgb_to_yiq yiq_to_rgb rgb_to_hls hls_to_rgb rgb_to_hsv hsv_to_rgbg?g@g@g@cCs[d|d|d|}d||d||}d||d||}|||fS)Ng333333?gzG?g)\(?gGz?gHzG?gQ?g= ףp=?)rgbyiqrr-/opt/alt/python34/lib64/python3.4/colorsys.pyr(scCs|d|d|}|d|d|}|d|d|}|dkrWd}n|dkrld}n|dkrd}n|dkrd}n|dkrd}n|dkrd}n|||fS) Ng2rL?g,?g:?gnєW?g6޷?gJ"X?gg?r)r r r rr r rrrr.s             c Cst|||}t|||}||d}||krKd|dfS|dkrl||||}n||d||}||||}||||}||||} ||kr| |} n+||krd|| } nd||} | dd} | ||fS)Ng@gg?g@g@g?)maxmin) rr r maxcminclsrcgcbchrrrrKs$      cCs|dkr|||fS|dkr6|d|}n||||}d||}t|||tt|||t|||tfS)Ngg?g?g@)_v ONE_THIRD)rrrm2m1rrrrbs   cCsb|d}|tkr*||||dS|dkr:|S|tkr^|||t|dS|S)Ng?g@g?) ONE_SIXTH TWO_THIRD)rrZhuerrrrls    rc Cst|||}t|||}|}||krCdd|fS|||}||||}||||}||||} ||kr| |} n+||krd|| } nd||} | dd} | ||fS)Ngg@g@g@g?)rr) rr r rrvrrrrrrrrr|s      cCs|dkr|||fSt|d}|d|}|d|}|d||}|d|d|}|d}|dkr|||fS|dkr|||fS|dkr|||fS|dkr|||fS|d kr|||fS|d kr |||fSdS) Ngg@g?)int)rrrr fpr trrrrs(              NgUUUUUU?gUUUUUU?gUUUUUU?) __doc____all__rrrrrrrrrrrrrrs       lib64/python3.4/__pycache__/symbol.cpython-34.pyo000064400000005146152342604300015414 0ustar00 e f@sidZdZdZdZdZdZdZdZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&d'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9d:Z:d;Z;d<Z<d=Z=d>Z>d?Z?d@Z@dAZAdBZBdCZCdDZDdEZEdFZFdGZGdHZHdIZIdJZJdKZKdLZLdMZMdNZNdOZOdPZPdQZQdRZRiZSxHeTeUjVD]1\ZWZXeYeXeYdSkreWeSeXi?i@iAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQcCsTddl}ddl}t|jdkrF|jddg|_n|jdS)NrzInclude/graminit.hz Lib/symbol.py)systokenlenargv_main)rrr +/opt/alt/python34/lib64/python3.4/symbol.pyrgs   r__main__N)\__doc__Z single_inputZ file_inputZ eval_inputZ decoratorZ decoratorsZ decoratedZfuncdefZ parametersZ typedargslistZtfpdefZ varargslistZvfpdefZstmtZ simple_stmtZ small_stmtZ expr_stmtZtestlist_star_exprZ augassignZdel_stmtZ pass_stmtZ flow_stmtZ break_stmtZ continue_stmtZ return_stmtZ yield_stmtZ raise_stmtZ import_stmtZ import_nameZ import_fromZimport_as_nameZdotted_as_nameZimport_as_namesZdotted_as_namesZ dotted_nameZ global_stmtZ nonlocal_stmtZ assert_stmtZ compound_stmtZif_stmtZ while_stmtZfor_stmtZtry_stmtZ with_stmtZ with_itemZ except_clauseZsuiteZtestZ test_nocondZlambdefZlambdef_nocondZor_testZand_testZnot_testZ comparisonZcomp_opZ star_exprexprZxor_exprZand_exprZ shift_exprZ arith_exprZtermZfactorZpowerZatomZ testlist_compZtrailerZ subscriptlistZ subscriptZsliceopZexprlistZtestlistZdictorsetmakerZclassdefZarglistZargumentZ comp_iterZcomp_forZcomp_ifZ encoding_declZ yield_exprZ yield_argZsym_namelistglobalsitems_nameZ_valuetyper__name__r r r r s "  lib64/python3.4/__pycache__/decimal.cpython-34.pyc000064400000520756152342604300015502 0ustar00 h fP}+@sfdZddddddddd d d d d ddddddddddddddddddd d!d"d#d$g$Zd%Zd&Zd'd(lZd'd(lZd'd(lZy#d'd)l m Z e dd*Z Wne k rd+d,Z YnXdZdZdZdZdZdZdZdZd-Zejd.d/d0krOd1Zd1Zd1 Znd2Zd2Zd2 Zeed0ZGd3ddeZGd4ddeZGd5d d eZGd6ddeZ Gd7d d ee!Z"Gd8ddeZ#Gd9ddee!Z$Gd:d d eZ%Gd;ddeZ&Gd<d d eZ'Gd=d d eZ(Gd>dde%e'Z)Gd?dde%e'e(Z*Gd@ddee+Z,ee"e%e)e'e*ee(e,g Z-iee 6ee#6ee$6ee&6Z.eeeeeeeefZ/yd'd(l0Z0Wn4e k r]GdAdBdBe1Z2e2Z0[2YnXy e0j3WnNe4k re5e0j6dCre0j6`7ndDdZ8dEdZ9YnIXe0j3Z3e5e3dCre3`7ne3dFdZ9e3dGdZ8[0[3d(dHdZ:GdIdde1Z;dJdKdLZ<ej=j>e;GdMdNdNe1Z?GdOdde1Z@GdPdQdQe1ZAd'dRdSZBeCjDZEdTdUZFdVdWZGdXdYZHdZd[ZId\d]d^ZJd_d`ZKdadbZLGdcdddde1ZMeMjNZOd\dedfZPdgdhZQdidjZRi dkdl6dmdn6dodp6dqdr6dsdt6dudv6dwdx6dydz6d{d|6d}d~ZSdJdJddZTdJddZUe@dddede"e)egdgdddd dd0dd'ZVe@dddede"e)eee*gdgZWe@dddedgdgZXd'd(lYZYeYjZdeYj[eYj\Bj]Z^eYjZdj]Z_eYjZdj]Z`eYjZdeYj[eYjaBZb[Yyd'd(lcZdWne k rYnXd(ddZeddZfddZgd0ddZhddZiddZje;dZke;dZle;dZme;d'Zne;d0Zoe;d0 ZpekelfZqejrjsZtejrjuZvejrjwZxeydyetd.etZz[yd'd(l{Z{Wne k rYnTXe|e}Z~e|e}e{Zxe~eD]Zee=qW[~[[d'dl{Tedkrbd'd(lZd'd(lZejend(S)a This is an implementation of decimal floating point arithmetic based on the General Decimal Arithmetic Specification: http://speleotrove.com/decimal/decarith.html and IEEE standard 854-1987: http://en.wikipedia.org/wiki/IEEE_854-1987 Decimal floating point has finite precision with arbitrarily large bounds. The purpose of this module is to support arithmetic using familiar "schoolhouse" rules and to avoid some of the tricky representation issues associated with binary floating point. The package is especially useful for financial applications or for contexts where users have expectations that are at odds with binary floating point (for instance, in binary floating point, 1.00 % 0.1 gives 0.09999999999999995 instead of 0.0; Decimal('1.00') % Decimal('0.1') returns the expected Decimal('0.00')). Here are some examples of using the decimal module: >>> from decimal import * >>> setcontext(ExtendedContext) >>> Decimal(0) Decimal('0') >>> Decimal('1') Decimal('1') >>> Decimal('-.0123') Decimal('-0.0123') >>> Decimal(123456) Decimal('123456') >>> Decimal('123.45e12345678') Decimal('1.2345E+12345680') >>> Decimal('1.33') + Decimal('1.27') Decimal('2.60') >>> Decimal('12.34') + Decimal('3.87') - Decimal('18.41') Decimal('-2.20') >>> dig = Decimal(1) >>> print(dig / Decimal(3)) 0.333333333 >>> getcontext().prec = 18 >>> print(dig / Decimal(3)) 0.333333333333333333 >>> print(dig.sqrt()) 1 >>> print(Decimal(3).sqrt()) 1.73205080756887729 >>> print(Decimal(3) ** 123) 4.85192780976896427E+58 >>> inf = Decimal(1) / Decimal(0) >>> print(inf) Infinity >>> neginf = Decimal(-1) / Decimal(0) >>> print(neginf) -Infinity >>> print(neginf + inf) NaN >>> print(neginf * inf) -Infinity >>> print(dig / 0) Infinity >>> getcontext().traps[DivisionByZero] = 1 >>> print(dig / 0) Traceback (most recent call last): ... ... ... decimal.DivisionByZero: x / 0 >>> c = Context() >>> c.traps[InvalidOperation] = 0 >>> print(c.flags[InvalidOperation]) 0 >>> c.divide(Decimal(0), Decimal(0)) Decimal('NaN') >>> c.traps[InvalidOperation] = 1 >>> print(c.flags[InvalidOperation]) 1 >>> c.flags[InvalidOperation] = 0 >>> print(c.flags[InvalidOperation]) 0 >>> print(c.divide(Decimal(0), Decimal(0))) Traceback (most recent call last): ... ... ... decimal.InvalidOperation: 0 / 0 >>> print(c.flags[InvalidOperation]) 1 >>> c.flags[InvalidOperation] = 0 >>> c.traps[InvalidOperation] = 0 >>> print(c.divide(Decimal(0), Decimal(0))) NaN >>> print(c.flags[InvalidOperation]) 1 >>> DecimalContext DecimalTupleDefaultContext BasicContextExtendedContextDecimalExceptionClampedInvalidOperationDivisionByZeroInexactRounded SubnormalOverflow UnderflowFloatOperationDivisionImpossibleInvalidContextConversionSyntaxDivisionUndefined ROUND_DOWN ROUND_HALF_UPROUND_HALF_EVEN ROUND_CEILING ROUND_FLOORROUND_UPROUND_HALF_DOWN ROUND_05UP setcontext getcontext localcontextMAX_PRECMAX_EMAXMIN_EMIN MIN_ETINY HAVE_THREADSz1.70z2.4.1N) namedtuplezsign digits exponentcGs|S)N)argsr'r',/opt/alt/python34/lib64/python3.4/decimal.pysr*T?lNZoi@Tc@s"eZdZdZddZdS)ra1Base exception class. Used exceptions derive from this. If an exception derives from another exception besides this (such as Underflow (Inexact, Rounded, Subnormal) that indicates that it is only called if the others are present. This isn't actually used for anything, though. handle -- Called when context._raise_error is called and the trap_enabler is not set. First argument is self, second is the context. More arguments can be given, those being after the explanation in _raise_error (For example, context._raise_error(NewError, '(-x)!', self._sign) would call NewError().handle(context, self._sign).) To define a new exception, it should be sufficient to have it derive from DecimalException. cGsdS)Nr')selfcontextr(r'r'r)handleszDecimalException.handleN)__name__ __module__ __qualname____doc__r0r'r'r'r)rs c@seZdZdZdS)ra)Exponent of a 0 changed to fit bounds. This occurs and signals clamped if the exponent of a result has been altered in order to fit the constraints of a specific concrete representation. This may occur when the exponent of a zero result would be outside the bounds of a representation, or when a large normal number would have an encoded exponent that cannot be represented. In this latter case, the exponent is reduced to fit and the corresponding number of zero digits are appended to the coefficient ("fold-down"). N)r1r2r3r4r'r'r'r)rs c@s"eZdZdZddZdS)r a0An invalid operation was performed. Various bad things cause this: Something creates a signaling NaN -INF + INF 0 * (+-)INF (+-)INF / (+-)INF x % 0 (+-)INF % x x._rescale( non-integer ) sqrt(-x) , x > 0 0 ** 0 x ** (non-integer) x ** (+-)INF An operand is invalid The result of the operation after these is a quiet positive NaN, except when the cause is a signaling NaN, in which case the result is also a quiet NaN, but with the original sign, and an optional diagnostic information. cGs:|r6t|dj|djdd}|j|StS)Nr%nT)_dec_from_triple_sign_int_fix_nan_NaN)r.r/r(ansr'r'r)r0s# zInvalidOperation.handleN)r1r2r3r4r0r'r'r'r)r s c@s"eZdZdZddZdS)rzTrying to convert badly formed string. This occurs and signals invalid-operation if an string is being converted to a number and it does not conform to the numeric string syntax. The result is [0,qNaN]. cGstS)N)r:)r.r/r(r'r'r)r0szConversionSyntax.handleN)r1r2r3r4r0r'r'r'r)rs c@s"eZdZdZddZdS)r aDivision by 0. This occurs and signals division-by-zero if division of a finite number by zero was attempted (during a divide-integer or divide operation, or a power operation with negative right-hand operand), and the dividend was not zero. The result of the operation is [sign,inf], where sign is the exclusive or of the signs of the operands for divide, or is 1 for an odd power of -0, for power. cGst|S)N)_SignedInfinity)r.r/signr(r'r'r)r0szDivisionByZero.handleN)r1r2r3r4r0r'r'r'r)r s c@s"eZdZdZddZdS)rzCannot perform the division adequately. This occurs and signals invalid-operation if the integer result of a divide-integer or remainder operation had too many digits (would be longer than precision). The result is [0,qNaN]. cGstS)N)r:)r.r/r(r'r'r)r0szDivisionImpossible.handleN)r1r2r3r4r0r'r'r'r)rs c@s"eZdZdZddZdS)rzUndefined result of division. This occurs and signals invalid-operation if division by zero was attempted (during a divide-integer, divide, or remainder operation), and the dividend is also zero. The result is [0,qNaN]. cGstS)N)r:)r.r/r(r'r'r)r0'szDivisionUndefined.handleN)r1r2r3r4r0r'r'r'r)rs c@seZdZdZdS)r aHad to round, losing information. This occurs and signals inexact whenever the result of an operation is not exact (that is, it needed to be rounded and any discarded digits were non-zero), or if an overflow or underflow condition occurs. The result in all cases is unchanged. The inexact signal may be tested (or trapped) to determine if a given operation (or sequence of operations) was inexact. N)r1r2r3r4r'r'r'r)r *s c@s"eZdZdZddZdS)raInvalid context. Unknown rounding, for example. This occurs and signals invalid-operation if an invalid context was detected during an operation. This can occur if contexts are not checked on creation and either the precision exceeds the capability of the underlying concrete representation or an unknown or unsupported rounding was specified. These aspects of the context need only be checked when the values are required to be used. The result is [0,qNaN]. cGstS)N)r:)r.r/r(r'r'r)r0AszInvalidContext.handleN)r1r2r3r4r0r'r'r'r)r6s c@seZdZdZdS)r aNumber got rounded (not necessarily changed during rounding). This occurs and signals rounded whenever the result of an operation is rounded (that is, some zero or non-zero digits were discarded from the coefficient), or if an overflow or underflow condition occurs. The result in all cases is unchanged. The rounded signal may be tested (or trapped) to determine if a given operation (or sequence of operations) caused a loss of precision. N)r1r2r3r4r'r'r'r)r Ds c@seZdZdZdS)r aExponent < Emin before rounding. This occurs and signals subnormal whenever the result of a conversion or operation is subnormal (that is, its adjusted exponent is less than Emin, before any rounding). The result in all cases is unchanged. The subnormal signal may be tested (or trapped) to determine if a given or operation (or sequence of operations) yielded a subnormal result. N)r1r2r3r4r'r'r'r)r Ps c@s"eZdZdZddZdS)raNumerical overflow. This occurs and signals overflow if the adjusted exponent of a result (from a conversion or from an operation that is not an attempt to divide by zero), after rounding, would be greater than the largest value that can be handled by the implementation (the value Emax). The result depends on the rounding mode: For round-half-up and round-half-even (and for round-half-down and round-up, if implemented), the result of the operation is [sign,inf], where sign is the sign of the intermediate result. For round-down, the result is the largest finite number that can be represented in the current precision, with the sign of the intermediate result. For round-ceiling, the result is the same as for round-down if the sign of the intermediate result is 1, or is [0,inf] otherwise. For round-floor, the result is the same as for round-down if the sign of the intermediate result is 0, or is [1,inf] otherwise. In all cases, Inexact and Rounded will also be raised. cGs|jttttfkr#t|S|dkrk|jtkrFt|St|d|j|j |jdS|dkr|jt krt|St|d|j|j |jdSdS)Nr%9r-) roundingrrrrr<rr6precEmaxr)r.r/r=r(r'r'r)r0qs   zOverflow.handleN)r1r2r3r4r0r'r'r'r)r[s c@seZdZdZdS)raxNumerical underflow with result rounded to 0. This occurs and signals underflow if a result is inexact and the adjusted exponent of the result would be smaller (more negative) than the smallest value that can be handled by the implementation (the value Emin). That is, the result is both inexact and subnormal. The result after an underflow will be a subnormal number rounded, if necessary, so that its exponent is not less than Etiny. This may result in 0 with the sign of the intermediate result and an exponent of Etiny. In all cases, Inexact, Rounded, and Subnormal will also be raised. N)r1r2r3r4r'r'r'r)rs c@seZdZdZdS)raEnable stricter semantics for mixing floats and Decimals. If the signal is not trapped (default), mixing floats and Decimals is permitted in the Decimal() constructor, context.create_decimal() and all comparison operators. Both conversion and comparisons are exact. Any occurrence of a mixed operation is silently recorded by setting FloatOperation in the context flags. Explicit conversions with Decimal.from_float() or context.create_decimal_from_float() do not set the flag. Otherwise (the signal is trapped), only equality comparisons and explicit conversions are silent. All other mixed operations raise FloatOperation. N)r1r2r3r4r'r'r'r)rs c@seZdZeddZdS) MockThreadingcCs |jtS)N)modulesr1)r.sysr'r'r)localszMockThreading.localN)r1r2r3rDrEr'r'r'r)rBs rB__decimal_context__cCsA|tttfkr.|j}|jn|tj_dS)z%Set this thread's context to context.N)rrrcopy clear_flags threadingcurrent_threadrF)r/r'r'r)rs  c CsFytjjSWn.tk rAt}|tj_|SYnXdS)zReturns this thread's context. If this thread does not yet have a context, returns a new context and sets this thread's context. New contexts are copies of DefaultContext. N)rIrJrFAttributeErrorr)r/r'r'r)rs   c Cs:y |jSWn(tk r5t}||_|SYnXdS)zReturns this thread's context. If this thread does not yet have a context, returns a new context and sets this thread's context. New contexts are copies of DefaultContext. N)rFrKr)_localr/r'r'r)rs     cCs;|tttfkr.|j}|jn||_dS)z%Set this thread's context to context.N)rrrrGrHrF)r/rLr'r'r)rs  cCs"|dkrt}nt|S)abReturn a context manager for a copy of the supplied context Uses a copy of the current context if no context is specified The returned context manager creates a local decimal context in a with statement: def sin(x): with localcontext() as ctx: ctx.prec += 2 # Rest of sin calculation algorithm # uses a precision 2 greater than normal return +s # Convert result to normal precision def sin(x): with localcontext(ExtendedContext): # Rest of sin calculation algorithm # uses the Extended Context from the # General Decimal Arithmetic Specification return +s # Convert result to normal context >>> setcontext(DefaultContext) >>> print(getcontext().prec) 28 >>> with localcontext(): ... ctx = getcontext() ... ctx.prec += 2 ... print(ctx.prec) ... 30 >>> with localcontext(ExtendedContext): ... print(getcontext().prec) ... 9 >>> print(getcontext().prec) 28 N)r_ContextManager)Zctxr'r'r)rs$ c@seZdZdZdZdddd Zed d Zd d ZddZ ddddZ ddZ ddZ ddZ dddZdddZdddZdddZdd d!Zdd"d#Zdd$d%Zd&d'Zd(d)Zd*d+Zd,dd-d.Zdd/d0Zdd1d2Zdd3d4Zd5dd6d7Zdd8d9ZeZdd:d;Zdd<d=Z dd>d?Z!e!Z"dd@dAZ#dBdCZ$ddDdEZ%ddFdGZ&ddHdIZ'ddJdKZ(ddLdMZ)ddNdOZ*ddPdQZ+ddRdSZ,dTdUZ-dVdWZ.e.Z/dXdYZ0e1e0Z0dZd[Z2e1e2Z2d\d]Z3d^d_Z4d`daZ5dbdcZ6dddeZ7dfdgZ8dhdiZ9djdkZ:dldmZ;dndoZ<dpdqZ=drdsZ>e?dte7due8dve9dwe:dxe;dye<dze=d{e>Z@dd|d}ZAd~dZBddZCdddZDdddZEddZFddddZGdddZHdddZIddd5ddZJdddZKddZLddZMddddZNddddZOeOZPdddZQdddZRdddZSddZTddZUddZVddZWdddZXdddZYdddZZddZ[ddZ\dddZ]dddZ^ddZ_ddZ`ddZaddZbdddZcddZdddZeddZfdddZgddZhddZidddZjddZkdddZldddZmddZnddZodddZpdddZqdddZrdddZsdddZtdddZudddZvdddZwdddZxdddZyddZzdddZ{dddZ|dddZ}ddZ~ddZddZddddZdS)rz,Floating point class for decimal arithmetic._expr8r7 _is_special0Nc Cstj|}t|trt|j}|dkrh|dkrTt}n|jtd|S|j ddkrd|_ n d|_ |j d}|dk r|j dpd }t |j d pd }tt |||_ |t ||_d |_n|j d }|dk r{tt |p?d jd |_ |j drod|_qd|_nd |_ d|_d|_|St|t r|dkrd|_ n d|_ d|_tt||_ d |_|St|tr8|j|_|j |_ |j |_ |j|_|St|tr|j|_ t|j |_ t |j|_d |_|St|ttfrFt |dkrtdnt|dt o|ddkstdn|d|_ |ddkr+d |_ |d|_d|_ng} xn|dD]b} t| t rd| kohdknr| s| dkr| j| qq<tdq<W|ddkrd jtt| |_ |d|_d|_n\t|dt r6d jtt| pdg|_ |d|_d |_n td|St|tr|dkrmt}n|jtdtj|}|j|_|j |_ |j |_ |j|_|Std|dS)aCreate a decimal point instance. >>> Decimal('3.14') # string input Decimal('3.14') >>> Decimal((0, (3, 1, 4), -2)) # tuple (sign, digit_tuple, exponent) Decimal('3.14') >>> Decimal(314) # int Decimal('314') >>> Decimal(Decimal(314)) # another decimal instance Decimal('314') >>> Decimal(' 3.14 \n') # leading and trailing whitespace okay Decimal('3.14') NzInvalid literal for Decimal: %rr=-r-r%intZfracexprPFdiagsignalNr5FTztInvalid tuple size in creation of Decimal from list or tuple. The list or tuple should have exactly three elements.z|Invalid sign. The first value in the tuple should be an integer; either 0 for a positive number or 1 for a negative number.r+ zTThe second value in the tuple must be composed of integers in the range 0 through 9.zUThe third value in the tuple must be an integer, or one of the strings 'F', 'n', 'N'.z;strict semantics for mixing floats and Decimals are enabledzCannot convert %r to Decimal)r%r-)r5rW) object__new__ isinstancestr_parserstripr _raise_errorrgroupr7rRr8lenrNrOlstripabsr_WorkRepr=rTlisttuple ValueErrorappendjoinmapfloatr from_float TypeError) clsvaluer/r.mintpartfracpartrTrUdigitsdigitr'r'r)r\2s          $                #    +  $          zDecimal.__new__cCst|tr||St|ts7tdntj|sUtj|re|t|Stjd|dkrd}nd}t |j \}}|j d}t |t |d|| }|tkr|S||SdS)a.Converts a float to a decimal number, exactly. Note that Decimal.from_float(0.1) is not the same as Decimal('0.1'). Since 0.1 is not exactly representable in binary floating point, the value is stored as the nearest representable value which is 0x1.999999999999ap-4. The exact equivalent of the value in decimal is 0.1000000000000000055511151231257827021181583404541015625. >>> Decimal.from_float(0.1) Decimal('0.1000000000000000055511151231257827021181583404541015625') >>> Decimal.from_float(float('nan')) Decimal('NaN') >>> Decimal.from_float(float('inf')) Decimal('Infinity') >>> Decimal.from_float(-float('inf')) Decimal('-Infinity') >>> Decimal.from_float(-0.0) Decimal('-0') zargument must be int or float.g?r%r-N)r]rRrmro_mathZisinfZisnanreprZcopysignreas_integer_ratio bit_lengthr6r^r)rpfr=r5dkresultr'r'r)rns  ! zDecimal.from_floatcCs9|jr5|j}|dkr"dS|dkr5dSndS)zrReturns whether the number is not actually one. 0 if a number 1 if NaN 2 if sNaN r5r-rWr+r%)rOrN)r.rTr'r'r)_isnans    zDecimal._isnancCs$|jdkr |jrdSdSdS)zyReturns whether the number is infinite 0 if finite or not a number 1 if +INF -1 if -INF rXr-r%)rNr7)r.r'r'r) _isinfinitys  zDecimal._isinfinitycCs|j}|dkr!d}n |j}|s9|r|dkrQt}n|dkrp|jtd|S|dkr|jtd|S|r|j|S|j|SdS)zReturns whether the number is not actually one. if self, other are sNaN, signal if self, other are NaN return nan return 0 Done before operations. NFr+sNaNr%)rrrar r9)r.otherr/ self_is_nan other_is_nanr'r'r) _check_nans s"             zDecimal._check_nanscCs|dkrt}n|js*|jr|jrI|jtd|S|jrh|jtd|S|jr|jtd|S|jr|jtd|SndS)aCVersion of _check_nans used for the signaling comparisons compare_signal, __le__, __lt__, __ge__, __gt__. Signal InvalidOperation if either self or other is a (quiet or signaling) NaN. Signaling NaNs take precedence over quiet NaNs. Return 0 if neither operand is a NaN. Nzcomparison involving sNaNzcomparison involving NaNr%)rrOis_snanrar is_qnan)r.rr/r'r'r)_compare_check_nans,s(           zDecimal._compare_check_nanscCs|jp|jdkS)zuReturn True if self is nonzero; otherwise return False. NaNs and infinities are considered nonzero. rP)rOr8)r.r'r'r)__bool__MszDecimal.__bool__cCsd|js|jrQ|j}|j}||kr:dS||krJdSdSn|sp|sadSd|j Sn|sd|jS|j|jkrdS|j|jkrdS|j}|j}||kr=|jd|j|j}|jd|j|j}||krdS||kr/d |j Sd |jSn#||krTd |jSd |j SdS) zCompare the two non-NaN decimal instances self and other. Returns -1 if self < other, 0 if self == other and 1 if self > other. This routine is for internal use only.r%r-rPNrrrrrrrr)rOrr7adjustedr8rN)r.rZself_infZ other_inf self_adjustedZother_adjusted self_paddedZ other_paddedr'r'r)_cmpTs>             z Decimal._cmpcCsTt||dd\}}|tkr+|S|j||rAdS|j|dkS)N equality_opTFr%)_convert_for_comparisonNotImplementedrr)r.rr/r'r'r)__eq__s  zDecimal.__eq__cCsTt||dd\}}|tkr+|S|j||rAdS|j|dkS)NrTr%)rrrr)r.rr/r'r'r)__ne__s  zDecimal.__ne__cCsTt||\}}|tkr%|S|j||}|rAdS|j|dkS)NFr%)rrrr)r.rr/r;r'r'r)__lt__s zDecimal.__lt__cCsTt||\}}|tkr%|S|j||}|rAdS|j|dkS)NFr%)rrrr)r.rr/r;r'r'r)__le__s zDecimal.__le__cCsTt||\}}|tkr%|S|j||}|rAdS|j|dkS)NFr%)rrrr)r.rr/r;r'r'r)__gt__s zDecimal.__gt__cCsTt||\}}|tkr%|S|j||}|rAdS|j|dkS)NFr%)rrrr)r.rr/r;r'r'r)__ge__s zDecimal.__ge__cCs\t|dd}|js*|rI|jrI|j||}|rI|Snt|j|S)zCompare self to other. Return a decimal value: a or b is a NaN ==> Decimal('NaN') a < b ==> Decimal('-1') a == b ==> Decimal('0') a > b ==> Decimal('1') raiseitT)_convert_otherrOrrr)r.rr/r;r'r'r)compares zDecimal.comparecCs|jrI|jr$tdqI|jr4tS|jrBt StSn|jdkrptd|jt }ntt |j t }t |j |t }|dkr|n| }|dkrdS|S)zx.__hash__() <==> hash(x)z"Cannot hash a signaling NaN value.r% r-r+r) rOrrois_nan _PyHASH_NANr7 _PyHASH_INFrNpow_PyHASH_MODULUS _PyHASH_10INVrRr8)r.Zexp_hashZhash_r;r'r'r)__hash__s    zDecimal.__hash__cCs(t|jttt|j|jS)zeRepresents the number as a triple tuple. To show the internals exactly as they are. )rr7rhrlrRr8rN)r.r'r'r)as_tupleszDecimal.as_tuplecCsdt|S)z0Represents the number as an instance of Decimal.z Decimal('%s'))r^)r.r'r'r)__repr__szDecimal.__repr__Fc Csddg|j}|jrc|jdkr3|dS|jdkrQ|d|jS|d|jSn|jt|j}|jdkr|dkr|}nE|sd }n6|jd kr|d d d }n|d d d }|dkr d }d d | |j}nf|t|jkrI|jd |t|j}d}n*|jd|}d |j|d}||krd}n7|dkrt}nddg|jd||}||||S)zReturn string representation of the number in scientific notation. Captures all of the information in the underlying representation. rSrQrXZInfinityr5NaNrr%r-rPrY.NeEz%+di)r7rOrNr8rcrcapitals) r.engr/r= leftdigitsdotplacersrtrTr'r'r)__str__s:         zDecimal.__str__cCs|jddd|S)aConvert to engineering-type string. Engineering notation has an exponent which is a multiple of 3, so there are up to 3 digits left of the decimal place. Same rules for when in exponential and when as a value as in __str__. rTr/)r)r.r/r'r'r) to_eng_string5szDecimal.to_eng_stringcCs~|jr(|jd|}|r(|Sn|dkr@t}n| re|jtkre|j}n |j}|j|S)zRReturns a copy with the sign switched. Rounds, if it has reason. r/N)rOrrr?rcopy_abs copy_negate_fix)r.r/r;r'r'r)__neg__?s    zDecimal.__neg__cCs~|jr(|jd|}|r(|Sn|dkr@t}n| re|jtkre|j}n t|}|j|S)zhReturns a copy, unless it is a sNaN. Rounds the number (if more then precision digits) r/N)rOrrr?rrrr)r.r/r;r'r'r)__pos__Us    zDecimal.__pos__TcCsl|s|jS|jr8|jd|}|r8|Sn|jrV|jd|}n|jd|}|S)zReturns the absolute value of self. If the keyword argument 'round' is false, do not round. The expression self.__abs__(round=False) is equivalent to self.copy_abs(). r/)rrOrr7rr)r.roundr/r;r'r'r)__abs__js   zDecimal.__abs__c Csqt|}|tkr|S|dkr4t}n|jsF|jr|j||}|rb|S|jr|j|jkr|jr|jtdSt |S|jrt |Snt |j |j }d}|j t kr|j|jkrd}n| r[| r[t |j|j}|r6d}nt|d|}|j|}|S|st||j |jd}|j||j }|j|}|S|st||j |jd}|j||j }|j|}|St|}t|}t|||j\}}t} |j|jkr|j|jkrvt|d|}|j|}|S|j|jkr||}}n|jdkrd| _|j|j|_|_qd| _n6|jdkrd| _d\|_|_n d| _|jdkr3|j|j| _n|j|j| _|j| _t | }|j|}|S)zbReturns self + other. -INF + INF (or the reverse) cause InvalidOperation errors. Nz -INF + INFr%r-rP)r%r%)rrrrOrrr7rar rminrNr?rr6rmaxr@_rescalerf _normalizer=rRrT) r.rr/r;rTZ negativezeror=op1op2rr'r'r)__add__s|        !           zDecimal.__add__cCsit|}|tkr|S|js.|jrP|j|d|}|rP|Sn|j|jd|S)zReturn self - otherr/)rrrOrrr)r.rr/r;r'r'r)__sub__s  zDecimal.__sub__cCs/t|}|tkr|S|j|d|S)zReturn other - selfr/)rrr)r.rr/r'r'r)__rsub__s  zDecimal.__rsub__cCst|}|tkr|S|dkr4t}n|j|jA}|jsV|jr|j||}|rr|S|jr|s|jtdSt |S|jr|s|jtdSt |Sn|j |j }| s| r t |d|}|j |}|S|j dkrCt ||j |}|j |}|S|j dkrzt ||j |}|j |}|St|}t|}t |t|j|j|}|j |}|S)z\Return self * other. (+-) INF * 0 (or its reverse) raise InvalidOperation. Nz (+-)INF * 0z 0 * (+-)INFrP1)rrrr7rOrrrar r<rNr6rr8rfr^rR)r.rr/Z resultsignr;Z resultexprrr'r'r)__mul__sH         "zDecimal.__mul__c Cslt|}|tkrtS|dkr4t}n|j|jA}|jsV|jr|j||}|rr|S|jr|jr|jtdS|jrt |S|jr|jt dt |d|j Sn|s|s|jt dS|jtd|S|s1|j|j}d}nt|jt|j|jd}|j|j|}t|}t|} |dkrt|jd || j\}} n$t|j| jd | \}} | r|d dkrG|d7}qGnG|j|j} x4|| krF|d dkrF|d }|d7}qWt |t||}|j|S) zReturn self / other.Nz(+-)INF/(+-)INFzDivision by infinityrPz0 / 0zx / 0r%r-rrw)rrrr7rOrrrar r<rr6Etinyrr rNrcr8r@rfdivmodrRr^r) r.rr/r=r;rTcoeffshiftrr remainder ideal_expr'r'r) __truediv__'sP       '   &$ zDecimal.__truediv__c Cs|j|jA}|jr(|j}nt|j|j}|j|j}| sr|jsr|dkrt|dd|j||jfS||jkrot |}t |}|j |j kr|j d|j |j 9_ n|j d|j |j 9_ t |j |j \}} |d|jkrot|t |dt|jt | |fSn|jtd} | | fS)zReturn (self // other, self % other), to context.prec precision. Assumes that neither self nor other is a NaN, that self is not infinite and that other is nonzero. r+rPr%rz%quotient too large in //, % or divmodr)r7rrNrrr6rr?r@rfrTrRrr^rar) r.rr/r=rexpdiffrrqrr;r'r'r)_dividebs*       zDecimal._dividecCs/t|}|tkr|S|j|d|S)z)Swaps self/other and returns __truediv__.r/)rrr)r.rr/r'r'r) __rtruediv__s  zDecimal.__rtruediv__cCs8t|}|tkr|S|dkr4t}n|j||}|rV||fS|j|jA}|jr|jr|jtd}||fSt||jtdfSn|s|s|jt d}||fS|jt d||jtdfSn|j ||\}}|j |}||fS)z6 Return (self // other, self % other) Nzdivmod(INF, INF)zINF % xz divmod(0, 0)zx // 0zx % 0) rrrrr7rrar r<rr rr)r.rr/r;r=Zquotientrr'r'r) __divmod__s0         zDecimal.__divmod__cCs/t|}|tkr|S|j|d|S)z(Swaps self/other and returns __divmod__.r/)rrr)r.rr/r'r'r) __rdivmod__s  zDecimal.__rdivmod__cCst|}|tkr|S|dkr4t}n|j||}|rP|S|jrl|jtdS|s|r|jtdS|jtdSn|j||d}|j |}|S)z self % other NzINF % xzx % 0z0 % 0r-) rrrrrrar rrr)r.rr/r;rr'r'r)__mod__s"     zDecimal.__mod__cCs/t|}|tkr|S|j|d|S)z%Swaps self/other and returns __mod__.r/)rrr)r.rr/r'r'r)__rmod__s  zDecimal.__rmod__c Cs||dkrt}nt|dd}|j||}|rF|S|jrb|jtdS|s|r~|jtdS|jtdSn|jrt|}|j|St |j |j }|st |j d|}|j|S|j |j }||jdkr)|jtS|d krW|j||j}|j|St|}t|}|j|jkr|jd |j|j9_n|jd |j|j9_t|j|j\}} d | |d@|jkr| |j8} |d7}n|d |jkr.|jtS|j } | d krWd| } | } nt | t| |}|j|S) zI Remainder nearest to 0- abs(remainder-near) <= other/2 NrTzremainder_near(infinity, x)zremainder_near(x, 0)zremainder_near(0, 0)rPr-r+rr%r)rrrrrar rrrrrNr6r7rr@rrr?rfrTrRrr^) r.rr/r;ideal_exponentrrrrrr=r'r'r)remainder_nearsZ                        zDecimal.remainder_nearcCst|}|tkr|S|dkr4t}n|j||}|rP|S|jr|jrx|jtdSt|j|jASn|s|r|jt d|j|jAS|jt dSn|j ||dS)z self // otherNz INF // INFzx // 0z0 // 0r%) rrrrrrar r<r7r rr)r.rr/r;r'r'r) __floordiv__"s$       zDecimal.__floordiv__cCs/t|}|tkr|S|j|d|S)z*Swaps self/other and returns __floordiv__.r/)rrr)r.rr/r'r'r) __rfloordiv__>s  zDecimal.__rfloordiv__cCsU|jr?|jr'tdn|jr6dnd}n t|}t|S)zFloat representation.z%Cannot convert signaling NaN to floatz-nannan)rrrir7r^rm)r.sr'r'r) __float__Es    zDecimal.__float__cCs|jrB|jr$tdqB|jrBtdqBnd|j}|jdkrz|t|jd|jS|t|jd|jpdSdS) z1Converts self to an int, truncating if necessary.zCannot convert NaN to integerz"Cannot convert infinity to integerr-r%rNrPr) rOrrir OverflowErrorr7rNrRr8)r.rr'r'r)__int__Os    zDecimal.__int__cCs|S)Nr')r.r'r'r)real^sz Decimal.realcCs tdS)Nr%)r)r.r'r'r)imagbsz Decimal.imagcCs|S)Nr')r.r'r'r) conjugatefszDecimal.conjugatecCstt|S)N)complexrm)r.r'r'r) __complex__iszDecimal.__complex__cCsq|j}|j|j}t||krg|t||djd}t|j||jdSt|S)z2Decapitate the payload of a NaN to fit the contextNrPT) r8r@clamprcrdr6r7rNr)r.r/ZpayloadZmax_payload_lenr'r'r)r9ls  #zDecimal._fix_nancCs;|jr/|jr"|j|St|Sn|j}|j}|s|j|g|j}tt |j ||}||j kr|j t t |jd|St|Snt|j|j |j}||kr|j td|j}|j t|j t|S||k}|r4|}n|j |krt|j|j |} | dkrt |jd|d}d} n|j|j} | || } |jd| pd} | dkrtt| d} t| |jkr| dd} |d7}qn||krA|j td|j}nt |j| |}| rr|rr|j tn|r|j tn| r|j tn|j t|s|j t n|S|r|j tn|jdkr1|j |kr1|j t |jd|j |} t |j| |St|S)zRound if it is necessary to keep self within prec precision. Rounds and fixes the exponent. Does not raise on a sNaN. Arguments: self - Decimal instance context - context used. rPz above Emaxr%rr-Nr)rOrr9rrEtoprArrrrNrarr6r7rcr8r@rr r _pick_rounding_functionr?r^rRrr )r.r/rrexp_maxZnew_expZexp_minr;Zself_is_subnormalruZrounding_methodchangedrrr'r'r)rxsn                    z Decimal._fixcCst|j|rdSdSdS)z(Also known as round-towards-0, truncate.r%r-Nr) _all_zerosr8)r.r@r'r'r) _round_downszDecimal._round_downcCs|j| S)zRounds away from 0.)r)r.r@r'r'r) _round_upszDecimal._round_upcCs5|j|dkrdSt|j|r-dSdSdS)zRounds 5 up (away from 0)Z56789r-r%Nr)r8r)r.r@r'r'r)_round_half_ups zDecimal._round_half_upcCs't|j|rdS|j|SdS)z Round 5 downr-Nr) _exact_halfr8r)r.r@r'r'r)_round_half_downszDecimal._round_half_downcCsJt|j|r9|dks5|j|ddkr9dS|j|SdS)z!Round 5 to even, rest to nearest.r%r-02468Nr)rr8r)r.r@r'r'r)_round_half_evens#zDecimal._round_half_evencCs(|jr|j|S|j| SdS)z(Rounds up (not away from 0 if negative.)N)r7r)r.r@r'r'r)_round_ceilings  zDecimal._round_ceilingcCs(|js|j|S|j| SdS)z'Rounds down (not towards 0 if negative)N)r7r)r.r@r'r'r) _round_floors  zDecimal._round_floorcCs<|r*|j|ddkr*|j|S|j| SdS)z)Round down unless digit prec-1 is 0 or 5.r-Z05N)r8r)r.r@r'r'r) _round_05ups zDecimal._round_05uprrrrrrrrcCs|dk rJt|ts*tdntdd| }|j|S|jr}|jrntdq}tdnt|j dt S)aRound self to the nearest integer, or to a given precision. If only one argument is supplied, round a finite Decimal instance self to the nearest integer. If self is infinite or a NaN then a Python exception is raised. If self is finite and lies exactly halfway between two integers then it is rounded to the integer with even last digit. >>> round(Decimal('123.456')) 123 >>> round(Decimal('-456.789')) -457 >>> round(Decimal('-3.0')) -3 >>> round(Decimal('2.5')) 2 >>> round(Decimal('3.5')) 4 >>> round(Decimal('Inf')) Traceback (most recent call last): ... OverflowError: cannot round an infinity >>> round(Decimal('NaN')) Traceback (most recent call last): ... ValueError: cannot round a NaN If a second argument n is supplied, self is rounded to n decimal places using the rounding mode for the current context. For an integer n, round(self, -n) is exactly equivalent to self.quantize(Decimal('1En')). >>> round(Decimal('123.456'), 0) Decimal('123') >>> round(Decimal('123.456'), 2) Decimal('123.46') >>> round(Decimal('123.456'), -2) Decimal('1E+2') >>> round(Decimal('-Infinity'), 37) Decimal('NaN') >>> round(Decimal('sNaN123'), 0) Decimal('NaN123') Nz+Second argument to round should be integralr%rzcannot round a NaNzcannot round an infinity) r]rRror6quantizerOrrirrr)r.r5rTr'r'r) __round__!s/    zDecimal.__round__cCsI|jr3|jr$tdq3tdnt|jdtS)zReturn the floor of self, as an integer. For a finite Decimal instance self, return the greatest integer n such that n <= self. If self is infinite or a NaN then a Python exception is raised. zcannot round a NaNzcannot round an infinityr%)rOrrirrRrr)r.r'r'r) __floor___s   zDecimal.__floor__cCsI|jr3|jr$tdq3tdnt|jdtS)zReturn the ceiling of self, as an integer. For a finite Decimal instance self, return the least integer n such that n >= self. If self is infinite or a NaN then a Python exception is raised. zcannot round a NaNzcannot round an infinityr%)rOrrirrRrr)r.r'r'r)__ceil__ns   zDecimal.__ceil__cCst|dd}t|dd}|js6|jr=|dkrNt}n|jdkrp|jtd|S|jdkr|jtd|S|jdkr|}q|jdkr|}q|jdkr|s|jtdSt|j|jA}q|jdkr|s#|jtd St|j|jA}qnBt|j|jAt t |j t |j |j|j}|j ||S) a:Fused multiply-add. Returns self*other+third with no rounding of the intermediate product self*other. self and other are multiplied together, with no rounding of the result. The third operand is then added to the result, and a single final rounding is performed. rTNrWrr5rXzINF * 0 in fmaz0 * INF in fma) rrOrrNrar r<r7r6r^rRr8r)r.rZthirdr/productr'r'r)fma}s6       z Decimal.fmac Cst|}|tkr|St|}|tkr8|S|dkrPt}n|j}|j}|j}|s|s|r|dkr|jtd|S|dkr|jtd|S|dkr|jtd|S|r|j|S|r |j|S|j|S|jo7|jo7|jsJ|jtdS|dkrf|jtdS|s||jtdS|j|j kr|jtdS| r| r|jtd S|j rd}n |j }t t |}t|j}t|j} |j |td |j||}x)t| jD]} t|d |}qGWt|| j |}t|t|dS) z!Three argument version of __pow__Nr+rz@pow() 3rd argument not allowed unless all arguments are integersr%zApow() 2nd argument cannot be negative when 3rd argument specifiedzpow() 3rd argument cannot be 0zSinsufficient precision: pow() 3rd argument must not have more than precision digitszXat least one of pow() 1st argument and 2nd argument must be nonzero ;0**0 is not definedr)rrrrrar r9 _isintegerrr@_isevenr7rerRrfto_integral_valuerrTranger6r^) r.rmodulor/rrZ modulo_is_nanr=baseexponentir'r'r) _power_modulosl                              $zDecimal._power_modulocCs?t|}|j|j}}x(|ddkrI|d}|d7}q"Wt|}|j|j}}x(|ddkr|d}|d7}qlW|dkrv||9}x(|ddkr|d}|d7}qW|dkrdS|d|} |jdkr | } n|jrT|jdkrT|jt|} t| | |d} nd} tddd| | | S|jdkry|d} | dkrI|| @|krdSt |d} |d d }|t t |krdSt | ||} t |||}| dks(|dkr,dS| |kr<dSd | }n| d kr@t |dd } t d | |\}}|rdSx(|d dkr|d }| d8} qW|dd}|t t |krdSt | ||} t |||}| dks|dkr#dS| |kr3dSd| }ndS|d|krXdS| |}tdt ||S|dkr|d|d}}n|dkrt t t||| krdSt |}|dkrt t t||| krdS|d| }}x<|d|dkoCdknr_|d}|d}q$Wx<|d |d kodknr|d }|d }qcW|dkrq|dkr||krdSt ||\}}|dkrdSdt | | >}xGt |||d\}}||kr2Pq||d||}qW||koa|dkshdS|}n|dkr||dt|krdS||}||9}|d|krdSt |}|jr|jdkr|jt|} t|| |t |} nd} td|d| || S)ahAttempt to compute self**other exactly. Given Decimals self and other and an integer p, attempt to compute an exact result for the power self**other, with p digits of precision. Return None if self**other is not exactly representable in p digits. Assumes that elimination of special cases has already been performed: self and other must both be nonspecial; self must be positive and not numerically equal to 1; other must be nonzero. For efficiency, other._exp should not be too large, so that 10**abs(other._exp) is a feasible calculation.rr%r-NrrPr+r]ArwrYd)r+rrr)rfrRrTr=rr7rNrr6_nbitsrcr^_decimal_lshift_exactrre _log10_lb)r.rpxxcxeyycyerrZzerosZ last_digitrZemaxrrrr5Zxc_bitsremarrZstr_xcr'r'r) _power_exacts:                   / /' '     &    zDecimal._power_exactcCs|dk r|j|||St|}|tkr;|S|dkrSt}n|j||}|ro|S|s|s|jtdStSnd}|jdkr|j r|j sd}qn|r|jtdS|j }n|s |jdkrt |ddSt |Sn|jrV|jdkrCt |St |ddSn|tkr-|j r|jdkrd}n'||jkr|j}n t|}|j|}|d|jkrd|j}|jtqn'|jt|jtd|j}t |dd| |S|j}|jr{|jdk|dkkrpt |ddSt |Snd}d} |j|j} |dk|jdkkr| tt|jkr0t |d|jd}q0n>|j} | tt| kr0t |d| d}n|dkr|j||jd}|dk r|dkrt d|j|j}nd } qn|dkr~|j} t|} | j| j}}t|}|j|j}}|jdkr| }nd }xZt||||| |\}}|d d tt|| drUPn|d 7}q Wt |t||}n| r|j rt|j|jkr|jdt|j}t |j|jd||j|}n|j }|j!xt"D]}d|j#| 0rrTrw)rrOrrr7rr6rNrrar r@rfrTrRrcr8rr^ _shallow_copy _set_roundingrr?)r.r/r;r@oprclrrrr5rr?r'r'r)sqrt s`                       z Decimal.sqrtcCst|dd}|dkr*t}n|js<|jr|j}|j}|s`|r|dkr|dkr|j|S|dkr|dkr|j|S|j||Sn|j|}|dkr|j|}n|dkr|}n|}|j|S)zReturns the larger value. Like max(self, other) except if one is not a number, returns NaN (and signals if one is sNaN). Also rounds. rTNr-r%r)rrrOrrrr compare_total)r.rr/snonr*r;r'r'r)r s&          z Decimal.maxcCst|dd}|dkr*t}n|js<|jr|j}|j}|s`|r|dkr|dkr|j|S|dkr|dkr|j|S|j||Sn|j|}|dkr|j|}n|dkr|}n|}|j|S)zReturns the smaller value. Like min(self, other) except if one is not a number, returns NaN (and signals if one is sNaN). Also rounds. rTNr-r%r)rrrOrrrrr-)r.rr/r.r/r*r;r'r'r)r/ s&          z Decimal.mincCsJ|jr dS|jdkr dS|j|jd}|dt|kS)z"Returns whether self is an integerFr%TNrP)rOrNr8rc)r.restr'r'r)rQ s  zDecimal._isintegercCs2| s|jdkrdS|jd|jdkS)z:Returns True if self is even. Assumes self is an integer.r%Tr-rr)rNr8)r.r'r'r)rZ szDecimal._isevenc Cs9y|jt|jdSWntk r4dSYnXdS)z$Return the adjusted exponent of selfr-r%N)rNrcr8ro)r.r'r'r)r` s zDecimal.adjustedcCs|S)zReturns the same Decimal object. As we do not have different encodings for the same number, the received object already is in its canonical form. r')r.r'r'r) canonicalh szDecimal.canonicalcCsAt|dd}|j||}|r.|S|j|d|S)zCompares self to the other operand numerically. It's pretty much like compare(), but all NaNs signal, with signaling NaNs taking precedence over quiet NaNs. rTr/)rrr)r.rr/r;r'r'r)compare_signalp s zDecimal.compare_signalcCst|dd}|jr)|j r)tS|j r@|jr@tS|j}|j}|j}|sm|rs||krt|j|jf}t|j|jf}||kr|rtStSn||kr|rtStSntS|r0|dkrtS|dkr tS|dkrtS|dkrptSqs|dkr@tS|dkrPtS|dkr`tS|dkrstSn||krtS||krtS|j|jkr|rtStSn|j|jkr|rtStSntS)zCompares self to other using the abstract representations. This is not like the standard compare, which use their numerical value. Note that a total ordering is defined for all possible abstract representations. rTr-r+) rr7 _NegativeOnerrrcr8_ZerorN)r.rr/r=Zself_nanZ other_nanZself_keyZ other_keyr'r'r)r-| sf                 zDecimal.compare_totalcCs7t|dd}|j}|j}|j|S)zCompares self to other using abstract repr., ignoring sign. Like compare_total, but with operand's sign ignored and assumed to be 0. rT)rrr-)r.rr/ror'r'r)compare_total_mag s  zDecimal.compare_total_magcCstd|j|j|jS)z'Returns a copy with the sign set to 0. r%)r6r8rNrO)r.r'r'r)r szDecimal.copy_abscCsE|jr%td|j|j|jStd|j|j|jSdS)z&Returns a copy with the sign inverted.r%r-N)r7r6r8rNrO)r.r'r'r)r s zDecimal.copy_negatecCs1t|dd}t|j|j|j|jS)z$Returns self with the sign of other.rT)rr6r7r8rNrO)r.rr/r'r'r) copy_sign szDecimal.copy_signc Cs|dkrt}n|jd|}|r4|S|jd krJtS|sTtS|jdkrpt|S|j}|j}|jdkr|t t |j ddkrt dd|j d}n|jdkr(|t t |j ddkr(t dd|j d}n1|jdkrj|| krjt ddd|dd| }n|jdkr|| dkrt dd|d| d}nt|}|j|j}}|jdkr| }nd}xTt||||\} } | d d t t | |dr3Pn|d7}qWt dt | | }|j}|jt} |j|}| |_|S) zReturns e ** self.Nr/r-r%rYrrPr>rwrr)rrrr4rrr@rr7rcr^rAr6rrfrRrTr=_dexpr'r(rrr?) r.r/r;r adjr)r*rrrrTr?r'r'r)rT sJ     26& "  &  z Decimal.expcCsdS)zReturn True if self is canonical; otherwise return False. Currently, the encoding of a Decimal instance is always canonical, so this method returns True for any Decimal. Tr')r.r'r'r) is_canonical, szDecimal.is_canonicalcCs|j S)zReturn True if self is finite; otherwise return False. A Decimal instance is considered finite if it is neither infinite nor a NaN. )rO)r.r'r'r) is_finite4 szDecimal.is_finitecCs |jdkS)z8Return True if self is infinite; otherwise return False.rX)rN)r.r'r'r)r"< szDecimal.is_infinitecCs |jdkS)z>Return True if self is a qNaN or sNaN; otherwise return False.r5rW)r5rW)rN)r.r'r'r)r@ szDecimal.is_nancCs?|js| rdS|dkr,t}n|j|jkS)z?Return True if self is a normal number; otherwise return False.FN)rOrr!r)r.r/r'r'r) is_normalD s   zDecimal.is_normalcCs |jdkS)z;Return True if self is a quiet NaN; otherwise return False.r5)rN)r.r'r'r)rL szDecimal.is_qnancCs |jdkS)z8Return True if self is negative; otherwise return False.r-)r7)r.r'r'r) is_signedP szDecimal.is_signedcCs |jdkS)z?Return True if self is a signaling NaN; otherwise return False.rW)rN)r.r'r'r)rT szDecimal.is_snancCs?|js| rdS|dkr,t}n|j|jkS)z9Return True if self is subnormal; otherwise return False.FN)rOrrr!)r.r/r'r'r) is_subnormalX s   zDecimal.is_subnormalcCs|j o|jdkS)z6Return True if self is a zero; otherwise return False.rP)rOr8)r.r'r'r)is_zero` szDecimal.is_zerocCs|jt|jd}|dkrBtt|dddS|dkrnttd|dddSt|}|j|j}}|dkrt|d| }t|}t|t|||kS|ttd| |dS)zCompute a lower bound for the adjusted exponent of self.ln(). In other words, compute r such that self.ln() >= 10**r. Assumes that self is finite and positive and that self != 1. r-rr+r%rr)rNrcr8r^rfrRrT)r.r9r)r*rnumdenr'r'r) _ln_exp_boundd s      zDecimal._ln_exp_boundc Cst|dkrt}n|jd|}|r4|S|s>tS|jdkrTtS|tkrdtS|jdkr|jt dSt |}|j |j }}|j }||jd}xPt|||}|ddttt||drPn|d7}qWtt |d ktt|| }|j}|jt} |j|}| |_|S) z/Returns the natural (base e) logarithm of self.Nr/r-zln of a negative valuer+rwrrYr%)rr_NegativeInfinityr _Infinityrr4r7rar rfrRrTr@rC_dlogrcr^rer6r'r(rrr?) r.r/r;r)r*rr r$rr?r'r'r)ln} s:      ,+  z Decimal.lncCs|jt|jd}|dkr:tt|dS|dkr^ttd|dSt|}|j|j}}|dkrt|d| }td|}t|t|||kdStd| |}t|||dkdS) zCompute a lower bound for the adjusted exponent of self.log10(). In other words, find r such that self.log10() >= 10**r. Assumes that self is finite and positive and that self != 1. r-r+r%rZ231rr)rNrcr8r^rfrRrT)r.r9r)r*rrArBr'r'r)r s     "zDecimal._log10_exp_boundc Cs|dkrt}n|jd|}|r4|S|s>tS|jdkrTtS|jdkrs|jtdS|jddkr|jdddt |jdkrt |j t |jd}nt |}|j |j}}|j}||jd}xPt|||}|d d t tt||drTPn|d 7}qWtt |dktt|| }|j}|jt} |j|}| |_|S) z&Returns the base 10 logarithm of self.Nr/r-zlog10 of a negative valuer%rrPr+rwrrY)rrrDrrEr7rar r8rcrrNrfrRrTr@r_dlog10r^rer6r'r(rrr?) r.r/r;r)r*rr r$rr?r'r'r)log10 s:   =#  ,+  z Decimal.log10cCs||jd|}|r|S|dkr4t}n|jrDtS|s]|jtddSt|j}|j|S)aM Returns the exponent of the magnitude of self's MSD. The result is the integer which is the exponent of the magnitude of the most significant digit of self (as though it were truncated to a single digit while maintaining the value of that digit and without limiting the resulting exponent). r/Nzlogb(0)r-) rrrrErar rrr)r.r/r;r'r'r)logb s    z Decimal.logbcCsJ|jdks|jdkr"dSx!|jD]}|dkr,dSq,WdS)zReturn True if self is a logical operand. For being logical, it must be a finite number with a sign of 0, an exponent of 0, and a coefficient whose digits must all be either 0 or 1. r%FZ01T)r7rNr8)r.digr'r'r) _islogical s  zDecimal._islogicalcCs|jt|}|dkr0d||}n#|dkrS||j d}n|jt|}|dkrd||}n#|dkr||j d}n||fS)Nr%rP)r@rc)r.r/opaopbZdifr'r'r) _fill_logical, s    zDecimal._fill_logicalcCs|dkrt}nt|dd}|j sD|j rQ|jtS|j||j|j\}}djddt||D}t d|j dpddS) z;Applies an 'and' operation between self and other's digits.NrTrScSs2g|](\}}tt|t|@qSr')r^rR).0rbr'r'r) G s z'Decimal.logical_and..r%rP) rrrMrar rPr8rkzipr6rd)r.rr/rNrOrr'r'r) logical_and9 s   !%zDecimal.logical_andcCs;|dkrt}n|jtdd|jd|S)zInvert all its digits.Nr%r)r logical_xorr6r@)r.r/r'r'r)logical_invertJ s  zDecimal.logical_invertcCs|dkrt}nt|dd}|j sD|j rQ|jtS|j||j|j\}}djddt||D}t d|j dpddS) z:Applies an 'or' operation between self and other's digits.NrTrScSs2g|](\}}tt|t|BqSr')r^rR)rQrrRr'r'r)rS_ s z&Decimal.logical_or..r%rP) rrrMrar rPr8rkrTr6rd)r.rr/rNrOrr'r'r) logical_orQ s   !%zDecimal.logical_orcCs|dkrt}nt|dd}|j sD|j rQ|jtS|j||j|j\}}djddt||D}t d|j dpddS) z;Applies an 'xor' operation between self and other's digits.NrTrScSs2g|](\}}tt|t|AqSr')r^rR)rQrrRr'r'r)rSp s z'Decimal.logical_xor..r%rP) rrrMrar rPr8rkrTr6rd)r.rr/rNrOrr'r'r)rVb s   !%zDecimal.logical_xorcCst|dd}|dkr*t}n|js<|jr|j}|j}|s`|r|dkr|dkr|j|S|dkr|dkr|j|S|j||Sn|jj|j}|dkr|j|}n|dkr |}n|}|j|S)z8Compares the values numerically with their sign ignored.rTNr-r%r) rrrOrrrrrr-)r.rr/r.r/r*r;r'r'r)max_mags s&          zDecimal.max_magcCst|dd}|dkr*t}n|js<|jr|j}|j}|s`|r|dkr|dkr|j|S|dkr|dkr|j|S|j||Sn|jj|j}|dkr|j|}n|dkr |}n|}|j|S)z8Compares the values numerically with their sign ignored.rTNr-r%r) rrrOrrrrrr-)r.rr/r.r/r*r;r'r'r)min_mag s&          zDecimal.min_magcCs|dkrt}n|jd|}|r4|S|jdkrJtS|jdkrytdd|j|jS|j}|jt |j |j |}||kr|S|j tdd|j d|S)z=Returns the largest representable number smaller than itself.Nr/r-r%r>rr)rrrrDr6r@rrGr(r_ignore_all_flagsrrr)r.r/r;new_selfr'r'r) next_minus s"      zDecimal.next_minuscCs|dkrt}n|jd|}|r4|S|jdkrJtS|jdkrytdd|j|jS|j}|jt |j |j |}||kr|S|j tdd|j d|S)z=Returns the smallest representable number larger than itself.Nr/r-r>r%rr)rrrrEr6r@rrGr(rr[rrr)r.r/r;r\r'r'r) next_plus s"      zDecimal.next_pluscCs@t|dd}|dkr*t}n|j||}|rF|S|j|}|dkrn|j|S|dkr|j|}n|j|}|jr|jt d|j |jt |jt nb|j |jkr<|jt|jt|jt |jt |s<|jtq<n|S)aReturns the number closest to self, in the direction towards other. The result is the closest representable number to self (excluding self) that is in the direction towards other, unless both have the same value. If the two operands are numerically equal, then the result is a copy of self with the sign set to be the same as the sign of other. rTNr%r-z Infinite result from next_towardr)rrrrr7r^r]rrarr7r r rr!rr r)r.rr/r;Z comparisonr'r'r) next_toward s4              zDecimal.next_towardcCs|jrdS|jr dS|j}|dkr<dS|dkrLdS|jrl|jredSdSn|dkrt}n|jd |r|jrd Sd Sn|jrd Sd SdS)aReturns an indication of the class of self. The class is one of the following strings: sNaN NaN -Infinity -Normal -Subnormal -Zero +Zero +Subnormal +Normal +Infinity rrr-z +Infinityz -Infinityz-Zeroz+ZeroNr/z -Subnormalz +Subnormalz-Normalz+Normalr)rrrr?r7rr>)r.r/infr'r'r) number_class s,           zDecimal.number_classcCs tdS)z'Just returns 10, as this is Decimal, :)r)r)r.r'r'r)radix5sz Decimal.radixcCsV|dkrt}nt|dd}|j||}|rF|S|jdkrb|jtS|j t|ko|jkns|jtS|jrt |St|}|j }|jt |}|dkrd||}n |dkr|| d}n||d|d|}t |j |jdpLd|jS)z5Returns a rotated copy of self, value-of-other times.NrTr%rP)rrrrNrar r@rRrrr8rcr6r7rd)r.rr/r;torotrotdigtopadZrotatedr'r'r)rotate9s,   )        zDecimal.rotatecCs|dkrt}nt|dd}|j||}|rF|S|jdkrb|jtSd|j|j}d|j|j}|t|ko|kns|jtS|j rt |St |j |j |jt|}|j|}|S)z>Returns self operand after adding the second value to its exp.NrTr%r+r)rrrrNrar rAr@rRrrr6r7r8r)r.rr/r;ZliminfZlimsupr}r'r'r)scalebZs"   "   %zDecimal.scalebcCsy|dkrt}nt|dd}|j||}|rF|S|jdkrb|jtS|j t|ko|jkns|jtS|jrt |St|}|j }|jt |}|dkrd||}n |dkr|| d}n|dkr2|d|}n"|d|}||j d}t |j |jdpod|jS)z5Returns a shifted copy of self, value-of-other times.NrTr%rP)rrrrNrar r@rRrrr8rcr6r7rd)r.rr/r;rcrdreZshiftedr'r'r)rss2   )         z Decimal.shiftcCs|jt|ffS)N) __class__r^)r.r'r'r) __reduce__szDecimal.__reduce__cCs)t|tkr|S|jt|S)N)typerrhr^)r.r'r'r)__copy__szDecimal.__copy__cCs)t|tkr|S|jt|S)N)rjrrhr^)r.memor'r'r) __deepcopy__szDecimal.__deepcopy__cCs|dkrt}nt|d|}|jrt|j|}t|j}|ddkrt|d7}nt|||S|ddkrddg|j|dr?rCrGrrJrKrMrPrUrWrXrVrYrZr]r^r_rarbrfrgrrirkrmrzr'r'r'r)r)s  (   !  @        4 V7; !$K        f        >  ,U G " c*"    I  K         2 3  .* !'   FcCs7tjt}||_||_||_||_|S)zCreate a decimal instance directly, without any validation, normalization (e.g. removal of leading zeros) or argument conversion. This function is for *internal use only*. )r[r\rr7r8rNrO)r=Z coefficientrZspecialr.r'r'r)r6s     r6c@s:eZdZdZddZddZddZdS) rMzContext manager class to support localcontext(). Sets a copy of the supplied context in __enter__() and restores the previous decimal context in __exit__() cCs|j|_dS)N)rG new_context)r.rr'r'r)__init__sz_ContextManager.__init__cCs t|_t|j|jS)N)r saved_contextrr)r.r'r'r) __enter__s  z_ContextManager.__enter__cCst|jdS)N)rr)r.tvtbr'r'r)__exit__sz_ContextManager.__exit__N)r1r2r3r4rrrr'r'r'r)rMs   rMc @seZdZdZddddddddddd ZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZeZdddZddZddZdd ZdZd!d"Zd#d$Zd%d&Zd'd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Z d:d;Z!d<d=Z"d>d?Z#d@dAZ$dBdCZ%dDdEZ&dFdGZ'dHdIZ(dJdKZ)dLdMZ*dNdOZ+dPdQZ,dRdSZ-dTdUZ.dVdWZ/dXdYZ0dZd[Z1d\d]Z2d^d_Z3d`daZ4dbdcZ5dddeZ6dfdgZ7dhdiZ8djdkZ9dldmZ:dndoZ;dpdqZ<drdsZ=dtduZ>dvdwZ?dxdyZ@dzd{ZAd|d}ZBd~dZCddZDddZEddZFddZGdddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVeVZWdS)raContains the context for a Decimal instance. Contains: prec - precision (for use in rounding, division, square roots..) rounding - rounding type (how you round) traps - If traps[exception] = 1, then the exception is raised when it is caused. Otherwise, a value is substituted in. flags - When an exception is caused, flags[exception] is set. (Whether or not the trap_enabler is set) Should be reset by user of Decimal instance. Emin - Minimum exponent Emax - Maximum exponent capitals - If 1, 1*10^1 is printed as 1E+1. If 0, printed as 1e1 clamp - If 1, change exponents if too high (Default 0) Nc sy t} Wntk rYnX|dk r1|n| j|_|dk rO|n| j|_|dk rm|n| j|_|dk r|n| j|_|dk r|n| j|_|dk r|n| j|_| dkrg|_n | |_dkr| j j |_ nAt t sMt fddt D|_ n |_ dkrzt jt d|_nAt t st fddt D|_n |_dS)Nc3s'|]}|t|kfVqdS)N)rR)rQr)rr'r) Nsz#Context.__init__..r%c3s'|]}|t|kfVqdS)N)rR)rQr)rr'r)rUs)r NameErrorr@r?r!rArr_ignored_flagsrrGr]rrfromkeysr) r.r@r?r!rArrrrrZdcr')rrr)r5s.      )  )zContext.__init__cCst|ts"td|n|dkr\||krtd||||fqnq|dkr||krtd||||fqn7||ks||krtd||||fntj|||S)Nz%s must be an integerz-infz%s must be in [%s, %d]. got: %sr`z%s must be in [%d, %s]. got: %sz%s must be in [%d, %d]. got %s)r]rRrorir[ __setattr__)r.namerqZvminZvmaxr'r'r)_set_integer_checkYs  "  "zContext._set_integer_checkcCst|ts"td|nx-|D]%}|tkr)td|q)q)Wx-tD]%}||krYtd|qYqYWtj|||S)Nz%s must be a signal dictz%s is not a valid signal dict)r]rrorKeyErrorr[r)r.rr}keyr'r'r)_set_signal_dictgs    zContext._set_signal_dictcCsC|dkr"|j||ddS|dkrD|j||ddS|dkrf|j||ddS|dkr|j||ddS|d kr|j||ddS|d kr|tkrtd |ntj|||S|d ks|d kr|j||S|dkr/tj|||Std|dS)Nr@r-r`r!z-infr%rArrr?z%s: invalid rounding moderrrz.'decimal.Context' object has no attribute '%s')r_rounding_modesror[rrrK)r.rrqr'r'r)rrs(        zContext.__setattr__cCstd|dS)Nz%s cannot be deleted)rK)r.rr'r'r) __delattr__szContext.__delattr__c Csodd|jjD}dd|jjD}|j|j|j|j|j|j|j ||ffS)NcSs"g|]\}}|r|qSr'r')rQsigrr'r'r)rSs z&Context.__reduce__..cSs"g|]\}}|r|qSr'r')rQrrr'r'r)rSs ) ritemsrrhr@r?r!rArr)r.rrr'r'r)ris zContext.__reduce__cCsg}|jdt|dd|jjD}|jddj|ddd|jjD}|jddj|ddj|d S) zShow the current context.zrContext(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, clamp=%(clamp)dcSs%g|]\}}|r|jqSr')r1)rQr|rr'r'r)rSs z$Context.__repr__..zflags=[z, ]cSs%g|]\}}|r|jqSr')r1)rQrrr'r'r)rSs ztraps=[))rjvarsrrrkr)r.rnamesr'r'r)rs zContext.__repr__cCs%x|jD]}d|j|>> context = Context(prec=5, rounding=ROUND_DOWN) >>> context.create_decimal_from_float(3.1415926535897932) Decimal('3.1415') >>> context = Context(prec=5, traps=[Inexact]) >>> context.create_decimal_from_float(3.1415926535897932) Traceback (most recent call last): ... decimal.Inexact: None )rrnr)r.r|r}r'r'r)create_decimal_from_floatsz!Context.create_decimal_from_floatcCs"t|dd}|jd|S)a[Returns the absolute value of the operand. If the operand is negative, the result is the same as using the minus operation on the operand. Otherwise, the result is the same as using the plus operation on the operand. >>> ExtendedContext.abs(Decimal('2.1')) Decimal('2.1') >>> ExtendedContext.abs(Decimal('-100')) Decimal('100') >>> ExtendedContext.abs(Decimal('101.5')) Decimal('101.5') >>> ExtendedContext.abs(Decimal('-101.5')) Decimal('101.5') >>> ExtendedContext.abs(-1) Decimal('1') rTr/)rr)r.rr'r'r)re&sz Context.abscCsNt|dd}|j|d|}|tkrFtd|n|SdS)aReturn the sum of the two operands. >>> ExtendedContext.add(Decimal('12'), Decimal('7.00')) Decimal('19.00') >>> ExtendedContext.add(Decimal('1E+2'), Decimal('1.01E+4')) Decimal('1.02E+4') >>> ExtendedContext.add(1, Decimal(2)) Decimal('3') >>> ExtendedContext.add(Decimal(8), 5) Decimal('13') >>> ExtendedContext.add(5, 5) Decimal('10') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)add;s  z Context.addcCst|j|S)N)r^r)r.rr'r'r)_applyPszContext._applycCs(t|tstdn|jS)zReturns the same Decimal object. As we do not have different encodings for the same number, the received object already is in its canonical form. >>> ExtendedContext.canonical(Decimal('2.50')) Decimal('2.50') z,canonical requires a Decimal as an argument.)r]rror1)r.rr'r'r)r1Ss zContext.canonicalcCs%t|dd}|j|d|S)aCompares values numerically. If the signs of the operands differ, a value representing each operand ('-1' if the operand is less than zero, '0' if the operand is zero or negative zero, or '1' if the operand is greater than zero) is used in place of that operand for the comparison instead of the actual operand. The comparison is then effected by subtracting the second operand from the first and then returning a value according to the result of the subtraction: '-1' if the result is less than zero, '0' if the result is zero or negative zero, or '1' if the result is greater than zero. >>> ExtendedContext.compare(Decimal('2.1'), Decimal('3')) Decimal('-1') >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.1')) Decimal('0') >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.10')) Decimal('0') >>> ExtendedContext.compare(Decimal('3'), Decimal('2.1')) Decimal('1') >>> ExtendedContext.compare(Decimal('2.1'), Decimal('-3')) Decimal('1') >>> ExtendedContext.compare(Decimal('-3'), Decimal('2.1')) Decimal('-1') >>> ExtendedContext.compare(1, 2) Decimal('-1') >>> ExtendedContext.compare(Decimal(1), 2) Decimal('-1') >>> ExtendedContext.compare(1, Decimal(2)) Decimal('-1') rTr/)rr)r.rrRr'r'r)r`s!zContext.comparecCs%t|dd}|j|d|S)aCompares the values of the two operands numerically. It's pretty much like compare(), but all NaNs signal, with signaling NaNs taking precedence over quiet NaNs. >>> c = ExtendedContext >>> c.compare_signal(Decimal('2.1'), Decimal('3')) Decimal('-1') >>> c.compare_signal(Decimal('2.1'), Decimal('2.1')) Decimal('0') >>> c.flags[InvalidOperation] = 0 >>> print(c.flags[InvalidOperation]) 0 >>> c.compare_signal(Decimal('NaN'), Decimal('2.1')) Decimal('NaN') >>> print(c.flags[InvalidOperation]) 1 >>> c.flags[InvalidOperation] = 0 >>> print(c.flags[InvalidOperation]) 0 >>> c.compare_signal(Decimal('sNaN'), Decimal('2.1')) Decimal('NaN') >>> print(c.flags[InvalidOperation]) 1 >>> c.compare_signal(-1, 2) Decimal('-1') >>> c.compare_signal(Decimal(-1), 2) Decimal('-1') >>> c.compare_signal(-1, Decimal(2)) Decimal('-1') rTr/)rr2)r.rrRr'r'r)r2s zContext.compare_signalcCst|dd}|j|S)a+Compares two operands using their abstract representation. This is not like the standard compare, which use their numerical value. Note that a total ordering is defined for all possible abstract representations. >>> ExtendedContext.compare_total(Decimal('12.73'), Decimal('127.9')) Decimal('-1') >>> ExtendedContext.compare_total(Decimal('-127'), Decimal('12')) Decimal('-1') >>> ExtendedContext.compare_total(Decimal('12.30'), Decimal('12.3')) Decimal('-1') >>> ExtendedContext.compare_total(Decimal('12.30'), Decimal('12.30')) Decimal('0') >>> ExtendedContext.compare_total(Decimal('12.3'), Decimal('12.300')) Decimal('1') >>> ExtendedContext.compare_total(Decimal('12.3'), Decimal('NaN')) Decimal('-1') >>> ExtendedContext.compare_total(1, 2) Decimal('-1') >>> ExtendedContext.compare_total(Decimal(1), 2) Decimal('-1') >>> ExtendedContext.compare_total(1, Decimal(2)) Decimal('-1') rT)rr-)r.rrRr'r'r)r-szContext.compare_totalcCst|dd}|j|S)zCompares two operands using their abstract representation ignoring sign. Like compare_total, but with operand's sign ignored and assumed to be 0. rT)rr6)r.rrRr'r'r)r6szContext.compare_total_magcCst|dd}|jS)aReturns a copy of the operand with the sign set to 0. >>> ExtendedContext.copy_abs(Decimal('2.1')) Decimal('2.1') >>> ExtendedContext.copy_abs(Decimal('-100')) Decimal('100') >>> ExtendedContext.copy_abs(-1) Decimal('1') rT)rr)r.rr'r'r)rs zContext.copy_abscCst|dd}t|S)aReturns a copy of the decimal object. >>> ExtendedContext.copy_decimal(Decimal('2.1')) Decimal('2.1') >>> ExtendedContext.copy_decimal(Decimal('-1.00')) Decimal('-1.00') >>> ExtendedContext.copy_decimal(1) Decimal('1') rT)rr)r.rr'r'r) copy_decimals zContext.copy_decimalcCst|dd}|jS)a(Returns a copy of the operand with the sign inverted. >>> ExtendedContext.copy_negate(Decimal('101.5')) Decimal('-101.5') >>> ExtendedContext.copy_negate(Decimal('-101.5')) Decimal('101.5') >>> ExtendedContext.copy_negate(1) Decimal('-1') rT)rr)r.rr'r'r)rs zContext.copy_negatecCst|dd}|j|S)aCopies the second operand's sign to the first one. In detail, it returns a copy of the first operand with the sign equal to the sign of the second operand. >>> ExtendedContext.copy_sign(Decimal( '1.50'), Decimal('7.33')) Decimal('1.50') >>> ExtendedContext.copy_sign(Decimal('-1.50'), Decimal('7.33')) Decimal('1.50') >>> ExtendedContext.copy_sign(Decimal( '1.50'), Decimal('-7.33')) Decimal('-1.50') >>> ExtendedContext.copy_sign(Decimal('-1.50'), Decimal('-7.33')) Decimal('-1.50') >>> ExtendedContext.copy_sign(1, -2) Decimal('-1') >>> ExtendedContext.copy_sign(Decimal(1), -2) Decimal('-1') >>> ExtendedContext.copy_sign(1, Decimal(-2)) Decimal('-1') rT)rr7)r.rrRr'r'r)r7szContext.copy_signcCsNt|dd}|j|d|}|tkrFtd|n|SdS)aDecimal division in a specified context. >>> ExtendedContext.divide(Decimal('1'), Decimal('3')) Decimal('0.333333333') >>> ExtendedContext.divide(Decimal('2'), Decimal('3')) Decimal('0.666666667') >>> ExtendedContext.divide(Decimal('5'), Decimal('2')) Decimal('2.5') >>> ExtendedContext.divide(Decimal('1'), Decimal('10')) Decimal('0.1') >>> ExtendedContext.divide(Decimal('12'), Decimal('12')) Decimal('1') >>> ExtendedContext.divide(Decimal('8.00'), Decimal('2')) Decimal('4.00') >>> ExtendedContext.divide(Decimal('2.400'), Decimal('2.0')) Decimal('1.20') >>> ExtendedContext.divide(Decimal('1000'), Decimal('100')) Decimal('10') >>> ExtendedContext.divide(Decimal('1000'), Decimal('1')) Decimal('1000') >>> ExtendedContext.divide(Decimal('2.40E+6'), Decimal('2')) Decimal('1.20E+6') >>> ExtendedContext.divide(5, 5) Decimal('1') >>> ExtendedContext.divide(Decimal(5), 5) Decimal('1') >>> ExtendedContext.divide(5, Decimal(5)) Decimal('1') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)divide s  zContext.dividecCsNt|dd}|j|d|}|tkrFtd|n|SdS)a/Divides two numbers and returns the integer part of the result. >>> ExtendedContext.divide_int(Decimal('2'), Decimal('3')) Decimal('0') >>> ExtendedContext.divide_int(Decimal('10'), Decimal('3')) Decimal('3') >>> ExtendedContext.divide_int(Decimal('1'), Decimal('0.3')) Decimal('3') >>> ExtendedContext.divide_int(10, 3) Decimal('3') >>> ExtendedContext.divide_int(Decimal(10), 3) Decimal('3') >>> ExtendedContext.divide_int(10, Decimal(3)) Decimal('3') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r) divide_int0s  zContext.divide_intcCsNt|dd}|j|d|}|tkrFtd|n|SdS)aReturn (a // b, a % b). >>> ExtendedContext.divmod(Decimal(8), Decimal(3)) (Decimal('2'), Decimal('2')) >>> ExtendedContext.divmod(Decimal(8), Decimal(4)) (Decimal('2'), Decimal('0')) >>> ExtendedContext.divmod(8, 4) (Decimal('2'), Decimal('0')) >>> ExtendedContext.divmod(Decimal(8), 4) (Decimal('2'), Decimal('0')) >>> ExtendedContext.divmod(8, Decimal(4)) (Decimal('2'), Decimal('0')) rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)rGs  zContext.divmodcCs"t|dd}|jd|S)a#Returns e ** a. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.exp(Decimal('-Infinity')) Decimal('0') >>> c.exp(Decimal('-1')) Decimal('0.367879441') >>> c.exp(Decimal('0')) Decimal('1') >>> c.exp(Decimal('1')) Decimal('2.71828183') >>> c.exp(Decimal('0.693147181')) Decimal('2.00000000') >>> c.exp(Decimal('+Infinity')) Decimal('Infinity') >>> c.exp(10) Decimal('22026.4658') rTr/)rrT)r.rr'r'r)rT\sz Context.expcCs(t|dd}|j||d|S)a Returns a multiplied by b, plus c. The first two operands are multiplied together, using multiply, the third operand is then added to the result of that multiplication, using add, all with only one final rounding. >>> ExtendedContext.fma(Decimal('3'), Decimal('5'), Decimal('7')) Decimal('22') >>> ExtendedContext.fma(Decimal('3'), Decimal('-5'), Decimal('7')) Decimal('-8') >>> ExtendedContext.fma(Decimal('888565290'), Decimal('1557.96930'), Decimal('-86087.7578')) Decimal('1.38435736E+12') >>> ExtendedContext.fma(1, 3, 4) Decimal('7') >>> ExtendedContext.fma(1, Decimal(3), 4) Decimal('7') >>> ExtendedContext.fma(1, 3, Decimal(4)) Decimal('7') rTr/)rr)r.rrRr*r'r'r)rtsz Context.fmacCs(t|tstdn|jS)aReturn True if the operand is canonical; otherwise return False. Currently, the encoding of a Decimal instance is always canonical, so this method returns True for any Decimal. >>> ExtendedContext.is_canonical(Decimal('2.50')) True z/is_canonical requires a Decimal as an argument.)r]rror:)r.rr'r'r)r:s zContext.is_canonicalcCst|dd}|jS)a,Return True if the operand is finite; otherwise return False. A Decimal instance is considered finite if it is neither infinite nor a NaN. >>> ExtendedContext.is_finite(Decimal('2.50')) True >>> ExtendedContext.is_finite(Decimal('-0.3')) True >>> ExtendedContext.is_finite(Decimal('0')) True >>> ExtendedContext.is_finite(Decimal('Inf')) False >>> ExtendedContext.is_finite(Decimal('NaN')) False >>> ExtendedContext.is_finite(1) True rT)rr;)r.rr'r'r)r;szContext.is_finitecCst|dd}|jS)aUReturn True if the operand is infinite; otherwise return False. >>> ExtendedContext.is_infinite(Decimal('2.50')) False >>> ExtendedContext.is_infinite(Decimal('-Inf')) True >>> ExtendedContext.is_infinite(Decimal('NaN')) False >>> ExtendedContext.is_infinite(1) False rT)rr")r.rr'r'r)r"s zContext.is_infinitecCst|dd}|jS)aOReturn True if the operand is a qNaN or sNaN; otherwise return False. >>> ExtendedContext.is_nan(Decimal('2.50')) False >>> ExtendedContext.is_nan(Decimal('NaN')) True >>> ExtendedContext.is_nan(Decimal('-sNaN')) True >>> ExtendedContext.is_nan(1) False rT)rr)r.rr'r'r)rs zContext.is_nancCs"t|dd}|jd|S)aReturn True if the operand is a normal number; otherwise return False. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.is_normal(Decimal('2.50')) True >>> c.is_normal(Decimal('0.1E-999')) False >>> c.is_normal(Decimal('0.00')) False >>> c.is_normal(Decimal('-Inf')) False >>> c.is_normal(Decimal('NaN')) False >>> c.is_normal(1) True rTr/)rr<)r.rr'r'r)r<szContext.is_normalcCst|dd}|jS)aHReturn True if the operand is a quiet NaN; otherwise return False. >>> ExtendedContext.is_qnan(Decimal('2.50')) False >>> ExtendedContext.is_qnan(Decimal('NaN')) True >>> ExtendedContext.is_qnan(Decimal('sNaN')) False >>> ExtendedContext.is_qnan(1) False rT)rr)r.rr'r'r)rs zContext.is_qnancCst|dd}|jS)aReturn True if the operand is negative; otherwise return False. >>> ExtendedContext.is_signed(Decimal('2.50')) False >>> ExtendedContext.is_signed(Decimal('-12')) True >>> ExtendedContext.is_signed(Decimal('-0')) True >>> ExtendedContext.is_signed(8) False >>> ExtendedContext.is_signed(-8) True rT)rr=)r.rr'r'r)r=szContext.is_signedcCst|dd}|jS)aTReturn True if the operand is a signaling NaN; otherwise return False. >>> ExtendedContext.is_snan(Decimal('2.50')) False >>> ExtendedContext.is_snan(Decimal('NaN')) False >>> ExtendedContext.is_snan(Decimal('sNaN')) True >>> ExtendedContext.is_snan(1) False rT)rr)r.rr'r'r)rs zContext.is_snancCs"t|dd}|jd|S)aReturn True if the operand is subnormal; otherwise return False. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.is_subnormal(Decimal('2.50')) False >>> c.is_subnormal(Decimal('0.1E-999')) True >>> c.is_subnormal(Decimal('0.00')) False >>> c.is_subnormal(Decimal('-Inf')) False >>> c.is_subnormal(Decimal('NaN')) False >>> c.is_subnormal(1) False rTr/)rr>)r.rr'r'r)r>szContext.is_subnormalcCst|dd}|jS)auReturn True if the operand is a zero; otherwise return False. >>> ExtendedContext.is_zero(Decimal('0')) True >>> ExtendedContext.is_zero(Decimal('2.50')) False >>> ExtendedContext.is_zero(Decimal('-0E+2')) True >>> ExtendedContext.is_zero(1) False >>> ExtendedContext.is_zero(0) True rT)rr?)r.rr'r'r)r?*szContext.is_zerocCs"t|dd}|jd|S)aReturns the natural (base e) logarithm of the operand. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.ln(Decimal('0')) Decimal('-Infinity') >>> c.ln(Decimal('1.000')) Decimal('0') >>> c.ln(Decimal('2.71828183')) Decimal('1.00000000') >>> c.ln(Decimal('10')) Decimal('2.30258509') >>> c.ln(Decimal('+Infinity')) Decimal('Infinity') >>> c.ln(1) Decimal('0') rTr/)rrG)r.rr'r'r)rG;sz Context.lncCs"t|dd}|jd|S)aReturns the base 10 logarithm of the operand. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.log10(Decimal('0')) Decimal('-Infinity') >>> c.log10(Decimal('0.001')) Decimal('-3') >>> c.log10(Decimal('1.000')) Decimal('0') >>> c.log10(Decimal('2')) Decimal('0.301029996') >>> c.log10(Decimal('10')) Decimal('1') >>> c.log10(Decimal('70')) Decimal('1.84509804') >>> c.log10(Decimal('+Infinity')) Decimal('Infinity') >>> c.log10(0) Decimal('-Infinity') >>> c.log10(1) Decimal('0') rTr/)rrJ)r.rr'r'r)rJQsz Context.log10cCs"t|dd}|jd|S)a4 Returns the exponent of the magnitude of the operand's MSD. The result is the integer which is the exponent of the magnitude of the most significant digit of the operand (as though the operand were truncated to a single digit while maintaining the value of that digit and without limiting the resulting exponent). >>> ExtendedContext.logb(Decimal('250')) Decimal('2') >>> ExtendedContext.logb(Decimal('2.50')) Decimal('0') >>> ExtendedContext.logb(Decimal('0.03')) Decimal('-2') >>> ExtendedContext.logb(Decimal('0')) Decimal('-Infinity') >>> ExtendedContext.logb(1) Decimal('0') >>> ExtendedContext.logb(10) Decimal('1') >>> ExtendedContext.logb(100) Decimal('2') rTr/)rrK)r.rr'r'r)rKmsz Context.logbcCs%t|dd}|j|d|S)aApplies the logical operation 'and' between each operand's digits. The operands must be both logical numbers. >>> ExtendedContext.logical_and(Decimal('0'), Decimal('0')) Decimal('0') >>> ExtendedContext.logical_and(Decimal('0'), Decimal('1')) Decimal('0') >>> ExtendedContext.logical_and(Decimal('1'), Decimal('0')) Decimal('0') >>> ExtendedContext.logical_and(Decimal('1'), Decimal('1')) Decimal('1') >>> ExtendedContext.logical_and(Decimal('1100'), Decimal('1010')) Decimal('1000') >>> ExtendedContext.logical_and(Decimal('1111'), Decimal('10')) Decimal('10') >>> ExtendedContext.logical_and(110, 1101) Decimal('100') >>> ExtendedContext.logical_and(Decimal(110), 1101) Decimal('100') >>> ExtendedContext.logical_and(110, Decimal(1101)) Decimal('100') rTr/)rrU)r.rrRr'r'r)rUszContext.logical_andcCs"t|dd}|jd|S)a Invert all the digits in the operand. The operand must be a logical number. >>> ExtendedContext.logical_invert(Decimal('0')) Decimal('111111111') >>> ExtendedContext.logical_invert(Decimal('1')) Decimal('111111110') >>> ExtendedContext.logical_invert(Decimal('111111111')) Decimal('0') >>> ExtendedContext.logical_invert(Decimal('101010101')) Decimal('10101010') >>> ExtendedContext.logical_invert(1101) Decimal('111110010') rTr/)rrW)r.rr'r'r)rWszContext.logical_invertcCs%t|dd}|j|d|S)aApplies the logical operation 'or' between each operand's digits. The operands must be both logical numbers. >>> ExtendedContext.logical_or(Decimal('0'), Decimal('0')) Decimal('0') >>> ExtendedContext.logical_or(Decimal('0'), Decimal('1')) Decimal('1') >>> ExtendedContext.logical_or(Decimal('1'), Decimal('0')) Decimal('1') >>> ExtendedContext.logical_or(Decimal('1'), Decimal('1')) Decimal('1') >>> ExtendedContext.logical_or(Decimal('1100'), Decimal('1010')) Decimal('1110') >>> ExtendedContext.logical_or(Decimal('1110'), Decimal('10')) Decimal('1110') >>> ExtendedContext.logical_or(110, 1101) Decimal('1111') >>> ExtendedContext.logical_or(Decimal(110), 1101) Decimal('1111') >>> ExtendedContext.logical_or(110, Decimal(1101)) Decimal('1111') rTr/)rrX)r.rrRr'r'r)rXszContext.logical_orcCs%t|dd}|j|d|S)aApplies the logical operation 'xor' between each operand's digits. The operands must be both logical numbers. >>> ExtendedContext.logical_xor(Decimal('0'), Decimal('0')) Decimal('0') >>> ExtendedContext.logical_xor(Decimal('0'), Decimal('1')) Decimal('1') >>> ExtendedContext.logical_xor(Decimal('1'), Decimal('0')) Decimal('1') >>> ExtendedContext.logical_xor(Decimal('1'), Decimal('1')) Decimal('0') >>> ExtendedContext.logical_xor(Decimal('1100'), Decimal('1010')) Decimal('110') >>> ExtendedContext.logical_xor(Decimal('1111'), Decimal('10')) Decimal('1101') >>> ExtendedContext.logical_xor(110, 1101) Decimal('1011') >>> ExtendedContext.logical_xor(Decimal(110), 1101) Decimal('1011') >>> ExtendedContext.logical_xor(110, Decimal(1101)) Decimal('1011') rTr/)rrV)r.rrRr'r'r)rVszContext.logical_xorcCs%t|dd}|j|d|S)amax compares two values numerically and returns the maximum. If either operand is a NaN then the general rules apply. Otherwise, the operands are compared as though by the compare operation. If they are numerically equal then the left-hand operand is chosen as the result. Otherwise the maximum (closer to positive infinity) of the two operands is chosen as the result. >>> ExtendedContext.max(Decimal('3'), Decimal('2')) Decimal('3') >>> ExtendedContext.max(Decimal('-10'), Decimal('3')) Decimal('3') >>> ExtendedContext.max(Decimal('1.0'), Decimal('1')) Decimal('1') >>> ExtendedContext.max(Decimal('7'), Decimal('NaN')) Decimal('7') >>> ExtendedContext.max(1, 2) Decimal('2') >>> ExtendedContext.max(Decimal(1), 2) Decimal('2') >>> ExtendedContext.max(1, Decimal(2)) Decimal('2') rTr/)rr)r.rrRr'r'r)rsz Context.maxcCs%t|dd}|j|d|S)aCompares the values numerically with their sign ignored. >>> ExtendedContext.max_mag(Decimal('7'), Decimal('NaN')) Decimal('7') >>> ExtendedContext.max_mag(Decimal('7'), Decimal('-10')) Decimal('-10') >>> ExtendedContext.max_mag(1, -2) Decimal('-2') >>> ExtendedContext.max_mag(Decimal(1), -2) Decimal('-2') >>> ExtendedContext.max_mag(1, Decimal(-2)) Decimal('-2') rTr/)rrY)r.rrRr'r'r)rYszContext.max_magcCs%t|dd}|j|d|S)amin compares two values numerically and returns the minimum. If either operand is a NaN then the general rules apply. Otherwise, the operands are compared as though by the compare operation. If they are numerically equal then the left-hand operand is chosen as the result. Otherwise the minimum (closer to negative infinity) of the two operands is chosen as the result. >>> ExtendedContext.min(Decimal('3'), Decimal('2')) Decimal('2') >>> ExtendedContext.min(Decimal('-10'), Decimal('3')) Decimal('-10') >>> ExtendedContext.min(Decimal('1.0'), Decimal('1')) Decimal('1.0') >>> ExtendedContext.min(Decimal('7'), Decimal('NaN')) Decimal('7') >>> ExtendedContext.min(1, 2) Decimal('1') >>> ExtendedContext.min(Decimal(1), 2) Decimal('1') >>> ExtendedContext.min(1, Decimal(29)) Decimal('1') rTr/)rr)r.rrRr'r'r)rsz Context.mincCs%t|dd}|j|d|S)aCompares the values numerically with their sign ignored. >>> ExtendedContext.min_mag(Decimal('3'), Decimal('-2')) Decimal('-2') >>> ExtendedContext.min_mag(Decimal('-3'), Decimal('NaN')) Decimal('-3') >>> ExtendedContext.min_mag(1, -2) Decimal('1') >>> ExtendedContext.min_mag(Decimal(1), -2) Decimal('1') >>> ExtendedContext.min_mag(1, Decimal(-2)) Decimal('1') rTr/)rrZ)r.rrRr'r'r)rZ2szContext.min_magcCs"t|dd}|jd|S)aMinus corresponds to unary prefix minus in Python. The operation is evaluated using the same rules as subtract; the operation minus(a) is calculated as subtract('0', a) where the '0' has the same exponent as the operand. >>> ExtendedContext.minus(Decimal('1.3')) Decimal('-1.3') >>> ExtendedContext.minus(Decimal('-1.3')) Decimal('1.3') >>> ExtendedContext.minus(1) Decimal('-1') rTr/)rr)r.rr'r'r)minusCsz Context.minuscCsNt|dd}|j|d|}|tkrFtd|n|SdS)amultiply multiplies two operands. If either operand is a special value then the general rules apply. Otherwise, the operands are multiplied together ('long multiplication'), resulting in a number which may be as long as the sum of the lengths of the two operands. >>> ExtendedContext.multiply(Decimal('1.20'), Decimal('3')) Decimal('3.60') >>> ExtendedContext.multiply(Decimal('7'), Decimal('3')) Decimal('21') >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('0.8')) Decimal('0.72') >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('-0')) Decimal('-0.0') >>> ExtendedContext.multiply(Decimal('654321'), Decimal('654321')) Decimal('4.28135971E+11') >>> ExtendedContext.multiply(7, 7) Decimal('49') >>> ExtendedContext.multiply(Decimal(7), 7) Decimal('49') >>> ExtendedContext.multiply(7, Decimal(7)) Decimal('49') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)multiplyTs  zContext.multiplycCs"t|dd}|jd|S)a"Returns the largest representable number smaller than a. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> ExtendedContext.next_minus(Decimal('1')) Decimal('0.999999999') >>> c.next_minus(Decimal('1E-1007')) Decimal('0E-1007') >>> ExtendedContext.next_minus(Decimal('-1.00000003')) Decimal('-1.00000004') >>> c.next_minus(Decimal('Infinity')) Decimal('9.99999999E+999') >>> c.next_minus(1) Decimal('0.999999999') rTr/)rr])r.rr'r'r)r]tszContext.next_minuscCs"t|dd}|jd|S)aReturns the smallest representable number larger than a. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> ExtendedContext.next_plus(Decimal('1')) Decimal('1.00000001') >>> c.next_plus(Decimal('-1E-1007')) Decimal('-0E-1007') >>> ExtendedContext.next_plus(Decimal('-1.00000003')) Decimal('-1.00000002') >>> c.next_plus(Decimal('-Infinity')) Decimal('-9.99999999E+999') >>> c.next_plus(1) Decimal('1.00000001') rTr/)rr^)r.rr'r'r)r^szContext.next_pluscCs%t|dd}|j|d|S)aReturns the number closest to a, in direction towards b. The result is the closest representable number from the first operand (but not the first operand) that is in the direction towards the second operand, unless the operands have the same value. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.next_toward(Decimal('1'), Decimal('2')) Decimal('1.00000001') >>> c.next_toward(Decimal('-1E-1007'), Decimal('1')) Decimal('-0E-1007') >>> c.next_toward(Decimal('-1.00000003'), Decimal('0')) Decimal('-1.00000002') >>> c.next_toward(Decimal('1'), Decimal('0')) Decimal('0.999999999') >>> c.next_toward(Decimal('1E-1007'), Decimal('-100')) Decimal('0E-1007') >>> c.next_toward(Decimal('-1.00000003'), Decimal('-10')) Decimal('-1.00000004') >>> c.next_toward(Decimal('0.00'), Decimal('-0.0000')) Decimal('-0.00') >>> c.next_toward(0, 1) Decimal('1E-1007') >>> c.next_toward(Decimal(0), 1) Decimal('1E-1007') >>> c.next_toward(0, Decimal(1)) Decimal('1E-1007') rTr/)rr_)r.rrRr'r'r)r_s zContext.next_towardcCs"t|dd}|jd|S)anormalize reduces an operand to its simplest form. Essentially a plus operation with all trailing zeros removed from the result. >>> ExtendedContext.normalize(Decimal('2.1')) Decimal('2.1') >>> ExtendedContext.normalize(Decimal('-2.0')) Decimal('-2') >>> ExtendedContext.normalize(Decimal('1.200')) Decimal('1.2') >>> ExtendedContext.normalize(Decimal('-120')) Decimal('-1.2E+2') >>> ExtendedContext.normalize(Decimal('120.00')) Decimal('1.2E+2') >>> ExtendedContext.normalize(Decimal('0.00')) Decimal('0') >>> ExtendedContext.normalize(6) Decimal('6') rTr/)rr )r.rr'r'r)r szContext.normalizecCs"t|dd}|jd|S)aReturns an indication of the class of the operand. The class is one of the following strings: -sNaN -NaN -Infinity -Normal -Subnormal -Zero +Zero +Subnormal +Normal +Infinity >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.number_class(Decimal('Infinity')) '+Infinity' >>> c.number_class(Decimal('1E-10')) '+Normal' >>> c.number_class(Decimal('2.50')) '+Normal' >>> c.number_class(Decimal('0.1E-999')) '+Subnormal' >>> c.number_class(Decimal('0')) '+Zero' >>> c.number_class(Decimal('-0')) '-Zero' >>> c.number_class(Decimal('-0.1E-999')) '-Subnormal' >>> c.number_class(Decimal('-1E-10')) '-Normal' >>> c.number_class(Decimal('-2.50')) '-Normal' >>> c.number_class(Decimal('-Infinity')) '-Infinity' >>> c.number_class(Decimal('NaN')) 'NaN' >>> c.number_class(Decimal('-NaN')) 'NaN' >>> c.number_class(Decimal('sNaN')) 'sNaN' >>> c.number_class(123) '+Normal' rTr/)rra)r.rr'r'r)ras/zContext.number_classcCs"t|dd}|jd|S)aPlus corresponds to unary prefix plus in Python. The operation is evaluated using the same rules as add; the operation plus(a) is calculated as add('0', a) where the '0' has the same exponent as the operand. >>> ExtendedContext.plus(Decimal('1.3')) Decimal('1.3') >>> ExtendedContext.plus(Decimal('-1.3')) Decimal('-1.3') >>> ExtendedContext.plus(-1) Decimal('-1') rTr/)rr)r.rr'r'r)plus sz Context.pluscCsQt|dd}|j||d|}|tkrItd|n|SdS)a Raises a to the power of b, to modulo if given. With two arguments, compute a**b. If a is negative then b must be integral. The result will be inexact unless b is integral and the result is finite and can be expressed exactly in 'precision' digits. With three arguments, compute (a**b) % modulo. For the three argument form, the following restrictions on the arguments hold: - all three arguments must be integral - b must be nonnegative - at least one of a or b must be nonzero - modulo must be nonzero and have at most 'precision' digits The result of pow(a, b, modulo) is identical to the result that would be obtained by computing (a**b) % modulo with unbounded precision, but is computed more efficiently. It is always exact. >>> c = ExtendedContext.copy() >>> c.Emin = -999 >>> c.Emax = 999 >>> c.power(Decimal('2'), Decimal('3')) Decimal('8') >>> c.power(Decimal('-2'), Decimal('3')) Decimal('-8') >>> c.power(Decimal('2'), Decimal('-3')) Decimal('0.125') >>> c.power(Decimal('1.7'), Decimal('8')) Decimal('69.7575744') >>> c.power(Decimal('10'), Decimal('0.301029996')) Decimal('2.00000000') >>> c.power(Decimal('Infinity'), Decimal('-1')) Decimal('0') >>> c.power(Decimal('Infinity'), Decimal('0')) Decimal('1') >>> c.power(Decimal('Infinity'), Decimal('1')) Decimal('Infinity') >>> c.power(Decimal('-Infinity'), Decimal('-1')) Decimal('-0') >>> c.power(Decimal('-Infinity'), Decimal('0')) Decimal('1') >>> c.power(Decimal('-Infinity'), Decimal('1')) Decimal('-Infinity') >>> c.power(Decimal('-Infinity'), Decimal('2')) Decimal('Infinity') >>> c.power(Decimal('0'), Decimal('0')) Decimal('NaN') >>> c.power(Decimal('3'), Decimal('7'), Decimal('16')) Decimal('11') >>> c.power(Decimal('-3'), Decimal('7'), Decimal('16')) Decimal('-11') >>> c.power(Decimal('-3'), Decimal('8'), Decimal('16')) Decimal('1') >>> c.power(Decimal('3'), Decimal('7'), Decimal('-16')) Decimal('11') >>> c.power(Decimal('23E12345'), Decimal('67E189'), Decimal('123456789')) Decimal('11729830') >>> c.power(Decimal('-0'), Decimal('17'), Decimal('1729')) Decimal('-0') >>> c.power(Decimal('-23'), Decimal('0'), Decimal('65537')) Decimal('1') >>> ExtendedContext.power(7, 7) Decimal('823543') >>> ExtendedContext.power(Decimal(7), 7) Decimal('823543') >>> ExtendedContext.power(7, Decimal(7), 2) Decimal('1') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrrr'r'r)powers I z Context.powercCs%t|dd}|j|d|S)a Returns a value equal to 'a' (rounded), having the exponent of 'b'. The coefficient of the result is derived from that of the left-hand operand. It may be rounded using the current rounding setting (if the exponent is being increased), multiplied by a positive power of ten (if the exponent is being decreased), or is unchanged (if the exponent is already equal to that of the right-hand operand). Unlike other operations, if the length of the coefficient after the quantize operation would be greater than precision then an Invalid operation condition is raised. This guarantees that, unless there is an error condition, the exponent of the result of a quantize is always equal to that of the right-hand operand. Also unlike other operations, quantize will never raise Underflow, even if the result is subnormal and inexact. >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.001')) Decimal('2.170') >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.01')) Decimal('2.17') >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.1')) Decimal('2.2') >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+0')) Decimal('2') >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+1')) Decimal('0E+1') >>> ExtendedContext.quantize(Decimal('-Inf'), Decimal('Infinity')) Decimal('-Infinity') >>> ExtendedContext.quantize(Decimal('2'), Decimal('Infinity')) Decimal('NaN') >>> ExtendedContext.quantize(Decimal('-0.1'), Decimal('1')) Decimal('-0') >>> ExtendedContext.quantize(Decimal('-0'), Decimal('1e+5')) Decimal('-0E+5') >>> ExtendedContext.quantize(Decimal('+35236450.6'), Decimal('1e-2')) Decimal('NaN') >>> ExtendedContext.quantize(Decimal('-35236450.6'), Decimal('1e-2')) Decimal('NaN') >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-1')) Decimal('217.0') >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-0')) Decimal('217') >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+1')) Decimal('2.2E+2') >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+2')) Decimal('2E+2') >>> ExtendedContext.quantize(1, 2) Decimal('1') >>> ExtendedContext.quantize(Decimal(1), 2) Decimal('1') >>> ExtendedContext.quantize(1, Decimal(2)) Decimal('1') rTr/)rr)r.rrRr'r'r)rjs7zContext.quantizecCs tdS)zkJust returns 10, as this is Decimal, :) >>> ExtendedContext.radix() Decimal('10') r)r)r.r'r'r)rbsz Context.radixcCsNt|dd}|j|d|}|tkrFtd|n|SdS)aReturns the remainder from integer division. The result is the residue of the dividend after the operation of calculating integer division as described for divide-integer, rounded to precision digits if necessary. The sign of the result, if non-zero, is the same as that of the original dividend. This operation will fail under the same conditions as integer division (that is, if integer division on the same two operands would fail, the remainder cannot be calculated). >>> ExtendedContext.remainder(Decimal('2.1'), Decimal('3')) Decimal('2.1') >>> ExtendedContext.remainder(Decimal('10'), Decimal('3')) Decimal('1') >>> ExtendedContext.remainder(Decimal('-10'), Decimal('3')) Decimal('-1') >>> ExtendedContext.remainder(Decimal('10.2'), Decimal('1')) Decimal('0.2') >>> ExtendedContext.remainder(Decimal('10'), Decimal('0.3')) Decimal('0.1') >>> ExtendedContext.remainder(Decimal('3.6'), Decimal('1.3')) Decimal('1.0') >>> ExtendedContext.remainder(22, 6) Decimal('4') >>> ExtendedContext.remainder(Decimal(22), 6) Decimal('4') >>> ExtendedContext.remainder(22, Decimal(6)) Decimal('4') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)rs  zContext.remaindercCs%t|dd}|j|d|S)aGReturns to be "a - b * n", where n is the integer nearest the exact value of "x / b" (if two integers are equally near then the even one is chosen). If the result is equal to 0 then its sign will be the sign of a. This operation will fail under the same conditions as integer division (that is, if integer division on the same two operands would fail, the remainder cannot be calculated). >>> ExtendedContext.remainder_near(Decimal('2.1'), Decimal('3')) Decimal('-0.9') >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('6')) Decimal('-2') >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('3')) Decimal('1') >>> ExtendedContext.remainder_near(Decimal('-10'), Decimal('3')) Decimal('-1') >>> ExtendedContext.remainder_near(Decimal('10.2'), Decimal('1')) Decimal('0.2') >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('0.3')) Decimal('0.1') >>> ExtendedContext.remainder_near(Decimal('3.6'), Decimal('1.3')) Decimal('-0.3') >>> ExtendedContext.remainder_near(3, 11) Decimal('3') >>> ExtendedContext.remainder_near(Decimal(3), 11) Decimal('3') >>> ExtendedContext.remainder_near(3, Decimal(11)) Decimal('3') rTr/)rr)r.rrRr'r'r)rszContext.remainder_nearcCs%t|dd}|j|d|S)aNReturns a rotated copy of a, b times. The coefficient of the result is a rotated copy of the digits in the coefficient of the first operand. The number of places of rotation is taken from the absolute value of the second operand, with the rotation being to the left if the second operand is positive or to the right otherwise. >>> ExtendedContext.rotate(Decimal('34'), Decimal('8')) Decimal('400000003') >>> ExtendedContext.rotate(Decimal('12'), Decimal('9')) Decimal('12') >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('-2')) Decimal('891234567') >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('0')) Decimal('123456789') >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('+2')) Decimal('345678912') >>> ExtendedContext.rotate(1333333, 1) Decimal('13333330') >>> ExtendedContext.rotate(Decimal(1333333), 1) Decimal('13333330') >>> ExtendedContext.rotate(1333333, Decimal(1)) Decimal('13333330') rTr/)rrf)r.rrRr'r'r)rfszContext.rotatecCst|dd}|j|S)aReturns True if the two operands have the same exponent. The result is never affected by either the sign or the coefficient of either operand. >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.001')) False >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.01')) True >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('1')) False >>> ExtendedContext.same_quantum(Decimal('Inf'), Decimal('-Inf')) True >>> ExtendedContext.same_quantum(10000, -1) True >>> ExtendedContext.same_quantum(Decimal(10000), -1) True >>> ExtendedContext.same_quantum(10000, Decimal(-1)) True rT)rr#)r.rrRr'r'r)r#szContext.same_quantumcCs%t|dd}|j|d|S)a3Returns the first operand after adding the second value its exp. >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('-2')) Decimal('0.0750') >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('0')) Decimal('7.50') >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('3')) Decimal('7.50E+3') >>> ExtendedContext.scaleb(1, 4) Decimal('1E+4') >>> ExtendedContext.scaleb(Decimal(1), 4) Decimal('1E+4') >>> ExtendedContext.scaleb(1, Decimal(4)) Decimal('1E+4') rTr/)rrg)r.rrRr'r'r)rg)szContext.scalebcCs%t|dd}|j|d|S)a{Returns a shifted copy of a, b times. The coefficient of the result is a shifted copy of the digits in the coefficient of the first operand. The number of places to shift is taken from the absolute value of the second operand, with the shift being to the left if the second operand is positive or to the right otherwise. Digits shifted into the coefficient are zeros. >>> ExtendedContext.shift(Decimal('34'), Decimal('8')) Decimal('400000000') >>> ExtendedContext.shift(Decimal('12'), Decimal('9')) Decimal('0') >>> ExtendedContext.shift(Decimal('123456789'), Decimal('-2')) Decimal('1234567') >>> ExtendedContext.shift(Decimal('123456789'), Decimal('0')) Decimal('123456789') >>> ExtendedContext.shift(Decimal('123456789'), Decimal('+2')) Decimal('345678900') >>> ExtendedContext.shift(88888888, 2) Decimal('888888800') >>> ExtendedContext.shift(Decimal(88888888), 2) Decimal('888888800') >>> ExtendedContext.shift(88888888, Decimal(2)) Decimal('888888800') rTr/)rr)r.rrRr'r'r)r<sz Context.shiftcCs"t|dd}|jd|S)aSquare root of a non-negative number to context precision. If the result must be inexact, it is rounded using the round-half-even algorithm. >>> ExtendedContext.sqrt(Decimal('0')) Decimal('0') >>> ExtendedContext.sqrt(Decimal('-0')) Decimal('-0') >>> ExtendedContext.sqrt(Decimal('0.39')) Decimal('0.624499800') >>> ExtendedContext.sqrt(Decimal('100')) Decimal('10') >>> ExtendedContext.sqrt(Decimal('1')) Decimal('1') >>> ExtendedContext.sqrt(Decimal('1.0')) Decimal('1.0') >>> ExtendedContext.sqrt(Decimal('1.00')) Decimal('1.0') >>> ExtendedContext.sqrt(Decimal('7')) Decimal('2.64575131') >>> ExtendedContext.sqrt(Decimal('10')) Decimal('3.16227766') >>> ExtendedContext.sqrt(2) Decimal('1.41421356') >>> ExtendedContext.prec 9 rTr/)rr,)r.rr'r'r)r,Zsz Context.sqrtcCsNt|dd}|j|d|}|tkrFtd|n|SdS)a&Return the difference between the two operands. >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.07')) Decimal('0.23') >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.30')) Decimal('0.00') >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('2.07')) Decimal('-0.77') >>> ExtendedContext.subtract(8, 5) Decimal('3') >>> ExtendedContext.subtract(Decimal(8), 5) Decimal('3') >>> ExtendedContext.subtract(8, Decimal(5)) Decimal('3') rTr/zUnable to convert %s to DecimalN)rrrro)r.rrRrr'r'r)subtractzs  zContext.subtractcCs"t|dd}|jd|S)zyConverts a number to a string, using scientific notation. The operation is not affected by the context. rTr/)rr)r.rr'r'r)rszContext.to_eng_stringcCs"t|dd}|jd|S)zyConverts a number to a string, using scientific notation. The operation is not affected by the context. rTr/)rr)r.rr'r'r) to_sci_stringszContext.to_sci_stringcCs"t|dd}|jd|S)akRounds to an integer. When the operand has a negative exponent, the result is the same as using the quantize() operation using the given operand as the left-hand-operand, 1E+0 as the right-hand-operand, and the precision of the operand as the precision setting; Inexact and Rounded flags are allowed in this operation. The rounding mode is taken from the context. >>> ExtendedContext.to_integral_exact(Decimal('2.1')) Decimal('2') >>> ExtendedContext.to_integral_exact(Decimal('100')) Decimal('100') >>> ExtendedContext.to_integral_exact(Decimal('100.0')) Decimal('100') >>> ExtendedContext.to_integral_exact(Decimal('101.5')) Decimal('102') >>> ExtendedContext.to_integral_exact(Decimal('-101.5')) Decimal('-102') >>> ExtendedContext.to_integral_exact(Decimal('10E+5')) Decimal('1.0E+6') >>> ExtendedContext.to_integral_exact(Decimal('7.89E+77')) Decimal('7.89E+77') >>> ExtendedContext.to_integral_exact(Decimal('-Inf')) Decimal('-Infinity') rTr/)rr&)r.rr'r'r)r&szContext.to_integral_exactcCs"t|dd}|jd|S)aLRounds to an integer. When the operand has a negative exponent, the result is the same as using the quantize() operation using the given operand as the left-hand-operand, 1E+0 as the right-hand-operand, and the precision of the operand as the precision setting, except that no flags will be set. The rounding mode is taken from the context. >>> ExtendedContext.to_integral_value(Decimal('2.1')) Decimal('2') >>> ExtendedContext.to_integral_value(Decimal('100')) Decimal('100') >>> ExtendedContext.to_integral_value(Decimal('100.0')) Decimal('100') >>> ExtendedContext.to_integral_value(Decimal('101.5')) Decimal('102') >>> ExtendedContext.to_integral_value(Decimal('-101.5')) Decimal('-102') >>> ExtendedContext.to_integral_value(Decimal('10E+5')) Decimal('1.0E+6') >>> ExtendedContext.to_integral_value(Decimal('7.89E+77')) Decimal('7.89E+77') >>> ExtendedContext.to_integral_value(Decimal('-Inf')) Decimal('-Infinity') rTr/)rr)r.rr'r'r)rszContext.to_integral_value)Xr1r2r3r4rrrrrrirrHrr'rGrkrar[rrrrrr(rrrerrr1rr2r-r6rrrr7rrrrTrr:r;r"rr<rr=rr>r?rGrJrKrUrWrXrVrrYrrZrrr]r^r_r rarrrrbrrrfr#rgrr,rrrr&rrr'r'r'r)r"s   "                   $ #    %                            #  2 P :  & "         c@s7eZdZd ZdddZddZeZdS) rfr=rRrTNcCs|dkr*d|_d|_d|_nct|trf|j|_t|j|_|j|_n'|d|_|d|_|d|_dS)Nr%r-r+)r=rRrTr]rr7r8rN)r.rqr'r'r)rs       z_WorkRep.__init__cCsd|j|j|jfS)Nz (%r, %r, %r))r=rRrT)r.r'r'r)rsz_WorkRep.__repr__)zsignzintzexp)r1r2r3r{rrrr'r'r'r)rfs  rfcCs|j|jkr!|}|}n |}|}tt|j}tt|j}|jtd||d}||jd|krd|_||_n|jd|j|j9_|j|_||fS)zcNormalizes op1, op2 to have the same exp and length of coefficient. Done during addition. r-r+rr)rTrcr^rRr)rrr@ZtmprZtmp_lenZ other_lenrTr'r'r)rs    rcCs{|dkrdS|dkr(|d|Stt|}t|t|jd}|| krjdS|d| SdS)a Given integers n and e, return n * 10**e if it's an integer, else None. The computation is designed to avoid computing large powers of 10 unnecessarily. >>> _decimal_lshift_exact(3, 4) 30000 >>> _decimal_lshift_exact(300, -999999999) # returns None r%rrPN)r^rercrstrip)r5rZstr_nZval_nr'r'r)rs   rcCs^|dks|dkr'tdnd}x*||krY||| |d?}}q0W|S)zClosest integer to the square root of the positive integer n. a is an initial approximation to the square root. Any positive integer will do for a, but the closer a is to the square root of n the faster convergence will be. r%z3Both arguments to _sqrt_nearest should be positive.r-)ri)r5rrRr'r'r) _sqrt_nearest0s rcCs7d|>||?}}|d||d@|d@|kS)zGiven an integer x and a nonnegative integer shift, return closest integer to x / 2**shift; use round-to-even in case of a tie. r-r+r')r rrRrr'r'r)_rshift_nearest?srcCs/t||\}}|d||d@|kS)zaClosest integer to a/b, a and b positive integers; rounds to even in the case of a tie. r+r-)r)rrRrrr'r'r) _div_nearestGsrrc Cs7||}d}x||kr9t|||>|ks_||krt|||?|krt||d>|t||t|||}|d7}qWtdtt|d| }t||}t||}x>t|dddD]&}t||t|||}qWt|||S)aInteger approximation to M*log(x/M), with absolute error boundable in terms only of x/M. Given positive integers x and M, return an integer approximation to M * log(x/M). For L = 8 and 0.1 <= x/M <= 10 the difference between the approximation and the exact result is at most 22. For L = 8 and 1.0 <= x/M <= 10.0 the difference is at most 15. In both cases these are upper bounds on the error; it will usually be much smaller.r%r-rrYir)rerrrrRrcr^r) r MLrRTZyshiftwr~r'r'r)_ilogOs )&'%$rc Cs|d7}tt|}||||dk}|dkrd|}|||}|dkru|d|9}nt|d| }t||}t|}t|||}||} nd}t|d| } t| |dS)zGiven integers c, e and p with c > 0, p >= 0, compute an integer approximation to 10**p * log10(c*10**e), with an absolute error of at most 1. Assumes that c*10**e is not exactly 1.r+r-r%rr)rcr^rr _log10_digits) r*rr r+r|rr~log_dZlog_10Z log_tenpowerr'r'r)rIs       rIc Cs|d7}tt|}||||dk}|dkr|||}|dkrk|d|9}nt|d| }t|d|}nd}|rttt|d}||dkrt|t||d|}qd}nd}t||dS)zGiven integers c, e and p with c > 0, compute an integer approximation to 10**p * log(c*10**e), with an absolute error of at most 1. Assumes that c*10**e is not exactly 1.r+r-r%rr)rcr^rrrer) r*rr r+r|r~rrZ f_log_tenr'r'r)rFs"   $ rFc@s.eZdZdZddZddZdS) _Log10MemoizezClass to compute, store, and allow retrieval of, digits of the constant log(10) = 2.302585.... This constant is needed by Decimal.ln, Decimal.log10, Decimal.exp and Decimal.__pow__.cCs d|_dS)NZ/23025850929940456840179914546843642076011014886)ru)r.r'r'r)rsz_Log10Memoize.__init__cCs|dkrtdn|t|jkrd}xad||d}tttd||d}|| dd|krPn|d7}q9W|jddd |_nt|jd|d S) ztGiven an integer p >= 0, return floor(10**p)*log(10). For example, self.getdigits(3) returns 2302. r%zp should be nonnegativerYrr+rNrPr-r)rircrur^rrrrR)r.r rrrur'r'r) getdigitss "z_Log10Memoize.getdigitsN)r1r2r3r4rrr'r'r'r)rs  rc Cst||>|}tdtt|d| }t||}||>}x9t|dddD]!}t|||||}qiWxCt|ddd D]+}||d>}t||||}qW||S) zGiven integers x and M, M > 0, such that x/M is small in absolute value, compute an integer approximation to M*exp(x/M). For 0 <= x/M <= 2.4, the absolute error in the result is bounded by 60 (and is usually much smaller).rrYr-r%r+irrr)rrRrcr^rr) r rrrrrZMshiftrr~r'r'r)_iexps% rc Cs|d7}td|tt|d}||}||}|dkr^|d|}n|d| }t|t|\}}t|d|}tt|d|d||dfS)aCompute an approximation to exp(c*10**e), with p decimal places of precision. Returns integers d, f such that: 10**(p-1) <= d <= 10**p, and (d-1)*10**f < exp(c*10**e) < (d+1)*10**f In other words, d*10**f is an approximation to exp(c*10**e) with p digits of precision, and with an error in d of at most 1. This is almost, but not quite, the same as the error being < 1ulp: when d = 10**(p-1) the error could be up to 10 ulp.r+r%r-rirY)rrcr^rrrr) r*rr rrrZcshiftZquotrr'r'r)r8s #   r8c Cs*ttt||}t||||d}||}|dkra||d|}nt||d| }|dkrtt||dk|dkkrd|ddd|} } q d|d| } } n:t||d |d\} } t| d} | d7} | | fS)a5Given integers xc, xe, yc and ye representing Decimals x = xc*10**xe and y = yc*10**ye, compute x**y. Returns a pair of integers (c, e) such that: 10**(p-1) <= c <= 10**p, and (c-1)*10**e < x**y < (c+1)*10**e in other words, c*10**e is an approximation to x**y with p digits of precision, and with an error in c of at most 1. (This is almost, but not quite, the same as the error being < 1ulp: when c == 10**(p-1) we can only guarantee error < 10ulp.) We assume that: x is positive and not equal to 1, and y is nonzero. r-r%r)rcr^rerFrr8) r r rrr rRZlxcrZpcrrTr'r'r)r;s   ( ! rrrF253(45r@67r8rwr>cCsA|dkrtdnt|}dt|||dS)z@Compute a lower bound for 100*log10(c) for a positive integer c.r%z0The argument to _log10_lb should be nonnegative.r)rir^rc)r*Z correctionZstr_cr'r'r)r es  r cCskt|tr|St|tr,t|S|rNt|trNtj|S|rgtd|ntS)zConvert other to Decimal. Verifies that it's ok to use in an implicit construction. If allow_float is true, allow conversion from float; this is used in the comparison methods (__eq__ and friends). zUnable to convert %s to Decimal)r]rrRrmrnror)rrZ allow_floatr'r'r)rps  rcCst|tr||fSt|tjrx|jset|jtt|j |j |j }n|t|j fS|rt|tj r|jdkr|j}nt|trt}|rd|jt[-+])? # an optional sign, followed by either... ( (?=\d|\.\d) # ...a number (with at least one digit) (?P\d*) # having a (possibly empty) integer part (\.(?P\d*))? # followed by an optional fractional part (E(?P[-+]?\d+))? # followed by an optional exponent, or... | Inf(inity)? # ...an infinity, or... | (?Ps)? # ...an (optionally signaling) NaN # NaN (?P\d*) # with (possibly empty) diagnostic info. ) # \s* \Z z0*$z50*$z\A (?: (?P.)? (?P[<>=^]) )? (?P[-+ ])? (?P\#)? (?P0)? (?P(?!0)\d+)? (?P,)? (?:\.(?P0|(?!0)\d+))? (?P[eEfFgGn%])? \Z cCs+tj|}|dkr.td|n|j}|d}|d}|ddk |d<|dr|dk rtd|n|dk rtd|qn|pd|d<|pd |d<|d dkrd |d ', '=' or '^' sign: either '+', '-' or ' ' minimumwidth: nonnegative integer giving minimum width zeropad: boolean, indicating whether to pad with zeros thousands_sep: string to use as thousands separator, or '' grouping: grouping for thousands separators, in format used by localeconv decimal_point: string to use for decimal point precision: nonnegative integer giving precision, or None type: one of the characters 'eEfFgG%', or None NzInvalid format specifier: fillalignzeropadz7Fill character conflicts with '0' in format specifier: z2Alignment conflicts with '0' in format specifier:  >r=rQ minimumwidthrPrrr%rjZgGnr-r5rp thousands_sepzJExplicit thousands separator conflicts with 'n' type in format specifier: grouping decimal_pointrSrYr)_parse_format_specifier_regexmatchri groupdictrR_locale localeconv)Z format_specrnrrZ format_dictrrr'r'r)rtsN               rtc Cs|d}|d}||t|t|}|d}|dkrY|||}n|dkrv|||}nn|dkr|||}nQ|dkrt|d}|d |||||d }n td |S) zGiven an unpadded, non-aligned numeric string 'body' and sign string 'sign', add padding and alignment conforming to the given format specifier dictionary 'spec' (as produced by parse_format_specifier). rrrqsn                    &           .     0 " ,# % $ *#( *          P  % )              lib64/python3.4/__pycache__/codeop.cpython-34.pyo000064400000014502152342604300015354 0ustar00 e fj@sdZddlZddejDZdddgZdZd d Zd d Zd dddZGdddZ GdddZ dS)a[Utilities to compile possibly incomplete Python source code. This module provides two interfaces, broadly similar to the builtin function compile(), which take program text, a filename and a 'mode' and: - Return code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). Approach: First, check if the source consists entirely of blank lines and comments; if so, replace it with 'pass', because the built-in parser doesn't always do the right thing for these. Compile three times: as is, with \n, and with \n\n appended. If it compiles as is, it's complete. If it compiles with one \n appended, we expect more. If it doesn't compile either way, we compare the error we get when compiling with \n or \n\n appended. If the errors are the same, the code is broken. But if the errors are different, we expect more. Not intuitive; not even guaranteed to hold in future releases; but this matches the compiler's behavior from Python 1.4 through 2.2, at least. Caveat: It is possible (but not likely) that the parser stops parsing with a successful outcome before reaching the end of the source; in this case, trailing symbols may be ignored instead of causing an error. For example, a backslash followed by two newlines may be followed by arbitrary garbage. This will be fixed once the API for the parser is better. The two interfaces are: compile_command(source, filename, symbol): Compiles a single command in the manner described above. CommandCompiler(): Instances of this class have __call__ methods identical in signature to compile_command; the difference is that if the instance compiles program text containing a __future__ statement, the instance 'remembers' and compiles all subsequent program texts with the statement in force. The module also provides another class: Compile(): Instances of this class act like the built-in function compile, but with 'memory' in the sense described above. NcCsg|]}tt|qS)getattr __future__).0Zfnamerr+/opt/alt/python34/lib64/python3.4/codeop.py =s rcompile_commandCompileCommandCompileric -CsuxR|jdD],}|j}|r|ddkrPqqW|dkrUd}nd}}}d}} } y||||}Wn%tk r}zWYdd}~XnXy||d||} Wn+tk r} z | }WYdd} ~ XnXy||d||} Wn+tk r>} z | }WYdd} ~ XnX|rI|S| rqt|t|krq|ndS)N r#evalpassz )splitstrip SyntaxErrorrepr) compilersourcefilenamesymbollineerrZerr1Zerr2codecode1code2errr_maybe_compileDs0   rcCst|||tS)N)compilePyCF_DONT_IMPLY_DEDENT)rrrrrr_compileesr zsinglecCstt|||S)asCompile a command and determine whether it is incomplete. Arguments: source -- the source string; may contain \n characters filename -- optional filename from which source was read; default "" symbol -- optional grammar start symbol; "single" (default) or "eval" Return value / exceptions raised: - Return a code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). )rr )rrrrrrrhsc@s.eZdZdZddZddZdS)r zInstances of this class behave much like the built-in compile function, but if one is used to compile text containing a future statement, it "remembers" and compiles all subsequent program texts with the statement in force.cCs t|_dS)N)rflags)selfrrr__init__szCompile.__init__cCsUt||||jd}x3tD]+}|j|j@r"|j|jO_q"q"W|S)N)rr" _featuresco_flagsZ compiler_flag)r#rrrZcodeobZfeaturerrr__call__s  zCompile.__call__N)__name__ __module__ __qualname____doc__r$r(rrrrr |s  c@s4eZdZdZddZddddZdS) r a(Instances of this class have __call__ methods identical in signature to compile_command; the difference is that if the instance compiles program text containing a __future__ statement, the instance 'remembers' and compiles all subsequent program texts with the statement in force.cCst|_dS)N)r r)r#rrrr$szCommandCompiler.__init__zr!cCst|j|||S)aCompile a command and determine whether it is incomplete. Arguments: source -- the source string; may contain \n characters filename -- optional filename from which source was read; default "" symbol -- optional grammar start symbol; "single" (default) or "eval" Return value / exceptions raised: - Return a code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). )rr)r#rrrrrrr(szCommandCompiler.__call__N)r)r*r+r,r$r(rrrrr s  ) r,rZall_feature_namesr&__all__rrr rr r rrrr9s    ! lib64/python3.4/__pycache__/warnings.cpython-34.pyo000064400000026420152342604300015735 0ustar00 e f7@sdZddlZddddddd d gZddd dZdd dZd ed ddddZeddddZdd ZGddde Z ddZ ddZ ddZ ddZddddZdddddZGdd d eZGd!d d eZdZyDdd"lmZmZmZmZmZmZeZeZd#ZWn6ek rgZd$ZiZdad%d&ZYnXe ejesyee gZ!e!j"e#xe!D]Z$ed'd(e$qWej%j&Z&e&dkrd)Z'ne&r&d$Z'nd'Z'ee'd(e(d*de)ed+rZd,Z*nd'Z*ee*d(e+d*dn[dS)-z&Python part of the warnings subsystem.Nwarn warn_explicit showwarning formatwarningfilterwarnings simplefilter resetwarningscatch_warningsc Csd|dkr(tj}|dkr(dSny#|jt|||||Wntk r_YnXdS)z7Hook to write a warning to a file; replace if you like.N)sysstderrwriterOSError)messagecategoryfilenamelinenofileliner-/opt/alt/python34/lib64/python3.4/warnings.pyr s   # cCspddl}d|||j|f}|dkrC|j||n|}|rl|j}|d|7}n|S)z.Function to format a warning the standard way.rNz%s:%s: %s: %s z %s ) linecache__name__getlinestrip)rrrrrrsrrrrs $ FcCsjddl}||j||j||j||f}|rOtj|ntjd|tdS)aInsert an entry into the list of warnings filters (at the front). 'action' -- one of "error", "ignore", "always", "default", "module", or "once" 'message' -- a regex that the warning message must match 'category' -- a class that the warning must be a subclass of 'module' -- a regex that the module name must match 'lineno' -- an integer line number, 0 matches all warnings 'append' -- if true, append to the list of filters rN)recompileIfiltersappendinsert_filters_mutated)actionrrmodulerr ritemrrrr s cCsF|d|d|f}|r+tj|ntjd|tdS)aInsert a simple entry into the list of warnings filters (at the front). A simple filter matches all modules and messages. 'action' -- one of "error", "ignore", "always", "default", "module", or "once" 'category' -- a class that the warning must be a subclass of 'lineno' -- an integer line number, 0 matches all warnings 'append' -- if true, append to the list of filters Nr)rr r!r")r#rrr r%rrrr=s cCsgtddks z_setoption..$zinvalid lineno %r) rsplitlenr&r _getactionescape _getcategoryint ValueError OverflowErrorr)r-rpartsr#rrr$rrrrr*ds.        r*cCsU|s dS|dkrdSx!d D]}|j|r!|Sq!Wtd|fdS) Ndefaultallalwaysignorer$onceerrorzinvalid action: %r)zdefaultzalwayszignorezmodulezoncezerror) startswithr&)r#arrrr7s  r7cCs>ddl}|stS|jd|rcyt|}Wqtk r_td|fYqXn|jd}|d|}||dd}yt|dd|g}Wn%tk rtd|fYnXyt ||}Wn%t k rtd|fYnXt |ts:td|fn|S)Nrz^[a-zA-Z0-9_]+$zunknown warning category: %r.zinvalid module name: %rzinvalid warning category: %r) rWarningmatcheval NameErrorr&rfind __import__ ImportErrorgetattrAttributeError issubclass)rrcatir$klassmrrrr9s,    r9rGc CsZt|tr|j}n|dkr0t}nytj|}Wn!tk rftj}d}YnX|j}|j }d|kr|d}nd}|j d}|r|j }|j d r(|dd }q(nJ|dkrytj d }Wqtk rd}YqXn|s(|}n|jd i} t|||||| |dS) z:Issue a warning, or maybe ignore it or raise an exception.NrGrz__file__.pyc.pyo__main__rZ__warningregistry__)rWrX) isinstancerH __class__ UserWarningr _getframer;__dict__ f_globalsf_linenogetlowerendswithargvrP setdefaultr) rr stacklevelZcallerglobalsrr$rZfnlregistryrrrrs:              cCst|}|dkrV|p!d}|ddjdkrV|dd}qVn|dkrki}n|jddtkr|jt|dz.pyversionrrArGrCrBr@r$r>z1Unrecognized action (%r) in warnings.filters: %sz:warnings.showwarning() must be set to a function or methodrl)r:rcrb_filters_versionclearr[rHstrr\rrIrQ defaultactionrgetlines onceregistry RuntimeErrorcallabler TypeError)rrrrr$rimodule_globalstextkeyr%r#r.rRmodlnrZoncekeyZaltkeyrrrrsn                           c@s:eZdZdZd Zddd d Zd d ZdS)WarningMessagez0Holds the result of a single showwarning() call.rrrrrrNc CsMt}x%|jD]}t||||qW|r@|jnd|_dS)N)locals_WARNING_DETAILSsetattrr_category_name) selfrrrrrr local_valuesattrrrr__init__s zWarningMessage.__init__cCs&d|j|j|j|j|jfS)NzD{message : %r, category : %r, filename : %r, lineno : %s, line : %r})rrrrr)rrrr__str__#s zWarningMessage.__str__)zmessagezcategoryzfilenamezlinenozfilezline)rr'r(r)r}rrrrrrr{s r{c@sReZdZdZddddddZdd Zd d Zd d ZdS)r aA context manager that copies and restores the warnings filter upon exiting the context. The 'record' argument specifies whether warnings should be captured by a custom implementation of warnings.showwarning() and be appended to a list returned by the context manager. Otherwise None is returned by the context manager. The objects appended to the list are arguments whose attributes mirror the arguments to showwarning(). The 'module' argument is to specify an alternative module to the module named 'warnings' and imported under that name. This argument is only useful when testing the warnings module itself. recordFr$NcCs8||_|dkr"tjdn||_d|_dS)zSpecify whether to record warnings and if an alternative module should be used other than sys.modules['warnings']. For compatibility with Python 3.0, please consider all arguments to be keyword-only. NwarningsF)_recordr modules_module_entered)rrr$rrrr:s "zcatch_warnings.__init__cCsrg}|jr|jdn|jtjdk rL|jd|jnt|j}d|dj|fS)Nz record=Truerz module=%rz%s(%s)z, )rr rr rtyperjoin)rr,namerrr__repr__Fs zcatch_warnings.__repr__cs|jrtd|nd|_|jj|_|jdd|j_|jj|jj|_|jrgfdd}||j_SdSdS)NzCannot enter %r twiceTcsjt||dS)N)r r{)r,kwargs)logrrrYsz-catch_warnings.__enter__..showwarning) rrsrr_filtersr"r _showwarningr)rrr)rr __enter__Os     zcatch_warnings.__enter__cGsK|jstd|n|j|j_|jj|j|j_dS)Nz%Cannot exit %r without entering first)rrsrrrr"rr)rexc_inforrr__exit__`s   zcatch_warnings.__exit__)rr'r(r)rrrrrrrrr )s  )r_defaultaction _onceregistryrrr"Tr>cCstd7adS)NrG)rmrrrrr"sr"rArrCr gettotalrefcountr@),r)r __all__rrrHrrr Exceptionr&r/r*r7r9rrobjectr{r Z_warnings_defaults _warningsrrrr"rprrrNrm warnoptions ImportWarningPendingDeprecationWarningZsilencer DeprecationWarningclsflags bytes_warningZ bytes_action BytesWarninghasattrZresource_actionResourceWarningrrrrsb          )HG.           lib64/python3.4/__pycache__/shelve.cpython-34.pyc000064400000023343152342604300015360 0ustar00 i fP!@sdZddlmZmZddlmZddlZddddgZGd d d ejZ Gd ddejZ Gd dde Z Gd dde Z dddddZ dS)a Manage shelves of pickled objects. A "shelf" is a persistent, dictionary-like object. The difference with dbm databases is that the values (not the keys!) in a shelf can be essentially arbitrary Python objects -- anything that the "pickle" module can handle. This includes most class instances, recursive data types, and objects containing lots of shared sub-objects. The keys are ordinary strings. To summarize the interface (key is a string, data is an arbitrary object): import shelve d = shelve.open(filename) # open, with (g)dbm filename -- no suffix d[key] = data # store data at key (overwrites old data if # using an existing key) data = d[key] # retrieve a COPY of the data at key (raise # KeyError if no such key) -- NOTE that this # access returns a *copy* of the entry! del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # a list of all existing keys (slow!) d.close() # close it Dependent on the implementation, closing a persistent dictionary may or may not be necessary to flush changes to disk. Normally, d[key] returns a COPY of the entry. This needs care when mutable entries are mutated: for example, if d[key] is a list, d[key].append(anitem) does NOT modify the entry d[key] itself, as stored in the persistent mapping -- it only modifies the copy, which is then immediately discarded, so that the append has NO effect whatsoever. To append an item to d[key] in a way that will affect the persistent mapping, use: data = d[key] data.append(anitem) d[key] = data To avoid the problem with mutable entries, you may pass the keyword argument writeback=True in the call to shelve.open. When you use: d = shelve.open(filename, writeback=True) then d keeps a cache of all entries you access, and writes them all back to the persistent mapping when you call d.close(). This ensures that such usage as d[key].append(anitem) works as intended. However, using keyword argument writeback=True may consume vast amount of memory for the cache, and it may make d.close() very slow, if you access many of d's entries after opening it in this way: d has no way to check which of the entries you access are mutable and/or which ones you actually mutate, so it must cache, and write back at close, all of the entries that you access. You can call d.sync() to write back all the entries in the cache, and empty the cache (d.sync() also synchronizes the persistent dictionary on disk, if feasible). )Pickler Unpickler)BytesIONShelf BsdDbShelfDbfilenameShelfopenc@sHeZdZdZddZeZZZZZ Z ddZ dS) _ClosedDictz>Marker for a closed dict. Access attempts raise a ValueError.cGstddS)Nz!invalid operation on closed shelf) ValueError)selfargsr +/opt/alt/python34/lib64/python3.4/shelve.pyclosedEsz_ClosedDict.closedcCsdS)Nzr )r r r r__repr__Isz_ClosedDict.__repr__N) __name__ __module__ __qualname____doc__r__iter____len__ __getitem__ __setitem__ __delitem__keysrr r r rr Bs  r c@seZdZdZdddddZddZd d Zd d Zdd dZddZ ddZ ddZ ddZ ddZ ddZddZddZdS)rzBase class for shelf implementations. This is initialized with a dictionary-like object. See the module's __doc__ string for an overview of the interface. NFzutf-8cCsF||_|dkrd}n||_||_i|_||_dS)N)dict _protocol writebackcache keyencoding)r rprotocolrr r r r__init__Ts      zShelf.__init__ccs/x(|jjD]}|j|jVqWdS)N)rrdecoder )r kr r rr^szShelf.__iter__cCs t|jS)N)lenr)r r r rrbsz Shelf.__len__cCs|j|j|jkS)N)encoder r)r keyr r r __contains__eszShelf.__contains__cCs'|j|j|jkr#||S|S)N)r&r r)r r'defaultr r rgethsz Shelf.getc Csty|j|}Wn\tk rot|j|j|j}t|j}|jrk||j|s zBsdDbShelf.nextcCsC|jj\}}t|}|j|jt|jfS)N)rpreviousrr#r rr,)r r'r-r.r r rr?s zBsdDbShelf.previouscCsC|jj\}}t|}|j|jt|jfS)N)rfirstrr#r rr,)r r'r-r.r r rr@s zBsdDbShelf.firstcCsC|jj\}}t|}|j|jt|jfS)N)rlastrr#r rr,)r r'r-r.r r rrAs zBsdDbShelf.last) rrrrr"r=r>r?r@rAr r r rrs     c@s+eZdZdZdddddZdS)rzShelf implementation using the "dbm" generic dbm interface. This is initialized with the filename for the dbm database. See the module's __doc__ string for an overview of the interface. cNFcCs2ddl}tj||j||||dS)Nr)dbmrr"r)r filenameflagr!rrCr r rr"s zDbfilenameShelf.__init__)rrrrr"r r r rrs rBFcCst||||S)aOpen a persistent dictionary for reading and writing. The filename parameter is the base filename for the underlying database. As a side-effect, an extension may be added to the filename and more than one file may be created. The optional flag parameter has the same interpretation as the flag parameter of dbm.open(). The optional protocol parameter specifies the version of the pickle protocol (0, 1, or 2). See the module's __doc__ string for an overview of the interface. )r)rDrEr!rr r rrs )rpicklerrior collections__all__MutableMappingr rrrrr r r r9s  b+ lib64/python3.4/__pycache__/codeop.cpython-34.pyc000064400000014502152342604300015340 0ustar00 e fj@sdZddlZddejDZdddgZdZd d Zd d Zd dddZGdddZ GdddZ dS)a[Utilities to compile possibly incomplete Python source code. This module provides two interfaces, broadly similar to the builtin function compile(), which take program text, a filename and a 'mode' and: - Return code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). Approach: First, check if the source consists entirely of blank lines and comments; if so, replace it with 'pass', because the built-in parser doesn't always do the right thing for these. Compile three times: as is, with \n, and with \n\n appended. If it compiles as is, it's complete. If it compiles with one \n appended, we expect more. If it doesn't compile either way, we compare the error we get when compiling with \n or \n\n appended. If the errors are the same, the code is broken. But if the errors are different, we expect more. Not intuitive; not even guaranteed to hold in future releases; but this matches the compiler's behavior from Python 1.4 through 2.2, at least. Caveat: It is possible (but not likely) that the parser stops parsing with a successful outcome before reaching the end of the source; in this case, trailing symbols may be ignored instead of causing an error. For example, a backslash followed by two newlines may be followed by arbitrary garbage. This will be fixed once the API for the parser is better. The two interfaces are: compile_command(source, filename, symbol): Compiles a single command in the manner described above. CommandCompiler(): Instances of this class have __call__ methods identical in signature to compile_command; the difference is that if the instance compiles program text containing a __future__ statement, the instance 'remembers' and compiles all subsequent program texts with the statement in force. The module also provides another class: Compile(): Instances of this class act like the built-in function compile, but with 'memory' in the sense described above. NcCsg|]}tt|qS)getattr __future__).0Zfnamerr+/opt/alt/python34/lib64/python3.4/codeop.py =s rcompile_commandCompileCommandCompileric -CsuxR|jdD],}|j}|r|ddkrPqqW|dkrUd}nd}}}d}} } y||||}Wn%tk r}zWYdd}~XnXy||d||} Wn+tk r} z | }WYdd} ~ XnXy||d||} Wn+tk r>} z | }WYdd} ~ XnX|rI|S| rqt|t|krq|ndS)N r#evalpassz )splitstrip SyntaxErrorrepr) compilersourcefilenamesymbollineerrZerr1Zerr2codecode1code2errr_maybe_compileDs0   rcCst|||tS)N)compilePyCF_DONT_IMPLY_DEDENT)rrrrrr_compileesr zsinglecCstt|||S)asCompile a command and determine whether it is incomplete. Arguments: source -- the source string; may contain \n characters filename -- optional filename from which source was read; default "" symbol -- optional grammar start symbol; "single" (default) or "eval" Return value / exceptions raised: - Return a code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). )rr )rrrrrrrhsc@s.eZdZdZddZddZdS)r zInstances of this class behave much like the built-in compile function, but if one is used to compile text containing a future statement, it "remembers" and compiles all subsequent program texts with the statement in force.cCs t|_dS)N)rflags)selfrrr__init__szCompile.__init__cCsUt||||jd}x3tD]+}|j|j@r"|j|jO_q"q"W|S)N)rr" _featuresco_flagsZ compiler_flag)r#rrrZcodeobZfeaturerrr__call__s  zCompile.__call__N)__name__ __module__ __qualname____doc__r$r(rrrrr |s  c@s4eZdZdZddZddddZdS) r a(Instances of this class have __call__ methods identical in signature to compile_command; the difference is that if the instance compiles program text containing a __future__ statement, the instance 'remembers' and compiles all subsequent program texts with the statement in force.cCst|_dS)N)r r)r#rrrr$szCommandCompiler.__init__zr!cCst|j|||S)aCompile a command and determine whether it is incomplete. Arguments: source -- the source string; may contain \n characters filename -- optional filename from which source was read; default "" symbol -- optional grammar start symbol; "single" (default) or "eval" Return value / exceptions raised: - Return a code object if the command is complete and valid - Return None if the command is incomplete - Raise SyntaxError, ValueError or OverflowError if the command is a syntax error (OverflowError and ValueError can be produced by malformed literals). )rr)r#rrrrrrr(szCommandCompiler.__call__N)r)r*r+r,r$r(rrrrr s  ) r,rZall_feature_namesr&__all__rrr rr r rrrr9s    ! lib64/python3.4/__pycache__/pathlib.cpython-34.pyc000064400000117043152342604300015516 0ustar00 h f@sSddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZddlmZddlmZmZmZmZmZmZmZddlmZdZejd krUddlZej dd d dfkrFdd lm!Z!n d ZdZ!ndZddddddgZ"ddZ#Gddde$Z%Gddde%Z&Gddde%Z'e&Z(e'Z)GdddZ*Gddde*Z+e+Z,e d d!Z-d"d#Z.e/ed$rGej0e.Z.nGd%d&d&Z1Gd'd(d(Z2Gd)d*d*e1Z3Gd+d,d,e1Z4Gd-d.d.e1Z5Gd/d0d0e Z6Gd1dde$Z7Gd2dde7Z8Gd3dde7Z9Gd4dde7Z:Gd5dde:e8Z;Gd6dde:e9Z<dS)7N)Sequence)contextmanager)EINVALENOENTENOTDIR) attrgetter)S_ISDIRS_ISLNKS_ISREGS_ISSOCKS_ISBLKS_ISCHRS_ISFIFO)quote_from_bytesTnt)_getfinalpathnameFPurePath PurePosixPathPureWindowsPathPath PosixPath WindowsPathcCs"d|kp!d|kp!d|kS)N*?[)patrr,/opt/alt/python34/lib64/python3.4/pathlib.py_is_wildcard_pattern&sr c@s:eZdZdZddZddZddZdS) _FlavourzPA flavour implements a particular (platform-specific) set of path semantics.cCs|jj|_dS)N)sepjoin)selfrrr__init__0sz_Flavour.__init__c Csg}|j}|j}d}}t|}x@|D]8}|sGq5n|rb|j||}n|j|\}}} || krxvt| j|D]1} | r| dkr|jtj| qqWn+| r| dkr|jtj| n|s |r5|sixU|D]J}|s*qn|rE|j||}n|j|d}|rPqqWnPq5q5W|s}|r|j||n|j |||fS)N.r) r"altsepreversedreplace splitrootsplitappendsysinternreverse) r$partsZparsedr"r(drvrootitpartZrelxrrr parse_parts3s@            z_Flavour.parse_partscCs|r8| r|r||||g|ddfSn_|r||ksh|j||j|kr||||ddfSn||||fS|||fS)z Join the two paths represented by the respective (drive, root, parts) tuples. Return a new (drive, root, parts) tuple. N)casefold)r$r2r3r1Zdrv2Zroot2Zparts2rrrjoin_parsed_partsYs %*z_Flavour.join_parsed_partsN)__name__ __module__ __qualname____doc__r%r7r:rrrrr!,s   &r!c@sKeZdZdZdZdZeZej dkZ e dde e de dd De d de e d e d d DBZd Zddddhdde d dDBdde d dDBZeddZddZddZddZeddZd d!Zd"d#Zd$d%Zd&S)'_WindowsFlavour\/Trccs|]}t|VqdS)N)chr).0r6rrr wsz_WindowsFlavour.azr8ccs|]}t|VqdS)N)rB)rCr6rrrrDxsAZz\\?\ZCONZPRNZAUXZNULcCsh|]}d|qS)zCOM%dr)rCirrr ~s z_WindowsFlavour. cCsh|]}d|qS)zLPT%dr)rCrIrrrrJs c Cs|dd}|dd}||krp||krp|j|\}}|dd}|dd}nd}|dd}||krf||krf||krf|j|d}|dkrf|j||d}||dkrc|dkr t|}n|r8||d||||ddfS|d||||ddfSqcqfnd} } |dkr||jkr|dd} |dd}|}n||kr|} |j|}n|| | |fS) Nrr8rr&:rN)_split_extended_pathfindlen drive_letterslstrip) r$r5r"firstsecondprefixZthirdindexZindex2r2r3rrrr+s6$  ).   z_WindowsFlavour.splitrootcCs |jS)N)lower)r$srrrr9sz_WindowsFlavour.casefoldcCsdd|DS)NcSsg|]}|jqSr)rX)rCprrr s z2_WindowsFlavour.casefold_parts..r)r$r1rrrcasefold_partssz_WindowsFlavour.casefold_partscCs?t|}|stjStdk r;|jt|SdS)N)strosgetcwdr_ext_to_normal)r$pathrYrrrresolves    z_WindowsFlavour.resolvecCs|d}|j|rr|dd}|dd}|jdrr||dd7}d|dd}qrn||fS)Nr&zUNC\rLr@) startswith)r$rYZ ext_prefixrVrrrrOsz$_WindowsFlavour._split_extended_pathcCs|j|dS)Nr8)rO)r$rYrrrr`sz_WindowsFlavour._ext_to_normalcCsE|s dS|djdr!dS|djddj|jkS)NFrz\\r8r'rN)rd partitionupperreserved_names)r$r1rrr is_reserveds z_WindowsFlavour.is_reservedcCs|j}t|dkrg|ddkrg|jddjd}d|t|jdfSdt|jjdSdS)Nrr8rMrAz file:///%s/%szutf-8zfile:)driverQas_posixrSurlquote_from_bytesencode)r$rarirestrrrmake_uris  "z_WindowsFlavour.make_uriN)r;r<r=r"r(has_drvntpathpathmodr^name is_supportedsetrangeordrRZext_namespace_prefixrgr+r9r\rbrOr`rhrnrrrrr?ks$ /3) '     r?c@seZdZdZdZdZeZej dkZ eddZ ddZ d d Z d d Zd dZddZdS) _PosixFlavourrAr&FrcCss|rb|d|krb|j|}t|t|dkrRd|d|fSd||fSn dd|fSdS)Nrrr&)rSrQ)r$r5r"Z stripped_partrrrr+s z_PosixFlavour.splitrootcCs|S)Nr)r$rYrrrr9sz_PosixFlavour.casefoldcCs|S)Nr)r$r1rrrr\sz_PosixFlavour.casefold_partscsj|j|jifdd|jrEdn tj}|t|piS)Ncs;|jrd}nx|jD] }| s(|dkrGq(n|dkrq|j\}}}q(n||}|kr|}|dk rq(ntd|nyj|}Wn@tk r}z |jtkrn|}WYdd}~Xq(Xd|<||}||._resolver&)r" _accessor is_absoluter^r_r])r$rabaser)rrrr"rrbs   %z_PosixFlavour.resolvecCsdS)NFr)r$r1rrrrh.sz_PosixFlavour.is_reservedcCst|}dt|S)Nzfile://)bytesrk)r$raZbpathrrrrn1s z_PosixFlavour.make_uriN)r;r<r=r"r(ro posixpathrqr^rrrsr+r9r\rbrhrnrrrrrws    , rwc@seZdZdZdS) _AccessorzjAn accessor implements a particular (system-specific or not) way of accessing paths on the filesystem.N)r;r<r=r>rrrrr<s rc@sEeZdZddZddZeejZeejZeejZeej Z eej Z e edreej Z n ddZ eej Z eejZeejZeejZeejZerereejZq&dd Zned d ZeejZd d Zd S)_NormalAccessorcs+tjfdd}t|S)Ncst||S)N)r])pathobjargs)strfuncrrwrappedDsz._NormalAccessor._wrap_strfunc..wrapped) functoolswraps staticmethod)rrr)rr _wrap_strfuncCs!z_NormalAccessor._wrap_strfunccs+tjfdd}t|S)Ncst|t||S)N)r])ZpathobjAZpathobjBr)rrrrJsz5_NormalAccessor._wrap_binary_strfunc..wrapped)rrr)rrr)rr_wrap_binary_strfuncIs!z$_NormalAccessor._wrap_binary_strfunclchmodcCstddS)Nz%lchmod() not available on this system)NotImplementedError)r$rmoderrrr\sz_NormalAccessor.lchmodcCstddS)Nz&symlink() not available on this system)r)rEbtarget_is_directoryrrrsymlinkmsz_NormalAccessor.symlinkcCstjt|t|S)N)r^rr])rErrrrrrqscCs tj|S)N)r^rz)r$rarrrrzxsz_NormalAccessor.readlinkN)r;r<r=rrr^statlstatopenlistdirchmodhasattrrmkdirunlinkrmdirrenamer*rsupports_symlinksrrutimerzrrrrrAs,    rc#sdyjVWnMtk r_ifdd}d|_z |VWdjXYnXdS)Nc s=y |SWn*tk r8|}|<|SYnXdS)N)KeyError)rvalue)cachefuncrrwrappers   z_cached..wrapperT) __cached__AttributeErrorclear)rrr)rrr_cacheds    rcCsr|d}|dd}|dkr/t}n6d|krJtdnt|r_t}nt}|||S)Nrr8z**z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector ValueErrorr _WildcardSelector_PreciseSelector) pattern_partsr child_partsclsrrr_make_selectors      r lru_cachec@s.eZdZdZddZddZdS) _SelectorzYA selector matches a specific glob pattern part against the children of a given path.cCs1||_|r!t||_n t|_dS)N)rr successor_TerminatingSelector)r$rrrrr%s z_Selector.__init__cCs@t|}|j}|j}|jj}|j||||S)zuIterate over all child paths of `parent_path` matched by this selector. This can contain parent_path itself.)typeis_direxistsrr _select_from)r$ parent_pathZpath_clsrrrrrr select_froms     z_Selector.select_fromN)r;r<r=r>r%rrrrrrs  rc@seZdZddZdS)rccs |VdS)Nr)r$rrrrrrrrsz!_TerminatingSelector._select_fromN)r;r<r=rrrrrrs rc@s(eZdZddZddZdS)rcCs||_tj||dS)N)rrrr%)r$rrrrrrr%s z_PreciseSelector.__init__c cs}y`||sdS|j|j}||r_x+|jj||||D] }|VqMWnWntk rxdSYnXdS)N)_make_child_relpathrrrrPermissionError)r$rrrrrarZrrrrs  " z_PreciseSelector._select_fromN)r;r<r=r%rrrrrrs  rc@s(eZdZddZddZdS)rcCs/tjtj||_tj||dS)N)recompilefnmatch translaterrr%)r$rrrrrr%sz_WildcardSelector.__init__c csy||sdS|jj}xo||D]a}||}|jj|r,|j|}x+|jj||||D] } | Vq{Wq,q,WWntk rdSYnXdS)N)_flavourr9rmatchrrrr) r$rrrrcfrrZ casefoldedrarZrrrrs   " z_WildcardSelector._select_fromN)r;r<r=r%rrrrrrs  rc@s4eZdZddZddZddZdS)rcCstj||dS)N)rr%)r$rrrrrr%sz#_RecursiveWildcardSelector.__init__c cs|Vykxd||D]V}|j|}||r|j rx%|j|||D] }|VqYWqqWWntk rdSYnXdS)N)r is_symlink_iterate_directoriesr)r$rrrrrrarZrrrrs z/_RecursiveWildcardSelector._iterate_directoriesc csy||sdSt|}t}zq|jj}x^|j|||D]G}x>|||||D]'}||krl|V|j|qlqlWqPWWd|jXWdQXWntk rdSYnXdS)N)rrtrrraddrr) r$rrrrZyieldedZsuccessor_selectZstarting_pointrZrrrrs     z'_RecursiveWildcardSelector._select_fromN)r;r<r=r%rrrrrrrs   rc@sLeZdZdZdZddZdd Zd d Zd d ZdS) _PathParentszvThis object provides sequence-like access to the logical ancestors of a path. Don't try to construct it yourself._pathcls_drv_root_partscCs7t||_|j|_|j|_|j|_dS)N)rrrrr)r$rarrrr%s  z_PathParents.__init__cCs4|js|jr#t|jdSt|jSdS)Nr8)rrrQr)r$rrr__len__sz_PathParents.__len__cCs[|dks|t|kr-t|n|jj|j|j|jd| dS)Nrr8)rQ IndexErrorr_from_parsed_partsrrr)r$idxrrr __getitem__#sz_PathParents.__getitem__cCsdj|jjS)Nz <{}.parents>)formatrr;)r$rrr__repr__)sz_PathParents.__repr__N)z_pathclsz_drvz_rootz_parts) r;r<r=r> __slots__r%rrrrrrrrs    rc@s\eZdZdZdXZd d Zd d Zed dZedddZ edddZ eddZ ddZ ddZ ddZddZddZd d!Zd"d#Zed$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zeedd2d3Zeedd2d4Zed5d6Zed7d8Zed9d:Z ed;d<Z!ed=d>Z"d?d@Z#dAdBZ$dCdDZ%edEdFZ&dGdHZ'dIdJZ(dKdLZ)edMdNZ*edOdPZ+dQdRZ,dSdTZ-dUdVZ.dWS)YraHPurePath represents a filesystem path and offers operations which don't imply any actual filesystem I/O. Depending on your system, instantiating a PurePath will return either a PurePosixPath or a PureWindowsPath object. You can also instantiate either of these classes directly, regardless of your system. rrr_str_hash_pparts_cached_cpartscGs7|tkr*tjdkr!tnt}n|j|S)zConstruct a PurePath from one or several strings and or existing PurePath objects. The strings and path objects are combined so as to yield a canonicalized path, which is incorporated into the new PurePath object. r)rr^rrrr _from_parts)rrrrr__new__9s zPurePath.__new__cCs|jt|jfS)N) __class__tupler)r$rrr __reduce__CszPurePath.__reduce__cCsg}xh|D]`}t|tr2||j7}q t|trW|jt|q tdt|q W|jj|S)Nz/argument should be a path or str object, not %r) isinstancerrr]r- TypeErrorrrr7)rrr1rErrr _parse_argsHs zPurePath._parse_argsTcCsYtj|}|j|\}}}||_||_||_|rU|jn|S)N)objectrrrrr_init)rrinitr$r2r3r1rrrrYs    zPurePath._from_partscCsAtj|}||_||_||_|r=|jn|S)N)rrrrrr)rr2r3r1rr$rrrrfs    zPurePath._from_parsed_partscCsB|s |r.|||jj|ddS|jj|SdS)Nr8)rr#)rr2r3r1rrr_format_parsed_partsps "zPurePath._format_parsed_partscCsdS)Nr)r$rrrrwszPurePath._initcCs^|j|\}}}|jj|j|j|j|||\}}}|j|||S)N)rrr:rrrr)r$rr2r3r1rrr _make_child{s *zPurePath._make_childc CsRy |jSWn@tk rM|j|j|j|jp<d|_|jSYnXdS)z[Return the string representation of the path, suitable for passing to system calls.r'N)rrrrrr)r$rrr__str__s   zPurePath.__str__cCs"|j}t|j|jdS)zNReturn the string representation of the path with forward (/) slashes.rA)rr]r*r")r$frrrrjs zPurePath.as_posixcCstjt|S)zaReturn the bytes representation of the path. This is only recommended to use under Unix.)r^fsencoder])r$rrr __bytes__szPurePath.__bytes__cCsdj|jj|jS)Nz{}({!r}))rrr;rj)r$rrrrszPurePath.__repr__cCs+|jstdn|jj|S)z Return the path as a 'file' URI.z.relative path can't be expressed as a file URI)rrrrn)r$rrras_uris zPurePath.as_uric CsCy |jSWn1tk r>|jj|j|_|jSYnXdS)N)rrrr\r)r$rrr_cpartss   zPurePath._cpartscCs5t|tstS|j|jko4|j|jkS)N)rrNotImplementedrr)r$otherrrr__eq__szPurePath.__eq__c CsCy |jSWn1tk r>tt|j|_|jSYnXdS)N)rrhashrr)r$rrr__hash__s   zPurePath.__hash__cCs6t|t s"|j|jk r&tS|j|jkS)N)rrrrr)r$rrrr__lt__s"zPurePath.__lt__cCs6t|t s"|j|jk r&tS|j|jkS)N)rrrrr)r$rrrr__le__s"zPurePath.__le__cCs6t|t s"|j|jk r&tS|j|jkS)N)rrrrr)r$rrrr__gt__s"zPurePath.__gt__cCs6t|t s"|j|jk r&tS|j|jkS)N)rrrrr)r$rrrr__ge__s"zPurePath.__ge__docz.The drive prefix (letter or UNC path), if any.zThe root of the path, if any.cCs|j|j}|S)z/The concatenation of the drive and root, or ''.)rr)r$anchorrrrrszPurePath.anchorcCs?|j}t||js$|jr*dndkr7dS|dS)z!The final path component, if any.r8rr&rN)rrQrr)r$r1rrrrrs *z PurePath.namecCsT|j}|jd}d|ko9t|dknrL||dSdSdS)z*The final component's last suffix, if any.r'rr8Nr&)rrrfindrQ)r$rrrIrrrsuffixs  &zPurePath.suffixcCsO|j}|jdrgS|jd}dd|jdddDS)z1A list of the final component's suffixes, if any.r'cSsg|]}d|qS)r'r)rCrrrrr[s z%PurePath.suffixes..r8N)rrendswithrSr,)r$rrrrrsuffixess  zPurePath.suffixescCsT|j}|jd}d|ko9t|dknrL|d|S|SdS)z0The final path component, minus its last suffix.r'rr8N)rrrrQ)r$rrrIrrrstems  &z PurePath.stemcCs|jstd|fn|jj|f\}}}| s|d|jj|jjgks|s|st|dkrtd|n|j|j|j |j dd|gS)z-Return a new path with the file name changed.z%r has an empty namer8zInvalid name %rNrNrN) rrrrr7r"r(rQrrrr)r$rrr2r3r1rrr with_names )zPurePath.with_namecCs|j}|j|ks0|jrC|j|krCtd|n|rY|jd se|dkrxtd|n|j}|std|fn|j}|s||}n|dt| |}|j|j |j |j dd|gS)zCReturn a new path with the file suffix changed (or added, if none).zInvalid suffix %rr'z%r has an empty nameNr8rN) rr"r(rrdrrrrQrrrr)r$rrrrZ old_suffixrrr with_suffixs '"   zPurePath.with_suffixc GsW|stdn|j}|j}|j}|rS||g|dd}n|}|j|\}}}|r||g|dd} n|} t| } |jj} | dkr|p|n| |d| | | kr(|j|||} t dj t |t | n|j d| dkrC|nd|| dS)zReturn the relative path to another path identified by the passed arguments. If the operation is not possible (because this is not a subpath of the other path), raise ValueError. zneed at least one argumentr8Nrz{!r} does not start with {!r}r&) rrrrrrQrr\rrrr]r) r$rr1r2r3Z abs_partsZto_drvZto_rootZto_partsZ to_abs_partsnrZ formattedrrr relative_tos(      : zPurePath.relative_toc Cs=y |jSWn+tk r8t|j|_|jSYnXdS)zZAn object providing sequence-like access to the components in the filesystem path.N)rrrr)r$rrrr17s   zPurePath.partscGs |j|S)zCombine this path with one or several arguments, and return a new path representing either a subpath (if all arguments are relative paths) or a totally different path (if one of the arguments is anchored). )r)r$rrrrjoinpathCszPurePath.joinpathcCs|j|fS)N)r)r$keyrrr __truediv__KszPurePath.__truediv__cCs|j|g|jS)N)rr)r$rrrr __rtruediv__NszPurePath.__rtruediv__cCsZ|j}|j}|j}t|dkr=|s9|r=|S|j|||ddS)zThe logical parent of the path.r8NrN)rrrrQr)r$r2r3r1rrrparentQs    zPurePath.parentcCs t|S)z*A sequence of this path's logical parents.)r)r$rrrparents[szPurePath.parentscCs'|js dS|jj p&t|jS)zSTrue if the path is absolute (has both a root and, if applicable, a drive).F)rrroboolr)r$rrrr`s zPurePath.is_absolutecCs|jj|jS)zaReturn True if the path contains one of the special names reserved by the system, if any.)rrhr)r$rrrrhgszPurePath.is_reservedc Cs/|jj}||}|jj|f\}}}|sKtdn|rj|||jkrjdS|r|||jkrdS|j}|s|rt|t|krdS|dd}nt|t|krdSx?tt |t |D]"\}}t j ||sdSqWdS)zE Return True if this path matches the given pattern. z empty patternFr8NT) rr9r7rrrrrQzipr)rZ fnmatchcase) r$Z path_patternrr2r3Z pat_partsr1r5rrrrrls(    (zPurePath.matchN)z_drvz_rootz_partsz_strz_hashz_ppartsz_cached_cparts)/r;r<r=r>rrr classmethodrrrrrrrrjrrrpropertyrrrrrrrrrir3rrrrrrrrrr1rrrr r rrhrrrrrr-s\                            c@seZdZeZfZdS)rN)r;r<r=_posix_flavourrrrrrrrs c@seZdZeZfZdS)rN)r;r<r=_windows_flavourrrrrrrrs c@seZdZdRZddZdddZdd Zd d Zd d ZddZ dddZ dddZ e ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(dSdddd*d+Zdd,d-d.Zdd/d0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd<d=Zd>d?Zd/d@dAZ dBdCZ!dDdEZ"dFdGZ#dHdIZ$dJdKZ%dLdMZ&dNdOZ'dPdQZ(dS)Trr_closedcOsr|tkr*tjdkr!tnt}n|j|dd}|jjsdtd|j fn|j |S)NrrFz$cannot instantiate %r on your system) rr^rrrrrrrsrr;r)rrkwargsr$rrrrs   z Path.__new__NcCs1d|_|dk r$|j|_n t|_dS)NF)rr_normal_accessor)r$templaterrrrs  z Path._initcCs)|j|g}|j|j|j|S)N)rrrr)r$r5r1rrrrszPath._make_child_relpathcCs|jr|jn|S)N)r _raise_closed)r$rrr __enter__s  zPath.__enter__cCs d|_dS)NT)r)r$tvtbrrr__exit__sz Path.__exit__cCstddS)NzI/O operation on closed path)r)r$rrrrszPath._raise_closedicCs|jj|||S)N)rr)r$rrflagsrrrr_openersz Path._openericCs,|jr|jn|jj|||S)zm Open the file pointed by this path and return a file descriptor, as os.open() does. )rrrr)r$rrrrr _raw_opens  zPath._raw_opencCs|tjS)zjReturn a new path pointing to the current working directory (as returned by os.getcwd()). )r^r_)rrrrcwdszPath.cwdccsm|jr|jnxP|jj|D]<}|dkrAq)n|j|V|jr)|jq)q)WdS)zyIterate over the files in this directory. Does not yield any result for the special paths '.' and '..'. r'..N>rr')rrrrr)r$rrrrriterdirs    z Path.iterdirccs|jj|}|jj|f\}}}|s<|rKtdntt|}x|j|D] }|VqmWdS)zIterate over this subtree and yield all existing files (of any kind, including directories) matching the given pattern. z%Non-relative patterns are unsupportedN)rr9r7rrrr)r$patternr2r3rselectorrZrrrglobs z Path.globccs|jj|}|jj|f\}}}|s<|rKtdntdt|}x|j|D] }|VqqWdS)zRecursively yield all existing files (of any kind, including directories) matching the given pattern, anywhere in this subtree. z%Non-relative patterns are unsupported**N)r$)rr9r7rrrr)r$r!r2r3rr"rZrrrrglobs z Path.rglobcCs_|jr|jn|jr&|S|jtjg|jdd}|jd||S)aReturn an absolute version of this path. This function works even if the path doesn't point to anything. No normalization is done, i.e. all '.' and '..' will be kept along. Use resolve() to get the canonical path to a file. rFr)rrrrr^r_rr)r$objrrrabsolutes   %z Path.absolutecCs|jr|jn|jj|}|dkrS|jt|j}n|jjj|}|j |fdd}|j d||S)z Make the path absolute, resolving all symlinks on the way and also normalizing it (for example turning slashes into backslashes under Windows). NrFr) rrrrbrr]r'rqnormpathrr)r$rYZnormedr&rrrrb s    z Path.resolvecCs|jj|S)zh Return the result of the stat() system call on this path, like os.stat() does. )rr)r$rrrr sz Path.statcCs%ddl}|j|jjjS)z: Return the login name of the file owner. rN)pwdgetpwuidrst_uidZpw_name)r$r)rrrowner's z Path.ownercCs%ddl}|j|jjjS)z8 Return the group name of the file gid. rN)grpZgetgrgidrst_gidZgr_name)r$r-rrrgroup.s z Path.grouprr8c CsA|jr|jntjt||||||d|jS)z| Open the file pointed by this path and return a file object, as the built-in open() function does. Zopener)rriorr]r)r$r bufferingencodingerrorsnewlinerrrr5s  !z Path.openTc Cs|jr|jn|rOy|jj|dWntk rGYqOXdSntjtjB}|su|tjO}n|j ||}tj |dS)zS Create this file with the given access mode, if it doesn't exist. N) rrrrr{r^O_CREATO_WRONLYO_EXCLrclose)r$rexist_okrfdrrrtouch@s   z Path.touchFcCs|jr|jn|s2|jj||nzy|jj||Wn`tk r}z@|jtkrsn|jjdd|jj||WYdd}~XnXdS)Nr T)rrrrr{r|rr )r$rr rrrrrWs  z Path.mkdircCs-|jr|jn|jj||dS)zF Change the permissions of the path, like os.chmod(). N)rrrr)r$rrrrres  z Path.chmodcCs-|jr|jn|jj||dS)z Like chmod(), except if the path points to a symlink, the symlink's permissions are changed, rather than its target's. N)rrrr)r$rrrrrms  z Path.lchmodcCs*|jr|jn|jj|dS)zd Remove this file or link. If the path is a directory, use rmdir() instead. N)rrrr)r$rrrrvs  z Path.unlinkcCs*|jr|jn|jj|dS)zF Remove this directory. The directory must be empty. N)rrrr)r$rrrrs  z Path.rmdircCs&|jr|jn|jj|S)z Like stat(), except if the path points to a symlink, the symlink's status information is returned, rather than its target's. )rrrr)r$rrrrs  z Path.lstatcCs-|jr|jn|jj||dS)z5 Rename this path to the given path. N)rrrr)r$rrrrrs  z Path.renamecCs-|jr|jn|jj||dS)zo Rename this path to the given path, clobbering the existing destination if it exists. N)rrrr*)r$rrrrr*s  z Path.replacecCs0|jr|jn|jj|||dS)z Make this path a symlink pointing to the given path. Note the order of arguments (self, target) is the reverse of os.symlink's. N)rrrr)r$rrrrr symlink_tos  zPath.symlink_tocCsYy|jWnDtk rT}z$|jttfkr>ndSWYdd}~XnXdS)z+ Whether this path exists. FNT)rr{r|rr)r$rrrrrsz Path.existscCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z3 Whether this path is a directory. FN)rrst_moder{r|rr)r$rrrrrs z Path.is_dircCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)zq Whether this path is a regular file (also True for symlinks pointing to regular files). FN)r rr>r{r|rr)r$rrrris_files z Path.is_filecCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z7 Whether this path is a symbolic link. FN)r rr>r{r|rr)r$rrrrrs zPath.is_symlinkcCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z6 Whether this path is a block device. FN)r rr>r{r|rr)r$rrrris_block_devices zPath.is_block_devicecCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z: Whether this path is a character device. FN)r rr>r{r|rr)r$rrrris_char_devices zPath.is_char_devicecCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z. Whether this path is a FIFO. FN)rrr>r{r|rr)r$rrrris_fifos z Path.is_fifocCsbyt|jjSWnDtk r]}z$|jttfkrGndSWYdd}~XnXdS)z0 Whether this path is a socket. FN)r rr>r{r|rr)r$rrrr is_sockets zPath.is_socket)z _accessorz_closedrN))r;r<r=rrrrrrrrrr rr r#r%r'rbrr,r/rr<rrrrrrrr*r=rrr?rr@rArBrCrrrrrsN                     c@seZdZfZdS)rN)r;r<r=rrrrrrs c@seZdZfZdS)rN)r;r<r=rrrrrrs )=rrr1rpr^rrr. collectionsr contextlibrr|rrroperatorrrrr r r r r rZ urllib.parserrkrrrrZgetwindowsversionr__all__r rr!r?rwrrrrrrrrrrrrrrrrrrrrrrrrrsd        4 "   ?zS  ;  'Zlib64/python3.4/__pycache__/optparse.cpython-34.pyo000064400000144404152342604300015745 0ustar00 i f@sdZdZdddddddd d d d d ddddgZdZddlZddlZddlZddZyddlmZm Z Wn*e k rddZddZ YnXeZ Gdd d e Z Gddde ZGdddeZGddde ZGd dde ZGd!d"d"eZGd#d d ZGd$d d eZGd%d d eZd&d'Zd(d)Ziee d*fd+6ee d*fd,6ee d-fd.6ee d/fd/6Zd0d1Zd2d3Zd4d5fZGd6ddZd7d8Zd7d9Z Gd:ddZ!Gd;ddZ"Gd<dde"Z#Gd=d d e"Z$d>d?Z%eZ&dS)@aA powerful, extensible, and easy-to-use option parser. By Greg Ward Originally distributed as Optik. For support, use the optik-users@lists.sourceforge.net mailing list (http://lists.sourceforge.net/lists/listinfo/optik-users). Simple usage example: from optparse import OptionParser parser = OptionParser() parser.add_option("-f", "--file", dest="filename", help="write report to FILE", metavar="FILE") parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout") (options, args) = parser.parse_args() z1.5.3Option make_option SUPPRESS_HELPSUPPRESS_USAGEValuesOptionContainer OptionGroup OptionParser HelpFormatterIndentedHelpFormatterTitledHelpFormatter OptParseError OptionErrorOptionConflictErrorOptionValueErrorBadOptionErrora" Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved. Copyright (c) 2002-2006 Python Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NcCsd|jjt||fS)Nz<%s at 0x%x: %s>) __class____name__id)selfr-/opt/alt/python34/lib64/python3.4/optparse.py_reprNsr)gettextngettextcCs|S)Nr)messagerrrr[srcCs|dkr|S|S)Nr)ZsingularZpluralnrrrr^s rc@s(eZdZddZddZdS)r cCs ||_dS)N)msg)rrrrr__init__gszOptParseError.__init__cCs|jS)N)r)rrrr__str__jszOptParseError.__str__N)r __module__ __qualname__rr rrrrr fs  c@s.eZdZdZddZddZdS)r z] Raised if an Option instance is created with invalid or inconsistent arguments. cCs||_t||_dS)N)rstr option_id)rroptionrrrrts zOptionError.__init__cCs(|jrd|j|jfS|jSdS)Nz option %s: %s)r$r)rrrrr xs zOptionError.__str__N)rr!r"__doc__rr rrrrr ns  c@seZdZdZdS)rzE Raised if conflicting options are added to an OptionParser. N)rr!r"r&rrrrr~s c@seZdZdZdS)rzS Raised if an invalid option value is encountered on the command line. N)rr!r"r&rrrrrs c@s.eZdZdZddZddZdS)rzB Raised if an invalid option is seen on the command line. cCs ||_dS)N)opt_str)rr'rrrrszBadOptionError.__init__cCstd|jS)Nzno such option: %s)_r')rrrrr szBadOptionError.__str__N)rr!r"r&rr rrrrrs  c@s.eZdZdZddZddZdS)AmbiguousOptionErrorzD Raised if an ambiguous option is seen on the command line. cCstj||||_dS)N)rr possibilities)rr'r*rrrrszAmbiguousOptionError.__init__cCs#td|jdj|jfS)Nzambiguous option: %s (%s?)z, )r(r'joinr*)rrrrr s zAmbiguousOptionError.__str__N)rr!r"r&rr rrrrr)s  r)c@seZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!S)"r a Abstract base class for formatting option help. OptionParser instances should use one of the HelpFormatter subclasses for formatting help; by default IndentedHelpFormatter is used. Instance attributes: parser : OptionParser the controlling OptionParser instance indent_increment : int the number of columns to indent per nesting level max_help_position : int the maximum starting column for option help text help_position : int the calculated starting column for option help text; initially the same as the maximum width : int total number of columns for output (pass None to constructor for this value to be taken from the $COLUMNS environment variable) level : int current indentation level current_indent : int current indentation level (in columns) help_width : int number of columns available for option help text (calculated) default_tag : str text to replace with each option's default value, "%default" by default. Set to false value to disable default value expansion. option_strings : { Option : str } maps Option instances to the snippet of help text explaining the syntax of that option, e.g. "-h, --help" or "-fFILE, --file=FILE" _short_opt_fmt : str format string controlling how short options with values are printed in help text. Must be either "%s%s" ("-fFILE") or "%s %s" ("-f FILE"), because those are the two syntaxes that Optik supports. _long_opt_fmt : str similar but for long options; must be either "%s %s" ("--file FILE") or "%s=%s" ("--file=FILE"). ZnonecCsd|_||_|dkrcyttjd}Wnttfk rUd}YnX|d8}n||_t|t |d|d|_ |_ d|_ d|_ d|_||_d|_i|_d|_d|_dS) NZCOLUMNSPrz%defaultz%s %sz%s=%s)parserindent_incrementintosenvironKeyError ValueErrorwidthminmax help_positionmax_help_positioncurrent_indentlevel help_width short_first default_tagoption_strings_short_opt_fmt _long_opt_fmt)rr0r:r6r>rrrrs$      *       zHelpFormatter.__init__cCs ||_dS)N)r/)rr/rrr set_parserszHelpFormatter.set_parsercCs4|dkrtd|nd|d|_dS)N z/invalid metavar delimiter for short options: %rz%s)rDrE)r5rA)rdelimrrrset_short_opt_delimiters z%HelpFormatter.set_short_opt_delimitercCs4|dkrtd|nd|d|_dS)N=rEz.invalid metavar delimiter for long options: %rz%s)rHrE)r5rB)rrFrrrset_long_opt_delimiters z$HelpFormatter.set_long_opt_delimitercCs%|j|j7_|jd7_dS)Nr)r;r0r<)rrrrindentszHelpFormatter.indentcCs%|j|j8_|jd8_dS)Nr)r;r0r<)rrrrdedentszHelpFormatter.dedentcCstddS)Nzsubclasses must implement)NotImplementedError)rusagerrr format_usageszHelpFormatter.format_usagecCstddS)Nzsubclasses must implement)rL)rheadingrrrformat_headingszHelpFormatter.format_headingcCsBt|j|jd}d|j}tj||d|d|S)z Format a paragraph of free-form text for inclusion in the help output at the current indentation level. rEZinitial_indentZsubsequent_indent)r8r6r;textwrapZfill)rtextZ text_widthrJrrr _format_texts   zHelpFormatter._format_textcCs|r|j|dSdSdS)N rD)rT)r descriptionrrrformat_descriptionsz HelpFormatter.format_descriptioncCs#|rd|j|dSdSdS)NrUrD)rT)repilogrrr format_epilogszHelpFormatter.format_epilogcCsx|jdks|j r |jS|jjj|j}|tksP|dkr\|j}n|jj|jt |S)N) r/r?helpdefaultsgetdest NO_DEFAULTNO_DEFAULT_VALUEreplacer#)rr%Z default_valuerrrexpand_defaults  zHelpFormatter.expand_defaultcs,g}j|}jjd}t||kr[djd|f}j}ndjd||f}d}|j||jrj|}tj|j }|jd|d|df|j fdd|ddDn |d d kr|jd ndj |S) Nr-z%*s%s rDz %*s%-*s rcs&g|]}djd|fqS)z%*s%s rD)r9).0line)rrr Ds z/HelpFormatter.format_option..rrU) r@r9r;lenappendrZrarRZwrapr=extendr+)rr%resultoptsZ opt_widthZ indent_firstZ help_textZ help_linesr)rr format_option's$    zHelpFormatter.format_optioncCs|jd}xI|jD]>}|j|}||j|}|j|}||j|.cs#g|]}j|fqSr)rB)rbZlopt)rrrrrrdbs z, ) takes_valuerrr]upper _short_opts _long_optsr>r+)rr%Z short_optsZ long_optsrjr)rrrrrm\s       z#HelpFormatter.format_option_stringsN)rr!r"r&r_rrCrGrIrJrKrNrPrTrWrYrarkrqrmrrrrr s" )           # c@sFeZdZdZddddddZdd Zd d ZdS) r z.Format help with indented section bodies. r-NrcCstj|||||dS)N)r r)rr0r:r6r>rrrrsszIndentedHelpFormatter.__init__cCstd|S)Nz Usage: %s )r()rrMrrrrN{sz"IndentedHelpFormatter.format_usagecCsd|jd|fS)Nz%*s%s: rD)r;)rrOrrrrP~sz$IndentedHelpFormatter.format_heading)rr!r"r&rrNrPrrrrr os  c@sFeZdZdZddddddZddZd d ZdS) r z1Format help with underlined section headers. rrwNcCstj|||||dS)N)r r)rr0r:r6r>rrrrszTitledHelpFormatter.__init__cCsd|jtd|fS)Nz%s %s ZUsage)rPr()rrMrrrrNsz TitledHelpFormatter.format_usagecCsd|d|jt|fS)Nz%s %s z=-)r<rf)rrOrrrrPsz"TitledHelpFormatter.format_heading)rr!r"r&rrNrPrrrrr s  cCs|ddjdkr%d}n`|ddjdkr`d}|ddpZd}n%|dddkrd}nd}|||S) Nr-Z0xZ0b0r )lower)valtyperadixrrr _parse_nums  rcCs t|tS)N)rr1)r}rrr _parse_intsrZintegerr1longzfloating-pointfloatcomplexc CsYt|j\}}y||SWn1tk rTttd|||fYnXdS)Nzoption %s: invalid %s value: %r) _builtin_cvtr~r5rr()r%rovalueZcvtZwhatrrr check_builtins  rcCsQ||jkr|Sdjtt|j}ttd|||fdS)Nz, z.option %s: invalid choice: %r (choose from %s))choicesr+mapreprrr()r%rorrrrr check_choices  rZNOZDEFAULTc @seZdZdZdddddddd d d d d g ZdAZdBZdCZdDZdEZ dFZ ie d6e d6e d6e d6e d6Z dZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2ZeeeeeeegZd3d4ZeZd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dS)Grar Instance attributes: _short_opts : [string] _long_opts : [string] action : string type : string dest : string default : any nargs : int const : any choices : [string] callback : function callback_args : (any*) callback_kwargs : { string : any } help : string metavar : string actionr~r]defaultnargsconstrcallback callback_argscallback_kwargsrZrrstore store_const store_true store_falserg append_constcountversionstringr1rrrchoiceNcOs]g|_g|_|j|}|j||j|x|jD]}||qEWdS)N)rurv_check_opt_strings_set_opt_strings _set_attrs CHECK_METHODS)rrjattrscheckerrrrr3s    zOption.__init__cCs,dd|D}|s(tdn|S)NcSsg|]}|r|qSrr)rbrorrrrdJs z-Option._check_opt_strings..z+at least one option string must be supplied) TypeError)rrjrrrrFszOption._check_opt_stringscCsx|D]}t|dkr5td||qt|dkr|ddkod|ddks}td||n|jj|q|dddko|ddkstd||n|jj|qWdS) Nr-z>invalid option string %r: must be at least two characters longr-rzMinvalid short option string %r: must be of the form -x, (x any non-dash char)z--zGinvalid long option string %r: must start with --, followed by non-dash)rfr rurgrv)rrjrorrrrOs$   & zOption._set_opt_stringscCsxj|jD]_}||kr:t||||||=q |dkrYt||tq t||dq W|rt|j}tddj||ndS)Nrzinvalid keyword arguments: %sz, )ATTRSsetattrr^sortedkeysr r+)rrattrrrrrds   zOption._set_attrscCsJ|jdkrd|_n+|j|jkrFtd|j|ndS)Nrzinvalid action: %r)rACTIONSr )rrrr _check_actionws zOption._check_actioncCs|jdkrK|j|jkr|jdk r<d|_qHd|_qnt|jtro|jj|_n|jdkrd|_n|j|jkrtd|j|n|j|jkrtd|j|ndS)Nrrr#zinvalid option type: %rz$must not supply a type for action %r) r~rALWAYS_TYPED_ACTIONSr isinstancerTYPESr TYPED_ACTIONS)rrrr _check_type}s  zOption._check_typecCs|jdkr}|jdkr0td|qt|jttfstdtt|jjdd|qn(|jdk rtd|j|ndS)Nrz/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)'rz#must not supply choices for type %r)r~rr rtuplelistr#split)rrrr _check_choices/zOption._check_choicecCs|j|jkp|jdk }|jdkr|r|jrh|jdddjdd|_q|jdd|_ndS)Nrr-rr(r)r STORE_ACTIONSr~r]rvr`ru)rrsrrr _check_dests  )zOption._check_destcCs>|j|jkr:|jdk r:td|j|ndS)Nz*'const' must not be supplied for action %r)r CONST_ACTIONSrr )rrrr _check_consts! zOption._check_constcCs\|j|jkr0|jdkrXd|_qXn(|jdk rXtd|j|ndS)Nrz*'nargs' must not be supplied for action %r)rrrr )rrrr _check_nargss zOption._check_nargscCs|jdkrt|js7td|j|n|jdk rrt|jt rrtd|j|n|jdk rt|jt rtd|j|qnj|jdk rtd|j|n|jdk rtd|n|jdk rtd|ndS)Nrzcallback not callable: %rz3callback_args, if supplied, must be a tuple: not %rz4callback_kwargs, if supplied, must be a dict: not %rz.callback supplied (%r) for non-callback optionz.callback_args supplied for non-callback optionz0callback_kwargs supplied for non-callback option) rcallablerr rrrrdict)rrrr_check_callbacks0zOption._check_callbackcCsdj|j|jS)N/)r+rurv)rrrrr szOption.__str__cCs |jdk S)N)r~)rrrrrsszOption.takes_valuecCs#|jr|jdS|jdSdS)Nr)rvru)rrrrget_opt_strings  zOption.get_opt_stringcCs9|jj|j}|dkr%|S||||SdS)N) TYPE_CHECKERr\r~)rrorrrrr check_values zOption.check_valuecsR|dk rNjdkr+j|Stfdd|DSndS)Nrcs"g|]}j|qSr)r)rbv)rorrrrds z(Option.convert_value..)rrr)rrorr)rorr convert_values zOption.convert_valuecCs4|j||}|j|j|j||||S)N)r take_actionrr])rrorvaluesr/rrrprocessszOption.processc Cs|dkrt|||n|dkrAt|||jnb|dkr`t||dnC|dkrt||dn$|dkr|j|gj|n|dkr|j|gj|jn|d krt|||j|d d n|d krJ|jpf}|jp(i}|j||||||nY|d krm|j|jn6|dkr|j |jnt d|j d S)NrrrTrFrgrrrrrrZrzunknown action %r) rr ensure_valuergrrr print_helpexit print_versionr5r) rrr]rorrr/argskwargsrrrrs4       #       zOption.take_action) store store_const store_true store_falseappend append_constcountcallbackzhelpzversion)rrrrrrr)rrr)rr)rr)zstringzintrzfloatzcomplexzchoice)#rr!r"r&rrrrrrrrrrrrrrrrrrrrrrr r__repr__rsrrrrrrrrrrs                  ZSUPPRESSZHELPZUSAGEc@seZdZdddZddZeZddZdd Zd d Z d d Z dddZ dddZ ddZ dS)rNcCs:|r6x-|jD]\}}t|||qWndS)N)itemsr)rr[rr}rrrr8szValues.__init__cCs t|jS)N)r#__dict__)rrrrr =szValues.__str__cCsCt|tr|j|jkSt|tr;|j|kStSdS)N)rrrrNotImplemented)rotherrrr__eq__Bs  z Values.__eq__cCsSxLt|D]>}||kr ||}|dk rKt|||qKq q WdS)z Update the option values from an arbitrary dictionary, but only use keys from dict that already have a corresponding attribute in self. Any keys in dict without a corresponding attribute are silently ignored. N)dirr)rrrZdvalrrr_update_carefulJs    zValues._update_carefulcCs|jj|dS)z Update the option values from an arbitrary dictionary, using all keys from the dictionary regardless of whether they have a corresponding attribute in self or not. N)rupdate)rrrrr _update_looseWszValues._update_loosecCsL|dkr|j|n,|dkr8|j|ntd|dS)NcarefulZloosezinvalid update mode: %r)rrr5)rrmoderrr_update_s   zValues._updatercCs1t|tj|}|jt||dS)N) __import__sysmodulesrvars)rmodnamermodrrr read_modulegs  zValues.read_modulecCs3i}tt|j||j||dS)N)execopenreadr)rfilenamerrrrr read_filelszValues.read_filecCsEt|| s%t||dkr8t|||nt||S)N)hasattrgetattrr)rrrrrrrqs%zValues.ensure_value)rr!r"rr rrrrrrrrrrrrrr6s     c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"S)#ra Abstract base class. Class attributes: standard_option_list : [Option] list of standard options that will be accepted by all instances of this parser class (intended to be overridden by subclasses). Instance attributes: option_list : [Option] the list of Option objects contained by this OptionContainer _short_opt : { string : Option } dictionary mapping short option strings, eg. "-f" or "-X", to the Option instances that implement them. If an Option has multiple short option strings, it will appears in this dictionary multiple times. [1] _long_opt : { string : Option } dictionary mapping long option strings, eg. "--file" or "--exclude", to the Option instances that implement them. Again, a given Option can occur multiple times in this dictionary. [1] defaults : { string : any } dictionary mapping option destination names to default values for each destination [1] [1] These mappings are common to (shared by) all components of the controlling OptionParser, where they are initially created. cCs1|j||_|j||j|dS)N)_create_option_list option_classset_conflict_handlerset_description)rrconflict_handlerrVrrrrs   zOptionContainer.__init__cCsi|_i|_i|_dS)N) _short_opt _long_optr[)rrrr_create_option_mappingss  z'OptionContainer._create_option_mappingscCs(|j|_|j|_|j|_dS)N)rrr[)rr/rrr_share_option_mappingss  z&OptionContainer._share_option_mappingscCs,|dkrtd|n||_dS)Nerrorresolvez$invalid conflict_resolution value %r)zerrorr)r5r)rhandlerrrrrs z$OptionContainer.set_conflict_handlercCs ||_dS)N)rV)rrVrrrrszOptionContainer.set_descriptioncCs|jS)N)rV)rrrrget_descriptionszOptionContainer.get_descriptioncCs|`|`|`dS)zsee OptionParser.destroy().N)rrr[)rrrrdestroyszOptionContainer.destroycCshg}x=|jD]2}||jkr|j||j|fqqWx=|jD]2}||jkrP|j||j|fqPqPW|rd|j}|dkrtddjdd|D|qd|dkrdx|D]z\}}|jdr|jj ||j|=n|jj ||j|=|jpA|js|j j j |qqWqdndS)Nrz conflicting option string(s): %sz, cSsg|]}|dqS)rr)rbcorrrrds z3OptionContainer._check_conflict..rz--) rurrgrvrrrr+ startswithremove containerrl)rr%Z conflict_optsrorZc_optionrrr_check_conflicts.!!      zOptionContainer._check_conflictcOsDt|dtr(|j||}nTt|dkrp| rp|d}t|ts|td|q|n td|j||jj|||_ x|j D]}||j |d?Z"d@dAZ#ddBdCZ$dDdEZ%ddFdGZ&ddHdIZ'dJdKZ(ddLdMZ)ddNdOZ*dS)Pra$ Class attributes: standard_option_list : [Option] list of standard options that will be accepted by all instances of this parser class (intended to be overridden by subclasses). Instance attributes: usage : string a usage string for your program. Before it is displayed to the user, "%prog" will be expanded to the name of your program (self.prog or os.path.basename(sys.argv[0])). prog : string the name of the current program (to override os.path.basename(sys.argv[0])). description : string A paragraph of text giving a brief overview of your program. optparse reformats this paragraph to fit the current terminal width and prints it when the user requests help (after usage, but before the list of options). epilog : string paragraph of help text to print after option help option_groups : [OptionGroup] list of option groups in this parser (option groups are irrelevant for parsing the command-line, but very useful for generating help) allow_interspersed_args : bool = true if true, positional arguments may be interspersed with options. Assuming -a and -b each take a single argument, the command-line -ablah foo bar -bboo baz will be interpreted the same as -ablah -bboo -- foo bar baz If this flag were false, that command line would be interpreted as -ablah -- foo bar -bboo baz -- ie. we stop processing options as soon as we see the first non-option argument. (This is the tradition followed by Python's getopt module, Perl's Getopt::Std, and other argument- parsing libraries, but it is generally annoying to users.) process_default_values : bool = true if true, option default values are processed similarly to option values from the command line: that is, they are passed to the type-checking function for the option's type (as long as the default value is a string). (This really only matters if you have defined custom types; see SF bug #955889.) Set it to false to restore the behaviour of Optik 1.4.1 and earlier. rargs : [string] the argument list currently being parsed. Only set when parse_args() is active, and continually trimmed down as we consume arguments. Mainly there for the benefit of callback options. largs : [string] the list of leftover arguments that we have skipped while parsing options. If allow_interspersed_args is false, this list is always empty. values : Values the set of option values currently being accumulated. Only set when parse_args() is active. Also mainly for callbacks. Because of the 'rargs', 'largs', and 'values' attributes, OptionParser is not thread-safe. If, for some perverse reason, you need to parse command-line arguments simultaneously in different threads, use different OptionParser instances. NrTc Cstj|||||j|| |_||_d|_d|_|dkr_t}n||_|jj || |_ |j |d||j dS)NTadd_help) rr set_usageprograllow_interspersed_argsprocess_default_valuesr rrCrX_populate_option_list_init_parsing_state) rrMrlrrrrVrZadd_help_optionrrXrrrrs           zOptionParser.__init__cCsAtj|x|jD]}|jqW|`|`|`dS)a Declare that you are done with this OptionParser. This cleans up reference cycles so the OptionParser (and all objects referenced by it) can be garbage-collected promptly. After calling destroy(), the OptionParser is unusable. N)rrrnrlr)rrprrrrs  zOptionParser.destroycCs g|_g|_|jdS)N)rlrnr)rrrrrs  z OptionParser._create_option_listcCs&|jdddddtddS)Nz-hz--helprrZzshow this help message and exit)rr()rrrr_add_help_optionszOptionParser._add_help_optioncCs#|jddddtddS)Nz --versionrrrZz&show program's version number and exit)rr()rrrr_add_version_options z OptionParser._add_version_optioncCs_|jr|j|jn|r2|j|n|jrH|jn|r[|jndS)N)standard_option_listrrrr)rrlr rrrrs   z"OptionParser._populate_option_listcCsd|_d|_d|_dS)N)rargslargsr)rrrrrs  z OptionParser._init_parsing_statecCsn|dkrtd|_nL|tkr6d|_n4|jjdra|dd|_n ||_dS)Nz%prog [options]zusage: )r(rMrr|r)rrMrrrr s   zOptionParser.set_usagecCs d|_dS)aSet parsing to not stop on the first non-option, allowing interspersing switches with command arguments. This is the default behavior. See also disable_interspersed_args() and the class documentation description of the attribute allow_interspersed_args.TN)r)rrrrenable_interspersed_argssz%OptionParser.enable_interspersed_argscCs d|_dS)zSet parsing to stop on the first non-option. Use this if you have a command processor which runs another command that has options of its own and you want to make sure these options don't get confused. FN)r)rrrrdisable_interspersed_argssz&OptionParser.disable_interspersed_argscCs ||_dS)N)r)rrrrrset_process_default_values sz'OptionParser.set_process_default_valuescCs||j|ttfk r}z|jt |WYdd}~XnX||}|j ||S)aS parse_args(args : [string] = sys.argv[1:], values : Values = None) -> (values : Values, args : [string]) Parse the command-line options found in 'args' (default: sys.argv[1:]). Any errors result in a call to 'error()', which by default prints the usage message to stderr and calls sys.exit() with an error message. On success returns a pair (values, args) where 'values' is an Values instance (with all your option values) and 'args' is the list of arguments left over after parsing options. N) r$r rrr _process_argsrrrr# check_values)rrrrrstoperrrrr parse_argsJs    & zOptionParser.parse_argscCs ||fS)a check_values(values : Values, args : [string]) -> (values : Values, args : [string]) Check that the supplied option values and leftover arguments are valid. Returns the option values and leftover arguments (possibly adjusted, possibly completely new -- whatever you like). Default implementation just returns the passed-in values; subclasses may override as desired. r)rrrrrrr&qs zOptionParser.check_valuescCsx|r|d}|dkr*|d=dS|dddkrS|j||q|dddkrt|dkr|j||q|jr|j||d=qdSqWdS)a_process_args(largs : [string], rargs : [string], values : Values) Process command-line arguments and populate 'values', consuming options and arguments from 'rargs'. If 'allow_interspersed_args' is false, stop at the first non-option argument. If true, accumulate any interspersed non-option arguments in 'largs'. rz--Nr-rr)_process_long_optrf_process_short_optsrrg)rrrrargrrrr%~s   (   zOptionParser._process_argscCst||jS)a_match_long_opt(opt : string) -> string Determine which long option string 'opt' matches, ie. which one it is an unambiguous abbreviation for. Raises BadOptionError if 'opt' doesn't unambiguously match any long option string. ) _match_abbrevr)rrorrr_match_long_optszOptionParser._match_long_optc CsM|jd}d|krL|jdd\}}|jd|d}n |}d}|j|}|j|}|jr |j}t||kr|jt dd|i|d6|d 6q3|dkr|jd} q3t |d|} |d|=n&|r-|jt d |nd} |j || ||dS) NrrHrTFz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d argumentsr%numberz%s option does not take a value) poprinsertr.rrsrrfrrrr(r) rrrr,roZnext_argZhad_explicit_valuer%rrrrrr*s0       zOptionParser._process_long_optc Csi|jd}d}d}xG|ddD]5}d|}|jj|}|d7}|smt|n|jr;|t|kr|jd||dd}n|j} t|| kr|jt dd| i|d6| d 6qA| dkr|jd} qAt |d| } |d| =nd} |j || |||r,Pq,q,WdS) NrFrrTz.%(option)s option requires %(number)d argumentz/%(option)s option requires %(number)d argumentsr%r/) r0rr\rrsrfr1rrrrr) rrrr,r'iZchror%rrrrrr+s6       z OptionParser._process_short_optscCs1|jdkr&tjjtjdS|jSdS)Nr)rr2pathbasenamerr#)rrrr get_prog_nameszOptionParser.get_prog_namecCs|jd|jS)Nz%prog)r`r5)rsrrrexpand_prog_name szOptionParser.expand_prog_namecCs|j|jS)N)r7rV)rrrrrszOptionParser.get_descriptionrcCs*|rtjj|ntj|dS)N)rstderrwriter)rZstatusrrrrrszOptionParser.exitcCs4|jtj|jdd|j|fdS)zerror(msg : string) Print a usage message incorporating 'msg' to stderr and exit. If you override this in a subclass, it should not return -- it should either exit or raise an exception. r-z%s: error: %s N) print_usagerr8rr5)rrrrrrszOptionParser.errorcCs-|jr%|jj|j|jSdSdS)NrD)rMrrNr7)rrrr get_usage"s  zOptionParser.get_usagecCs&|jr"t|jd|ndS)aaprint_usage(file : file = stdout) Print the usage message for the current program (self.usage) to 'file' (default stdout). Any occurrence of the string "%prog" in self.usage is replaced with the name of the current program (basename of sys.argv[0]). Does nothing if self.usage is empty or not defined. fileN)rMprintr;)rr<rrrr:)s zOptionParser.print_usagecCs!|jr|j|jSdSdS)NrD)rr7)rrrr get_version5s zOptionParser.get_versioncCs&|jr"t|jd|ndS)aEprint_version(file : file = stdout) Print the version message for this program (self.version) to 'file' (default stdout). As with print_usage(), any occurrence of "%prog" in self.version is replaced by the current program's name. Does nothing if self.version is empty or undefined. r<N)rr=r>)rr<rrrr;s zOptionParser.print_versioncCs|dkr|j}n|j|g}|j|jtd|j|jr|jtj|||jdnx4|j D])}|j|j ||jdqW|j dj |ddS)NZOptionsrUrDrre) rrqrgrPr(rJrlrrrnr rKr+)rrrirprrrrFs      zOptionParser.format_option_helpcCs|j|jS)N)rYrX)rrrrrrYWszOptionParser.format_epilogcCs|dkr|j}ng}|jrA|j|jdn|jrg|j|j|dn|j|j||j|j|dj|S)NrUrD) rrMrgr;rVrWrrYr+)rrrirrrr Zs    zOptionParser.format_helpcCs/|dkrtj}n|j|jdS)zprint_help(file : file = stdout) Print an extended help message, listing all options and any help text provided with them, to 'file' (default stdout). N)rstdoutr9r )rr<rrrrfs  zOptionParser.print_help)+rr!r"r&rrrrrrrrrr rrrrrrr r!r"r$r)r&r%r.r*r+r5r7rrrr;r:r>rrrYr rrrrrrQs` D             ' 3 $ )        cs{|krSfdd|jD}t|dkrI|dS|s^tn|jt|dS)z_match_abbrev(s : string, wordmap : {string : Option}) -> string Return the string key in 'wordmap' for which 's' is an unambiguous abbreviation. If 's' is found to be ambiguous or doesn't match any of 'words', raise BadOptionError. cs%g|]}|jr|qSr)r)rbZword)r6rrrds z!_match_abbrev..rrN)rrfrsortr))r6Zwordmapr*r)r6rr-ss  r-)'r& __version____all__Z __copyright__rr2rRrrr ImportErrorr( Exceptionr r rrrr)r r r rrrrrrrr^rrrrrrrr-rrrrrsr          t  A$ lib64/python3.4/__pycache__/cProfile.cpython-34.pyc000064400000011016152342604300015627 0ustar00 e f@sdZdddgZddlZddlZddddZddddZejje_ejje_Gd ddejZd d Z d d Z e dkre ndS)zUPython interface for the 'lsprof' profiler. Compatible with the 'profile' module. runrunctxProfileNcCstjtj|||S)N) _pyprofile_Utilsrr) statementfilenamesortr -/opt/alt/python34/lib64/python3.4/cProfile.pyrscCs"tjtj|||||S)N)rrrr)rglobalslocalsr r r r r rsc@smeZdZdZdddZddZddZd d Zd d Zd dZ ddZ dS)raiProfile(custom_timer=None, time_unit=None, subcalls=True, builtins=True) Builds a profiler object using the specified timer function. The default timer is a fast built-in one based on real time. For custom timer functions returning integers, time_unit can be a float specifying a scale (i.e. how long each integer unit is, in seconds). rcCs2ddl}|j|jj|jdS)Nr)pstatsZStatsZ strip_dirsZ sort_stats print_stats)selfr rr r r r(s zProfile.print_statsc CsEddl}t|d$}|j|j|j|WdQXdS)Nrwb)marshalopen create_statsdumpstats)rfilerfr r r dump_stats,s  zProfile.dump_statscCs|j|jdS)N)disablesnapshot_stats)rr r r r2s zProfile.create_statsc Cs|j}i|_i}xz|D]r}t|j}|j}||j}|j}|j}i} | |t|j<||||| f|j|                 zProfile.snapshot_statscCs(ddl}|j}|j|||S)Nr)__main____dict__r)rcmdr&dictr r r r\s  z Profile.runc Cs0|jzt|||Wd|jX|S)N)enableexecr)rr(r rr r r ras   zProfile.runctxc Os-|jz|||SWd|jXdS)N)r*r)rr$argskwr r r runcalljs zProfile.runcallN) __name__ __module__ __qualname____doc__rrrrrrr.r r r r rs    &  cCs6t|trdd|fS|j|j|jfSdS)N~r) isinstancestr co_filenameco_firstlinenoco_name)r r r r rss rc Csddl}ddl}ddlm}d}|d|}d|_|jdddd d d d d|jd dddd dd d|jdds|j|jdn|j \}}||jdddefaultz-sz--sortr z?Sort order when printing to stdout, based on pstats.Stats classrrrbr+__file__r&r0 __package__ __cached__r/)ossysZoptparser:Zallow_interspersed_argsZ add_optionargvZ print_usageexit parse_argslenpathinsertdirnamercompilereadrr=r ) rDrEr:r;parserZoptionsr,Zprognamefpr Zglobsr r r main{s8      rQr&r/r/) r3__all__Z_lsprofZprofilerrrZProfilerrrrQr0r r r r s  X  $ lib64/python3.4/__pycache__/mimetypes.cpython-34.pyo000064400000040647152342604300016130 0ustar00 h f-Q@sdZddlZddlZddlZddlZyddlZWnek r`dZYnXddddddgZ d d d d d ddddg Z da da GdddZ dddZdddZdddZdddZdddZddZddZeedkrddlZdZdd d!Zy5ejejd"dd#d$d%d&g\ZZWn5ejk rZzed"eWYddZ[XnXd"ZdZxWeD]O\Z Z!e d0kredqe d1kr dZqe d2krd"ZqqWxeD]|Z"erhee"eZ#e#s[e$d-e"qe$e#q*ee"e\Z#Z%e#se$d-e"q*e$d.e#d/e%q*WndS)3aGuess the MIME type of a file. This module defines two useful functions: guess_type(url, strict=True) -- guess the MIME type and encoding of a URL. guess_extension(type, strict=True) -- guess the extension for a given MIME type. It also contains the following, for tuning the behavior: Data: knownfiles -- list of files to parse inited -- flag set when init() has been called suffix_map -- dictionary mapping suffixes to suffixes encodings_map -- dictionary mapping suffixes to encodings types_map -- dictionary mapping suffixes to types Functions: init([files]) -- parse a list of files, default knownfiles (on Windows, the default values are taken from the registry) read_mime_types(file) -- parse one file, return a dictionary or None N guess_typeguess_extensionguess_all_extensionsadd_typeread_mime_typesinitz/etc/mime.typesz/etc/httpd/mime.typesz/etc/httpd/conf/mime.typesz/etc/apache/mime.typesz/etc/apache2/mime.typesz$/usr/local/etc/httpd/conf/mime.typesz"/usr/local/lib/netscape/mime.typesz/usr/local/etc/mime.typesFc@seZdZdZfdddZdddZdddZdd d Zdd d Zdd dZ dddZ dddZ dS) MimeTypeszMIME-types datastore. This datastore can handle information from mime.types-style files and supports basic determination of MIME type from a filename or URL, and can guess a reasonable extension given a MIME type. TcCststntj|_tj|_iif|_iif|_x-tjD]\}}|j||dqYWx-t jD]\}}|j||dqWx|D]}|j ||qWdS)NTF) initedr encodings_mapcopy suffix_map types_map types_map_invitemsr common_typesread)self filenamesstrictexttypenamer./opt/alt/python34/lib64/python3.4/mimetypes.py__init__@s  zMimeTypes.__init__cCsJ||j||<|j|j|g}||krF|j|ndS)aAdd a mapping between a type and an extension. When the extension is already known, the new type will replace the old one. When the type is already known the extension will be added to the list of known extensions. If strict is true, information will be added to list of standard types, else to the list of non-standard types. N)r r setdefaultappend)rrrrZextsrrrrNs  zMimeTypes.add_typec Cstjj|\}}|dkr|jd}|dkrCd S|jdd|}|dkrw|d|}n|d|}d|ksd|krd}n|dfStj|\}}x3||jkrtj||j|\}}qW||jkr1|j|} tj|\}}nd} |jd } || kr^| || fS|j | kr| |j | fS|rd| fS|jd } || kr| || fS|j | kr| |j | fSd| fSdS) a:Guess the type of a file based on its URL. Return value is a tuple (type, encoding) where type is None if the type can't be guessed (no or unknown suffix) or a string of the form type/subtype, usable for a MIME Content-type header; and encoding is None for no encoding or the name of the program used to encode (e.g. compress or gzip). The mappings are table driven. Encoding suffixes are case sensitive; type suffixes are first tried case sensitive, then case insensitive. The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped to '.tar.gz'. (This is table-driven too, using the dictionary suffix_map.) Optional `strict' argument when False adds a bunch of commonly found, but non-standard types. data,rN;=/z text/plainTF)NN) urllibparseZ splittypefind posixpathsplitextr r r lower) rurlrschemeZcommaZsemirbaserencodingr rrrr_s@     $      zMimeTypes.guess_typecCsr|j}|jdj|g}|snx@|jdj|gD]"}||krE|j|qEqEWn|S)aGuess the extensions for a file based on its MIME type. Return value is a list of strings giving the possible filename extensions, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. TF)r'rgetr)rrr extensionsrrrrrs   zMimeTypes.guess_all_extensionscCs$|j||}|sdS|dS)a Guess the extension for a file based on its MIME type. Return value is a string giving a filename extension, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. Nr)r)rrrr-rrrrs zMimeTypes.guess_extensionc Cs/t|dd}|j||WdQXdS)z Read a single mime.types-format file, specified by pathname. If strict is true, information will be added to list of standard types, else to the list of non-standard types. r+zutf-8N)openreadfp)rfilenamerfprrrrszMimeTypes.readc Csx|j}|sPn|j}x?tt|D]+}||ddkr8||d=Pq8q8W|ssqn|d|dd}}x%|D]}|j|d||qWqWdS)z Read a single mime.types-format file. If strict is true, information will be added to list of standard types, else to the list of non-standard types. r#N.)readlinesplitrangelenr) rr1rlineZwordsirsuffixesZsuffrrrr/s    zMimeTypes.readfpcCsts dSdd}tjtjd}x||D]}yttj||\}|jdsnw;ntj|d\}}|tjkrw;n|j|||WdQXWq;tk rw;Yq;Xq;WWdQXdS)z Load the MIME types database from Windows registry. If strict is true, information will be added to list of standard types, else to the list of non-standard types. Nc ss[d}xNytj||}Wntk r4PYnXd|krI|Vn|d7}q WdS)Nrr3)_winregZEnumKeyEnvironmentError)Zmimedbr:Zctyperrr enum_typess  z3MimeTypes.read_windows_registry..enum_typesr4z Content Type)r=OpenKeyZHKEY_CLASSES_ROOT startswithZ QueryValueExZREG_SZrr>)rrr?ZhkcrZ subkeynameZsubkeyZmimetypeZdatatyperrrread_windows_registrys   zMimeTypes.read_windows_registryN) __name__ __module__ __qualname____doc__rrrrrrr/rCrrrrr8s > rTcCs&tdkrtntj||S)aGuess the type of a file based on its URL. Return value is a tuple (type, encoding) where type is None if the type can't be guessed (no or unknown suffix) or a string of the form type/subtype, usable for a MIME Content-type header; and encoding is None for no encoding or the name of the program used to encode (e.g. compress or gzip). The mappings are table driven. Encoding suffixes are case sensitive; type suffixes are first tried case sensitive, then case insensitive. The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped to ".tar.gz". (This is table-driven too, using the dictionary suffix_map). Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)_dbrr)r(rrrrr s  cCs&tdkrtntj||S)aGuess the extensions for a file based on its MIME type. Return value is a list of strings giving the possible filename extensions, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)rHrr)rrrrrr$s  cCs&tdkrtntj||S)aGuess the extension for a file based on its MIME type. Return value is a string giving a filename extension, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)rHrr)rrrrrr5s  cCs)tdkrtntj|||S)aiAdd a mapping between a type and an extension. When the extension is already known, the new type will replace the old one. When the type is already known the extension will be added to the list of known extensions. If strict is true, information will be added to list of standard types, else to the list of non-standard types. N)rHrr)rrrrrrrEs  cCsdat}|dkr7tr.|jnt}nx0|D](}tjj|r>|j|q>q>W|j a |j a |j da |j da |a dS)NTF)r rr=rC knownfilesospathisfilerr r r rrH)filesdbfilerrrrVs         cCs^yt|}Wntk r(dSYnX|)t}|j|d|jdSWdQXdS)NT)r.OSErrorrr/r )rOfrNrrrrjs   cCs idd6dd6dd6dd6dd6d d 6aid d 6d d6dd6dd6ai~dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6dd#6d$d%6dd&6d'd(6d)d(6d*d+6d,d-6d.d/6dd06d1d26d1d36d4d56d6d76dd86d9d:6dd;6d<d=6d>d?6dd@6dAdB6dCdD6dCdE6dFdG6dHdI6dJdK6dJdL6dJdM6dNdO6ddP6dQdR6dSdT6dUdV6dUdW6dXdY6dZd[6d6d\6d6d]6d^d_6d`da6dbdc6ddde6dddf6dgdh6dSdi6dSdj6dSdk6dSdl6dmdn6d)do6d6dp6ddq6ddr6dsdt6dudv6dwdx6dydz6d{d|6dud}6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d`d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d1d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6aiddM6dd6dd6dd6dd6dd6dd6dd6adS)Nz.svg.gzz.svgzz.tar.gzz.tgzz.tazz.tzz.tar.bz2z.tbz2z.tar.xzz.txzZgzipz.gzcompressz.ZZbzip2z.bz2Zxzz.xzzapplication/octet-streamz.azapplication/postscriptz.aiz audio/x-aiffz.aifz.aifcz.aiffz audio/basicz.auzvideo/x-msvideoz.aviz text/plainz.batzapplication/x-bcpioz.bcpioz.binzimage/x-ms-bmpz.bmpz.czapplication/x-cdfz.cdfzapplication/x-netcdfzapplication/x-cpioz.cpiozapplication/x-cshz.cshztext/cssz.cssz.dllzapplication/mswordz.docz.dotzapplication/x-dviz.dvizmessage/rfc822z.emlz.epsz text/x-setextz.etxz.exez image/gifz.gifzapplication/x-gtarz.gtarz.hzapplication/x-hdfz.hdfz text/htmlz.htmz.htmlzimage/vnd.microsoft.iconz.icoz image/iefz.iefz image/jpegz.jpez.jpegz.jpgzapplication/javascriptz.jsz.kshzapplication/x-latexz.latexz video/mpegz.m1vzapplication/vnd.apple.mpegurlz.m3uz.m3u8zapplication/x-troff-manz.manzapplication/x-troff-mez.mez.mhtz.mhtmlzapplication/x-mifz.mifzvideo/quicktimez.movzvideo/x-sgi-moviez.moviez audio/mpegz.mp2z.mp3z video/mp4z.mp4z.mpaz.mpez.mpegz.mpgzapplication/x-troff-msz.msz.ncz.nwsz.oz.objzapplication/odaz.odazapplication/x-pkcs12z.p12zapplication/pkcs7-mimez.p7czimage/x-portable-bitmapz.pbmzapplication/pdfz.pdfz.pfxzimage/x-portable-graymapz.pgmz.plz image/pngz.pngzimage/x-portable-anymapz.pnmzapplication/vnd.ms-powerpointz.potz.ppazimage/x-portable-pixmapz.ppmz.ppsz.pptz.psz.pwzz text/x-pythonz.pyzapplication/x-python-codez.pycz.pyoz.qtzaudio/x-pn-realaudioz.razapplication/x-pn-realaudioz.ramzimage/x-cmu-rasterz.raszapplication/xmlz.rdfz image/x-rgbz.rgbzapplication/x-troffz.roffz text/richtextz.rtxz text/x-sgmlz.sgmz.sgmlzapplication/x-shz.shzapplication/x-sharz.sharz.sndz.sozapplication/x-wais-sourcez.srczapplication/x-sv4cpioz.sv4cpiozapplication/x-sv4crcz.sv4crcz image/svg+xmlz.svgzapplication/x-shockwave-flashz.swfz.tzapplication/x-tarz.tarzapplication/x-tclz.tclzapplication/x-texz.texzapplication/x-texinfoz.texiz.texinfoz image/tiffz.tifz.tiffz.trztext/tab-separated-valuesz.tsvz.txtzapplication/x-ustarz.ustarz text/x-vcardz.vcfz audio/x-wavz.wavz.wizz.wsdlzimage/x-xbitmapz.xbmzapplication/vnd.ms-excelz.xlbzapplication/excelz.xlsztext/xmlz.xmlz.xpdlzimage/x-xpixmapz.xpmz.xslzimage/x-xwindowdumpz.xwdzapplication/zipz.zipz image/jpgz audio/midiz.midz.midiz image/pictz.pctz.picz.pictzapplication/rtfz.rtfztext/xulz.xul)r r r rrrrr_default_mime_typesus(   rS__main__a4Usage: mimetypes.py [options] type Options: --help / -h -- print this message and exit --lenient / -l -- additionally search of some common, but non-standard types. --extension / -e -- guess extension instead of type More than one type argument may be given. r@cCs.tt|rt|ntj|dS)N)printUSAGEsysexit)codemsgrrrusage5s  r[r3ZhlehelpZlenient extension-h--help-l --lenient-e --extensionz I don't know anything about typeztype:z encoding:)r^r_)r`ra)rbrc)&rGrJrWr%Z urllib.parser"winregr= ImportError__all__rIr rHrrrrrrrrSrDZgetoptrVr[argvZoptsargserrorrZrr]ZoptargZgtypeZguessrUr+rrrrst                    lib64/python3.4/__pycache__/bz2.cpython-34.pyc000064400000035464152342604300014576 0ustar00 i fI@s dZddddddgZdZdd lmZdd lZdd lZydd lm Z Wn"e k rdd l m Z YnXdd l m Z mZdZd ZdZdZdZGdddejZddd d d ddZdddZddZd S)zInterface to the libbzip2 compression library. This module provides a file interface, classes for incremental (de)compression, and functions for one-shot (de)compression. BZ2File BZ2CompressorBZ2Decompressoropencompress decompressz%Nadeem Vawda )rN)RLock)rri c@sieZdZdZdddddZddZed d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdddZdd d!Zd"d#d$Zd:d&d'Zd;d(d)Zd*d+Zd<d,d-Zd=d.d/Zd0d1Zd2d3Zd4d5Zd"d6d7Zd8d9ZdS)>ra@A file object providing transparent bzip2 (de)compression. A BZ2File can act as a wrapper for an existing file object, or refer directly to a named file on disk. Note that BZ2File provides a *binary* file interface - data read is returned as bytes, and data to be written should be given as bytes. rN cCst|_d|_d|_t|_d|_d|_|dk rXtj dt nd|koodknst dn|dkrd }t }t |_d |_d|_n|dkrd }t}t||_ng|dkrd}t}t||_n=|dkr:d}t}t||_nt d|ft|ttfrt|||_d|_||_n?t|dst|dr||_||_n tddS)a3Open a bzip2-compressed file. If filename is a str or bytes object, it gives the name of the file to be opened. Otherwise, it should be a file object, which will be used to read or write the compressed data. mode can be 'r' for reading (default), 'w' for (over)writing, 'x' for creating exclusively, or 'a' for appending. These can equivalently be given as 'rb', 'wb', 'xb', and 'ab'. buffering is ignored. Its use is deprecated. If mode is 'w', 'x' or 'a', compresslevel can be a number between 1 and 9 specifying the level of compression: 1 produces the least compression, and 9 (default) produces the most compression. If mode is 'r', the input file may be the concatenation of multiple compressed streams. NFrr z)Use of 'buffering' argument is deprecatedr z%compresslevel must be between 1 and 9r rbwwbxxbaabzInvalid mode: %rTreadwritez1filename must be a str or bytes object, or a file)rr zrb)rzwb)rr)rr)r_lock_fp_closefp _MODE_CLOSED_mode_pos_sizewarningswarnDeprecationWarning ValueError _MODE_READr _decompressor_buffer_buffer_offset _MODE_WRITEr _compressor isinstancestrbytes _builtin_openhasattr TypeError)selffilenamemode buffering compresslevelZ mode_coder6(/opt/alt/python34/lib64/python3.4/bz2.py__init__+sL                    zBZ2File.__init__cCs|j|jtkrdSzY|jttfkrAd|_n4|jtkru|jj|j j d|_ nWdz|j r|jj nWdd|_d|_ t|_d|_ d|_XXWdQXdS)zFlush and close the file. May be called more than once without error. Once the file is closed, any other operation on it will raise a ValueError. NFrr)rrrr%_MODE_READ_EOFr&r)rrr*flushrcloser'r()r1r6r6r7r;ns"       z BZ2File.closecCs |jtkS)zTrue if this file is closed.)rr)r1r6r6r7closedszBZ2File.closedcCs|j|jjS)z3Return the file descriptor for the underlying file.)_check_not_closedrfileno)r1r6r6r7r>s zBZ2File.filenocCs|jo|jjS)z)Return whether the file supports seeking.)readablerseekable)r1r6r6r7r@szBZ2File.seekablecCs|j|jttfkS)z/Return whether the file was opened for reading.)r=rr%r9)r1r6r6r7r?s zBZ2File.readablecCs|j|jtkS)z/Return whether the file was opened for writing.)r=rr))r1r6r6r7writables zBZ2File.writablecCs|jrtdndS)NzI/O operation on closed file)r<r$)r1r6r6r7r=s zBZ2File._check_not_closedcCs5|jttfkr1|jtjdndS)NzFile not open for reading)rr%r9r=ioUnsupportedOperation)r1r6r6r7_check_can_reads zBZ2File._check_can_readcCs/|jtkr+|jtjdndS)NzFile not open for writing)rr)r=rBrC)r1r6r6r7_check_can_writes zBZ2File._check_can_writecCsV|jttfkr1|jtjdn|jjsRtjdndS)Nz3Seeking is only supported on files open for readingz3The underlying file object does not support seeking)rr%r9r=rBrCrr@)r1r6r6r7_check_can_seeks  zBZ2File._check_can_seekc Cs|jtkrdSx|jt|jkr |jjpI|jjt }|s|jj rwt|_|j |_ dSt dn|jj rt|_y|jj||_Wqtk rt|_|j |_ dSYqXn|jj||_d|_qWdS)NFzACompressed file ended before the end-of-stream marker was reachedrT)rr9r(lenr'r& unused_datarr _BUFFER_SIZEeofrr EOFErrorrrOSError)r1Zrawblockr6r6r7 _fill_buffers,           zBZ2File._fill_bufferTcCs|j|jd|_d|_g}xJ|jrt|rP|j|jn|jt|j7_d|_q+W|rdj|SdS)Nrr)r'r(rMappendrrGjoin)r1 return_datablocksr6r6r7 _read_alls  zBZ2File._read_allcCsC|j|}|t|jkrd|j|j|}||_|jt|7_|r`|SdS|j|jd|_d|_g}x|dkr+|jr+|t|jkr|jd|}||_n|j}d|_|r|j|n|jt|7_|t|8}qW|r?dj|SdS)Nrr)r(rGr'rrMrNrO)r1nrPenddatarQr6r6r7 _read_blocks*      zBZ2File._read_blockrc CsB|j3|j|js$dS|j|jdSWdQXdS)zReturn buffered data without advancing the file position. Always returns at least one byte of data, unless at EOF. The exact number of bytes returned is unspecified. rN)rrDrMr'r()r1rSr6r6r7peek s    z BZ2File.peekr c CsQ|jB|j|dkr$dS|dkr:|jS|j|SWdQXdS)zRead up to size uncompressed bytes from the file. If size is negative or omitted, read until EOF is reached. Returns b'' if the file is already at EOF. rrN)rrDrRrV)r1sizer6r6r7rs     z BZ2File.readc Cs|j|j|dksE|jt|jkrI|j rIdS|dkr|j|j|j|}|jt|7_n(|j|jd}d|_d|_|jt|7_|SWdQXdS)zRead up to size uncompressed bytes, while trying to avoid making multiple reads from the underlying stream. Returns b'' if the file is at EOF. rrN)rrDr(rGr'rMr)r1rXrUr6r6r7read1&s   %    z BZ2File.read1c Cs'|jtjj||SWdQXdS)z_Read up to len(b) bytes into b. Returns the number of bytes read (0 for EOF). N)rrBBufferedIOBasereadinto)r1br6r6r7r[As zBZ2File.readintoc Cst|ts<t|ds-tdn|j}n|j|j|dkr|jjd|j d}|dkr|j|j |}||_ |j t |7_ |Snt j j||SWdQXdS)a Read a line of uncompressed bytes from the file. The terminating newline (if present) is retained. If size is non-negative, no more than size bytes will be read (in which case the line may be incomplete). Returns b'' if already at EOF. __index__zInteger argument expectedrs r N)r+intr/r0r]rrDr'findr(rrGrBrZreadline)r1rXrTliner6r6r7r`Is     zBZ2File.readlinec Csct|ts<t|ds-tdn|j}n|jtjj||SWdQXdS)zRead a list of lines of uncompressed bytes from the file. size can be specified to control the number of lines read: no further lines will be read once the total size of the lines read so far equals or exceeds size. r]zInteger argument expectedN) r+r^r/r0r]rrBrZ readlines)r1rXr6r6r7rb`s  zBZ2File.readlinesc Cs_|jP|j|jj|}|jj||jt|7_t|SWdQXdS)zWrite a byte string to the file. Returns the number of uncompressed bytes written, which is always len(data). Note that due to buffering, the file on disk may not reflect the data written until close() is called. N)rrEr*rrrrrG)r1rUZ compressedr6r6r7rns   z BZ2File.writec Cs'|jtjj||SWdQXdS)zWrite a sequence of byte strings to the file. Returns the number of uncompressed bytes written. seq can be any iterable yielding byte strings. Line separators are not added between the written byte strings. N)rrBrZ writelines)r1seqr6r6r7rc|s zBZ2File.writelinescCsG|jjddt|_d|_t|_d|_d|_dS)Nrr) rseekr%rrrr&r'r()r1r6r6r7_rewinds     zBZ2File._rewindc Cs|j|j|dkr#nm|dkr?|j|}nQ|dkr}|jdkrm|jddn|j|}ntd|f||jkr|jn ||j8}|j|dd|jSWdQXdS)aChange the file position. The new position is specified by offset, relative to the position indicated by whence. Values for whence are: 0: start of stream (default); offset must not be negative 1: current stream position 2: end of stream; offset must not be positive Returns the new file position. Note that seeking is emulated, so depending on the parameters, this operation may be extremely slow. rr r rPFzInvalid value for whence: %sN)rrFrr rRr$rfrV)r1offsetwhencer6r6r7res        z BZ2File.seekcCs%|j|j|jSWdQXdS)z!Return the current file position.N)rr=r)r1r6r6r7tells  z BZ2File.tellrrrr)__name__ __module__ __qualname____doc__r8r;propertyr<r>r@r?rAr=rDrErFrMrRrVrWrrYr[r`rbrrcrfrerir6r6r6r7r s4 C         %    *rr cCsd|kr1d|krtd|fqnQ|dk rLtdn|dk rgtdn|dk rtdn|jdd}t||d |}d|krtj||||S|SdS) a Open a bzip2-compressed file in binary or text mode. The filename argument can be an actual filename (a str or bytes object), or an existing file object to read from or write to. The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is "rb", and the default compresslevel is 9. For binary mode, this function is equivalent to the BZ2File constructor: BZ2File(filename, mode, compresslevel). In this case, the encoding, errors and newline arguments must not be provided. For text mode, a BZ2File object is created, and wrapped in an io.TextIOWrapper instance with the specified encoding, error handling behavior, and line ending(s). tr\zInvalid mode: %rNz0Argument 'encoding' not supported in binary modez.Argument 'errors' not supported in binary modez/Argument 'newline' not supported in binary moderr5)r$replacerrB TextIOWrapper)r2r3r5encodingerrorsnewlineZbz_modeZ binary_filer6r6r7rs      cCs#t|}|j||jS)zCompress a block of data. compresslevel, if given, must be a number between 1 and 9. For incremental compression, use a BZ2Compressor object instead. )rrr:)rUr5compr6r6r7rs c Csg}xv|r~t}y|j|}Wntk rL|rEPnYnX|j||jsrtdn|j}q Wdj|S)zjDecompress a block of data. For incremental decompression, use a BZ2Decompressor object instead. zACompressed data ended before the end-of-stream marker was reachedr)rrrLrNrJr$rHrO)rUZresultsZdecompresr6r6r7rs      )rm__all__ __author__builtinsrr.rBr!Z threadingr ImportErrorZdummy_threadingZ_bz2rrrr%r9r)rIrZrrrr6r6r6r7s,    ' lib64/python3.4/__pycache__/pty.cpython-34.pyo000064400000010201152342604300014707 0ustar00 e f@sdZddlmZddlZddlZdddgZdZdZdZdZd dZ d d Z d d Z ddZ ddZ ddZddZeeddZeeddZdS)zPseudo terminal utilities.)selectNopenptyforkspawnc CsNytjSWnttfk r(YnXt\}}t|}||fS)zdopenpty() -> (master_fd, slave_fd) Open a pty master/slave pair, using os.openpty() if possible.)osrAttributeErrorOSError_open_terminal slave_open) master_fd slave_nameslave_fdr(/opt/alt/python34/lib64/python3.4/pty.pyrs c Cs^ytj\}}Wnttfk r0Yn'Xtj|}tj|||fStS)zmaster_open() -> (master_fd, slave_name) Open a pty master and return the fd, and the filename of the slave end. Deprecated, use openpty() instead.)rrr r ttynamecloser )r rrrrr master_open!s  rc CsxmdD]e}x\dD]T}d||}ytj|tj}Wntk rXwYnX|d||fSWqWtddS)z1Open pty master and return (master_fd, tty_name).ZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devicesN)ropenO_RDWRr )xyZpty_namefdrrrr 1s   r cCstj|tj}yddlm}m}Wntk rG|SYnXy$|||d|||dWntk rYnX|S)zslave_open(tty_name) -> slave_fd Open the pty slave and acquire the controlling terminal, returning opened filedescriptor. Deprecated, use openpty() instead.r)ioctlI_PUSHZptemZldterm)rrrZfcntlrr ImportErrorr )Ztty_nameresultrrrrrr =s   r cCs<ytj\}}Wnttfk r0Yn=X|tkrcytjWqctk r_YqcXn||fSt\}}tj}|tkr%tjtj|tj |t tj |t tj |t |t krtj|ntj tjt tj}tj|n tj|||fS)zdfork() -> (pid, master_fd) Fork and make the child a session leader with a controlling terminal.)rforkptyr r CHILDsetsidrrrdup2 STDIN_FILENO STDOUT_FILENO STDERR_FILENOrrr)pidrr rZtmp_fdrrrrOs0         cCs3x,|r.tj||}||d}qWdS)z#Write all the data to a descriptor.N)rwrite)rdatanrrr_writenws r)cCstj|dS)zDefault read function.i)rread)rrrr_read}sr+cCs|tg}xt|gg\}}}||krk||}|sX|j|qktjt|nt|kr|t}|s|jtqt||qqWdS)zParent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N)r"rremoverr&r#r))r master_read stdin_readZfdsZrfdsZwfdsZxfdsr'rrr_copys     r/cCst|tdkr$|f}nt\}}|tkrVtj|d|ny&tjt}tjtd}Wntj k rd}YnXyt |||Wn1t k r|rtj ttj |nYnXtj|tj|ddS)zCreate a spawned process.rr)typerrrexeclpttyZ tcgetattrr"Zsetrawerrorr/r Z tcsetattrZ TCSAFLUSHrwaitpid)argvr-r.r%r modeZrestorerrrrs$       )__doc__rrr3__all__r"r#r$rrrr r rr)r+r/rrrrrs"     (  lib64/python3.4/__pycache__/chunk.cpython-34.pyo000064400000012226152342604300015214 0ustar00 f f1@sdZGdddZdS)aSimple class to read IFF chunks. An IFF chunk (used in formats such as AIFF, TIFF, RMFF (RealMedia File Format)) has the following structure: +----------------+ | ID (4 bytes) | +----------------+ | size (4 bytes) | +----------------+ | data | | ... | +----------------+ The ID is a 4-byte string which identifies the type of chunk. The size field (a 32-bit value, encoded using big-endian byte order) gives the size of the whole chunk, including the 8-byte header. Usually an IFF-type file consists of one or more chunks. The proposed usage of the Chunk class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end of the file, creating a new instance will fail with an EOFError exception. Usage: while True: try: chunk = Chunk(file) except EOFError: break chunktype = chunk.getname() while True: data = chunk.read(nbytes) if not data: pass # do something with data The interface is file-like. The implemented methods are: read, close, seek, tell, isatty. Extra methods are: skip() (called by close, skips to the end of the chunk), getname() (returns the name (ID) of the chunk) The __init__ method has one required argument, a file-like object (including a chunk instance), and one optional argument, a flag which specifies whether or not chunks are aligned on 2-byte boundaries. The default is 1, i.e. aligned. c@seZdZdddddZddZddZd d Zd d Zd ddZddZ dddZ ddZ dS)ChunkTFcCsddl}d|_||_|r-d}nd}||_|jd|_t|jdkrltny*|j|d|jdd|_ Wn|j k rtYnX|r|j d|_ nd|_ y|jj |_ Wn!ttfk rd|_Yn Xd|_dS) NF><LT)structclosedalignfileread chunknamelenEOFErrorZ unpack_from chunksizeerror size_readtelloffsetAttributeErrorOSErrorseekable)selfr r Z bigendianZ inclheaderrZstrflagr*/opt/alt/python34/lib64/python3.4/chunk.py__init__4s,      *  zChunk.__init__cCs|jS)z*Return the name (ID) of the current chunk.)r )rrrrgetnameNsz Chunk.getnamecCs|jS)z%Return the size of the current chunk.)r)rrrrgetsizeRsz Chunk.getsizec Cs+|js'z|jWdd|_XndS)NT)r skip)rrrrcloseVs z Chunk.closecCs|jrtdndS)NzI/O operation on closed fileF)r ValueError)rrrrisatty]s z Chunk.isattyrcCs|jrtdn|js0tdn|dkrL||j}n|dkrh||j}n|dks||jkrtn|jj|j |d||_dS)zSeek to specified position into the chunk. Default position is 0 (start of chunk). If the file is not seekable, this will result in an error. zI/O operation on closed filez cannot seekrN) r r rrrr RuntimeErrorr seekr)rposwhencerrrr%bs     z Chunk.seekcCs|jrtdn|jS)NzI/O operation on closed file)r r r)rrrrrus z Chunk.tellr"cCs|jrtdn|j|jkr.dS|dkrM|j|j}n||j|jkrv|j|j}n|jj|}|jt||_|j|jkr|jr|jd@r|jjd}|jt||_n|S)zRead at most size bytes from the chunk. If size is omitted or negative, read until the end of the chunk. zI/O operation on closed filerr")r r rrr r rr )rsizedatadummyrrrr zs     z Chunk.readc Cs|jrtdn|jry^|j|j}|jrW|jd@rW|d}n|jj|d|j||_dSWqtk rYqXnxM|j|jkrt d|j|j}|j |}|st qqWdS)zSkip the rest of the chunk. If you are not interested in the contents of the chunk, this method should be called so that the file points to the start of the next chunk. zI/O operation on closed filer"Ni ) r r rrrr r r%rminr r)rnr+rrrrs"    z Chunk.skipN) __name__ __module__ __qualname__rrrrr!r%rr rrrrrr3s      rN)__doc__rrrrr1slib64/python3.4/__pycache__/pstats.cpython-34.pyo000064400000056173152342604300015433 0ustar00 e ff@sdZddlZddlZddlZddlZddlZddlmZdgZGdddZ GdddZ dd Z d d Z d d Z ddZddZddZddZedkrddlZyddlZWnek rYnXGdddejZeejdkrPejdZndZykeeZx(ejddD]ZejeqyWeddejej eddejWne!k rYnXndS)z3Class for printing reports on profiled python code.N) cmp_to_keyStatsc@sweZdZdZddddZddZdd Zd d Zd d ZddZ idOd6dSd6dWd6d[d6d^d6dad6ddd6dgd6djd"6dod$6dsd'6dvd*6dzd-6d~d.6Z d/d0Z d1d2Z d3d4Z d5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCdDZdEdFdGZdHdIZdJdKZdS)ra<This class is used for creating reports from data generated by the Profile class. It is a "friend" of that class, and imports data either by direct access to members of Profile class, or by reading in a dictionary that was emitted (via marshal) from the Profile class. The big change from the previous Profiler (in terms of raw functionality) is that an "add()" method has been provided to combine Stats from several distinct profile runs. Both the constructor and the add() method now take arbitrarily many file names as arguments. All the print methods now take an argument that indicates how many lines to print. If the arg is a floating point number between 0 and 1.0, then it is taken as a decimal percentage of the available lines to be printed (e.g., .1 means print 10% of all available lines). If it is an integer, it is taken to mean the number of lines of data that you wish to have printed. The sort_stats() method now processes some additional options (i.e., in addition to the old -1, 0, 1, or 2). It takes an arbitrary number of quoted strings to select the sort order. For example sort_stats('time', 'name') sorts on the major key of 'internal function time', and on the minor key of 'the name of the function'. Look at the two tables in sort_stats() and get_sort_arg_defs(self) for more examples. All methods return self, so you can string together commands like: Stats('foo', 'goo').strip_dirs().sort_stats('calls'). print_stats(5).print_callers(5) streamNcGs_|p tj|_t|s'd}n|d}|dd}|j||j|dS)Nr)sysstdoutrleninitadd)selfrargsargr+/opt/alt/python34/lib64/python3.4/pstats.py__init__>s    zStats.__init__c Csd|_g|_d|_d|_d|_d|_d|_t|_i|_ i|_ |j |y|j WnBt k rtd|jr|jdndd|jYnXdS)NrzInvalid timing data %srfile) all_calleesfilesfcn_listtotal_tt total_calls prim_calls max_name_lenset top_levelstats sort_arg_dict load_statsget_top_level_stats Exceptionprintr)r r rrrr Hs"            'z Stats.initcCs|dkri|_dSt|trt|d}tj||_WdQXy-tj|}tj |j d|}WnYnX|g|_ n1t |dr|j |j|_i|_n|jstd|j|fndS)Nrbz create_statsz.Cannot create or construct a %r object from %r)r isinstancestropenmarshalloadosstattimeZctimest_mtimerhasattrr$ TypeError __class__)r r fZ file_statsrrrr[s(      zStats.load_statscCsx|jjD]\}\}}}}}|j|7_|j|7_|j|7_d|krw|jj|ntt||j krtt||_ qqWdS)Njprofilerprofiler)r2rr3) ritemsrrrrr rfunc_std_stringr)r funcccncttctcallersrrrr qs+ zStats.get_top_level_statscGsL|s |Sx;t|D]-}t|t|krDt|}n|j|j7_|j|j7_|j|j7_|j|j7_x!|jD]}|jj|qW|j |j kr|j |_ nd|_ xg|j j D]V\}}||j kr|j |}nddddif}t |||j |rrr rrr)r ZoldstatsZnewstatsrr6r7r8r9r:r;ZnewfuncZ newcallersfunc2callerZold_topZnew_toprrr strip_dirss.  (       zStats.strip_dirsc Cs|jr dSi|_}x|jjD]x\}\}}}}}||kr^i|| gg?g?rz6 List reduced from %r to %r due to restriction <%r> ) r%r&recompileerrorsearchr5rbrfloatr`)r ZsellistmsgZnew_listZrexr6countrrreval_print_amounts,  ++ zStats.eval_print_amountcCs|j}|jr9|jdd}d|jd}nt|jj}d}x)|D]!}|j|||\}}q[Wt|}|sd|fSt|d|j |t|jkr d}x>|D]3}tt ||krtt |}qqWn|d|fS)Nz Ordered by:  z! Random listing order was used rrrX) rrrartrkeysrwrr"rr5)r Zsel_listwidthZ stat_listruZ selectionrvr6rrrget_print_list/s$      zStats.get_print_listcGsdx$|jD]}t|d|jq W|jrCtd|jnd}x-|jD]"}t|t|d|jqSWt||jdddd|j|j|jkrtd|jddd|jntd|jd|jtd|j|j|\}}|r`|j x|D]}|j |q&Wtd|jtd|jn|S) Nr zfunction callsendz(%d primitive calls)zin %.3f secondsz ) rr"rrfunc_get_function_namerrrr{ print_title print_line)r amountrCindentr6rzrtrrr print_statsGs(  "#  zStats.print_statscGs|j|\}}|r|j|j|dxM|D]E}||jkrn|j|||j|q<|j||iq<Wtd|jtd|jn|S)Nz called...r)r{rnprint_call_headingrprint_call_liner"r)r rrzrtr6rrr print_callees^s  zStats.print_calleesc Gs|j|\}}|r|j|dx@|D]8}|j|\}}}}} |j||| dq2Wtd|jtd|jn|S)Nzwas called by...z<-r)r{rrrr"r) r rrzrtr6r7r8r9r:r;rrr print_callersms zStats.print_callersc Cstdj||d|jd}xW|jjD]F\}}}}}|r6tt|j} t| t}Pq6q6W|rtd|dd|jndS)Nz Function rFr|z ncalls tottime cumtime) r"ljustrrvaluesnextiterr%rf) r name_sizeZ column_titleZ subheaderr7r8r9r:r;valuerrrrxs %zStats.print_call_headingz->cCsktt|j||ddd|j|sFtd|jdSt|j}d}x|D]}t|}||} t| tr| \} } } } | | krd| | f}n d| f}d|jdd t |t | t | |f}|d }n.d || t |j |d f}|d }t|||d|jd}qeWdS) Nr~r|rrz%d/%dz%dz %s %s %s %srUrXrz %s(%r) %srG) r"r5rrsortedryr%rfrjustrf8r)r rsourceZ call_dictZarrowZclistrr6rRrr8r7r9r:ZsubstatsZ left_widthrrrrs*,      $ zStats.print_call_linecCs0tdddd|jtdd|jdS)Nz- ncalls tottime percall cumtime percallr~r|rzfilename:lineno(function))r"r)r rrrrszStats.print_titlecCs^|j|\}}}}}t|}||krK|dt|}nt|jdddd|jtt|ddd|j|dkrtdddd|jn#tt||ddd|jtt|ddd|j|dkrtd ddd|jn#tt||ddd|jtt|d|jdS) N/ r~r|rrr}z z )rr&r"rrrr5)r r6r7r8r9r:r;crrrrs  " # #zStats.print_linerrrr)rrErrrr)rrErrGrr)rrHrrGrr)rrHrJrr)rrKrJrr)rrKrLrr)rrMrJrr)rrKrPrr)rrQrPrrJrrLrrrr)rrSrrrr)rrTrUrr)rrVrrXrr)rrYrrXrr)rrY)__name__ __module__ __qualname____doc__rr rr r rDrZr^rgrirmrnrwr{rrrrrrrrrrrr sH                c@s.eZdZdZddZddZdS)rdaThis class provides a generic function for comparing any two tuples. Each instance records a list of tuple-indices (from most significant to least significant), and sort direction (ascending or decending) for each tuple-index. The compare functions can then be used as the function argument to the system sort() function when a list of tuples need to be sorted in the instances order.cCs ||_dS)N)comp_select_list)r rrrrrszTupleComp.__init__cCsSxL|jD]A\}}||}||}||kr;| S||kr |Sq WdS)Nr)r)r leftrightindexZ directionlrrrrres    zTupleComp.compareN)rrrrrrerrrrrds  rdcCs(|\}}}tjj|||fS)N)r*pathbasename) func_namerCrNrRrrrrjsrjcCs|dS)NrXr)r6rrrrsrcCsc|ddd krW|d}|jdrP|jdrPd|dd S|Snd|SdS) NrX~r<>z{%s}rz %s:%d(%s))rrr) startswithendswith)rrRrrrr5s  r5c CsV|\}}}}}|\}}} } } |||||| || t| |fS)z3Add together all the stats for two profile entries.) add_callers) targetrr7r8r9r:r;Zt_ccZt_ncZt_ttZt_ctZ t_callersrrrr>sr>cCsi}x$|jD]\}}|||s zadd_callers..)r4r%rfzip)rrZ new_callersr6rlrrrrs  !rcCs+d}x|jD]}||7}qW|S)z@Sum the caller statistics to get total number of calls received.r)r)r;r8rFrrr count_callssrcCsd|S)Nz%8.3fr)xrrrrsr__main__c@sKeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)6ProfileBrowserNcCsNtjj|d|_d|_tj|_|dk rJ|j|ndS)Nz% ) cmdCmdrpromptrrrrdo_read)r profilerrrrs     zProfileBrowser.__init__cCs|j}g}x|D]}y|jt|wWntk rMYnXyQt|}|dksu|dkrtdd|jwn|j|wWntk rYnX|j|qW|jrt|j||ntdd|jdS)Nrrz#Fraction argument must be in [0, 1]rzNo statistics object is loaded.) splitrbr` ValueErrorrsr"rrgetattr)r fnrNr Z processedZtermZfracrrrgenerics,       zProfileBrowser.genericcCsvtdd|jtdd|jtdd|jtdd|jtdd|jtdd|jdS)NzArguments may be:rz0* An integer maximum number of entries to print.z:* A decimal fractional number between 0 and 1, controllingz- what fraction of selected entries to print.z8* A regular expression; only entries with function namesz that match it are printed.)r"r)r rrr generic_help7s zProfileBrowser.generic_helpcCs3|jr|jj|ntdd|jdS)NzNo statistics object is loaded.rr)rr r"r)r rNrrrdo_add?s zProfileBrowser.do_addcCstdd|jdS)Nz>Add profile info from given file to current statistics object.r)r"r)r rrrhelp_addEszProfileBrowser.help_addcCs|jd|S)Nr)r)r rNrrr do_calleesHszProfileBrowser.do_calleescCs!tdd|j|jdS)Nz6Print callees statistics from the current stat object.r)r"rr)r rrr help_calleesJszProfileBrowser.help_calleescCs|jd|S)Nr)r)r rNrrr do_callersNszProfileBrowser.do_callerscCs!tdd|j|jdS)Nz6Print callers statistics from the current stat object.r)r"rr)r rrr help_callersPszProfileBrowser.help_callerscCstdd|jdS)Nrrr)r"r)r rNrrrdo_EOFTszProfileBrowser.do_EOFcCstdd|jdS)NzLeave the profile brower.r)r"r)r rrrhelp_EOFWszProfileBrowser.help_EOFcCsdS)Nrr)r rNrrrdo_quitZszProfileBrowser.do_quitcCstdd|jdS)NzLeave the profile brower.r)r"r)r rrr help_quit\szProfileBrowser.help_quitcCs|ryt||_Wntk r^}z#t|jdd|jdSWYdd}~XnItk r}z)t|jjd|d|jdSWYdd}~XnX|d|_ nKt |j dkr|j dd}|j |ntdd|jdS) Nrr:z% rXz1No statistics object is current -- cannot reload.r) rrOSErrorr"r rr!r0rrrr)r rNerrrrrr_s zProfileBrowser.do_readcCs*tdd|jtdd|jdS)Nz+Read in profile data from a specified file.rz*Without argument, reload the current file.)r"r)r rrr help_readpszProfileBrowser.help_readcCs0|jr|jjntdd|jdS)NzNo statistics object is loaded.rr)rrir"r)r rNrrr do_reversets zProfileBrowser.do_reversecCstdd|jdS)Nz/Reverse the sort order of the profiling report.r)r"r)r rrr help_reversezszProfileBrowser.help_reversecs|js tdd|jdS|jj|rstfdd|jDrs|jj|jnTtdd|jx>tjj D]-\}}td||dfd|jqWdS) NzNo statistics object is loaded.rc3s|]}|kVqdS)Nr)rr)abbrevsrr sz)ProfileBrowser.do_sort..z/Valid sort keys (unique prefixes are accepted):z%s -- %srr) rr"rr^allrrgrrZr4)r rNr_rr)rrdo_sort}s +%zProfileBrowser.do_sortcCs*tdd|jtdd|jdS)Nz.Sort profile data according to specified keys.rz3(Typing `sort' without arguments lists valid keys.))r"r)r rrr help_sortszProfileBrowser.help_sortcsfddtjDS)Ncs%g|]}|jr|qSr)r)ra)textrrrs z0ProfileBrowser.complete_sort..)rrZ)r rr r)rr complete_sortszProfileBrowser.complete_sortcCs|jd|S)Nr)r)r rNrrrdo_statsszProfileBrowser.do_statscCs!tdd|j|jdS)Nz.Print statistics from the current stat object.r)r"rr)r rrr help_statsszProfileBrowser.help_statscCs0|jr|jjntdd|jdS)NzNo statistics object is loaded.r)rrmr"r)r rNrrrdo_strips zProfileBrowser.do_stripcCstdd|jdS)Nzrrrrrreadline ImportErrorrrrargvZ initprofileZbrowserrrr"rZcmdloopKeyboardInterruptrrrrsH                  lib64/python3.4/__pycache__/macurl2path.cpython-34.pyo000064400000004066152342604300016331 0ustar00 e f @sRdZddlZddlZddgZddZddZddZdS) zqMacintosh-specific module for conversion between pathnames and URLs. Do not import directly; use urllib instead.N url2pathname pathname2urlcCstjj|d}|r7|dkr7tdn|dddkr`|dd}n%|dddkrtdn|jd }d}x|t|krb||d kr||=q||d kr|dkr||d dkr||d |d =|d }q||d krU|dkrU||d d krU||=q|d }qW|dsdj|d d}nVd}x:|t|kr||d krd ||<|d }qWddj|}tjj|S)z{OS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.rfilez(Cannot convert non-local URL to pathnameNz///z///...:)r r )urllibparseZ splittype RuntimeErrorsplitlenjoinZunquote)pathnameZtp componentsirvr0/opt/alt/python34/lib64/python3.4/macurl2path.pyr s6  0  % cCsd|krtdn|jd}|ddkrD|d=n|d dkr^|d =nx7tt|D]#}||dkrqd||s     * lib64/python3.4/__pycache__/contextlib.cpython-34.pyc000064400000024202152342604300016240 0ustar00 e fw-@sdZddlZddlmZddlmZddddd d gZGd ddeZGd d d eZ ddZ GdddeZ Gdd d Z Gdd d Z GdddeZdS)z4Utilities for with-statement contexts. See PEP 343.N)deque)wrapscontextmanagerclosingContextDecorator ExitStackredirect_stdoutsuppressc@s.eZdZdZddZddZdS)rzJA base class or mixin that enables context managers to work as decorators.cCs|S)a6Return a recreated instance of self. Allows an otherwise one-shot context manager like _GeneratorContextManager to support use as a decorator via implicit recreation. This is a private interface just for _GeneratorContextManager. See issue #11647 for details. )selfr r //opt/alt/python34/lib64/python3.4/contextlib.py _recreate_cms zContextDecorator._recreate_cmcs%tfdd}|S)Nc s$j||SWdQXdS)N)r )argskwds)funcr r r inners z(ContextDecorator.__call__..inner)r)r rrr )rr r __call__s!zContextDecorator.__call__N)__name__ __module__ __qualname____doc__r rr r r r r s  c@sFeZdZdZddZddZddZdd Zd S) _GeneratorContextManagerz%Helper for @contextmanager decorator.cCsl||||_||||_|_|_t|dd}|dkr_t|j}n||_dS)Nr)genrrrgetattrtyper)r rrrdocr r r __init__%s  z!_GeneratorContextManager.__init__cCs|j|j|j|jS)N) __class__rrr)r r r r r 3sz%_GeneratorContextManager._recreate_cmc Cs9yt|jSWn!tk r4tddYnXdS)Nzgenerator didn't yield)nextr StopIteration RuntimeError)r r r r __enter__9s z"_GeneratorContextManager.__enter__cCs|dkrEyt|jWntk r5dSYqXtdn|dkr]|}ny&|jj|||tdWnRtk r}z||k SWYdd}~Xn$tjd|k rnYnXdS)Nzgenerator didn't stopz#generator didn't stop after throw())rrrr throwsysexc_info)r rvalue tracebackexcr r r __exit__?s      z!_GeneratorContextManager.__exit__N)rrrrrr r!r)r r r r r"s    rcs"tfdd}|S)a@contextmanager decorator. Typical usage: @contextmanager def some_generator(): try: yield finally: This makes this: with some_generator() as : equivalent to this: try: = finally: cst||S)N)r)rr)rr r helper|szcontextmanager..helper)r)rr*r )rr r`sc@s:eZdZdZddZddZddZdS) ra2Context to automatically close something at the end of a block. Code like this: with closing(.open()) as f: is equivalent to this: f = .open() try: finally: f.close() cCs ||_dS)N)thing)r r+r r r rszclosing.__init__cCs|jS)N)r+)r r r r r!szclosing.__enter__cGs|jjdS)N)r+close)r r%r r r r)szclosing.__exit__N)rrrrrr!r)r r r r rs   c@s:eZdZdZddZddZddZdS) ra@Context manager for temporarily redirecting stdout to another file # How to send help() to stderr with redirect_stdout(sys.stderr): help(dir) # How to write help() to a file with open('help.txt', 'w') as f: with redirect_stdout(f): help(pow) cCs||_g|_dS)N) _new_target _old_targets)r new_targetr r r rs zredirect_stdout.__init__cCs&|jjtj|jt_|jS)N)r.appendr$stdoutr-)r r r r r!s zredirect_stdout.__enter__cCs|jjt_dS)N)r.popr$r1)r exctypeexcinstexctbr r r r)szredirect_stdout.__exit__N)rrrrrr!r)r r r r rs   c@s:eZdZdZddZddZddZdS) r a?Context manager to suppress specified exceptions After the exception is suppressed, execution proceeds with the next statement following the with statement. with suppress(FileNotFoundError): os.remove(somefile) # Execution still resumes here if the file was already removed cGs ||_dS)N) _exceptions)r exceptionsr r r rszsuppress.__init__cCsdS)Nr )r r r r r!szsuppress.__enter__cCs|dk ot||jS)N) issubclassr6)r r3r4r5r r r r)s zsuppress.__exit__N)rrrrrr!r)r r r r r s   c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)raContext manager for dynamic management of a stack of exit callbacks For example: with ExitStack() as stack: files = [stack.enter_context(open(fname)) for fname in filenames] # All opened files will automatically be closed at the end of # the with statement, even if attempts to open files later # in the list raise an exception cCst|_dS)N)r_exit_callbacks)r r r r rszExitStack.__init__cCs+t|}|j|_t|_|S)z?Preserve the context stack by transferring it to a new instance)rr9r)r new_stackr r r pop_alls  zExitStack.pop_allcs/fdd}|_|j|dS)z:Helper to correctly register callbacks to __exit__ methodscs |S)Nr ) exc_details)cmcm_exitr r _exit_wrappersz.ExitStack._push_cm_exit.._exit_wrapperN)__self__push)r r=r>r?r )r=r>r _push_cm_exits zExitStack._push_cm_exitc CsRt|}y |j}Wn"tk r=|jj|YnX|j|||S)aRegisters a callback with the standard __exit__ method signature Can suppress exceptions the same way __exit__ methods can. Also accepts any object with an __exit__ method (registering a call to the method instead of the object itself) )rr)AttributeErrorr9r0rB)r exit_cb_type exit_methodr r r rAs   zExitStack.pushcs2fdd}|_|j|S)z\Registers an arbitrary callback and arguments. Cannot suppress exceptions. csdS)Nr )exc_typer(tb)rcallbackrr r r? sz)ExitStack.callback.._exit_wrapper) __wrapped__rA)r rIrrr?r )rrIrr rIs  zExitStack.callbackcCs8t|}|j}|j|}|j|||S)zEnters the supplied context manager If successful, also pushes its __exit__ method as a callback and returns the result of the __enter__ method. )rr)r!rB)r r=_cm_type_exitresultr r r enter_contexts   zExitStack.enter_contextcCs|jddddS)z$Immediately unwind the context stackN)r))r r r r r,szExitStack.closecCs|S)Nr )r r r r r!#szExitStack.__enter__c s |ddk }tjdfdd}d}d}xy|jr|jj}y%||r}d}d}d}nWqAtj}||d|dd}|}YqAXqAW|ry|dj}|dWqtk r||d_YqXn|o |S)Nrr"csOx?|j}||krdS|dks4|kr8Pn|}qW||_dS)N) __context__)new_excold_exc exc_context) frame_excr r _fix_exception_context,s   z2ExitStack.__exit__.._fix_exception_contextFT)NNN)r$r%r9r2rO BaseException) r r< received_excrTsuppressed_exc pending_raisecbnew_exc_details fixed_ctxr )rSr r)&s2        zExitStack.__exit__N) rrrrrr;rBrArIrNr,r!r)r r r r rs       )rr$ collectionsr functoolsr__all__objectrrrrrr rr r r r s   > "lib64/python3.4/__pycache__/platform.cpython-34.pyc000064400000074704152342604300015725 0ustar00 e f@sdZdZdZddlZddlZddlZddlZddlZy ejZ Wn0e k rej dkrdZ nd Z YnXd Z ej d ejZejd d d ddZddZej dejZej dejZej dejZdZd$d%Zd d d ed&d'd(Zd d d ed)d*Zd+dd,d-Zd d.d/Zej d0Zd d d dd1d2Zi d3d6d5d6d6d6d8d6d9d6d;d6d<d6d=d6d?d6d@d6dBd6Zid6d6dCd6dDd6dEd6dFd6dGd6ZdHdIZ d d d d dJdKZ!dLdMZ"d dd dNdOZ#dPdQZ$d d dddRdSZ%dTdUZ&dVdWZ'd dXdYZ(dZd[Z)d d\d]Z*d d^d_Z+idd6dd6dd6Z,ejd d dcddZ-ej.dedfZ/da0dgdhZ1didjZ2dkdlZ3dmdnZ4dodpZ5dqdrZ6dsdtZ7ej duejZ8ej dvejZ9ej dwZ:ej dxZ;iZ<ddydzZ=d{d|Z>d}d~Z?ddZ@ddZAddZBddZCddZDiZEddddZ eFdkrdejGkphdejGkZHdejGkodejGkZIeJe eIeHejKdndS)a8 This module tries to retrieve as much platform-identifying data as possible. It makes this information available via function APIs. If called from the command line, it prints the platform information concatenated as single string to stdout. The output format is useable as part of a filename. a Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee or royalty is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation or portions thereof, including modifications, that you make. EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! z1.0.7Ndoswin32win16ZNULz /dev/nullz/etcsC(__libc_init)|(GLIBC_([0-9.]+))|(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)i@cCsttjdr'tjj|}nt|d}|j|}d}xQd|ksfd|kr{tj||}nd}|s|j|}|sPnd}qNndd|jD\}} } } } } |r| rd }n| r&|d krd }| }q| |kr| }qni| r|d krd }| rY| |krY| }n| r|t |  d| kr|| }qqn|j }qNW|j ||fS) a Tries to determine the libc version that the file executable (which defaults to the Python interpreter) is linked against. Returns a tuple of strings (lib,version) which default to the given parameters in case the lookup fails. Note that the function has intimate knowledge of how different libc versions add symbols to the executable and thus is probably only useable for executables compiled using gcc. The file is read and scanned in chunks of chunksize bytes. realpathrbrslibcsGLIBCNcSs1g|]'}|dk r'|jdn|qS)Nlatin1)decode).0sr -/opt/alt/python34/lib64/python3.4/platform.py s zlibc_ver..Zlibcglibc) hasattrospathropenread _libc_searchsearchgroupslenendclose) executablelibversionZ chunksizefZbinaryposmZlibcinitrZ glibcversionZsoZthreadsZ soversionr r r libc_versF "        # r!c Cstjjdrd}xtdD]y}|j}t|dkr%|\}}nq%|dkrv|j}q%|dkr%|jd}|d}q%q%W|||fStjjdrxYtdD]H}|jd}t|dkr|dd krd |d |fSqWntjjd rtjd } xHt t| d ddD]*} | | d d dkr[| | =q[q[W| r| j d}| dd d }|||fSn|||fS)z Tries some special tricks to get the distribution information in case the default method fails. Currently supports older SuSE Linux, Caldera OpenLinux and Slackware Linux distributions. z/var/adm/inst-log/infoSuSEZMIN_DIST_VERSIONZ DIST_IDENT-z/etc/.installedrZ OpenLinuxz/usr/lib/setupNzslack-version- slackwarer(r() rrexistsrsplitrstripisdirlistdirrangesort) distnameridlineZtvtagvaluevaluesZpkgZverfilesnr r r _dist_try_harders:     "# r7z(\w+)[-_](release|version)z'(.+) release ([\d.]+)[^(]*(?:\((.+)\))?z1([^0-9]+)(?: release )?([\d.]+)[^(]*(?:\((.+)\))?r"debianfedoraredhatcentosmandrakemandrivarocksr' yellowdoggentoo UnitedLinux turbolinuxarchmageiacCsd}d}tj|}|dk r7t|jStj|}|dk rbt|jS|jj}|r|d}t|dkr|d}qnd||fS)Nrrr%)_lsb_release_versionmatchtupler_release_versionr+r*r) firstlinerr1r lr r r _parse_release_files   rKr%cCs:ytjt}Wntk r4|||fSYnX|jxd|D]L}tj|}|dk rF|j\}} ||kr|}PqqFqFWt|||St tj j t|ddddd} | j } WdQXt | \}} } |r|r|}n| r| }n| r-| }n|||fS)a Tries to determine the name of the Linux OS distribution name. The function first looks for a distribution release file in /etc and then reverts to _dist_try_harder() in case no suitable files are found. supported_dists may be given to define the set of Linux distributions to look for. It defaults to a list of currently supported Linux distributions identified by their release file name. If full_distribution_name is true (default), the full distribution read from the OS is returned. Otherwise the short name taken from supported_dists is used. Returns a tuple (distname, version, id) which default to the args given as parameters. Nrencodingzutf-8errorssurrogateescape)rr- _UNIXCONFDIROSErrorr/_release_filenamerFrr7rrjoinreadlinerK)r0rr1supported_distsfull_distribution_nameZetcfiler Z _distnameZdummyrrIZ_versionZ_idr r r linux_distribution+s0          rXcCst|||d|ddS)aS Tries to determine the name of the Linux OS distribution name. The function first looks for a distribution release file in /etc and then reverts to _dist_try_harder() in case no suitable files are found. Returns a tuple (distname, version, id) which default to the args given as parameters. rUrVr)rX)r0rr1rUr r r distcsrYrLcCs5ddl}|jdtddtj|||S)z! Portable popen() interface. rNzuse os.popen instead stacklevelr#)warningswarnDeprecationWarningrpopen)cmdmodebufsizer[r r r r^us r^c Cs|jd}|r%|j|nytt|}Wntk rR|}YnXttt|}dj|dd}|S)z Normalize the version and build strings and return a single version string using the format major.minor.build (or patchlevel). .N)r*appendmapint ValueErrorliststrrS)rbuildrJZintsZstringsr r r _norm_version}s  rkz'(?:([\w ]+) ([\w.]+) .*\[.* ([\d.]+)\])c Cs;tj|kr|||fSx~dD]i}y7t|}|j}|jr_tdnWn(tk r}zw#WYdd}~Xq#XPq#W|||fS|j}tj|}|dk r.|j \}}}|d dkr|dd }n|d dkr|dd }nt |}n|||fS) a+ Tries to figure out the OS version used and returns a tuple (system, release, version). It uses the "ver" shell command for this which is known to exists on Windows, DOS. XXX Others too ? In case this fails, the given parameters are used as defaults. vercommand /c ver cmd /c verzcommand failedNr%rb)rlrmrnr(r(r(r() sysplatformr^rrrQr+ _ver_outputrFrrk) systemreleaserZsupported_platformsr_pipeinfoZwhyr r r r _syscmd_vers,        rvZ2000ZXPZ 2003Serverr#Zpost2003Vista78z8.1rczpost8.1Z10 Zpost10Z 2008ServerZ 2008ServerR2Z 2012ServerZ 2012ServerR2Zpost2012ServerR2cs|dks$|dkr1|dkr1|||fSddlm}m}m}m}m}m}ddlmm } Gfddd|} |d} |d } d } }x]|| kr| d9} || }| j | | j |t |}|s|||fSqW| j |d}|s8|||fS||}| j|d|| sd| rq|||fS|| }| j|d |||s|||fS|jjd ?}|jjd @}|jjd ?}|||fS)Nryr#r)c_bufferPOINTERbyrefcreate_unicode_buffer StructureWinDLL)DWORDHANDLEcseZdZdfdfdfdfdfdfdfdfd fd fd fd fd fg ZdS)z*_get_real_winver..VS_FIXEDFILEINFOZ dwSignatureZdwStrucVersionZdwFileVersionMSZdwFileVersionLSdwProductVersionMSdwProductVersionLSZdwFileFlagsMaskZ dwFileFlagsZdwFileOSZ dwFileTypeZ dwFileSubtypeZ dwFileDateMSZ dwFileDateLSN)__name__ __module__ __qualname__Z_fields_r )rr r VS_FIXEDFILEINFOs             rkernel32rri)Zctypesr}r~rrrrZctypes.wintypesrrZGetModuleFileNameWZ_handlerZGetFileVersionInfoSizeWZGetFileVersionInfoWZVerQueryValueWcontentsrr)majminrjr}r~rrrrrrrrZname_lenZ actual_lennamesizeZ ver_blockZpvir )rr _get_real_winvers:$ .        ' rc(Cs'yddlm}Wn"tk r8||||fSYnXy&ddlm}m}m}m}Wn4tk rddlm}m}m}m}YnX|} t | dd\} } } dj | | | }t j | | fpt j | dfp|}| dd| | fkrzydj | j }Wqztk rv|ddd krrd |dd}nYqzXnt| d ddkrtj | | fptj | dfp|}nd} z5y&||d } || d d}WnYnXWd| r|| nX||||fS)Nr)getwindowsversion) OpenKeyEx QueryValueExCloseKeyHKEY_LOCAL_MACHINErcz {0}.{1}.{2}r#zSP{} z Service Pack ZSPZ product_typez,SOFTWARE\Microsoft\Windows NT\CurrentVersionZ CurrentType)ror ImportErrorwinregrrrr_winregrformat_WIN32_CLIENT_RELEASESgetZservice_pack_majorAttributeErrorgetattr_WIN32_SERVER_RELEASES)rsrcsdptyperrrrrZwinverrrrjkeyr r r win32_ver$sD & '     rcCsd}tjj|sdSyddl}Wntk rDdSYnXt|d}|j|}WdQX|d}d }tjj}|d krd}n|||fS) Nz0/System/Library/CoreServices/SystemVersion.plistrrZProductVersionrppcPower MacintoshZPowerPC)rrr)rr) rrr)plistlibrrloadunamemachine)fnrrZplrs versioninforr r r _mac_ver_xmlTs     rcCs&t}|dk r|S|||fS)a< Get MacOS version information and return it as tuple (release, versioninfo, machine) with versioninfo being a tuple (version, dev_stage, non_release_version). Entries which cannot be determined are set to the parameter values which default to ''. All tuple entries are strings. N)r)rsrrrur r r mac_verjs  rc CsTddlm}y'|j|}|dkr2|S|SWntk rO|SYnXdS)Nr)System) java.langrZ getPropertyr)rdefaultrr4r r r _java_getprop}s  rc Csyddl}Wn"tk r4||||fSYnXtd|}td|}|\}}}td|}td|}td|}|||f}|\}} } td| } td |}td | } || | f}||||fS) a] Version interface for Jython. Returns a tuple (release, vendor, vminfo, osinfo) with vminfo being a tuple (vm_name, vm_release, vm_vendor) and osinfo being a tuple (os_name, os_version, os_arch). Values which cannot be determined are set to the defaults given as parameters (which all default to ''). rNz java.vendorz java.versionz java.vm.namezjava.vm.vendorzjava.vm.versionz java.os.archz java.os.namezjava.os.version)rrr) rsvendorvminfoosinfojavaZvm_nameZ vm_releaseZ vm_vendoros_name os_versionos_archr r r java_vers"  rc Cs|dkrd|||fS|dkr|dkrB|||fS|jd}|ryt|d}Wntk rYqX|d}t||dsz_platform.. _/\:;"()unknownrz--r%Nr(r()rSfilterrreplace)argsrpZcleanedr r r _platforms$%  rcCsTyddl}Wntk r(|SYnXy|jSWntk rO|SYnXdS)z8 Helper to determine the node name of this machine. rN)socketrZ gethostnamerQ)rrr r r _nodes   rcCsetjj|}xLtjj|r`tjjtjjtjj|tj|}qW|S)zT In case filepath is a symlink, follow it until a real file is reached. )rrabspathislinknormpathrSdirnamereadlink)filepathr r r _follow_symlinkss  1rc Cstjdkr|Sytjd|tf}Wnttfk rN|SYnX|jj}|j }| sz|r~|S|SdS)z. Interface to the system's uname command. rrrzuname %s 2> %sN)rzwin32zwin16) rorprr^DEV_NULLrrQrr+r)Zoptionrroutputrcr r r _syscmd_unames   rc Cstjd kr|St|}y+tjd|gdtjdtj}Wnttfk rh|SYnX|j dj d}|j }| s|r|S|Sd S) z Interface to the system's file command. The function uses the -b option of the file command to have it omit the filename in its output. Follow the symlinks. It returns default in case the command should fail. rrrrWstdoutstderrrzlatin-1N)zdoszwin32zwin16) rorpr subprocessPopenPIPEZSTDOUTrrQZ communicater wait)targetrprocrrr r r _syscmd_file-s     r WindowsPErMSDOSc Cs|scddl}y|jd}Wn$|jk rK|jd}YnXt|dd}n|r{t|d}nd}| r|tjkrtjtkrttj\}}|r|}n|r|}qn||fSd|kr||fSd |krd }n*d |kr$d }nd |kr9d}nd|krNd}nTd|krxd|krod}qd}n*d|krd}nd|krd}n||fS)a Queries the given executable (defaults to the Python interpreter binary) for various architecture information. Returns a tuple (bits, linkage) which contains information about the bit architecture and the linkage format used for the executable. Both values are returned as strings. Values that cannot be determined are returned as given by the parameter presets. If bits is given as '', the sizeof(pointer) (or sizeof(long) on Python version < 1.5.2) is used as indicator for the supported pointer size. The function relies on the system's "file" command to do the actual work. This is available on most if not all Unix platforms. On some non-Unix platforms where the "file" command does not exist and the executable is set to the Python interpreter binary defaults from _default_architecture are used. rNPrJZbitrrz32-bit32bitZN32Zn32bitz64-bitrZELFZPErrZCOFFzMS-DOSr) structZcalcsizeerrorrirrorrp_default_architecture)rbitslinkagerrZfileoutbrJr r r architectureQsL                      r uname_resultz-system node release version machine processorcCsd}tdk rtSd}ytj\}}}}}Wntk rUd}YnX|sttd|||||f rW|rtj}d}d}t}d}nd}|dkrPt \}}}} |r|rd}n|s/dtj krtj j dd}q/tj j dd}n|sPtj j d|}qPn|rt |\}}}|d krd }q|d kr|d krd }d |dd krd}qd}qn|dkr|s|dkrd}qd}nd }qW|dddkrWt \}} } } d}dj| }|sT| }qTqWn|dkr| sv|dkr|}d}nyddl} Wntk rYqX| jdd\}}|dkrd}qd}n|stdd}n|dkr d}n|dkr"d}n|dkr7d}n|dkrLd}n|dkrad}n|dkrvd}n|d kr|d krd }d}nt||||||atS)an Fairly portable uname interface. Returns a tuple of strings (system, node, release, version, machine, processor) identifying the underlying platform. Note that unlike the os.uname function this also returns possible processor information as an additional tuple entry. Entries which cannot be determined are set to ''. rNrr%rZPROCESSOR_ARCHITEW6432ZPROCESSOR_ARCHITECTUREZPROCESSOR_IDENTIFIERzMicrosoft WindowsrZ Microsoftz6.0rcrxrrZ16bitrJavaz, ZOpenVMS0zSYI$_CPUZAlphaZVAXz-pr)zwin32zwin16) _uname_cacherrrrhrrorprrenvironrrvrrSvms_librZgetsyirr)Z no_os_uname processorrrnodersrrZuse_syscmd_verrrrrrrZcsidZ cpu_numberr r r rs    +                                   rcCs tjS)z Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. An empty string is returned if the value cannot be determined. )rrrr r r r rr4srrcCs tjS)z Returns the computer's network name (which may not be fully qualified) An empty string is returned if the value cannot be determined. )rrr r r r r=srcCs tjS)z Returns the system's release, e.g. '2.2.0' or 'NT' An empty string is returned if the value cannot be determined. )rrsr r r r rsGsrscCs tjS)z Returns the system's release version, e.g. '#3 on degas' An empty string is returned if the value cannot be determined. )rrr r r r rPsrcCs tjS)zt Returns the machine type, e.g. 'i386' An empty string is returned if the value cannot be determined. )rrr r r r rYsrcCs tjS)a Returns the (true) processor name, e.g. 'amdk6' An empty string is returned if the value cannot be determined. Note that many platforms do not provide this information or simply return the same value as for machine(), e.g. NetBSD does this. )rrr r r r rbs rzB([\w.+]+)\s*\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*\[([^\]]+)\]?z;IronPython\s*([\d\.]+)(?: \(([\d\.]+)\))? on (.NET [\d\.]+)zU([\d.]+)\s*\(IronPython\s*[\d.]+\s*\(([\d.]+)\) on ([\w.]+ [\d.]+(?: \(\d+-bit\))?)\)zE([\w.+]+)\s*\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*\[PyPy [^\]]+\]?cCs|dkrtj}ntj|d}|dk r:|Sd|krd}|jdrmtj|}ntj|}|dkrtdt |n|j \}}}d}d}n=tj jdr8d}t j|}|dkrtdt |n|j \}}}} } tj }nd|krd}t j|}|dkr~td t |n|j \}}}} d}nct j|}|dkrtd t |n|j \}}}} }d }|d | }ttd r&tj\} } } n0ttdrJtj\} } } n d} d} |jd} t| dkr| jddj| }n||| | |||f}|t|<|S)a Returns a parsed version of Python's sys.version as tuple (name, version, branch, revision, buildno, builddate, compiler) referring to the Python implementation name, version, branch, revision, build number, build date/time as string and the compiler identification string. Note that unlike the Python sys.version, the returned value for the Python version will always include the patchlevel (it defaults to '.0'). The function returns empty strings for tuple entries that cannot be determined. sys_version may be given to parse an alternative version string, e.g. if the version was read from a different Python interpreter. NZ IronPythonz*failed to parse IronPython sys.version: %srrZJythonz&failed to parse Jython sys.version: %sZPyPyz$failed to parse PyPy sys.version: %sz'failed to parse CPython sys.version: %sZCPythonr _mercurial subversionrbr#r)ror_sys_version_cacher startswith_ironpython_sys_version_parserrF _ironpython26_sys_version_parserrgreprrrp_sys_version_parser_pypy_sys_version_parserrrrr*rrdrS) sys_versionresultrrFrZ alt_versionZcompilerZbuildnoZ builddateZ buildtimerbranchZrevisionrJr r r _sys_versionsn              r cCs tdS)aR Returns a string identifying the Python implementation. Currently, the following implementations are identified: 'CPython' (C implementation of Python), 'IronPython' (.NET implementation of Python), 'Jython' (Java implementation of Python), 'PyPy' (Python implementation of Python). r)r r r r r python_implementations r cCs tdS)z Returns the Python version as string 'major.minor.patchlevel' Note that unlike the Python sys.version, the returned value will always include the patchlevel (it defaults to 0). r%)r r r r r python_versionsr cCsttdjdS)z Returns the Python version as tuple (major, minor, patchlevel) of strings. Note that unlike the Python sys.version, the returned value will always include the patchlevel (it defaults to 0). r%rb)rGr r*r r r r python_version_tuples rcCs tdS)z Returns a string identifying the Python implementation branch. For CPython this is the Subversion branch from which the Python binary was built. If not available, an empty string is returned. r#)r r r r r python_branchs rcCs tdS)z Returns a string identifying the Python implementation revision. For CPython this is the Subversion revision from which the Python binary was built. If not available, an empty string is returned. rc)r r r r r python_revisions rcCstddS)zh Returns a tuple (buildno, builddate) stating the Python build number and date as strings. rry)r r r r r python_build+srcCs tdS)zS Returns a string identifying the compiler used for compiling Python. ry)r r r r r python_compiler3src Cs[tj||fd}|dk r(|St\}}}}}}||krXd}n|r|t|||\}}}n|dkrt|\} } } } |rt||} qGt|||| } nw|d krYtd\}}}|r"| r"t||||d|||} qGttj \}}t||||d||} n|dkrt \}}}\}}}|s| rt|||} qGt|||d|||} n|dkr|rt||} qGt|||} nH|rt||} n0t tj \}}t||||||} | t||f<| S) a Returns a single string identifying the underlying platform with as much useful information as possible (but no more :). The output is intended to be human readable rather than machine parseable. It may look different on different platforms and this is intended. If "aliased" is true, the function will use aliases for various platforms that report system names which differ from their common names, e.g. SunOS will be reported as Solaris. The system_alias() function is used to implement this. Setting terse to true causes the function to return only the absolute minimum information needed to identify the platform. NrrLinuxwithrZonZMacOS)r) _platform_cacherrrrrrYr!rorrr)aliasedterser rrrrsrrrZrelZversrrrpr0Z distversionZdistidZlibcnameZ libcversionrLvrrrrrrr r r rp?sR           rp__main__rz--terseZ nonaliasedz --nonaliased)doswin32win16)zSuSEr8r9r:r;r<r=r>z slackwarer?r@rArBrCrDr()rrr)rwr)rwr%)rwr#)rwN)ryr)ryr%)ryr#)ryrc)ryN)r|r)r|N)rwr#)ryr)ryr%)ryr#)ryrc)ryN)rrr)rrr)rrr)rz WindowsPE)rzWindows)rzMSDOS)L__doc__Z __copyright__ __version__ collectionsrorrerdevnullrrrprPcompileASCIIrrr!r7rRrErHZ_supported_distsrKrXrYr^rkrqrvrrrrrrrrrrrrrrrr namedtuplerrrrrrrsrrrrrrrrr r r rrrrrrrargvrrprintexitr r r r  sf 0       8 0      5  /   ;0  # 6   T       d   S lib64/python3.4/__pycache__/sre_parse.cpython-34.pyo000064400000047416152342604300016100 0ustar00 e fz@sdZddlTddlmZdZdZedZedZedZ ed Z ie e d fd 6e e d fd 6e e dfd6e e dfd6e e dfd6e e dfd6e e dfd6e e dfd6Z i eefd6eefd 6eefd6eeefgfd6eeefgfd6eeefgfd6eeefgfd6eeefgfd 6eeefgfd!6eefd"6Zied#6ed$6ed%6ed&6e d'6e!d(6e"d)6e#d*6Z$Gd+d,d,Z%Gd-d.d.Z&Gd/d0d0Z'd1d2Z(d3d4Z)d5d6Z*d7d8Z+d9d:Z,d;d<d=Z-d>d?Z.ed@Z/edAZ0edBZ1ee2e3gZ4dCdDZ5dEdFZ6ddGdHdIZ7dJdKZ8dLdMZ9dGS)NzInternal support module for sre)*) MAXREPEATz .\[{()*+?^$|z*+?{ 0123456789Z01234567Z0123456789abcdefABCDEFz z\az\b z\f z\n z\r z\t z\v\z\\z\Az\Bz\dz\Dz\sz\Sz\wz\Wz\ZiLmsxatuc@sCeZdZddZdddZddZdd ZdS) PatterncCs1d|_g|_d|_i|_d|_dS)Nr)flagsopengroups groupdict lookbehind)selfr./opt/alt/python34/lib64/python3.4/sre_parse.py__init__Cs     zPattern.__init__NcCs|j}|d|_|dk ru|jj|d}|dk retdt|||fn||j|)rrrErFrGrrrr_parse_sub_conds rz|)z=!zmissing group namezbad character in group name %r=rz&bad character in backref group name %rzunknown group name: {0!r}z;group references in lookbehind assertions are not supportedzunexpected end of patternzunknown specifier: ?P%s:zunbalanced parenthesisz syntax errorzbad character in group namezunknown extension$z parser error)Nr)rrrrr)5r.r#r rsrI_PATTERNENDERS _ASSERTCHARS_LOOKBEHINDASSERTCHARS _REPEATCODESrlrSRE_FLAG_VERBOSE WHITESPACE SPECIAL_CHARSrUrNEGATErr!r:rTrV REPEAT_CHARSrr{rr|r OverflowErrorATrXrYrS isidentifierrformatrrrrrrASSERT ASSERT_NOTrFLAGSr'rr)r^ AT_BEGINNINGAT_ENDr)"rrrr sourcegetr_len PATTERNENDERS ASSERTCHARSLOOKBEHINDASSERTCHARSrcrtrrstartcode1code2r`rar[r\hererrr$rEror%msgrdirpcondnamerOrrrrs                         &:                -                                                       rcCs_t|trB|t@s&|tO}q[|t@r[tdq[n|t@r[tdn|S)Nz(ASCII and UNICODE flags are incompatiblez+can't use UNICODE flag with a bytes pattern)r?rhSRE_FLAG_ASCIISRE_FLAG_UNICODEr)srcrrrr fix_flagss    rNcCst|}|dkr$t}n||_||_t||d}t||jj|j_|j}|dkrtdn|rtdn|t @r|j n|t @ r|jjt @rt ||jjS|S)Nrrzunbalanced parenthesisz-bogus characters at end of regular expression) rgrrrhrrr/r r!SRE_FLAG_DEBUGr=rparse)rhrr/rrtailrrrrs"         rc snt|}|j}gggj}fdd}x|}|dkrdPn|ddkr|d}|dkrd}|jdrxE|} | dkrtd n| d krPn|| 7}qWn|std ny+t|} | dkr&td nWnntk r|jsRtd ny|j|} Wn-t k rdj |} t | YnXYnX|| q|dkr|j t kr||7}|j t kr||7}qn|tt|dddd@q|tkrd} |j tkr||7}|t kr|dt kr|j t kr||7}d} |tt|dddd@qn| s|t|ddqqytt|d}Wnt k rYnX||qK||qKWr?jdjnt|tsdddDnfS)NcsVr,jdjdd=njt|fjddS)Nr3)r#joinrI)rK)rliteralliteralsrraddgroup(s z parse_template..addgrouprr rgr3rzunterminated group namerzmissing group nameznegative group numberzbad character in group namezunknown group name: {0!r}rrrFrRTcSs1g|]'}|dkrdn |jdqS)Nzlatin-1)encode).0rrrr ls z"parse_template..)rgr r#rsr!rrr groupindexKeyErrorrrnrlrrmrrrr?rh) rr/rsgetlappendrrtrpr$rorKrisoctalr)rrrrparse_templates                  *   -   rc Cs|j}|jdd}|\}}|dd}yJxC|D];\}}||||<}|dkrBtdqBqBWWntk rtdYnX|j|S)Nrzunmatched groupzinvalid group reference)rrjr!rnr) templatersrseprrrKrrrrrexpand_templateos    r):__doc__ sre_constants_srerrrrrrrrrUrrrAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYr:rWCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORD AT_END_STRINGrSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLrrSRE_FLAG_TEMPLATErrrr.rgrrrrrrrrrrrXrYrrrrrrrrrr sr         e4   * =;     7  Plib64/python3.4/__pycache__/dis.cpython-34.pyo000064400000034373152342604300014672 0ustar00 e fC @s`dZddlZddlZddlZddlZddlTddlmZddddd d d d d ddg eZ[ejej ej e fZ ddZ dddddZdddddZidd6dd6dd6dd6dd6dd 6d!d"6Zd#d$Zd%d&Zd'dZd(d)Zddd*d Zejd+d,ZGd-ddeZd.dd/d Zd0d1Zd2d3Zddddddd4d5ZdBddd6dZdCdddddddd7dd8d9Zddd:d;ZeZ d<d Z!d=d Z"Gd>ddZ#d?d@Z$e%dAkr\e$ndS)Dz0Disassembler of Python byte code into mnemonics.N)*)__all__ code_infodis disassembledistbdiscofindlinestarts findlabels show_codeget_instructions InstructionBytecodec CsAyt||d}Wn$tk r<t||d}YnX|S)zAttempts to compile the given source, first as an expression and then as a statement if the first approach fails. Utility function to accept strings in functions that otherwise expect code objects evalexec)compile SyntaxError)sourcenamecr(/opt/alt/python34/lib64/python3.4/dis.py _try_compiles  rfilecCs|dkrtd|dSt|dr8|j}nt|drS|j}nt|drt|jj}x|D]\}}t|tr~t d|d|yt |d|Wn8t k r}zt d|d|WYdd}~XnXt d|q~q~Wnt|dr5t |d|nct|t tfr]t|d|n;t|trt|d|nt d t|jdS) znDisassemble classes, methods, functions, or code. With no argument, disassemble the last traceback. Nr__func____code____dict__zDisassembly of %s:zSorry:co_codez(don't know how to disassemble %s objects)rhasattrrrsortedritems isinstance _have_codeprintr TypeErrorrbytes bytearray_disassemble_bytesstr_disassemble_strtype__name__)xrr rZx1msgrrrrs2    &c Csv|dkrVy tj}Wntk r9tdYnXx|jrR|j}q=Wnt|jj|jd|dS)z2Disassemble a traceback (default: last traceback).Nz no last traceback to disassembler) syslast_tracebackAttributeError RuntimeErrortb_nextrtb_framef_codetb_lasti)tbrrrrr@s    Z OPTIMIZEDZ NEWLOCALSZVARARGSZ VARKEYWORDSZNESTEDZ GENERATOR ZNOFREE@cCsg}xqtdD]P}d|>}||@r|jtj|t|||N}|scPqcqqW|jt|dj|S)z+Return pretty representation of code flags.r<r7z, )rangeappendCOMPILER_FLAG_NAMESgethexjoin)flagsnamesiZflagrrr pretty_flagsWs    rGcCst|dr|j}nt|dr6|j}nt|trWt|d}nt|drj|Stdt|jdS)zAHelper to handle methods, functions, strings and raw code objectsrrz rz(don't know how to disassemble %s objectsN) rrrr!r(rr$r*r+)r,rrr_get_code_objectes  rHcCstt|S)z1Formatted details of methods, functions, or code.)_format_code_inforH)r,rrrrrscCsg}|jd|j|jd|j|jd|j|jd|j|jd|j|jd|j|jdt|j|j r|jdx+t |j D]}|jd |qWn|j r |jd x+t |j D]}|jd |qWn|j rd|jd x+t |j D]}|jd |qFWn|j r|jd x+t |j D]}|jd |qWn|jr|jdx+t |jD]}|jd |qWndj|S)NzName: %szFilename: %szArgument count: %szKw-only arguments: %szNumber of locals: %szStack size: %szFlags: %sz Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables: )r?co_name co_filename co_argcountco_kwonlyargcount co_nlocals co_stacksizerGco_flags co_consts enumerateco_names co_varnames co_freevars co_cellvarsrC)colinesZi_cZi_nrrrrIvs:          rIcCstt|d|dS)z}Print details of methods, functions, or code to *file*. If *file* is not provided, the output is printed on stdout. rN)r#r)rXrrrrr s _InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetc@s(eZdZdZddddZdS)r aKDetails for a bytecode operation Defined fields: opname - human readable name for operation opcode - numeric code for operation arg - numeric argument to operation (if any), otherwise None argval - resolved arg value (if known), otherwise same as arg argrepr - human readable description of operation argument offset - start index of operation within bytecode sequence starts_line - line started by this opcode (if any), otherwise None is_jump_target - True if other code jumps to here, otherwise False FcCs9g}|rP|jdk r<d|}|j||jqP|jd|n|rf|jdn |jd|jr|jdn |jd|jt|jjd|j|jjd |jdk r&|jt|jjd |j r&|jd |j d q&ndj |j S) zFormat instruction details for inclusion in disassembly output *lineno_width* sets the width of the line number field (0 omits it) *mark_as_current* inserts a '-->' marker arrow as part of the line Nz%%%dd z-->z z>>z r9()) starts_liner?is_jump_targetreproffsetrjustopnameljustargargreprrCrstrip)self lineno_widthZmark_as_currentZfieldsZ lineno_fmtrrr _disassembles&     zInstruction._disassembleN)r+ __module__ __qualname____doc__rmrrrrr s  first_linecCsxt|}|j|j}tt|}|dk rJ||j}nd}t|j|j|j |j |||S)aIterator for the opcodes in methods, functions or code Generates a series of Instruction named tuples giving the details of each operations in the supplied code. If *first_line* is not None, it indicates the line number that should be reported for the first source line in the disassembled code. Otherwise, the source line information (if any) is taken directly from the disassembled code object. Nr) rHrWrVdictr co_firstlineno_get_instructions_bytesrrUrTrR)r,rqrX cell_names linestarts line_offsetrrrr s   cCs/|}|dk r||}n|t|fS)zHelper to get optional details about const references Returns the dereferenced constant and its repr if the constant list is defined. Otherwise returns the constant index and its repr(). N)rc)Z const_indexZ const_listargvalrrr_get_const_infos  rycCs;|}|dk r%||}|}n t|}||fS)zHelper to get optional details about named references Returns the dereferenced name as both value and repr if the name list is defined. Otherwise returns the name index and its repr(). N)rc)Z name_indexZ name_listrxrirrr_get_name_infos     rzc cs@t|}d}d} d} t|} d} x | | kr;|| } | }|dk r|j| d} | dk r| |7} qn| |k}| d} d}d}d}| tkr|| || dd|}d}| d} | tkr|d}n|}| tkr.t||\}}q| tkrRt||\}}q| t kr{| |}dt |}q| t krt||\}}q| t krt |}|}q| tkrt||\}}q| tkrd || d|| df}qntt| | ||||| |Vq3WdS) a&Iterate over the instructions in a bytecode string. Generates a sequence of Instruction namedtuples giving the details of each opcode. Additional information about the code's runtime environment (e.g. variable names, constants) can be specified using optional arguments. rNr7r8izto z%d positional, %d keyword pair)r lenrA HAVE_ARGUMENTZ EXTENDED_ARGZhasconstryZhasnamerzhasjrelrcZhaslocalZ hascompareZcmp_opZhasfreeZhasnargsr rf)codevarnamesrE constantscellsrvrwlabelsZ extended_argraZfreenrFoprdrbrhrxrirrrrtsX                     &  rtc CsT|j|j}tt|}t|j||j|j|j||d|dS)zDisassemble a code object.rN) rWrVrrr r'rrUrTrR)rXlastirrurvrrrrAsrwc Cs|dk } | rdnd} xt||||||d|D]k} | og| jdk og| jdk} | rtd|n| j|k} t| j| | d|q@WdS)Nr[rrwr)rtrardr#rm)rrrrErrrvrrwZ show_linenorlZinstrZnew_source_lineZis_current_instrrrrr'Hs   r'cCstt|dd|dS)zrN)rr)rrrrrr)Zsr)cCsg}t|}d}x||kr||}|d}|tkr||||dd}|d}d}|tkr||}n|tkr|}n|dkr||kr|j|qqqqW|S)z`Detect all offsets in a byte code which are jump targets. Return the list of offsets. rr7r|r8)r}r~rZhasjabsr?)rrrrFrrhZlabelrrrr `s$           ccst|jddd}t|jddd}d}|j}d}xZt||D]I\}}|r||kr||fV|}n||7}n||7}q]W||kr||fVndS)zFind the offsets in a byte code which are start of lines in the source. Generate pairs (offset, lineno) as described in Python/compile.c. rNr8r7)list co_lnotabrszip)rZbyte_incrementsZline_incrementsZ lastlinenolinenoZaddrZ byte_incrZ line_incrrrrr {s      c@speZdZdZddddddZddZd d Zed d Zd dZ ddZ dS)rzThe bytecode operations of a piece of code Instantiate this with a function, method, string of code, or a code object (as returned by compile()). Iterating over this yields the bytecode operations as Instruction instances. rqNcurrent_offsetcCst||_}|dkr7|j|_d|_n||_||j|_|j|j|_tt ||_ ||_ ||_ dS)Nr) rHcodeobjrsrq _line_offsetrWrV _cell_namesrrr _linestarts_original_objectr)rkr,rqrrXrrr__init__s     zBytecode.__init__c Cs=|j}t|j|j|j|j|j|jd|jS)Nrw) rrtrrUrTrRrrr)rkrXrrr__iter__s    zBytecode.__iter__cCsdj|jj|jS)Nz{}({!r}))format __class__r+r)rkrrr__repr__szBytecode.__repr__cCs2x|jr|j}qW||jjd|jS)z/ Construct a Bytecode from the given traceback r)r2r3r4r5)clsr6rrrfrom_tracebacks  zBytecode.from_tracebackcCs t|jS)z3Return formatted information about the code object.)rIr)rkrrrinfosz Bytecode.infocCs|j}|jdk r$|j}nd }tj`}t|jd|jd|jd|jd|j d|j d|j d |d ||j SWdQXdS) z3Return a formatted view of the bytecode operations.Nr7rrErrrvrwrrr) rrioStringIOr'rrUrTrRrrrgetvalue)rkrXrdoutputrrrrs     z Bytecode.dis) r+rnrorprrr classmethodrrrrrrrrs    c Csddl}|j}|jdd|jdddd|j}|j}|j}WdQXt||jjd }t |dS) z*Simple test program to disassemble a file.rNinfiler*nargs?default-r) argparseArgumentParser add_argumentZFileType parse_argsrreadrrr)rparserargsrrrrrr_tests  %  r__main__rr)&rpr.types collectionsrZopcoderZ _opcodes_all MethodType FunctionTypeCodeTyper*r"rrrr@rGrHrrIr namedtuplerZr r ryrzrtrr'r)rr r rrr+rrrrs^       !       3  <    = lib64/python3.4/__pycache__/_sitebuiltins.cpython-34.pyc000064400000007135152342604300016750 0ustar00 f f+ @sXdZddlZGdddeZGdddeZGdddeZdS) z= The objects used by the site module to add custom builtins. Nc@s7eZdZddZddZdddZdS)QuittercCs||_||_dS)N)nameeof)selfrrr2/opt/alt/python34/lib64/python3.4/_sitebuiltins.py__init__s zQuitter.__init__cCsd|j|jfS)NzUse %s() or %s to exit)rr)rrrr__repr__szQuitter.__repr__Nc Cs,ytjjWnYnXt|dS)N)sysstdinclose SystemExit)rcoderrr__call__s zQuitter.__call__)__name__ __module__ __qualname__rr rrrrrr s   rc@sReZdZdZdZffddZddZddZd d Zd S) _Printerzninteractive prompt objects for printing the license text, a list of contributors and the copyright notice.csJddl||_||_d|_fdd|D|_dS)Nrcs2g|](}D]}jj||qqSr)pathjoin).0dirfilename)filesosrr (s z%_Printer.__init__..)r_Printer__name_Printer__data_Printer__lines_Printer__filenames)rrdatardirsr)rrrr#s     z_Printer.__init__cCs|jr dSd}xO|jD]D}y)t|d}|j}WdQXPWqtk r`YqXqW|sw|j}n|jd|_t|j|_dS)Nr ) rr openreadOSErrorrsplitlen_Printer__linecnt)rr!rfprrr__setup,s    z_Printer.__setupcCsH|jt|j|jkr2dj|jSd|jfdSdS)Nr$z!Type %s() to see the full %s text)_Printer__setupr)rMAXLINESrr)rrrrr <s z_Printer.__repr__c Cs|jd}d}xy6x/t|||jD]}t|j|q3WWntk rdPYqX||j7}d}x1|dkrt|}|dkr{d}q{q{W|dkrPqqWdS)Nz0Hit Return for more, or q (and Return) to quit: rq)r0r1)r.ranger/printr IndexErrorinput)rpromptlinenoikeyrrrrCs"       z_Printer.__call__N) rrr__doc__r/rr.r rrrrrrs   rc@s.eZdZdZddZddZdS)_Helpera3Define the builtin 'help'. This is a wrapper around pydoc.help that provides a helpful message when 'help' is typed at the Python interactive prompt. Calling help() at the Python prompt starts an interactive help session. Calling help(thing) prints help for the python object 'thing'. cCsdS)NzHType help() for interactive help, or help(object) for help about object.r)rrrrr bsz_Helper.__repr__cOsddl}|j||S)Nr)pydochelp)rargskwdsr<rrrres z_Helper.__call__N)rrrr:r rrrrrr;Xs  r;)r:r objectrrr;rrrrs ;lib64/python3.4/__pycache__/formatter.cpython-34.pyo000064400000044744152342604300016121 0ustar00 e fE;@sdZddlZddlZejdedZGdddZGdddZGdd d ZGd d d eZ Gd d d eZ dddZ e dkre ndS)aGeneric output formatting. Formatter objects transform an abstract flow of formatting events into specific output events on writer objects. Formatters manage several stack structures to allow various properties of a writer object to be changed and restored; writers need not be able to handle relative changes nor any sort of ``change back'' operation. Specific writer properties which may be controlled via formatter objects are horizontal alignment, font, and left margin indentations. A mechanism is provided which supports providing arbitrary, non-exclusive style settings to a writer as well. Additional interfaces facilitate formatting events which are not reversible, such as paragraph separation. Writer objects encapsulate device interfaces. Abstract devices, such as file formats, are supported as well as physical devices. The provided implementations all work with abstract devices. The interface makes available mechanisms for setting the properties which formatter objects manage and inserting data into the output. NzDthe formatter module is deprecated and will be removed in Python 3.6c@seZdZdZdddZddZddZd d Zdd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$d%Zd#d&d'ZdS)( NullFormattera=A formatter which does nothing. If the writer parameter is omitted, a NullWriter instance is created. No methods of the writer are called by NullFormatter instances. Implementations should inherit from this class if implementing a writer interface but don't need to inherit any implementation. NcCs%|dkrt}n||_dS)N) NullWriterwriter)selfrr./opt/alt/python34/lib64/python3.4/formatter.py__init__)s  zNullFormatter.__init__cCsdS)Nr)r blanklinerrr end_paragraph-szNullFormatter.end_paragraphcCsdS)Nr)rrrradd_line_break.szNullFormatter.add_line_breakcOsdS)Nr)rargskwrrr add_hor_rule/szNullFormatter.add_hor_rulecCsdS)Nr)rformatcounterr rrradd_label_data0szNullFormatter.add_label_datacCsdS)Nr)rdatarrradd_flowing_data1szNullFormatter.add_flowing_datacCsdS)Nr)rrrrradd_literal_data2szNullFormatter.add_literal_datacCsdS)Nr)rrrrflush_softspace3szNullFormatter.flush_softspacecCsdS)Nr)ralignrrrpush_alignment4szNullFormatter.push_alignmentcCsdS)Nr)rrrr pop_alignment5szNullFormatter.pop_alignmentcCsdS)Nr)rxrrr push_font6szNullFormatter.push_fontcCsdS)Nr)rrrrpop_font7szNullFormatter.pop_fontcCsdS)Nr)rmarginrrr push_margin8szNullFormatter.push_margincCsdS)Nr)rrrr pop_margin9szNullFormatter.pop_margincCsdS)Nr)rspacingrrr set_spacing:szNullFormatter.set_spacingcGsdS)Nr)rstylesrrr push_style;szNullFormatter.push_stylecCsdS)Nr)rnrrr pop_style<szNullFormatter.pop_stylecCsdS)Nr)rflagrrrassert_line_data=szNullFormatter.assert_line_data)__name__ __module__ __qualname____doc__rr r rrrrrrrrrrrr r"r%r'rrrrrs&               rc@seZdZdZddZddZddZdd Zd d d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*d+Zd)d,d-Zd S).AbstractFormatterzThe standard formatter. This implementation has demonstrated wide applicability to many writers, and may be used directly in most circumstances. It has been used to implement a full-featured World Wide Web browser. cCsy||_d|_g|_g|_g|_d|_g|_d|_d|_d|_ d|_ d|_ d|_ dS)Nr#r) rr align_stack font_stack margin_stackr style_stacknospace softspacepara_endparskip hard_break have_label)rrrrrrNs            zAbstractFormatter.__init__cCs|js"|jjd|_n|j|krg|j rg|jj||j||_d|_nd|_|_|_d|_dS)Nrr#) r5rsend_line_breakr6r4send_paragraphr1r3r2)rr rrrr ]s     zAbstractFormatter.end_paragraphcCsO|jp|js2|jjd|_|_nd|_|_d|_dS)Nrr#)r5r3rr7r6r4r1r2)rrrrr hs  z AbstractFormatter.add_line_breakcOs^|js|jjn|jj||d|_|_d|_|_|_|_dS)Nr#r) r5rr7 send_hor_ruler1r6r3r2r4)rr r rrrros  zAbstractFormatter.add_hor_ruleNcCs|js|j r#|jjn|jsK|jj|rAdpDdnt|try|jj|j ||n|jj|d|_ |_|_|_d|_ |_ dS)Nr#r) r6r5rr7r3r8 isinstancestrsend_label_dataformat_counterr1r2r4)rrrr rrrrvs z AbstractFormatter.add_label_datacCsd}x|D]}|dkr0|d|}q |dkrd|dkr||j||}qq |dkr|dkr||j||}qq ||}q W|S)N1z%dZaArZiI) format_letter format_roman)rrrlabelcrrrr=s      z AbstractFormatter.format_countercCsVd}xI|dkrQt|dd\}}tt||}||}q W|S)Nr>rr#)divmodchrord)rcaserrBrsrrrr@s zAbstractFormatter.format_letterc Cs ddddg}dddg}d\}}x|d krt|d \}}|d krz||||d |}nj|d kr|||||}nE|dkr||}|d}nd}||||}||}|d }q0W|dkr|jS|S)NirrCmvldr>r r#I)r>r)rEupper) rrHrZonesZfivesrBindexrrIrrrrAs&         zAbstractFormatter.format_romancCs|s dS|ddj}|ddj}dj|j}|jr_| r_dS|sn|jr|s|jsd|_d|_ndS|jsd|}qnd|_|_|_|_|_||_|j j |dS)Nr# r) isspacejoinsplitr1r2r4r5r3r6rsend_flowing_data)rrZprespaceZ postspacerrrrs$    % z"AbstractFormatter.add_flowing_datacCsx|s dS|jr&|jjdn|dddk|_d|_|_|_|_|_|jj|dS)NrVr# rrW) r2rr[r5r1r3r4r6send_literal_data)rrrrrrs %z"AbstractFormatter.add_literal_datacCsN|jrJd|_|_|_|_|_d|_|jjdndS)Nrr#rV)r2r5r3r4r6r1rr[)rrrrrs % z!AbstractFormatter.flush_softspacecCsX|rA||jkrA|jj|||_|jj|n|jj|jdS)N)rr new_alignmentr-append)rrrrrrs  z AbstractFormatter.push_alignmentcCsc|jr|jd=n|jrF|jd|_}|jj|nd|_|jjddS)Nr#rWrW)r-rrr^)rrrrrrs    zAbstractFormatter.pop_alignmentc Cs|\}}}}|jrNd|_|_|_d|_|jjdn|jr|jd\}}}} |tkr|}n|tkr|}n|tkr|}n|tkr| }qn||||f}|jj||jj |dS)Nrr#rVrW) r2r5r3r1rr[r.AS_ISr_new_font) rfontsizerJbZttZcsizeZcicbZcttrrrrs$       zAbstractFormatter.push_fontcCsI|jr|jd=n|jr/|jd}nd}|jj|dS)Nr#rWrW)r.rra)rrbrrrrs    zAbstractFormatter.pop_fontcCs]|jj|dd|jD}| r@|r@|d}n|jj|t|dS)NcSsg|]}|r|qSrr).0rKrrr s z1AbstractFormatter.push_margin..r#rW)r/r_r new_marginlen)rrfstackrrrrs   zAbstractFormatter.push_margincCsb|jr|jd=ndd|jD}|r?|d}nd}|jj|t|dS)Nr#cSsg|]}|r|qSrr)rfrKrrrrg s z0AbstractFormatter.pop_margin..rWrW)r/rrhri)rrjrrrrr s   zAbstractFormatter.pop_margincCs||_|jj|dS)N)rr new_spacing)rrrrrr s zAbstractFormatter.set_spacingcGsz|jr<d|_|_|_d|_|jjdnx|D]}|jj|qCW|jjt |jdS)Nrr#rV) r2r5r3r1rr[r0r_ new_stylestuple)rr!Zstylerrrr"s   zAbstractFormatter.push_styler#cCs.|j| d=|jjt|jdS)N)r0rrlrm)rr$rrrr%!szAbstractFormatter.pop_stylecCs,| |_|_d|_|_|_dS)Nr)r1r5r3r4r6)rr&rrrr'%sz"AbstractFormatter.assert_line_data)r(r)r*r+rr r rrr=r@rArrrrrrrrrr r"r%r'rrrrr,@s,             r,c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS)raMinimal writer interface to use in testing & inheritance. A writer which only provides the interface definition; no actions are taken on any methods. This should be the base class for all writers which do not need to inherit any implementation methods. cCsdS)Nr)rrrrr2szNullWriter.__init__cCsdS)Nr)rrrrflush3szNullWriter.flushcCsdS)Nr)rrrrrr^4szNullWriter.new_alignmentcCsdS)Nr)rrbrrrra5szNullWriter.new_fontcCsdS)Nr)rrlevelrrrrh6szNullWriter.new_margincCsdS)Nr)rrrrrrk7szNullWriter.new_spacingcCsdS)Nr)rr!rrrrl8szNullWriter.new_stylescCsdS)Nr)rr rrrr89szNullWriter.send_paragraphcCsdS)Nr)rrrrr7:szNullWriter.send_line_breakcOsdS)Nr)rr r rrrr9;szNullWriter.send_hor_rulecCsdS)Nr)rrrrrr<<szNullWriter.send_label_datacCsdS)Nr)rrrrrr[=szNullWriter.send_flowing_datacCsdS)Nr)rrrrrr]>szNullWriter.send_literal_dataN)r(r)r*r+rrnr^rarhrkrlr8r7r9r<r[r]rrrrr*s             rc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZdS)AbstractWriterzA writer which can be used in debugging formatters, but not much else. Each method simply announces itself by printing its name and arguments on standard output. cCstd|fdS)Nznew_alignment(%r))print)rrrrrr^IszAbstractWriter.new_alignmentcCstd|fdS)Nz new_font(%r))rq)rrbrrrraLszAbstractWriter.new_fontcCstd||fdS)Nznew_margin(%r, %d))rq)rrrorrrrhOszAbstractWriter.new_margincCstd|fdS)Nznew_spacing(%r))rq)rrrrrrkRszAbstractWriter.new_spacingcCstd|fdS)Nznew_styles(%r))rq)rr!rrrrlUszAbstractWriter.new_stylescCstd|fdS)Nzsend_paragraph(%r))rq)rr rrrr8XszAbstractWriter.send_paragraphcCstddS)Nzsend_line_break())rq)rrrrr7[szAbstractWriter.send_line_breakcOstddS)Nzsend_hor_rule())rq)rr r rrrr9^szAbstractWriter.send_hor_rulecCstd|fdS)Nzsend_label_data(%r))rq)rrrrrr<aszAbstractWriter.send_label_datacCstd|fdS)Nzsend_flowing_data(%r))rq)rrrrrr[dsz AbstractWriter.send_flowing_datacCstd|fdS)Nzsend_literal_data(%r))rq)rrrrrr]gsz AbstractWriter.send_literal_dataN)r(r)r*r+r^rarhrkrlr8r7r9r<r[r]rrrrrpAs           rpc@speZdZdZddddZddZdd Zd d Zd d ZddZ ddZ dS) DumbWritera;Simple writer class which writes output on the file object passed in as the file parameter or, if file is omitted, on standard output. The output is simply word-wrapped to the number of columns specified by the maxcol parameter. This class is suitable for reflowing a sequence of paragraphs. NHcCs6|p tj|_||_tj||jdS)N)sysstdoutfilemaxcolrrreset)rrvrwrrrrts  zDumbWriter.__init__cCsd|_d|_dS)Nr)colatbreak)rrrrrxzs zDumbWriter.resetcCs*|jjd|d|_d|_dS)Nr\r)rvwriteryrz)rr rrrr8~s zDumbWriter.send_paragraphcCs&|jjdd|_d|_dS)Nr\r)rvr{ryrz)rrrrr7s zDumbWriter.send_line_breakcOsM|jjd|jjd|j|jjdd|_d|_dS)Nr\-r)rvr{rwryrz)rr r rrrr9s  zDumbWriter.send_hor_rulecCsz|jj||jd}|dkrKd|_||dd}n|j}|jt||_d|_dS)Nr\rr#)rvr{rfindry expandtabsrirz)rrrJrrrr]s   zDumbWriter.send_literal_datacCs|s dS|jp |dj}|j}|j}|jj}xz|jD]l}|r|t||kr|dd}q|d|d}n|||t|}d}qNW||_|dj|_dS)Nrr\rVr#rW)rzrXryrwrvr{rZri)rrrzryrwr{Zwordrrrr[s$          zDumbWriter.send_flowing_data) r(r)r*r+rrxr8r7r9r]r[rrrrrrks      rrc Cst}t|}|dk r0t|}n2tjddrYttjd}n tj}z>x7|D]/}|dkr|jdql|j|qlWWd|tjk r|jnX|jddS)Nr#r\r) rrr,openrtargvstdinr rclose)rvwffplinerrrtests      r__main__) r+rtwarningswarnPendingDeprecationWarningr`rr,rrprrrr(rrrrs   "*C lib64/python3.4/__pycache__/tempfile.cpython-34.pyo000064400000052110152342604300015705 0ustar00 e fW@sdZddddddddd d d g Zd d lZd d lZd d lZd d lZ d d l Z d d l Z d dlmZd d lZyd d lZWnek rd d lZYnXejZe je jBe jBZee dree jOZneZee dr&ee jOZnee drAe j Z ndZ dZ!eZ"ee drqe j#Z$n'ee dre j%Z$n ddZ$ddZ&GdddZ'ddZ(ddZ)d a*dd Z+d!d"Z,d#d Z-d a.d$d Z/d%e!d d&d'dZ0d%e!d d(dZ1d%e!d d)dZ2Gd*d+d+Z3Gd,d-d-Z4d.d7d d d%e!d d0d1dZ5e j6d2kse j7j8d3kre5Z9n!d.d8d d d%e!d d4dZ9Gd5ddZ:Gd6dde;Z<d S)9aTemporary files. This module provides generic, low- and high-level interfaces for creating temporary files and directories. All of the interfaces provided by this module can be used without fear of race conditions except for 'mktemp'. 'mktemp' is subject to race conditions and should not be used; it is provided for backward compatibility only. This module also provides some data items to the user: TMP_MAX - maximum number of names that will be tried before giving up. tempdir - If this is set to a string before the first use of any routine from this module, it will be considered as another candidate location to store temporary files. NamedTemporaryFile TemporaryFileSpooledTemporaryFileTemporaryDirectorymkstempmkdtempmktempTMP_MAX gettempprefixtempdir gettempdirN)Random O_NOFOLLOWO_BINARYi'ZtmplstatstatcCs&tj|tj}tj|dS)N)_osopenO_RDONLYclose)fnfdr-/opt/alt/python34/lib64/python3.4/tempfile.py_statIsrc Cs/yt|Wntk r&dSYnXdSdS)NFT)rOSError)rrrr_existsMs   rc@sFeZdZdZdZeddZddZddZd S) _RandomNameSequencea*An instance of _RandomNameSequence generates an endless sequence of unpredictable strings which can safely be incorporated into file names. Each string is six characters long. Multiple threads can safely use the same instance at the same time. _RandomNameSequence is an iterator.Z%abcdefghijklmnopqrstuvwxyz0123456789_cCsCtj}|t|ddkr<t|_||_n|jS)N_rng_pid)rgetpidgetattr_RandomZ_rngr)selfZcur_pidrrrrng_s    z_RandomNameSequence.rngcCs|S)Nr)r"rrr__iter__gsz_RandomNameSequence.__iter__csD|j|jjfddtdD}dj|S)Ncsg|]}qSrr).0Zdummy)cchooserr ms z0_RandomNameSequence.__next__..) charactersr#Zchoicerangejoin)r"Zlettersr)r&r'r__next__js  "z_RandomNameSequence.__next__N) __name__ __module__ __qualname____doc__r+propertyr#r$r.rrrrrUs  rc Csg}x3d D]+}tj|}|r |j|q q Wtjdkrg|jddddgn|jd d d gy|jtjWn(ttfk r|jtjYnX|S) z[Generate a list of candidate temporary directories which _get_default_tempdir will try.TMPDIRTEMPTMPntzc:\tempzc:\tmpz\tempz\tmpz/tmpz/var/tmpz/usr/tmp)r4r5r6) rgetenvappendnameextendgetcwdAttributeErrorrcurdir)dirlistZenvnamedirnamerrr_candidate_tempdir_listps rAcCst}t}xT|D]L}|tjkrCtjj|}nxtdD]}t|}tjj||}yutj |t d}zGz2t j |ddd}|j dWdQXWdtj |XWdtj|X|SWqPtk rYqPtk rNtjdkrItjj|rItj|tjrIwPnPYqPtk r`PYqPXqPWqWttjd |dS) aqCalculate the default directory to use for temporary files. This routine should be called exactly once. We determine whether or not a candidate temp dir is usable by trying to create and write to a file in that directory. If this is successful, the test file is deleted. To prevent denial of service, the name of the test file must be randomized.diwbclosefdFsblatNr7z)No usable temporary directory found in %s)rrArr>pathabspathr,nextr-r_bin_openflags_iowriterunlinkFileExistsErrorPermissionErrorr:isdiraccessW_OKrFileNotFoundError_errnoENOENT)Znamerr?dirseqr:filenamerfprrr_get_default_tempdirs:      !  rXc CsGtdkrCtjztdkr1tanWdtjXntS)z7Common setup sequence for all user-callable interfaces.N)_name_sequence _once_lockacquirerreleaserrrr_get_candidate_namess   r]c Cst}xttD]}t|}tjj||||}y/tj||d}|tjj|fSWqt k rwYqt k rtj dkrtjj |rtj |tjrwnYqXqWt tjddS)z>Code common to mkstemp, TemporaryFile, and NamedTemporaryFile.ir7z#No usable temporary file name foundN)r]r,rrGrrEr-rrFrLrMr:rNrOrPrREEXIST) rTZpreZsufflagsnamesrUr:filerrrr_mkstemp_inners     !  rbcCstS)zAccessor for tempdir.template.)templaterrrrr sc CsGtdkrCtjztdkr1tanWdtjXntS)zAccessor for tempfile.tempdir.N)r rZr[rXr\rrrrr s   r*FcCs@|dkrt}n|r't}nt}t||||S)a'User-callable function to create and return a unique temporary file. The return value is a pair (fd, name) where fd is the file descriptor returned by os.open, and name is the filename. If 'suffix' is specified, the file name will end with that suffix, otherwise there will be no suffix. If 'prefix' is specified, the file name will begin with that prefix, otherwise a default prefix is used. If 'dir' is specified, the file will be created in that directory, otherwise a default directory is used. If 'text' is specified and true, the file is opened in text mode. Else (the default) the file is opened in binary mode. On some operating systems, this makes no difference. The file is readable and writable only by the creating user ID. If the operating system uses permission bits to indicate whether a file is executable, the file is executable by no one. The file descriptor is not inherited by children of this process. Caller is responsible for deleting the file when done with it. N)r _text_openflagsrHrb)suffixprefixrTtextr_rrrrs    c Cs|dkrt}nt}xttD]}t|}tjj||||}ytj|d|SWq.t k rw.Yq.t k rtj dkrtjj |rtj |tjrw.nYq.Xq.Wt tjddS)aUser-callable function to create and return a unique temporary directory. The return value is the pathname of the directory. Arguments are as for mkstemp, except that the 'text' argument is not accepted. The directory is readable, writable, and searchable only by the creating user. Caller is responsible for deleting the directory when done with it. Nir7z(No usable temporary directory name found)r r]r,rrGrrEr-mkdirrLrMr:rNrOrPrRr^)rerfrTr`rUr:rarrrrs$      !  cCs|dkrt}nt}xMttD]?}t|}tjj||||}t|s.|Sq.Wt t j ddS)aUser-callable function to return a unique temporary file name. The file is not created. Arguments are as for mkstemp, except that the 'text' argument is not accepted. This function is unsafe and should not be used. The file name refers to a file that did not exist at some point, but by the time you get around to creating it, someone else may have beaten you to the punch. Nz"No usable temporary filename found) r r]r,rrGrrEr-rrLrRr^)rerfrTr`rUr:rarrrr?s      c@smeZdZdZdZdZdddZejdkr]ej dd Z d d Z n d d Z dS) _TemporaryFileCloserzA separate object allowing proper closing of a temporary file's underlying file object, without adding a __del__ method to the temporary file.NFTcCs||_||_||_dS)N)rar:delete)r"rar:rjrrr__init__fs  z_TemporaryFileCloser.__init__r7c CsW|j rS|jdk rSd|_z|jjWd|jrO||jnXndS)NT) close_calledrarrjr:)r"rKrrrrus   z_TemporaryFileCloser.closecCs|jdS)N)r)r"rrr__del__sz_TemporaryFileCloser.__del__cCs&|js"d|_|jjndS)NT)rlrar)r"rrrrs  ) r/r0r1r2rarlrkrr:rKrrmrrrrri^s  ric@saeZdZdZdddZddZddZd d Zd d Zd dZ dS)_TemporaryFileWrapperzTemporary file wrapper This class provides a wrapper around files opened for temporary use. In particular, it seeks to automatically remove the file when it is no longer needed. TcCs4||_||_||_t||||_dS)N)rar:rjri_closer)r"rar:rjrrrrks   z_TemporaryFileWrapper.__init__cs|jd}t||}t|drg|tjfdd}|j|_|}nt|tst|||n|S)Nra__call__cs ||S)Nr)argskwargs)funcrr func_wrappersz7_TemporaryFileWrapper.__getattr__..func_wrapper) __dict__r hasattr _functoolswrapsro isinstanceintsetattr)r"r:raartr)rsr __getattr__s !  z!_TemporaryFileWrapper.__getattr__cCs|jj|S)N)ra __enter__)r"rrrr~s z_TemporaryFileWrapper.__enter__cCs&|jj|||}|j|S)N)ra__exit__r)r"excvaluetbresultrrrrs z_TemporaryFileWrapper.__exit__cCs|jjdS)zA Close the temporary file, possibly deleting it. N)ror)r"rrrrsz_TemporaryFileWrapper.closeccsx|jD] }|Vq WdS)N)ra)r"linerrrr$sz_TemporaryFileWrapper.__iter__N) r/r0r1r2rkr}r~rrr$rrrrrns     rnzw+bTc Cs|dkrt}nt}tjdkrC|rC|tjO}nt||||\} } y8tj| |d|d|d|} t| | |SWn"t k rtj | YnXdS)aCreate and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to io.open (default "w+b"). 'buffering' -- the buffer size argument to io.open (default -1). 'encoding' -- the encoding argument to io.open (default None) 'newline' -- the newline argument to io.open (default None) 'delete' -- whether the file is deleted on close (default True). The file is created as mkstemp() would do it. Returns an object with a file-like interface; the name of the file is accessible as file.name. The file will be automatically deleted when it is closed unless the 'delete' argument is set to False. Nr7 bufferingnewlineencoding) r rHrr:Z O_TEMPORARYrbrIrrn Exceptionr) moderrrrerfrTrjr_rr:rarrrrs    posixcygwinc Cs|dkrt}nt}t||||\}} y3tj| tj||d|d|d|SWntj|YnXdS)a>Create and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to io.open (default "w+b"). 'buffering' -- the buffer size argument to io.open (default -1). 'encoding' -- the encoding argument to io.open (default None) 'newline' -- the newline argument to io.open (default None) The file is created as mkstemp() would do it. Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed. Nrrr)r rHrbrrKrIrr) rrrrrerfrTr_rr:rrrrs    c @s{eZdZdZdZddd8dddeddd Zd d Zd d ZddZ ddZ ddZ ddZ e ddZe ddZddZddZddZe d d!Ze d"d#Ze d$d%Zd&d'Zd(d)Zd*d+Zd,d-Ze d.d/Zd0d1Zdd2d3Zd4d5Zd6d7ZdS)9rzTemporary file wrapper, specialized to switch from BytesIO or StringIO to a real file when it exceeds a certain size or when a fileno is needed. Fr zw+brNr*c Csd|krtj|_ntjdd|_||_d|_i|d6|d6|d6|d6|d 6|d6|d 6|_dS) Nbr FrrrerfrrT)rIBytesIO_fileStringIO _max_size_rolled_TemporaryFileArgs) r"max_sizerrrrrerfrTrrrrks   zSpooledTemporaryFile.__init__cCs?|jr dS|j}|r;|j|kr;|jndS)N)rrtellrollover)r"rarrrr_check*s   zSpooledTemporaryFile._checkcCsh|jr dS|j}t|j}|_|`|j|j|j|jdd|_dS)Nr T)rrrrrJgetvalueseekr)r"raZnewfilerrrr0s  zSpooledTemporaryFile.rollovercCs|jjrtdn|S)Nz%Cannot enter context with closed file)rclosed ValueError)r"rrrr~As zSpooledTemporaryFile.__enter__cCs|jjdS)N)rr)r"rrrrrrrFszSpooledTemporaryFile.__exit__cCs |jjS)N)rr$)r"rrrr$JszSpooledTemporaryFile.__iter__cCs|jjdS)N)rr)r"rrrrMszSpooledTemporaryFile.closecCs |jjS)N)rr)r"rrrrPszSpooledTemporaryFile.closedc CsKy|jjSWn6tk rFd|jdkr7n|jdSYnXdS)Nrrr)rrr=r)r"rrrrTs  zSpooledTemporaryFile.encodingcCs|j|jjS)N)rrfileno)r"rrrr]s zSpooledTemporaryFile.filenocCs|jjdS)N)rflush)r"rrrraszSpooledTemporaryFile.flushcCs |jjS)N)risatty)r"rrrrdszSpooledTemporaryFile.isattyc Cs2y|jjSWntk r-|jdSYnXdS)Nr)rrr=r)r"rrrrgs zSpooledTemporaryFile.modec Cs+y|jjSWntk r&dSYnXdS)N)rr:r=)r"rrrr:ns zSpooledTemporaryFile.namec CsKy|jjSWn6tk rFd|jdkr7n|jdSYnXdS)Nrrr)rnewlinesr=r)r"rrrrus  zSpooledTemporaryFile.newlinescGs|jj|S)N)rread)r"rqrrrr~szSpooledTemporaryFile.readcGs|jj|S)N)rreadline)r"rqrrrrszSpooledTemporaryFile.readlinecGs|jj|S)N)r readlines)r"rqrrrrszSpooledTemporaryFile.readlinescGs|jj|dS)N)rr)r"rqrrrrszSpooledTemporaryFile.seekcCs |jjS)N)r softspace)r"rrrrszSpooledTemporaryFile.softspacecCs |jjS)N)rr)r"rrrrszSpooledTemporaryFile.tellcCsL|dkr|jjn,||jkr8|jn|jj|dS)N)rtruncaterr)r"sizerrrrs   zSpooledTemporaryFile.truncatecCs)|j}|j|}|j||S)N)rrJr)r"srarvrrrrJs  zSpooledTemporaryFile.writecCs)|j}|j|}|j||S)N)r writelinesr)r"iterablerarrrrrs  zSpooledTemporaryFile.writelines)r/r0r1r2rrcrkrrr~rr$rr3rrrrrrr:rrrrrrrrrJrrrrrrs8                 c@smeZdZdZdedddZeddZdd Zd d Z d d Z ddZ dS)ra+Create and return a temporary directory. This has the same behavior as mkdtemp but can be used as a context manager. For example: with TemporaryDirectory() as tmpdir: ... Upon exiting the context, the directory and everything contained in it are removed. r*NcCsFt||||_tj||j|jddj||_dS)N warn_messagezImplicitly cleaning up {!r})rr:_weakreffinalize_cleanupformat _finalizer)r"rerfrTrrrrkszTemporaryDirectory.__init__cCs!tj|tj|tdS)N)_shutilrmtree _warningswarnResourceWarning)clsr:rrrrrs zTemporaryDirectory._cleanupcCsdj|jj|jS)Nz <{} {!r}>)r __class__r/r:)r"rrr__repr__szTemporaryDirectory.__repr__cCs|jS)N)r:)r"rrrr~szTemporaryDirectory.__enter__cCs|jdS)N)cleanup)r"rrrrrrrszTemporaryDirectory.__exit__cCs&|jjr"tj|jndS)N)rdetachrrr:)r"rrrrszTemporaryDirectory.cleanup) r/r0r1r2rcrk classmethodrrr~rrrrrrrs    rr)=r2__all__ functoolsrwwarningsriorIosrZshutilrerrnorRZrandomr r!weakrefr_thread ImportErrorZ _dummy_thread allocate_lockZ_allocate_lockO_RDWRO_CREATO_EXCLrdrvrrHrrrcrZrrrrrrArXrYr]rbr r r rrrrirnrr:sysplatformrrobjectrrrrrsx                  -    %&+?  $!   lib64/python3.4/__pycache__/ftplib.cpython-34.pyc000064400000101052152342604300015344 0ustar00 e f @sdZddlZddlZddlZddlZddlmZddgZdZdZdZ Gd d d e Z Gd d d e Z Gd dde Z Gddde ZGddde Ze eefZdZdZGdddZyddlZWnek r*dZYnBXejZGdddeZejde eeejfZdaddZdaddZ ddZ!ddZ"d d!Z#d"d#d$d%Z$Gd&ddZ%d'd(Z&e'd)kre&ndS)*aSAn FTP client class and some helper functions. Based on RFC 959: File Transfer Protocol (FTP), by J. Postel and J. Reynolds Example: >>> from ftplib import FTP >>> ftp = FTP('ftp.python.org') # connect to host, default port >>> ftp.login() # default, i.e.: user anonymous, passwd anonymous@ '230 Guest login ok, access restrictions apply.' >>> ftp.retrlines('LIST') # list directory contents total 9 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg '226 Transfer complete.' >>> ftp.quit() '221 Goodbye.' >>> A nice test that reveals some of the network dialogue would be: python ftplib.py -d localhost -l -p -l N)_GLOBAL_DEFAULT_TIMEOUTFTPNetrci c@seZdZdS)ErrorN)__name__ __module__ __qualname__r r +/opt/alt/python34/lib64/python3.4/ftplib.pyr:s rc@seZdZdS) error_replyN)rr r r r r r r ;s r c@seZdZdS) error_tempN)rr r r r r r r<s rc@seZdZdS) error_permN)rr r r r r r r=s rc@seZdZdS) error_protoN)rr r r r r r r>s rz s c@seZdZdZdZdZeZeZ dZ dZ dZ dZ dZddddedddZd d Zd d Zddd[dddZddZddZeZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Z d(d)Z!d*d+Z"d,d-Z#d.d/Z$d0d1Z%dd2d3Z&dd4d5Z'dddd6d7Z(d8dd9d:Z)dd;d<Z*d8ddd=d>Z+dd?d@Z,dAdBZ-dCdDZ.dEdFZ/dgdGdHZ0dIdJZ1dKdLZ2dMdNZ3dOdPZ4dQdRZ5dSdTZ6dUdVZ7dWdXZ8dYdZZ9dS)\rayAn FTP client class. To create a connection, call the class using these arguments: host, user, passwd, acct, timeout The first four arguments are all strings, and have default value ''. timeout must be numeric and defaults to None if not passed, meaning that no timeout will be set on any ftp socket(s) If a timeout is passed, then this is now the default timeout for all ftp socket operations for this instance. Then use self.connect() with optional host and port argument. To download a file, use ftp.retrlines('RETR ' + filename), or ftp.retrbinary() with slightly different arguments. To upload a file, use ftp.storlines() or ftp.storbinary(), which have an open file as argument (see their definitions below for details). The download/upload functions first issue appropriate TYPE and PORT or PASV commands. rNrzlatin-1cCsH||_||_|rD|j||rD|j|||qDndS)N)source_addresstimeoutconnectlogin)selfhostuserpasswdacctrrr r r __init__qs    z FTP.__init__cCs|S)Nr )rr r r __enter__zsz FTP.__enter__cGsc|jdk r_z-y|jWnttfk r:YnXWd|jdk r[|jnXndS)N)sockquitOSErrorEOFErrorclose)rargsr r r __exit__~s z FTP.__exit__icCs|dkr||_n|dkr0||_n|dkrH||_n|dk r`||_ntj|j|jf|jd|j|_|jj|_|jj dd|j |_ |j |_ |j S) awConnect to host. Arguments are: - host: hostname to connect to (string, default previous host) - port: port to connect to (integer, default previous port) - timeout: the timeout to set against the ftp socket(s) - source_address: a 2-tuple (host, port) for the socket to bind to as its source address before connecting. rriNrrencodingi)rportrrsocketcreate_connectionrZfamilyafmakefiler%filegetrespwelcome)rrr&rrr r r rs        z FTP.connectcCs,|jr%td|j|jn|jS)z`Get the welcome message from the server. (this is read and squirreled away by connect())z *welcome*) debuggingprintsanitizer-)rr r r getwelcomes zFTP.getwelcomecCs ||_dS)zSet the debugging level. The required argument level means: 0: no debugging output (default) 1: print commands and responses but not body text etc. 2: also print raw lines read and sent before stripping CR/LFN)r.)rlevelr r r set_debuglevelszFTP.set_debuglevelcCs ||_dS)zUse passive or active mode for data transfers. With a false argument, use the normal PORT mode, With a true argument, use the PASV command.N) passiveserver)rvalr r r set_pasvsz FTP.set_pasvcCsb|dddkrXt|jd}|ddd|d||d}nt|S)Npass PASS z *>r8r9)lenrstriprepr)rsir r r r0s-z FTP.sanitizecCsyd|ksd|kr'tdn|t}|jdkrYtd|j|n|jj|j|jdS)N  z4an illegal newline character should not be containedrz*put*) ValueErrorCRLFr.r/r0rsendallencoder%)rliner r r putlines  z FTP.putlinecCs3|jr"td|j|n|j|dS)Nz*cmd*)r.r/r0rG)rrFr r r putcmds z FTP.putcmdcCs|jj|jd}t||jkrDtd|jn|jdkrltd|j|n|s{tn|ddt kr|dd}n)|ddt kr|dd}n|S) Nrzgot more than %d bytesz*get*rJrK) r+readlinemaxliner;rr.r/r0r rC)rrFr r r getlines z FTP.getlinecCs|j}|dddkr|dd}xQ|j}|d|}|dd|kr5|dddkr5Pq5q5Wn|S)N-rA)rN)rrFcodeZnextliner r r getmultilines   zFTP.getmultilinecCs|j}|jr.td|j|n|dd|_|dd}|d kra|S|dkr|t|n|dkrt|nt|dS) Nz*resp*rOr12345>rTrVrU)rSr.r/r0Zlastresprrr)rrespcr r r r,s     z FTP.getrespcCs5|j}|dddkr1t|n|S)z%Expect a response beginning with '2'.NrrU)r,r )rrYr r r voidresps z FTP.voidrespcCszdt}|jdkr2td|j|n|jj|t|j}|ddd krvt|n|S) zAbort a file transfer. Uses out-of-band data. This does not follow the procedure from the RFC to send Telnet IP and Synch; that doesn't seem to work with the servers I've tried. Instead, just send the ABOR command as OOB data.sABORrz *put urgent*NrO426225226>r\r]r^) B_CRLFr.r/r0rrDMSG_OOBrSr)rrFrYr r r aborts  z FTP.abortcCs|j||jS)z'Send a command and return the response.)rHr,)rcmdr r r sendcmds z FTP.sendcmdcCs|j||jS)z8Send a command and expect a response beginning with '2'.)rHr[)rrbr r r voidcmds z FTP.voidcmdcCsY|jd}t|dt|dg}||}ddj|}|j|S)zUSend a PORT command with the current host and the given port number. .zPORT ,)splitr=joinrd)rrr&ZhbytesZpbytesbytesrbr r r sendports   z FTP.sendportcCsd}|jtjkr!d}n|jtjkr<d}n|dkrWtdndt||t|dg}ddj|}|j|S)zESend an EPRT command with the current host and the given port number.rrrIzunsupported address familyrzEPRT |)r)r'AF_INETZAF_INET6rr=rird)rrr&r)Zfieldsrbr r r sendeprt#s   !z FTP.sendeprtc Csd}d}xtjdd|jtjdtjD]}|\}}}}}y&tj|||}|j|WnGtk r} z'| }|r|jnd}w4WYdd} ~ XnXPq4W|dkr|dk r|qtdn|jd|j d} |j j d} |jtj krK|j | | } n|j | | } |jtk r|j|jn|S)z3Create a new socket and send a PORT command for it.Nrz!getaddrinfo returns an empty listr)r'Z getaddrinfor)Z SOCK_STREAMZ AI_PASSIVEZbindrr!ZlistenZ getsocknamerrmrkrnrr settimeout) rerrrresr)ZsocktypeprotoZ canonnameZsa_r&rrYr r r makeport0s6.     z FTP.makeportcCsa|jtjkr0t|jd\}}n't|jd|jj\}}||fS)NPASVZEPSV)r)r'rmparse227rcparse229rZ getpeername)rrr&r r r makepasvPs'z FTP.makepasvc Csd}|jr|j\}}tj||f|jd|j}yq|dk rh|jd|n|j|}|ddkr|j}n|ddkrt|nWq|j YqXn|j }|dk r|jd|n|j|}|ddkr.|j}n|ddkrMt|n|j \}} |jt k r|j |jnWdQX|dddkrt|}n||fS) aInitiate a transfer over the data connection. If the transfer is active, send a port command and the transfer command, and accept the connection. If the server is passive, send a pasv command, connect to it, and start the transfer command. Either way, return the socket for the connection and the expected size of the transfer. The expected size may be None if it could not be determined. Optional `rest' argument can be a string that is sent as the argument to a REST command. This is essentially a server marker used to tell the server to skip over any data up to the given marker. NrzREST %srrUrTrO150)r4rxr'r(rrrcr,r r!rtZacceptrroparse150) rrbrestsizerr&connrYrZsockaddrr r r ntransfercmdWs<      zFTP.ntransfercmdcCs|j||dS)z0Like ntransfercmd() but returns only the socket.r)r~)rrbr{r r r transfercmdszFTP.transfercmdcCs|sd}n|sd}n|s-d}n|dkrR|d krR|d}n|jd|}|ddkr|jd|}n|ddkr|jd |}n|dd krt|n|S) zLogin, default anonymous.Z anonymousrrQz anonymous@zUSER rrVzPASS zACCT rU>rrQ)rcr )rrrrrYr r r rs     z FTP.logini c Cs|jd|j||Y}x'|j|}|s>Pn||q%Wtdk rtt|trt|jnWdQX|jS)aRetrieve data in binary mode. A new port is created for you. Args: cmd: A RETR command. callback: A single parameter callable to be called on each block of data read. blocksize: The maximum number of bytes to read from the socket at one time. [default: 8192] rest: Passed to transfercmd(). [default: None] Returns: The response code. zTYPE IN)rdrZrecv _SSLSocket isinstanceunwrapr[)rrbcallback blocksizer{r}datar r r retrbinarys zFTP.retrbinarycCsb|dkrt}n|jd}|j|#}|jdd|j}x|j|jd}t||jkrtd|jn|j dkrt dt |n|sPn|d dt kr|dd }n)|d dd kr|dd }n||qTWt dk rLt|t rL|jnWdQXWdQX|jS)ahRetrieve data in line mode. A new port is created for you. Args: cmd: A RETR, LIST, or NLST command. callback: An optional single parameter callable that is called for each line with the trailing CRLF stripped. [default: print_line()] Returns: The response code. NzTYPE Ar$r%rzgot more than %d bytesrIz*retr*rArJrJrKrK) print_linercrr*r%rLrMr;rr.r/r=rCrrrr[)rrbrrYr}fprFr r r retrliness*  z FTP.retrlinesc Cs|jd|j||o}x=|j|}|s>Pn|j||r%||q%q%Wtdk rt|tr|jnWdQX|jS)a9Store a file in binary mode. A new port is created for you. Args: cmd: A STOR command. fp: A file-like object with a read(num_bytes) method. blocksize: The maximum data size to read from fp and send over the connection at once. [default: 8192] callback: An optional single parameter callable that is called on each block of data after it is sent. [default: None] rest: Passed to transfercmd(). [default: None] Returns: The response code. zTYPE IN)rdrreadrDrrrr[)rrbrrrr{r}bufr r r storbinarys  zFTP.storbinaryc Cs|jd|j|}x|j|jd}t||jkrctd|jn|smPn|ddtkr|dtkr|dd}n|t}n|j||r"||q"q"Wtdk rt |tr|j nWdQX|j S) ahStore a file in line mode. A new port is created for you. Args: cmd: A STOR command. fp: A file-like object with a readline() method. callback: An optional single parameter callable that is called on each line after it is sent. [default: None] Returns: The response code. zTYPE Arzgot more than %d bytesrINrJrKrK) rdrrLrMr;rr_rDrrrr[)rrbrrr}rr r r storliness$   z FTP.storlinescCsd|}|j|S)zSend new account name.zACCT )rd)rpasswordrbr r r r%s zFTP.acctcGsBd}x|D]}|d|}q Wg}|j||j|S)zBReturn a list of files in a given directory (default the current).ZNLST )rappend)rr"rbargfilesr r r nlst*s  zFTP.nlstcGsd}d}|ddrVt|dtdkrV|dd|d }}nx%|D]}|r]|d|}q]q]W|j||dS) aList a directory in long form. By default list current directory to stdout. Optional last argument is callback function; all non-empty arguments before it are concatenated to the LIST command. (This *should* only be used for a pathname.)ZLISTNrrrrKrKrKrK)typer)rr"rbfuncrr r r dir3s, zFTP.dirc cs|r'|jddj|dn|r:d|}nd}g}|j||jx|D]}|jtjd\}}}i} xI|dd jdD].} | jd\} }} | | | jrr)rcr )rfilenamerYr r r deleteesz FTP.deletecCs|dkrky|jdSWqtk rg}z(|jddddkrUnWYdd}~XqXn|dkrd}nd |}|j|S) zChange to a directory.z..ZCDUPrNrO500rrezCWD )rdrr")rdirnamemsgrbr r r cwdms    zFTP.cwdcCsM|jd|}|dddkrI|ddj}t|SdS)zRetrieve the size of a file.zSIZE NrOZ213)rcstripint)rrrYr>r r r r|zszFTP.sizecCs0|jd|}|jds&dSt|S)z+Make a directory, return its full pathname.zMKD 257r)rd startswithparse257)rrrYr r r mkdszFTP.mkdcCs|jd|S)zRemove a directory.zRMD )rd)rrr r r rmdszFTP.rmdcCs,|jd}|jds"dSt|S)z!Return current working directory.ZPWDrr)rdrr)rrYr r r pwdszFTP.pwdcCs|jd}|j|S)zQuit, and close the connection.ZQUIT)rdr!)rrYr r r rs zFTP.quitc Csbz/|j}d|_|dk r.|jnWd|j}d|_|dk r]|jnXdS)z8Close the connection without assuming anything about it.N)r+r!r)rr+rr r r r!s      z FTP.closei):rr r __doc__r.rFTP_PORTr&MAXLINErMrr+r-r4r%rrrr#rr1r3debugr6r0rGrHrNrSr,r[rarcrdrkrnrtrxr~rrrrrrrrrrrrrr|rrrrr!r r r r rKsj                 7#       c @seZdZdZejZdddddddeddd ZddddddZ d d Z d d Z d dZ ddZ dddZddZdS)FTP_TLSaA FTP subclass which adds TLS support to FTP as described in RFC-4217. Connect as usual to port 21 implicitly securing the FTP control connection before authenticating. Securing the data connection requires user to explicitly ask for it by calling prot_p() method. Usage example: >>> from ftplib import FTP_TLS >>> ftps = FTP_TLS('ftp.python.org') >>> ftps.login() # login anonymously previously securing control channel '230 Guest login ok, access restrictions apply.' >>> ftps.prot_p() # switch to secure data connection '200 Protection level set to P' >>> ftps.retrlines('LIST') # list directory content securely total 9 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg '226 Transfer complete.' >>> ftps.quit() '221 Goodbye.' >>> rNc Cs|dk r'|dk r'tdn|dk rN|dk rNtdn||_||_|dkrtj|jd|d|}n||_d|_tj ||||||| dS)Nz4context and keyfile arguments are mutually exclusivez5context and certfile arguments are mutually exclusivecertfilekeyfileF) rBrrsslZ_create_stdlib_context ssl_versioncontext_prot_prr) rrrrrrrrrrr r r rs      zFTP_TLS.__init__TcCs?|r)t|jtj r)|jntj||||S)N)rrr SSLSocketauthrr)rrrrZsecurer r r rs z FTP_TLS.logincCst|jtjr$tdn|jtjkrH|jd}n|jd}|jj |jd|j |_|jj ddd|j |_ |S)z2Set up secure control connection by using TLS/SSL.zAlready using TLSzAUTH TLSzAUTH SSLserver_hostnamemoder$r%)rrrrrBrPROTOCOL_SSLv23rdr wrap_socketrr*r%r+)rrYr r r rs!z FTP_TLS.authcCsIt|jtjs$tdn|jd}|jj|_|S)z/Switch back to a clear-text control connection.z not using TLSZCCC)rrrrrBrdr)rrYr r r cccs z FTP_TLS.ccccCs)|jd|jd}d|_|S)zSet up secure data connection.zPBSZ 0zPROT PT)rdr)rrYr r r prot_ps  zFTP_TLS.prot_pcCs|jd}d|_|S)z"Set up clear text data connection.zPROT CF)rdr)rrYr r r prot_cs zFTP_TLS.prot_ccCsLtj|||\}}|jrB|jj|d|j}n||fS)Nr)rr~rrrr)rrbr{r}r|r r r r~s  zFTP_TLS.ntransfercmdcCsOdt}|jj||j}|dddkrKt|n|S)NsABORrOr\r]r^>426225226)r_rrDrSr)rrFrYr r r ra!s   z FTP_TLS.abort)rr r rrrrrrrrrrrr~rar r r r rs     rcCs|dddkr%t|ntdkr\ddl}|jd|j|jBantj|}|sudSt|jdS)zParse the '150' response for a RETR request. Returns the expected transfer size or None; size is not guaranteed to be present in the 150 message. NrOryrz150 .* \((\d+) bytes\)r) r _150_rerecompile IGNORECASEASCIImatchrgroup)rYrmr r r rz0s  rzcCs|dddkr%t|ntdkrUddl}|jd|jantj|}|syt|n|j}dj|dd}t |dd>t |d }||fS) zParse the '227' response for a PASV request. Raises error_proto if it does not contain '(h1,h2,h3,h4,p1,p2)' Return ('host.addr.as.numbers', port#) tuple.NrOZ227rz#(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)rerPr7) r _227_rerrrsearchrgroupsrir)rYrrZnumbersrr&r r r rvDs   "rvcCs|dddkr%t|n|jd}|dkrOt|n|jd|d}|dkrt|n||d||dkrt|n||d|j||d}t|dkrt|n|d}t|d}||fS) zParse the '229' response for an EPSV request. Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.NrOZ229(r)rr7)r findrrhr;r)rYZpeerleftrightpartsrr&r r r rwXs   % rwcCs|dddkr%t|n|dddkr?dSd}d}t|}xg||kr||}|d}|dkr||ks||dkrPn|d}n||}qZW|S) zParse the '257' response for a MKD or PWD request. This is a response to a MKD or PWD request: a directory name. Returns the directoryname in the 257 reply.NrOrr7z "rr")r r;)rYrr?nrZr r r rns      rcCst|dS)z+Default retrlines callback to print a line.N)r/)rFr r r rsrrIc Cs|s|}nd|}|j||j|t|jd\}}|j|||jd|}|ddd krtn|jd|}|ddd krtn|j|jdS) z+Copy file from one FTP-instance to another.zTYPE ruzSTOR NrO125ryzRETR >r150>rr)rdrvrcrkrr[) sourceZ sourcenametargetZ targetnamerZ sourcehostZ sourceportZtreplyZsreplyr r r ftpcps       rc@sgeZdZdZdZdZdZdddZddZddZ d d Z d d Z dS) rzClass to parse & provide access to 'netrc' format files. See the netrc(4) man page for information on the file format. WARNING: This class is obsolete -- use module netrc instead. NcCstjdtd|dkr\dtjkrMtjjtjdd}q\tdni|_i|_ t |d}d}xf|j }|sPn|r|j r|j |qn"|rt||j |sP     b   x      m 7 lib64/python3.4/__pycache__/socketserver.cpython-34.pyc000064400000055327152342604300016620 0ustar00 j f4_@sJdZdZddlZddlZddlZddlZyddlZWnek rlddlZYnXdddddd d d d d ddg Z e edre j ddddgnddZ GdddZ Gddde ZGdddeZGdddZGdddZGdddeeZGdddeeZGdd d eeZGdd d eeZe edrGd ddeZGd!ddeZGd"ddeeZGd#ddeeZnGd$d d ZGd%d d eZGd&d d eZdS)'aGeneric socket server classes. This module tries to capture the various aspects of defining a server: For socket-based servers: - address family: - AF_INET{,6}: IP (Internet Protocol) sockets (default) - AF_UNIX: Unix domain sockets - others, e.g. AF_DECNET are conceivable (see - socket type: - SOCK_STREAM (reliable stream, e.g. TCP) - SOCK_DGRAM (datagrams, e.g. UDP) For request-based servers (including socket-based): - client address verification before further looking at the request (This is actually a hook for any processing that needs to look at the request before anything else, e.g. logging) - how to handle multiple requests: - synchronous (one request is handled at a time) - forking (each request is handled by a new process) - threading (each request is handled by a new thread) The classes in this module favor the server type that is simplest to write: a synchronous TCP/IP server. This is bad class design, but save some typing. (There's also the issue that a deep class hierarchy slows down method lookups.) There are five classes in an inheritance diagram, four of which represent synchronous servers of four types: +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+ Note that UnixDatagramServer derives from UDPServer, not from UnixStreamServer -- the only difference between an IP and a Unix stream server is the address family, which is simply repeated in both unix server classes. Forking and threading versions of each type of server can be created using the ForkingMixIn and ThreadingMixIn mix-in classes. For instance, a threading UDP server class is created as follows: class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass The Mix-in class must come first, since it overrides a method defined in UDPServer! Setting the various member variables also changes the behavior of the underlying server mechanism. To implement a service, you must derive a class from BaseRequestHandler and redefine its handle() method. You can then run various versions of the service by combining one of the server classes with your request handler class. The request handler class must be different for datagram or stream services. This can be hidden by using the request handler subclasses StreamRequestHandler or DatagramRequestHandler. Of course, you still have to use your head! For instance, it makes no sense to use a forking server if the service contains state in memory that can be modified by requests (since the modifications in the child process would never reach the initial state kept in the parent process and passed to each child). In this case, you can use a threading server, but you will probably have to use locks to avoid two requests that come in nearly simultaneous to apply conflicting changes to the server state. On the other hand, if you are building e.g. an HTTP server, where all data is stored externally (e.g. in the file system), a synchronous class will essentially render the service "deaf" while one request is being handled -- which may be for a very long time if a client is slow to read all the data it has requested. Here a threading or forking server is appropriate. In some cases, it may be appropriate to process part of a request synchronously, but to finish processing in a forked child depending on the request data. This can be implemented by using a synchronous server and doing an explicit fork in the request handler class handle() method. Another approach to handling multiple simultaneous requests in an environment that supports neither threads nor fork (or where these are too expensive or inappropriate for the service) is to maintain an explicit table of partially finished requests and to use select() to decide which request to work on next (or whether to handle a new incoming request). This is particularly important for stream services where each client can potentially be connected for a long time (if threads or subprocesses cannot be used). Future work: - Standard classes for Sun RPC (which uses either UDP or TCP) - Standard mix-in classes to implement various authentication and encryption schemes - Standard framework for select-based multiplexing XXX Open problems: - What to do with out-of-band data? BaseServer: - split generic "request" functionality out into BaseServer class. Copyright (C) 2000 Luke Kenneth Casson Leighton example: read entries from a SQL database (requires overriding get_request() to return a table entry from the database). entry is processed by a RequestHandlerClass. z0.4N BaseServer TCPServer UDPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerThreadingMixIn ForkingMixInAF_UNIXUnixStreamServerUnixDatagramServerThreadingUnixStreamServerThreadingUnixDatagramServercGsYxRy||SWqtk rP}z|jtjkr>nWYdd}~XqXqWdS)z*restart a system call interrupted by EINTRN)OSErrorerrnoZEINTR)funcargser1/opt/alt/python34/lib64/python3.4/socketserver.py _eintr_retrys rc@seZdZdZdZddZddZddd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!ZdS)"raBase class for server classes. Methods for the caller: - __init__(server_address, RequestHandlerClass) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you do not use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - server_close() - process_request(request, client_address) - shutdown_request(request) - close_request(request) - service_actions() - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - allow_reuse_address Instance variables: - RequestHandlerClass - socket NcCs.||_||_tj|_d|_dS)z/Constructor. May be extended, do not override.FN)server_addressRequestHandlerClass threadingZEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfrrrrr__init__s  zBaseServer.__init__cCsdS)zSCalled by constructor to activate the server. May be overridden. Nr)r rrrserver_activateszBaseServer.server_activateg?c Cs|jjz^xW|jsittj|ggg|\}}}||kr\|jn|jqWWdd|_|jjXdS)zHandle one request at a time until shutdown. Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread. NF)rclearrrselect_handle_request_noblockservice_actionsset)r Z poll_intervalrwrrrr serve_forevers     zBaseServer.serve_forevercCsd|_|jjdS)zStops the serve_forever loop. Blocks until the loop has finished. This must be called while serve_forever() is running in another thread, or it will deadlock. TN)rrwait)r rrrshutdowns zBaseServer.shutdowncCsdS)zCalled by the serve_forever() loop. May be overridden by a subclass / Mixin to implement any code that needs to be run during the loop. Nr)r rrrr&szBaseServer.service_actionscCs|jj}|dkr'|j}n$|jdk rKt||j}nttj|ggg|}|ds|jdS|jdS)zOHandle one request, possibly blocking. Respects self.timeout. Nr)socketZ gettimeouttimeoutminrr$handle_timeoutr%)r r.Zfd_setsrrrhandle_requests    zBaseServer.handle_requestcCsy|j\}}Wntk r.dSYnX|j||ry|j||Wq|j|||j|YqXndS)zHandle one request, without blocking. I assume that select.select has returned that the socket is readable before this function was called, so there should be no risk of blocking in get_request(). N) get_requestrverify_requestprocess_request handle_errorshutdown_request)r requestclient_addressrrrr%$s  z"BaseServer._handle_request_noblockcCsdS)zcCalled if no new request arrives within self.timeout. Overridden by ForkingMixIn. Nr)r rrrr06szBaseServer.handle_timeoutcCsdS)znVerify the request. May be overridden. Return True if we should proceed with this request. Tr)r r7r8rrrr3=szBaseServer.verify_requestcCs!|j|||j|dS)zVCall finish_request. Overridden by ForkingMixIn and ThreadingMixIn. N)finish_requestr6)r r7r8rrrr4EszBaseServer.process_requestcCsdS)zDCalled to clean-up the server. May be overridden. Nr)r rrr server_closeNszBaseServer.server_closecCs|j|||dS)z8Finish one request by instantiating RequestHandlerClass.N)r)r r7r8rrrr9VszBaseServer.finish_requestcCs|j|dS)z3Called to shutdown and close an individual request.N) close_request)r r7rrrr6ZszBaseServer.shutdown_requestcCsdS)z)Called to clean up an individual request.Nr)r r7rrrr;^szBaseServer.close_requestcCsPtddtdddt|ddl}|jtdddS)ztHandle an error gracefully. May be overridden. The default is to print a traceback and continue. -(z4Exception happened during processing of request fromend rN)print traceback print_exc)r r7r8rArrrr5bs    zBaseServer.handle_error)__name__ __module__ __qualname____doc__r.r!r"r*r,r&r1r%r0r3r4r:r9r6r;r5rrrrrs" +           c@seZdZdZejZejZdZ dZ dddZ ddZ d d Z d d Zd dZddZddZddZdS)ra3Base class for various socket-based server classes. Defaults to synchronous IP stream (i.e., TCP). Methods for the caller: - __init__(server_address, RequestHandlerClass, bind_and_activate=True) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you don't use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - process_request(request, client_address) - shutdown_request(request) - close_request(request) - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - request_queue_size (only for stream sockets) - allow_reuse_address Instance variables: - server_address - RequestHandlerClass - socket FTc Csktj|||tj|j|j|_|rgy|j|jWqg|jYqgXndS)z/Constructor. May be extended, do not override.N)rr!r-address_family socket_type server_bindr"r:)r rrZbind_and_activaterrrr!s   zTCPServer.__init__cCsQ|jr(|jjtjtjdn|jj|j|jj|_dS)zOCalled by constructor to bind the socket. May be overridden. N)allow_reuse_addressr- setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsockname)r rrrrJs zTCPServer.server_bindcCs|jj|jdS)zSCalled by constructor to activate the server. May be overridden. N)r-Zlistenrequest_queue_size)r rrrr"szTCPServer.server_activatecCs|jjdS)zDCalled to clean-up the server. May be overridden. N)r-close)r rrrr:szTCPServer.server_closecCs |jjS)zMReturn socket file number. Interface required by select(). )r-fileno)r rrrrPszTCPServer.filenocCs |jjS)zYGet the request and client address from the socket. May be overridden. )r-Zaccept)r rrrr2szTCPServer.get_requestc Cs:y|jtjWntk r(YnX|j|dS)z3Called to shutdown and close an individual request.N)r,r-ZSHUT_WRrr;)r r7rrrr6s  zTCPServer.shutdown_requestcCs|jdS)z)Called to clean up an individual request.N)rO)r r7rrrr;szTCPServer.close_requestN)rCrDrErFr-ZAF_INETrHZ SOCK_STREAMrIrNrLr!rJr"r:rPr2r6r;rrrrrps -       c@s[eZdZdZdZejZdZddZ ddZ dd Z d d Z d S) rzUDP server class.Fi cCs.|jj|j\}}||jf|fS)N)r-Zrecvfrommax_packet_size)r dataZ client_addrrrrr2szUDPServer.get_requestcCsdS)Nr)r rrrr"szUDPServer.server_activatecCs|j|dS)N)r;)r r7rrrr6szUDPServer.shutdown_requestcCsdS)Nr)r r7rrrr;szUDPServer.close_requestN) rCrDrErFrLr-Z SOCK_DGRAMrIrQr2r"r6r;rrrrrs     c@sXeZdZdZdZdZdZddZddZd d Z d d Z dS) r z5Mix-in class to handle each request in a new process.i,Nr=c Cs&|jdkrdSxt|j|jkry,tjdd\}}|jj|Wqtk rnYqtk r|jjYqt k rPYqXqWx||jj D]k}y/tj|tj \}}|jj|Wqtk r |jj|Yqt k rYqXqWdS)z7Internal routine to wait for children that have exited.NrKr) active_childrenlen max_childrenoswaitpiddiscardInterruptedErrorChildProcessErrorr#rcopyWNOHANG)r pid_rrrcollect_childrens(      zForkingMixIn.collect_childrencCs|jdS)znWait for zombies after self.timeout seconds of inactivity. May be extended, do not override. N)r`)r rrrr04szForkingMixIn.handle_timeoutcCs|jdS)zCollect the zombie child processes regularly in the ForkingMixIn. service_actions is called in the BaseServer's serve_forver loop. N)r`)r rrrr&;szForkingMixIn.service_actionscCstj}|rQ|jdkr0t|_n|jj||j|dSy.|j|||j|tjdWn:z!|j |||j|WdtjdXYnXdS)z-Fork a new subprocess to process the request.NrrK) rWforkrTr'addr;r9r6_exitr5)r r7r8r^rrrr4Bs    zForkingMixIn.process_request) rCrDrErFr.rTrVr`r0r&r4rrrrr s  $  c@s4eZdZdZdZddZddZdS)r z4Mix-in class to handle each request in a new thread.Fc CsMy!|j|||j|Wn%|j|||j|YnXdS)zgSame as in BaseServer but as a thread. In addition, exception handling is done here. N)r9r6r5)r r7r8rrrprocess_request_threadbs z%ThreadingMixIn.process_request_threadcCs;tjd|jd||f}|j|_|jdS)z*Start a new thread to process the request.targetrN)rZThreadrddaemon_threadsZdaemonstart)r r7r8trrrr4os zThreadingMixIn.process_requestN)rCrDrErFrfrdr4rrrrr [s  c@seZdZdS)rN)rCrDrErrrrrws c@seZdZdS)rN)rCrDrErrrrrxs c@seZdZdS)rN)rCrDrErrrrrzs c@seZdZdS)rN)rCrDrErrrrr{s c@seZdZejZdS)rN)rCrDrEr-rrHrrrrrs c@seZdZejZdS)rN)rCrDrEr-rrHrrrrrs c@seZdZdS)rN)rCrDrErrrrrs c@seZdZdS)rN)rCrDrErrrrrs c@sFeZdZdZddZddZddZdd Zd S) r aBase class for request handler classes. This class is instantiated for each request to be handled. The constructor sets the instance variables request, client_address and server, and then calls the handle() method. To implement a specific service, all you need to do is to derive a class which defines a handle() method. The handle() method can find the request as self.request, the client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method can define arbitrary other instance variariables. c CsE||_||_||_|jz|jWd|jXdS)N)r7r8serversetuphandlefinish)r r7r8rirrrr!s    zBaseRequestHandler.__init__cCsdS)Nr)r rrrrjszBaseRequestHandler.setupcCsdS)Nr)r rrrrkszBaseRequestHandler.handlecCsdS)Nr)r rrrrlszBaseRequestHandler.finishN)rCrDrErFr!rjrkrlrrrrr s   c@sFeZdZdZd ZdZdZdZddZdd Z dS) r z4Define self.rfile and self.wfile for stream sockets.rKrNFcCs|j|_|jdk r1|jj|jn|jrY|jjtjtjdn|jj d|j |_ |jj d|j |_ dS)NTrbwb)r7Z connectionr.Z settimeoutdisable_nagle_algorithmrMr-Z IPPROTO_TCPZ TCP_NODELAYmakefilerbufsizerfilewbufsizewfile)r rrrrjs  zStreamRequestHandler.setupc CsV|jjs8y|jjWq8tjk r4Yq8Xn|jj|jjdS)N)rtclosedflushr-errorrOrr)r rrrrls  zStreamRequestHandler.finishrS) rCrDrErFrqrsr.rorjrlrrrrr s   c@s.eZdZdZddZddZdS)r z6Define self.rfile and self.wfile for datagram sockets.cCsGddlm}|j\|_|_||j|_||_dS)Nr)BytesIO)iorxr7Zpacketr-rrrt)r rxrrrrjszDatagramRequestHandler.setupcCs#|jj|jj|jdS)N)r-Zsendtortgetvaluer8)r rrrrlszDatagramRequestHandler.finishN)rCrDrErFrjrlrrrrr s  )rF __version__r-r$rWrr ImportErrorZdummy_threading__all__hasattrextendrrrrr r rrrrrrrrr r r rrrrxsF           ~S.+lib64/python3.4/__pycache__/_weakrefset.cpython-34.pyo000064400000020421152342604300016377 0ustar00 e fI@sCddlmZdgZGdddZGdddZdS))refWeakSetc@s4eZdZddZddZddZdS)_IterationGuardcCst||_dS)N)r weakcontainer)selfrr0/opt/alt/python34/lib64/python3.4/_weakrefset.py__init__sz_IterationGuard.__init__cCs/|j}|dk r+|jj|n|S)N)r _iteratingadd)rwrrr __enter__s  z_IterationGuard.__enter__cCsH|j}|dk rD|j}|j||sD|jqDndS)N)rr remove_commit_removals)retbr srrr__exit__s     z_IterationGuard.__exit__N)__name__ __module__ __qualname__r r rrrrrr s   rc@seZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZeZd d!Zd"d#Zd$d%ZeZd&d'Zd(d)Zd*d+ZeZd,d-Zd.d/ZeZd0d1Zd2d3Zd4d5Z e Z!d6d7Z"d8d9Z#d:d;Z$e$Z%d<d=Z&dS)>rNcCs_t|_t|dd}||_g|_t|_|dk r[|j|ndS)NcSsH|}|dk rD|jr1|jj|qD|jj|ndS)N)r _pending_removalsappenddatadiscard)itemselfrefrrrr_remove&s    z!WeakSet.__init__.._remove)setrrrrr update)rrrrrrr $s     zWeakSet.__init__cCs6|j}|jj}x|r1||jqWdS)N)rrrpop)rlrrrrr4s   zWeakSet._commit_removalsc csHt|6x.|jD]#}|}|dk r|VqqWWdQXdS)N)rr)ritemrefrrrr__iter__:s    zWeakSet.__iter__cCst|jt|jS)N)lenrr)rrrr__len__CszWeakSet.__len__c Cs6yt|}Wntk r(dSYnX||jkS)NF)r TypeErrorr)rrwrrrr __contains__Fs   zWeakSet.__contains__cCs%|jt|ft|ddfS)N__dict__) __class__listgetattr)rrrr __reduce__MszWeakSet.__reduce__cCs6|jr|jn|jjt||jdS)N)rrrr rr)rrrrrr Qs  z WeakSet.addcCs'|jr|jn|jjdS)N)rrrclear)rrrrr/Vs  z WeakSet.clearcCs |j|S)N)r+)rrrrcopy[sz WeakSet.copyc Csn|jr|jnxQy|jj}Wntk rLtdYnX|}|dk r|SqWdS)Nzpop from empty WeakSet)rrrr!KeyError)rr#rrrrr!^s     z WeakSet.popcCs0|jr|jn|jjt|dS)N)rrrrr)rrrrrrjs  zWeakSet.removecCs0|jr|jn|jjt|dS)N)rrrrr)rrrrrros  zWeakSet.discardcCs8|jr|jnx|D]}|j|qWdS)N)rrr )rotherelementrrrr ts   zWeakSet.updatecCs|j||S)N)r )rr2rrr__ior__zs zWeakSet.__ior__cCs|j}|j||S)N)r0difference_update)rr2newsetrrr difference~s  zWeakSet.differencecCs|j|dS)N)__isub__)rr2rrrr5szWeakSet.difference_updatecCsS|jr|jn||kr2|jjn|jjdd|D|S)Ncss|]}t|VqdS)N)r).0rrrr sz#WeakSet.__isub__..)rrrr/r5)rr2rrrr8s    zWeakSet.__isub__cs jfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r9r)rrrr:sz'WeakSet.intersection..)r+)rr2r)rr intersectionszWeakSet.intersectioncCs|j|dS)N)__iand__)rr2rrrintersection_updateszWeakSet.intersection_updatecCs7|jr|jn|jjdd|D|S)Ncss|]}t|VqdS)N)r)r9rrrrr:sz#WeakSet.__iand__..)rrrr=)rr2rrrr<s  zWeakSet.__iand__cCs|jjdd|DS)Ncss|]}t|VqdS)N)r)r9rrrrr:sz#WeakSet.issubset..)rissubset)rr2rrrr>szWeakSet.issubsetcCs |jtdd|DkS)Ncss|]}t|VqdS)N)r)r9rrrrr:sz!WeakSet.__lt__..)rr)rr2rrr__lt__szWeakSet.__lt__cCs|jjdd|DS)Ncss|]}t|VqdS)N)r)r9rrrrr:sz%WeakSet.issuperset..)r issuperset)rr2rrrr@szWeakSet.issupersetcCs |jtdd|DkS)Ncss|]}t|VqdS)N)r)r9rrrrr:sz!WeakSet.__gt__..)rr)rr2rrr__gt__szWeakSet.__gt__cCs6t||jstS|jtdd|DkS)Ncss|]}t|VqdS)N)r)r9rrrrr:sz!WeakSet.__eq__..) isinstancer+NotImplementedrr)rr2rrr__eq__szWeakSet.__eq__cCs|j}|j||S)N)r0symmetric_difference_update)rr2r6rrrsymmetric_differences  zWeakSet.symmetric_differencecCs|j|dS)N)__ixor__)rr2rrrrEsz#WeakSet.symmetric_difference_updatecsYjrjn|kr2jjn#jjfdd|DS)Nc3s!|]}t|jVqdS)N)rr)r9r)rrrr:sz#WeakSet.__ixor__..)rrrr/rE)rr2r)rrrGs    #zWeakSet.__ixor__cCs |jdd||fDS)Ncss"|]}|D] }|Vq qdS)Nr)r9rrrrrr:sz WeakSet.union..)r+)rr2rrrunionsz WeakSet.unioncCst|j|dkS)Nr)r%r;)rr2rrr isdisjointszWeakSet.isdisjoint)'rrrr rr$r&r)r.r r/r0r!rrr r4r7__sub__r5r8r;__and__r=r<r>__le__r?r@__ge__rArDrF__xor__rErGrH__or__rIrrrrr#sH                         N)_weakrefr__all__rrrrrrs lib64/python3.4/__pycache__/getopt.cpython-34.pyc000064400000015115152342604300015372 0ustar00 i fA@s dZddddgZddlZyddlmZWnek rXdd ZYnXGd ddeZeZgd dZ gd dZ d dZ ddZ ddZ ddZedkrddlZee ejdddddgndS)aParser for command line options. This module helps scripts to parse the command line arguments in sys.argv. It supports the same conventions as the Unix getopt() function (including the special meanings of arguments of the form `-' and `--'). Long options similar to those supported by GNU software may be used as well via an optional third argument. This module provides two functions and an exception: getopt() -- Parse command line options gnu_getopt() -- Like getopt(), but allow option and non-option arguments to be intermixed. GetoptError -- exception (class) raised with 'opt' attribute, which is the option involved with the exception. GetoptErrorerrorgetopt gnu_getoptN)gettextcCs|S)N)srr+/opt/alt/python34/lib64/python3.4/getopt.py_)sr c@s7eZdZdZdZdddZddZdS)rcCs)||_||_tj|||dS)N)msgopt Exception__init__)selfr r rrr r.s  zGetoptError.__init__cCs|jS)N)r )rrrr __str__3szGetoptError.__str__N)__name__ __module__ __qualname__r r rrrrrr r+s cCsg}t|tdkr*|g}n t|}x|r|djdr|ddkr|ddkr|dd}Pn|djdrt||ddd||dd\}}q9t||ddd||dd\}}q9W||fS)a@getopt(args, options[, long_options]) -> opts, args Parses command line options and parameter list. args is the argument list to be parsed, without the leading reference to the running program. Typically, this means "sys.argv[1:]". shortopts is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon (i.e., the same format that Unix getopt() uses). If specified, longopts is a list of strings with the names of the long options which should be supported. The leading '--' characters should not be included in the option name. Options which require an argument should be followed by an equal sign ('='). The return value consists of two elements: the first is a list of (option, value) pairs; the second is the list of program arguments left after the option list was stripped (this is a trailing slice of the first argument). Each option-and-value pair returned has the option as its first element, prefixed with a hyphen (e.g., '-x'), and the option argument as its second element, or an empty string if the option has no argument. The options occur in the list in the same order in which they were found, thus allowing multiple occurrences. Long and short options may be mixed. r r-z--N)typelist startswithdo_longs do_shorts)args shortoptslongoptsoptsrrr r8s  ,67cCsg}g}t|tr'|g}n t|}|jdr[|dd}d}n!tjjdrvd}nd}x|r|ddkr||dd7}Pn|ddd dkrt||dd d||dd\}}q|dddd kr]|dd kr]t||ddd||dd\}}q|rq||7}Pq|j |d|dd}qW||fS) agetopt(args, options[, long_options]) -> opts, args This function works like getopt(), except that GNU style scanning mode is used by default. This means that option and non-option arguments may be intermixed. The getopt() function stops processing options as soon as a non-option argument is encountered. If the first character of the option string is `+', or if the environment variable POSIXLY_CORRECT is set, then option processing stops as soon as a non-option argument is encountered. +rNTZPOSIXLY_CORRECTFrz--rr) isinstancestrrrosenvirongetrrappend)rrrr Z prog_argsZall_options_firstrrr rcs2     6*6 c Cs y|jd}Wntk r-d}Yn&X|d|||dd}}t||\}}|r|dkr|sttd||n|d|dd}}qn(|dk rttd||n|jd||pdf||fS)N=rzoption --%s requires argumentrz%option --%s must not have an argumentz--r )index ValueError long_has_argsrr r')r r rrioptarghas_argrrr rs  % ! rcsfdd|D}|s;ttdn|krQdfSd|krkdfSt|dkrttdnt|dkst|d }|jd}|r|dd }n||fS) Ncs%g|]}|jr|qSr)r).0o)r rr s z!long_has_args..zoption --%s not recognizedFr(Trzoption --%s not a unique prefixr)rr lenAssertionErrorendswith)r rZ possibilitiesZ unique_matchr.r)r r r+s    r+cCsx|dkr|d|dd}}t||r|dkr|sgttd||n|d|dd}}n|d}}nd}|jd||fqW||fS)Nr rrzoption -%s requires argumentr) short_has_argrr r')r Z optstringrrr r-rrr rs  rcCsnxNtt|D]:}|||ko4dknr|jd|dSqWttd||dS)N:rzoption -%s not recognized)ranger3rrr )r rr,rrr r6s r6__main__rza:bzalpha=Zbeta)__doc____all__r$rr ImportErrorrrrrrrr+rr6rsysprintargvrrrr s"   +2      lib64/python3.4/__pycache__/pty.cpython-34.pyc000064400000010201152342604300014673 0ustar00 e f@sdZddlmZddlZddlZdddgZdZdZdZdZd dZ d d Z d d Z ddZ ddZ ddZddZeeddZeeddZdS)zPseudo terminal utilities.)selectNopenptyforkspawnc CsNytjSWnttfk r(YnXt\}}t|}||fS)zdopenpty() -> (master_fd, slave_fd) Open a pty master/slave pair, using os.openpty() if possible.)osrAttributeErrorOSError_open_terminal slave_open) master_fd slave_nameslave_fdr(/opt/alt/python34/lib64/python3.4/pty.pyrs c Cs^ytj\}}Wnttfk r0Yn'Xtj|}tj|||fStS)zmaster_open() -> (master_fd, slave_name) Open a pty master and return the fd, and the filename of the slave end. Deprecated, use openpty() instead.)rrr r ttynamecloser )r rrrrr master_open!s  rc CsxmdD]e}x\dD]T}d||}ytj|tj}Wntk rXwYnX|d||fSWqWtddS)z1Open pty master and return (master_fd, tty_name).ZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devicesN)ropenO_RDWRr )xyZpty_namefdrrrr 1s   r cCstj|tj}yddlm}m}Wntk rG|SYnXy$|||d|||dWntk rYnX|S)zslave_open(tty_name) -> slave_fd Open the pty slave and acquire the controlling terminal, returning opened filedescriptor. Deprecated, use openpty() instead.r)ioctlI_PUSHZptemZldterm)rrrZfcntlrr ImportErrorr )Ztty_nameresultrrrrrr =s   r cCs<ytj\}}Wnttfk r0Yn=X|tkrcytjWqctk r_YqcXn||fSt\}}tj}|tkr%tjtj|tj |t tj |t tj |t |t krtj|ntj tjt tj}tj|n tj|||fS)zdfork() -> (pid, master_fd) Fork and make the child a session leader with a controlling terminal.)rforkptyr r CHILDsetsidrrrdup2 STDIN_FILENO STDOUT_FILENO STDERR_FILENOrrr)pidrr rZtmp_fdrrrrOs0         cCs3x,|r.tj||}||d}qWdS)z#Write all the data to a descriptor.N)rwrite)rdatanrrr_writenws r)cCstj|dS)zDefault read function.i)rread)rrrr_read}sr+cCs|tg}xt|gg\}}}||krk||}|sX|j|qktjt|nt|kr|t}|s|jtqt||qqWdS)zParent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N)r"rremoverr&r#r))r master_read stdin_readZfdsZrfdsZwfdsZxfdsr'rrr_copys     r/cCst|tdkr$|f}nt\}}|tkrVtj|d|ny&tjt}tjtd}Wntj k rd}YnXyt |||Wn1t k r|rtj ttj |nYnXtj|tj|ddS)zCreate a spawned process.rr)typerrrexeclpttyZ tcgetattrr"Zsetrawerrorr/r Z tcsetattrZ TCSAFLUSHrwaitpid)argvr-r.r%r modeZrestorerrrrs$       )__doc__rrr3__all__r"r#r$rrrr r rr)r+r/rrrrrs"     (  lib64/python3.4/__pycache__/dummy_threading.cpython-34.pyc000064400000002276152342604300017254 0ustar00 e f @sadZddlmZddlZdZdZdZzdekrVedZdZnededsP               lib64/python3.4/__pycache__/modulefinder.cpython-34.pyc000064400000041740152342604300016550 0ustar00 e f}[@sdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z e j !e j de ddlZWdQXeejjdgZeejjdgZeejjdgZeejjdgZeegZeejgZiZdd ZiZd d ZGd d d ZGdddZddZedkry eZ Wne!k re"dYnXndS)z3Find modules used by a script, using introspection.Nignore LOAD_CONST IMPORT_NAME STORE_NAME STORE_GLOBALcCstj|gj|dS)N)packagePathMap setdefaultappend)Z packagenamepathr 1/opt/alt/python34/lib64/python3.4/modulefinder.pyAddPackagePath!sr cCs|t|r?r@)rrAdirrZextrBrCr r r load_fileqs zModuleFinder.load_filer5c Cs|jdd|||||j|d|}|j||\}}|j||}|se|S|jr|j||ndS)N import_hookr/)r4determine_parentfind_head_package load_tailrensure_fromlist) rrcallerfromlistr/parentqtailmr r r rJxs zModuleFinder.import_hookcCs|jdd||| s)|dkr=|jdddS|j}|dkr|jrh|d8}n|dkr|j|}||kst|jdd||S|jd|krtdndj|j dd| }|j|}|jdd||S|jrT|j|}||ks=t|jdd||Sd|kr|j d}|d|}|j|}|j|kst|jdd||S|jdddS) NrKrzdetermine_parent -> Noner5zdetermine_parent ->.zrelative importpath too deep) r6r7rrr#AssertionErrorcount ImportErrorjoinrErfind)rrOr/ZpnamerQr2r r r rKsB      #     zModuleFinder.determine_parentcCs>|jdd||d|krX|jd}|d|}||dd}n |}d}|rd|j|f}n|}|j|||}|r|jdd||f||fS|r|}d}|j|||}|r|jdd||f||fSn|jdd|td |dS) NrUrLrVr5r:z%s.%szfind_head_package ->z"raise ImportError: No module namedzNo module named )r6findr import_moduler7rY)rrQrr2headrSZqnamerRr r r rLs.   zModuleFinder.find_head_packagecCs|jdd|||}x|r|jd}|dkrOt|}n|d|||dd}}d|j|f}|j|||}|s|jdd|td|qqW|jdd ||S) NrUrMrVrr5z%s.%sz"raise ImportError: No module namedzNo module named z load_tail ->)r6r\lenrr]r7rY)rrRrSrTr2r^Zmnamer r r rMs  %zModuleFinder.load_tailcCs|jdd|||x|D]}|dkri|s|j|}|rf|j||dqfqq t||s d|j|f}|j|||}|std|qq q WdS)NrUrN*r5z%s.%szNo module named )r4find_all_submodulesrNhasattrrr]rY)rrTrPZ recursivesuballsubnameZsubmodr r r rNs  zModuleFinder.ensure_fromlistc CsB|js dSi}g}|tjjdd7}|tjjdd7}|tjjdd7}x|jD]}ytj|}Wn(tk r|j dd|wqYnXx||D]t}d}xF|D]>}t |} || d|kr|d| }PqqW|r|dkr|||YnX|jdd||S||jkry|jdddS|r|jdkr|jdddSy+|j||o|j|\}}}Wn)tk r|jddddSYnXz|j||||}Wd|r+|j nX|rEt |||n|jdd||S)NrIr]zimport_module ->zimport_module -> None) r6r#KeyErrorr7r$r find_modulerYr@closesetattr)rZpartnamefqnamerQrTrBrArCr r r r]s6  "  zModuleFinder.import_modulec Cs|\}}}|jdd||o'd||tjkrf|j||}|jdd||S|tjkrt|jd|d} n|tjkryt j j |j} WnEt k r} z%|jddt | |WYdd} ~ XnXtj| } nd} |j|}||_| rt|jrX|j| } n| |_|j| |n|jdd||S)Nr8r@rBzload_module -> execzraise ImportError: )r6r>Z PKG_DIRECTORY load_packager7r?compilereadZ PY_COMPILEDrf _bootstrap_validate_bytecode_headerrYr0marshalloads add_modulerr(replace_paths_in_coder scan_code) rrvrBrA file_infosuffixmodetyperTcoZ marshal_dataexcr r r r@s2   zModuleFinder.load_modulecCsQ||jkri|j|~s z*ModuleFinder.scan_code..r/rVr)rrrrrr#getrupdaterrrK RuntimeErrorr isinstancerr)rrrTrscannerZwhatr1rrPZ have_starZmmr/rQrr r r rqsH              zModuleFinder.scan_codec Cs|jdd||tj|}|r4|}n|j|}||_|g|_|jtj|g|_|jd|j\}}}z1|j|||||j dd||SWd|r|j nXdS)Nr8ryrzload_package ->) r6rrrrrrrsr@r7rt)rrvrArrTrBZbufrCr r r rys   zModuleFinder.load_packagecCs5||jkr|j|St||j|<}|S)N)r#r)rrvrTr r r rs zModuleFinder.add_modulecCs|dk r |jd|}n|}||jkrW|jdd|t|n|dkr|tjkrddddtjffS|j}ntj ||S)NrVrIzfind_module -> Excludedr:) rr'r7rYr"builtin_module_namesr>Z C_BUILTINr rs)rrr rQrr r r rss   zModuleFinder.find_modulecCsttddtddt|jj}xa|D]Y}|j|}|jrntdddntdddtd ||jpd q?W|j\}}|rttd xF|D];}t|j|j}td |d dj|qWn|r~ttdddtdxF|D];}t|j|j}td |d dj|q<WndS)zPrint a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. z %-25s %sNameFile----Pr*r+rTz%-25sr:zMissing modules:?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)zNamer)rr) r-sortedr#rmrrany_missing_mayber$rZ)rrmkeyrTmissingmayberZmodsr r r reports0     #  zModuleFinder.reportcCs|j\}}||S)zReturn a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. )r)rrrr r r any_missingszModuleFinder.any_missingcCs.g}g}x|jD]}||jkr1qn|jd}|dkr_|j|qn||dd}|d|}|jj|}|dk r||j|kr|j|q ||jkrq |jr|j|q |j|q|j|qW|j|j||fS)aReturn two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. rVrr5N) r$r'r[r r#rrrsort)rrrrr2reZpkgnameZpkgr r r rs0       zModuleFinder.any_missing_maybecCstjj|j}}xD|jD]9\}}|j|r#||t|d}Pq#q#W|jr||jkr||kr|j dd||fn|j dd|f|jj |nt |j }xMt t|D]9}t||t|r|j||||ropnameindexrrrrrrrr rrrr!rrrKeyboardInterruptr-r r r r s>              ;   lib64/python3.4/__pycache__/token.cpython-34.pyc000064400000007037152342604300015214 0ustar00 e f @sdZddddgZdZdZdZdZd Zd Zd Zd Z d Z dZ dZ dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Zd!Zd"Zd#Z d$Z!d%Z"d&Z#d'Z$d(Z%d)Z&d*Z'd+Z(d,Z)d-Z*d.Z+d/Z,d0Z-d1Z.d2Z/d3Z0d4Z1d5Z2d6Z3d7Z4d8Z5d9Z6d:Z7d;Z8d<Z9d=d>e:j;DZ<ej=e<j>d?dZ?d@dZ@dAdZAdBdCZBeCdDkreBndES)Fz!Token constants (from "token.h").tok_name ISTERMINAL ISNONTERMINALISEOF  !"#$%&'()*+,-./0123456cCs>i|]4\}}t|tr|jd r||qS)_) isinstanceint startswith).0namevaluerD*/opt/alt/python34/lib64/python3.4/token.py Gs  rFcCs |tkS)N) NT_OFFSET)xrDrDrErLscCs |tkS)N)rG)rHrDrDrErOscCs |tkS)N) ENDMARKER)rHrDrDrErRsc5Csddl}ddl}|jdd}|r;|dp>d}d}t|dkrf|d}nyt|}WnLtk r}z,|jjdt||j dWYdd}~XnX|j j d}|j |j d|j}i} xT|D]L} |j| } | r| jdd\} } t| } | | | s      5 lib64/python3.4/__pycache__/__phello__.foo.cpython-34.pyc000064400000000206152342604300016724 0ustar00 i f@@sdS)Nrrr3/opt/alt/python34/lib64/python3.4/__phello__.foo.pyslib64/python3.4/__pycache__/difflib.cpython-34.pyc000064400000166143152342604300015477 0ustar00 e f? @sdZddddddddd d d g Zd d lZd dlmZed dZddZGdddZddddZ ddZ GdddZ d d l Z e j djddZdddZddZdddddd d!d Zd"d#Zdddddd d$dZd ed%dZd d ed&d'Zd(Zd)Zd*Zd+ZGd,d d eZ[ d-dZd.d/Zed0krend S)1ae Module difflib -- helpers for computing deltas between objects. Function get_close_matches(word, possibilities, n=3, cutoff=0.6): Use SequenceMatcher to return list of the best "good enough" matches. Function context_diff(a, b): For two lists of strings, return a delta in context diff format. Function ndiff(a, b): Return a delta: the difference between `a` and `b` (lists of strings). Function restore(delta, which): Return one of the two sequences that generated an ndiff delta. Function unified_diff(a, b): For two lists of strings, return a delta in unified diff format. Class SequenceMatcher: A flexible class for comparing pairs of sequences of any type. Class Differ: For producing human-readable deltas from sequences of lines of text. Class HtmlDiff: For producing HTML side by side comparison with change highlights. get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNK IS_LINE_JUNK context_diff unified_diffHtmlDiffMatchN) namedtupleza b sizecCs|rd||SdS)Ng@g?)matcheslengthrr,/opt/alt/python34/lib64/python3.4/difflib.py_calculate_ratio&s rc@seZdZdZddddddZddZd d Zd d Zd dZddZ ddZ ddZ dddZ ddZ ddZddZdS)ra SequenceMatcher is a flexible class for comparing pairs of sequences of any type, so long as the sequence elements are hashable. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980's by Ratcliff and Obershelp under the hyperbolic name "gestalt pattern matching". The basic idea is to find the longest contiguous matching subsequence that contains no "junk" elements (R-O doesn't address junk). The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that "look right" to people. SequenceMatcher tries to compute a "human-friendly diff" between two sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the longest *contiguous* & junk-free matching subsequence. That's what catches peoples' eyes. The Windows(tm) windiff has another interesting notion, pairing up elements that appear uniquely in each sequence. That, and the method here, appear to yield more intuitive difference reports than does diff. This method appears to be the least vulnerable to synching up on blocks of "junk lines", though (like blank lines in ordinary text files, or maybe "

    " lines in HTML files). That may be because this is the only method of the 3 that has a *concept* of "junk" . Example, comparing two strings, and considering blanks to be "junk": >>> s = SequenceMatcher(lambda x: x == " ", ... "private Thread currentThread;", ... "private volatile Thread currentThread;") >>> .ratio() returns a float in [0, 1], measuring the "similarity" of the sequences. As a rule of thumb, a .ratio() value over 0.6 means the sequences are close matches: >>> print(round(s.ratio(), 3)) 0.866 >>> If you're only interested in where the sequences match, .get_matching_blocks() is handy: >>> for block in s.get_matching_blocks(): ... print("a[%d] and b[%d] match for %d elements" % block) a[0] and b[0] match for 8 elements a[8] and b[17] match for 21 elements a[29] and b[38] match for 0 elements Note that the last tuple returned by .get_matching_blocks() is always a dummy, (len(a), len(b), 0), and this is the only case in which the last tuple element (number of elements matched) is 0. If you want to know how to change the first sequence into the second, use .get_opcodes(): >>> for opcode in s.get_opcodes(): ... print("%6s a[%d:%d] b[%d:%d]" % opcode) equal a[0:8] b[0:8] insert a[8:8] b[8:17] equal a[8:29] b[17:38] See the Differ class for a fancy human-friendly file differencer, which uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. See also function get_close_matches() in this module, which shows how simple code building on SequenceMatcher can be used to do useful work. Timing: Basic R-O is cubic time worst case and quadratic time expected case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear. Methods: __init__(isjunk=None, a='', b='') Construct a SequenceMatcher. set_seqs(a, b) Set the two sequences to be compared. set_seq1(a) Set the first sequence to be compared. set_seq2(b) Set the second sequence to be compared. find_longest_match(alo, ahi, blo, bhi) Find longest matching block in a[alo:ahi] and b[blo:bhi]. get_matching_blocks() Return list of triples describing matching subsequences. get_opcodes() Return list of 5-tuples describing how to turn a into b. ratio() Return a measure of the sequences' similarity (float in [0,1]). quick_ratio() Return an upper bound on .ratio() relatively quickly. real_quick_ratio() Return an upper bound on ratio() very quickly. NTcCs6||_d|_|_||_|j||dS)a!Construct a SequenceMatcher. Optional arg isjunk is None (the default), or a one-argument function that takes a sequence element and returns true iff the element is junk. None is equivalent to passing "lambda x: 0", i.e. no elements are considered to be junk. For example, pass lambda x: x in " \t" if you're comparing lines as sequences of characters, and don't want to synch up on blanks or hard tabs. Optional arg a is the first of two sequences to be compared. By default, an empty string. The elements of a must be hashable. See also .set_seqs() and .set_seq1(). Optional arg b is the second of two sequences to be compared. By default, an empty string. The elements of b must be hashable. See also .set_seqs() and .set_seq2(). Optional arg autojunk should be set to False to disable the "automatic junk heuristic" that treats popular elements as junk (see module documentation for more information). N)isjunkabautojunkset_seqs)selfrrrrrrr__init__s;  zSequenceMatcher.__init__cCs|j||j|dS)zSet the two sequences to be compared. >>> s = SequenceMatcher() >>> s.set_seqs("abcd", "bcde") >>> s.ratio() 0.75 N)set_seq1set_seq2)rrrrrrrs zSequenceMatcher.set_seqscCs0||jkrdS||_d|_|_dS)aMSet the first sequence to be compared. The second sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq1("bcde") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq2(). N)rmatching_blocksopcodes)rrrrrrs zSequenceMatcher.set_seq1cCsC||jkrdS||_d|_|_d|_|jdS)aMSet the second sequence to be compared. The first sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq2("abcd") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq1(). N)rrr fullbcount_SequenceMatcher__chain_b)rrrrrrs   zSequenceMatcher.set_seq2c Cs\|j}i|_}x9t|D]+\}}|j|g}|j|q#Wt|_}|j}|rx0|jD]"}||r~|j |q~q~Wx|D] }||=qWnt|_ }t |} |j rX| dkrX| dd} x<|j D].\}} t | | kr |j |q q Wx|D] }||=qDWndS)Nd)rb2j enumerate setdefaultappendsetbjunkrkeysaddZbpopularlenritems) rrr$ieltindicesZjunkrZpopularnZntestZidxsrrrZ __chain_b)s,       zSequenceMatcher.__chain_bcCs|j|j|j|jjf\}}}}||d} } } i} g} xt||D]}| j}i}x|j||| D]z}||krqn||krPn||ddd}||<|| kr||d||d|} } } qqW|} q]Wxm| |kr| |kr||| d r|| d|| dkr| d| d| d} } } qWx_| | |kr| | |kr||| |  r|| | || | kr| d7} qWxl| |krQ| |krQ||| drQ|| d|| dkrQ| d| d| d} } } qWx^| | |kr| | |kr||| | r|| | || | kr| d} qUWt| | | S)aFind longest matching block in a[alo:ahi] and b[blo:bhi]. If isjunk is not defined: Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where alo <= i <= i+k <= ahi blo <= j <= j+k <= bhi and for all (i',j',k') meeting those conditions, k >= k' i <= i' and if i == i', j <= j' In other words, of all maximal matching blocks, return one that starts earliest in a, and of all those maximal matching blocks that start earliest in a, return the one that starts earliest in b. >>> s = SequenceMatcher(None, " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) Match(a=0, b=4, size=5) If isjunk is defined, first the longest matching block is determined as above, but with the additional restriction that no junk element appears in the block. Then that block is extended as far as possible by matching (only) junk elements on both sides. So the resulting block never matches on junk except as identical junk happens to be adjacent to an "interesting" match. Here's the same example as before, but considering blanks to be junk. That prevents " abcd" from matching the " abcd" at the tail end of the second sequence directly. Instead only the "abcd" can match, and matches the leftmost "abcd" in the second sequence: >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) Match(a=1, b=0, size=4) If no blocks match, return (alo, blo, 0). >>> s = SequenceMatcher(None, "ab", "c") >>> s.find_longest_match(0, 2, 0, 1) Match(a=0, b=0, size=0) r r#)rrr$r) __contains__rangegetr )raloahiblobhirrr$ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr.Zj2lengetZnewj2lenjkrrrfind_longest_matchPsB8-    + $# $#z"SequenceMatcher.find_longest_matchcCs|jdk r|jSt|jt|j}}d|d|fg}g}x|r'|j\}}}}|j||||\} } } } | rS|j| || kr|| kr|j|| || fn| | |kr$| | |kr$|j| | || | |fq$qSqSW|jd} }}g}xw|D]o\}}}| ||kr|||kr||7}qM|r|j| ||fn|||} }}qMW|r|j| ||fn|j||dftt t j ||_|jS)aReturn list of triples describing matching subsequences. Each triple is of the form (i, j, n), and means that a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in i and in j. New in Python 2.5, it's also guaranteed that if (i, j, n) and (i', j', n') are adjacent triples in the list, and the second is not the last triple in the list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe adjacent equal blocks. The last triple is a dummy, (len(a), len(b), 0), and is the only triple with n==0. >>> s = SequenceMatcher(None, "abxcd", "abcd") >>> list(s.get_matching_blocks()) [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)] Nr ) rr,rrpopr;r'sortlistmapr _make)rlalbZqueuerr5r6r7r8r.r9r:xi1j1Zk1Z non_adjacenti2j2Zk2rrrget_matching_blockss8 %  +   z#SequenceMatcher.get_matching_blockscCs|jdk r|jSd}}g|_}x|jD]\}}}d}||krp||krpd}n*||krd}n||krd}n|r|j|||||fn||||}}|r:|jd||||fq:q:W|S)a[Return list of 5-tuples describing how to turn a into b. Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the tuple preceding it, and likewise for j1 == the previous j2. The tags are strings, with these meanings: 'replace': a[i1:i2] should be replaced by b[j1:j2] 'delete': a[i1:i2] should be deleted. Note that j1==j2 in this case. 'insert': b[j1:j2] should be inserted at a[i1:i1]. Note that i1==i2 in this case. 'equal': a[i1:i2] == b[j1:j2] >>> a = "qabxcd" >>> b = "abycdf" >>> s = SequenceMatcher(None, a, b) >>> for tag, i1, i2, j1, j2 in s.get_opcodes(): ... print(("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % ... (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))) delete a[0:1] (q) b[0:0] () equal a[1:3] (ab) b[0:2] (ab) replace a[3:4] (x) b[2:3] (y) equal a[4:6] (cd) b[3:5] (cd) insert a[6:6] () b[5:6] (f) Nr rreplacedeleteinsertequal)rrHr')rr.r9Zansweraibjsizetagrrr get_opcodess$       #zSequenceMatcher.get_opcodesc cs|j}|sdg}n|dddkr|d\}}}}}|t||||t||||f|d>> from pprint import pprint >>> a = list(map(str, range(1,40))) >>> b = a[:] >>> b[8:8] = ['i'] # Make an insertion >>> b[20] += 'x' # Make a replacement >>> b[23:28] = [] # Make a deletion >>> b[30] += 'y' # Make another replacement >>> pprint(list(SequenceMatcher(None,a,b).get_grouped_opcodes())) [[('equal', 5, 8, 5, 8), ('insert', 8, 8, 8, 9), ('equal', 8, 11, 9, 12)], [('equal', 16, 19, 17, 20), ('replace', 19, 20, 20, 21), ('equal', 20, 22, 21, 23), ('delete', 22, 27, 23, 23), ('equal', 27, 30, 23, 26)], [('equal', 31, 34, 27, 30), ('replace', 34, 35, 30, 31), ('equal', 35, 38, 31, 34)]] rLr r#N)zequalr r#r r#rSrS)rQmaxminr'r,) rr1ZcodesrPrDrFrErGZnngrouprrrget_grouped_opcodes<s(  66 6* -z#SequenceMatcher.get_grouped_opcodescCsBtdd|jD}t|t|jt|jS)aReturn a measure of the sequences' similarity (float in [0,1]). Where T is the total number of elements in both sequences, and M is the number of matches, this is 2.0*M / T. Note that this is 1 if the sequences are identical, and 0 if they have nothing in common. .ratio() is expensive to compute if you haven't already computed .get_matching_blocks() or .get_opcodes(), in which case you may want to try .quick_ratio() or .real_quick_ratio() first to get an upper bound. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.quick_ratio() 0.75 >>> s.real_quick_ratio() 1.0 css|]}|dVqdS)r#NrSr).0Ztriplerrr sz(SequenceMatcher.ratio..)sumrHrr,rr)rrrrrrationszSequenceMatcher.ratiocCs|jdkrMi|_}x.|jD] }|j|dd|| 0. Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities that don't score at least that similar to word are ignored. The best (no more than n) matches among the possibilities are returned in a list, sorted by similarity score, most similar first. >>> get_close_matches("appel", ["ape", "apple", "peach", "puppy"]) ['apple', 'ape'] >>> import keyword as _keyword >>> get_close_matches("wheel", _keyword.kwlist) ['while'] >>> get_close_matches("Apple", _keyword.kwlist) [] >>> get_close_matches("accept", _keyword.kwlist) ['except'] r zn must be > 0: %rgg?z cutoff must be in [0.0, 1.0]: %rcSsg|]\}}|qSrr)rXZscorerCrrr s z%get_close_matches..) ValueErrorrrrr]r\r[r'heapqnlargest)ZwordZ possibilitiesr1cutoffresultsrCrrrrs      cCsDdt|}}x*||kr?|||kr?|d7}qW|S)z} Return number of `ch` characters at the start of `line`. Example: >>> _count_leading(' abc', ' ') 3 r r#)r,)linechr.r1rrr_count_leadings rkc@speZdZdZddddZddZddZd d Zd d Zd dZ ddZ dS)ra Differ is a class for comparing sequences of lines of text, and producing human-readable differences or deltas. Differ uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. Each line of a Differ delta begins with a two-letter code: '- ' line unique to sequence 1 '+ ' line unique to sequence 2 ' ' line common to both sequences '? ' line not present in either input sequence Lines beginning with '? ' attempt to guide the eye to intraline differences, and were not present in either input sequence. These lines can be confusing if the sequences contain tab characters. Note that Differ makes no claim to produce a *minimal* diff. To the contrary, minimal diffs are often counter-intuitive, because they synch up anywhere possible, sometimes accidental matches 100 pages apart. Restricting synch points to contiguous matches preserves some notion of locality, at the occasional cost of producing a longer diff. Example: Comparing two texts. First we set up the texts, sequences of individual single-line strings ending with newlines (such sequences can also be obtained from the `readlines()` method of file-like objects): >>> text1 = ''' 1. Beautiful is better than ugly. ... 2. Explicit is better than implicit. ... 3. Simple is better than complex. ... 4. Complex is better than complicated. ... '''.splitlines(keepends=True) >>> len(text1) 4 >>> text1[0][-1] '\n' >>> text2 = ''' 1. Beautiful is better than ugly. ... 3. Simple is better than complex. ... 4. Complicated is better than complex. ... 5. Flat is better than nested. ... '''.splitlines(keepends=True) Next we instantiate a Differ object: >>> d = Differ() Note that when instantiating a Differ object we may pass functions to filter out line and character 'junk'. See Differ.__init__ for details. Finally, we compare the two: >>> result = list(d.compare(text1, text2)) 'result' is a list of strings, so let's pretty-print it: >>> from pprint import pprint as _pprint >>> _pprint(result) [' 1. Beautiful is better than ugly.\n', '- 2. Explicit is better than implicit.\n', '- 3. Simple is better than complex.\n', '+ 3. Simple is better than complex.\n', '? ++\n', '- 4. Complex is better than complicated.\n', '? ^ ---- ^\n', '+ 4. Complicated is better than complex.\n', '? ++++ ^ ^\n', '+ 5. Flat is better than nested.\n'] As a single multi-line string it looks like this: >>> print(''.join(result), end="") 1. Beautiful is better than ugly. - 2. Explicit is better than implicit. - 3. Simple is better than complex. + 3. Simple is better than complex. ? ++ - 4. Complex is better than complicated. ? ^ ---- ^ + 4. Complicated is better than complex. ? ++++ ^ ^ + 5. Flat is better than nested. Methods: __init__(linejunk=None, charjunk=None) Construct a text differencer, with optional filters. compare(a, b) Compare two sequences of lines; generate the resulting delta. NcCs||_||_dS)a Construct a text differencer, with optional filters. The two optional keyword parameters are for filter functions: - `linejunk`: A function that should accept a single string argument, and return true iff the string is junk. The module-level function `IS_LINE_JUNK` may be used to filter out lines without visible characters, except for at most one splat ('#'). It is recommended to leave linejunk None; as of Python 2.3, the underlying SequenceMatcher class has grown an adaptive notion of "noise" lines that's better than any static definition the author has ever been able to craft. - `charjunk`: A function that should accept a string of length 1. The module-level function `IS_CHARACTER_JUNK` may be used to filter out whitespace characters (a blank or tab; **note**: bad idea to include newline in this!). Use of IS_CHARACTER_JUNK is recommended. N)linejunkcharjunk)rrlrmrrrrMs zDiffer.__init__c cst|j||}x|jD]\}}}}}|dkrd|j||||||} n|dkr|jd|||} na|dkr|jd|||} n:|dkr|jd|||} ntd|f| Dd Hq"Wd S) a Compare two sequences of lines; generate the resulting delta. Each sequence must contain individual single-line strings ending with newlines. Such sequences can be obtained from the `readlines()` method of file-like objects. The delta generated also consists of newline- terminated strings, ready to be printed as-is via the writeline() method of a file-like object. Example: >>> print(''.join(Differ().compare('one\ntwo\nthree\n'.splitlines(True), ... 'ore\ntree\nemu\n'.splitlines(True))), ... end="") - one ? ^ + ore ? ^ - two - three ? - + tree + emu rIrJ-rK+rL zunknown tag %rN)rrlrQ_fancy_replace_dumprc) rrrcruncherrPr5r6r7r8grrrcomparees" !   zDiffer.compareccs1x*t||D]}d|||fVqWdS)z4Generate comparison results for a same-tagged range.z%s %sN)r3)rrPrClohir.rrrrrsz Differ._dumpc cs||kr||kst||||kre|jd|||}|jd|||}n0|jd|||}|jd|||}x||fD]} | DdHqWdS)Nrorn)AssertionErrorrr) rrr5r6rr7r8firstsecondrtrrr_plain_replaceszDiffer._plain_replaceccsd\}}t|j} d\} } xt||D]} || } | j| xt||D]}||}|| kr| dkrd|| } } qdqdn| j|| j|krd| j|krd| j|krd| j|| }}}qdqdWq7W||kr^| dkrG|j||||||DdHdS| | d}}}nd} |j ||||||DdH||||}}| dkrd}}| j ||x| j D]\}}}}}||||}}|dkr"|d|7}|d|7}q|dkr?|d |7}q|d kr\|d |7}q|d kr|d |7}|d |7}qt d|fqW|j ||||DdHn d|V|j ||d|||d|DdHdS)aL When replacing one block of lines with another, search the blocks for *similar* lines; the best-matching pair (if any) is used as a synch point, and intraline difference marking is done on the similar pair. Lots of work, but often worth it. Example: >>> d = Differ() >>> results = d._fancy_replace(['abcDefghiJkl\n'], 0, 1, ... ['abcdefGhijkl\n'], 0, 1) >>> print(''.join(results), end="") - abcDefghiJkl ? ^ ^ ^ + abcdefGhijkl ? ^ ^ ^ Gz??Ng?rrI^rJrnrKrorLrpzunknown tag %rz r#)r|r})NN)rrmr3rrr]r\r[r{ _fancy_helperrrQrc_qformat)rrr5r6rr7r8Z best_ratiorfrsZeqiZeqjr9rNr.rMZbest_iZbest_jZaeltZbeltatagsbtagsrPZai1Zai2Zbj1Zbj2rArBrrrrqsX        %  !!  "     zDiffer._fancy_replaceccsg}||krZ||kr?|j||||||}q|jd|||}n'||kr|jd|||}n|DdHdS)Nrnro)rqrr)rrr5r6rr7r8rtrrrrs  ! zDiffer._fancy_helperccstt|dt|d}t|t|d|d}t|t|d|d}||dj}||dj}d|V|rdd||fVnd|V|rdd||fVndS)a Format "?" output and deal with leading tabs. Example: >>> d = Differ() >>> results = d._qformat('\tabcDefghiJkl\n', '\tabcdefGhijkl\n', ... ' ^ ^ ^ ', ' ^ ^ ^ ') >>> for line in results: print(repr(line)) ... '- \tabcDefghiJkl\n' '? \t ^ ^ ^\n' '+ \tabcdefGhijkl\n' '? \t ^ ^ ^\n'  Nrpz- z? %s%s z+ )rUrkrstrip)rZalineZblinerrZcommonrrrr s""  zDiffer._qformat) r^r_r`rarrurrr{rqrrrrrrrs \ )   ^ z \s*(?:#\s*)?$cCs||dk S)z Return 1 for ignorable line: iff `line` is blank or contains a single '#'. Examples: >>> IS_LINE_JUNK('\n') True >>> IS_LINE_JUNK(' # \n') True >>> IS_LINE_JUNK('hello\n') False Nr)riZpatrrrr?sz cCs ||kS)z Return 1 for ignorable character: iff `ch` is a space or tab. Examples: >>> IS_CHARACTER_JUNK(' ') True >>> IS_CHARACTER_JUNK('\t') True >>> IS_CHARACTER_JUNK('\n') False >>> IS_CHARACTER_JUNK('x') False r)rjZwsrrrrOscCsP|d}||}|dkr-dj|S|s@|d8}ndj||S)z Convert range to the "ed" formatr#z{}z{},{})format)startstop beginningrrrr_format_range_unifiedfs     rr ccsd}xtd||j|D]} |sd}|rIdj|nd} |rddj|nd} dj|| |Vdj|| |Vn| d| d} } t| d | d }t| d | d }d j|||Vx| D]\}}}}}|dkr>x!|||D]}d|Vq%Wqn|dkrqx$|||D]}d|Vq[Wn|dkrx$|||D]}d|VqWqqWq"WdS)a Compare two sequences of lines; generate the delta as a unified diff. Unified diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with ---, +++, or @@) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The unidiff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the ISO 8601 format. Example: >>> for line in unified_diff('one two three four'.split(), ... 'zero one tree four'.split(), 'Original', 'Current', ... '2005-01-26 23:30:50', '2010-04-02 10:20:52', ... lineterm=''): ... print(line) # doctest: +NORMALIZE_WHITESPACE --- Original 2005-01-26 23:30:50 +++ Current 2010-04-02 10:20:52 @@ -1,4 +1,4 @@ +zero one -two -three +tree four FNTz {}rz --- {}{}{}z +++ {}{}{}r r#rRz@@ -{} +{} @@{}rLrprIrJrnrKrorS>replacedelete>rinsert)rrWrr)rrfromfiletofile fromfiledate tofiledater1linetermstartedrVfromdatetodaterylast file1_range file2_rangerPrDrFrErGrirrrr qs.)"    cCsX|d}||}|s'|d8}n|dkr@dj|Sdj|||dS)z Convert range to the "ed" formatr#z{}z{},{})r)rrrrrrr_format_range_contexts     rc cstdddddddd}d } xtd ||j|D]} | sd } |rjd j|nd } |rd j|nd } dj|| |Vdj|| |Vn| d| d} }d|Vt| d|d}dj||Vtdd| DroxW| D]L\}}}}}|dkrx(|||D]}|||VqNWqqWnt| d|d}dj||Vtdd| DrCxW| D]L\}}}}}|dkrx(|||D]}|||VqWqqWqCqCWd S)ah Compare two sequences of lines; generate the delta as a context diff. Context diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with *** or ---) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The context diff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the ISO 8601 format. If not specified, the strings default to blanks. Example: >>> print(''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(True), ... 'zero\none\ntree\nfour\n'.splitlines(True), 'Original', 'Current')), ... end="") *** Original --- Current *************** *** 1,4 **** one ! two ! three four --- 1,4 ---- + zero one ! tree four rKz+ rJz- rIz! rLz FNTz {}rz *** {}{}{}z --- {}{}{}r r#z***************rz *** {} ****{}css*|] \}}}}}|dkVqdS)rIrJN>replacedeleter)rXrP_rrrrYszcontext_diff..rRrz --- {} ----{}css*|] \}}}}}|dkVqdS)rIrKN>replaceinsertr)rXrPrrrrrY srS)dictrrWrrany)rrrrrrr1rprefixrrVrrryrrrPrDrFrrirrErGrrrrs2,!"   cCst||j||S)a Compare `a` and `b` (lists of strings); return a `Differ`-style delta. Optional keyword parameters `linejunk` and `charjunk` are for filter functions (or None): - linejunk: A function that should accept a single string argument, and return true iff the string is junk. The default is None, and is recommended; as of Python 2.3, an adaptive notion of "noise" lines is used that does a good job on its own. - charjunk: A function that should accept a string of length 1. The default is module-level function IS_CHARACTER_JUNK, which filters out whitespace characters (a blank or tab; note: bad idea to include newline in this!). Tools/scripts/ndiff.py is a command-line front-end to this function. Example: >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) >>> print(''.join(diff), end="") - one ? ^ + ore ? ^ - two - three ? - + tree + emu )rru)rrrlrmrrrrs"c#sddl}|jdt||||ddgfddfddfdd }|}|dkrxCt|VqWn1|d 7}d}xddg|} } d } xL| d krt|\} } } | |}| | | f| |<| d 7} qW| |kr2d V|}n | }d} x1|rq| |}| d 7} | |V|d 8}qAW|d }xJ|rt|\} } } | r|d }n |d 8}| | | fVqWqWdS) aReturns generator yielding marked up from/to side by side differences. Arguments: fromlines -- list of text lines to compared to tolines tolines -- list of text lines to be compared to fromlines context -- number of context lines to display on each side of difference, if None, all from/to text lines will be generated. linejunk -- passed on to ndiff (see ndiff documentation) charjunk -- passed on to ndiff (see ndiff documentation) This function returns an iterator which returns a tuple: (from line tuple, to line tuple, boolean flag) from/to line tuple -- (line num, line text) line num -- integer or None (to indicate a context separation) line text -- original line text with following markers inserted: '\0+' -- marks start of added text '\0-' -- marks start of deleted text '\0^' -- marks start of changed text '\1' -- marks end of added/deleted/changed text boolean flag -- None indicates context separation, True indicates either "from" or "to" line contains a change, otherwise False. This function/iterator was originally developed to generate side by side file difference for making HTML pages (see HtmlDiff class for example usage). Note, this function utilizes the ndiff function to generate the side by side difference markup. Optional ndiff arguments may be passed to this function and they in turn will be passed to ndiff. r Nz (\++|\-+|\^+)c sH||d7<|dkr;|||jdddfS|dkr|jd|jd}}g}|dd}j||x_|ddd D]J\}\} } |d| d||| | d || d}qW|dd}n:|jddd}|s(d }nd||d }|||fS) aReturns line of text with user's change markup and line formatting. lines -- list of lines from the ndiff generator to produce a line of text from. When producing the line of text to return, the lines used are removed from this list. format_key -- '+' return first line in list with "add" markup around the entire line. '-' return first line in list with "delete" markup around the entire line. '?' return first line in list with add/delete/change intraline markup (indices obtained from second line) None return first line in list with no markup side -- indice into the num_lines list (0=from,1=to) num_lines -- from/to current line number. This is NOT intended to be a passed parameter. It is present as a keyword argument to maintain memory of the current line numbers between calls of this function. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r#Nr r?cSs3|j|jdd|jg|jdS)Nr#r )r'rVspan)Z match_objectsub_inforrrrecord_sub_infos&z3_mdiff.._make_line..record_sub_inforprS)r<sub) linesZ format_keysideZ num_linestextZmarkersrrkeyZbeginend) change_rerr _make_line^s  ! &< z_mdiff.._make_linec 3s_g}d\}}xFxOt|dkrfy|jtWqtk rb|jdYqXqWdjdd|D}|jdr|}nR|jdr|dd|dd d fVqn|jd r|d 8}|d dd d fVqn|jdrK|d dd }}|d d}}n|jdr|d d|dd d fVqng|jdr|dd|d d d fVqn,|jd r|d 8}|d dd d fVqn|jdr3|d 7}d |dd d fVqn|jdrod |dd }}|d d}}n~|jdr|d 7}d |dd d fVqnE|jdr|d d d d|d d dfVqnx|dkr|d 7}dVqWx|dkr0|d 8}d VqW|jdrItq||d fVqWd S)!aYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from a differencing iterator, processes them and yields them. When it can it yields both a "from" and a "to" line, otherwise it will yield one or the other. In addition to yielding the lines of from/to text, a boolean flag is yielded to indicate if the text line(s) have differences in them. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r rXrcSsg|]}|dqS)r r)rXrirrrrbs z2_mdiff.._line_iterator..z-?+?rr#Tz--++rnN--?+--+- z-+?z-?+z+--ro+ +-rpFr)r r )rrr)rrrr)NrTrr)rNT)r,r'next StopIterationjoin startswith)rZnum_blanks_pendingZnum_blanks_to_yieldrh from_lineto_line)rdiff_lines_iteratorrr_line_iteratorsl   & &&   0     z_mdiff.._line_iteratorc3s}gg}}xxt|dks@t|dkrt|\}}}|dk rw|j||fn|dk r|j||fqqW|jd\}}|jd\}}|||p|fVqWdS)atYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from the line iterator. Its difference from that iterator is that this function always yields a pair of from/to text lines (with the change indication). If necessary it will collect single from/to lines until it has a matching pair from/to pair to yield. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. r N)r,rr'r<)Z line_iterator fromlinestolinesrr found_diffZfromDiffZto_diff)rrr_line_pair_iterators  '  z#_mdiff.._line_pair_iteratorr#F)NNN)recompilerr)rrcontextrlrmrrZline_pair_iteratorZlines_to_writeindexZ contextLinesrrrr.r)rrrrr_mdiff4sJ" 8[              ram %(table)s%(legend)s aH table.diff {font-family:Courier; border:medium;} .diff_header {background-color:#e0e0e0} td.diff_header {text-align:right} .diff_next {background-color:#c0c0c0} .diff_add {background-color:#aaffaa} .diff_chg {background-color:#ffff77} .diff_sub {background-color:#ffaaaa}aZ %(header_row)s %(data_rows)s
    a
    Legends
    Colors
     Added 
    Changed
    Deleted
    Links
    (f)irst change
    (n)ext change
    (t)op
    c@seZdZdZeZeZeZeZdZddde ddZ dddd d d Z d d Z ddZ ddZddZddZddZddZdddd ddZdS)r a{For producing HTML side by side comparison with change highlights. This class can be used to create an HTML table (or a complete HTML file containing the table) showing a side by side, line by line comparison of text with inter-line and intra-line change highlights. The table can be generated in either full or contextual difference mode. The following methods are provided for HTML generation: make_table -- generates HTML for a single side by side table make_file -- generates complete HTML file with a single side by side table See tools/scripts/diff.py for an example usage of this class. r NcCs(||_||_||_||_dS)aHtmlDiff instance initializer Arguments: tabsize -- tab stop spacing, defaults to 8. wrapcolumn -- column number where lines are broken and wrapped, defaults to None where lines are not wrapped. linejunk,charjunk -- keyword arguments passed into ndiff() (used to by HtmlDiff() to generate the side by side HTML differences). See ndiff() documentation for argument default values and descriptions. N)_tabsize _wrapcolumn _linejunk _charjunk)rtabsizeZ wrapcolumnrlrmrrrrs   zHtmlDiff.__init__rFcCsD|jtd|jd|jd|j||||d|d|S)aReturns HTML file of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). ZstylesZlegendtablernumlines)_file_templater_styles_legend make_table)rrrfromdesctodescrrrrr make_files    zHtmlDiff.make_filecsNfddfdd|D}fdd|D}||fS)aReturns from/to line lists with tabs expanded and newlines removed. Instead of tab characters being replaced by the number of spaces needed to fill in to the next tab stop, this function will fill the space with tab characters. This is done so that the difference algorithms can identify changes in a file when tabs are replaced by spaces and vice versa. At the end of the HTML generation, the tab characters will be replaced with a nonbreakable space. csO|jdd}|jj}|jdd}|jddjdS)Nrprrr)rI expandtabsrr)ri)rrr expand_tabssz2HtmlDiff._tab_newline_replace..expand_tabscsg|]}|qSrr)rXri)rrrrbs z1HtmlDiff._tab_newline_replace..csg|]}|qSrr)rXri)rrrrbs r)rrrr)rrr_tab_newline_replaces  zHtmlDiff._tab_newline_replacec Csv|s|j||fdSt|}|j}||ks[||jdd|krr|j||fdSd}d}d}x||kr ||kr ||dkr|d7}||}|d7}q||dkr|d7}d}q|d7}|d7}qW|d|} ||d} |rL| d} d|| } n|j|| f|j|d| dS) aBuilds list of text lines by splitting text lines at wrap point This function will determine if the input text line needs to be wrapped (split) into separate lines. If so, the first wrap point will be determined and the first line appended to the output text line list. This function is used recursively to handle the second part of the split line to further split it. NrrRr rr#r>)r'r,rcount _split_line) rZ data_listZline_numrrOrTr.r1markZline1Zline2rrrrs8   )       zHtmlDiff._split_linec csx|D]\}}}|dkr6|||fVqn||\}}\}}gg} } |j| |||j| ||xZ| s| r| r| jd}nd}| r| jd}nd}|||fVqWqWdS)z5Returns iterator that splits (wraps) mdiff text linesNr rrp)rrp)rrp)rr<) rdiffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistrrr _line_wrappers   zHtmlDiff._line_wrapperc Csggg}}}x|D]\}}}y<|j|jd|||j|jd||Wn,tk r|jd|jdYnX|j|qW|||fS)zCollects mdiff output into separate lists Before storing the mdiff from/to data into a list, it is converted into a single line of text with HTML markup. r r#N)r' _format_line TypeError)rrrrflaglistrrrrrr_collect_liness   zHtmlDiff._collect_linesc Csy%d|}d|j||f}Wntk r?d}YnX|jddjddjdd }|jd d j}d |||fS) aReturns HTML markup of "from" / "to" text lines side -- 0 or 1 indicating "from" or "to" text flag -- indicates if difference on line linenum -- line number (used for line number column) text -- line text to be marked up z%dz id="%s%s"r&z&rz>%s%s)_prefixrrIr)rrrZlinenumridrrrr2s   *zHtmlDiff._format_linecCs<dtj}dtj}tjd7_||g|_dS)zCreate unique anchor prefixeszfrom%d_zto%d_r#N)r _default_prefixr)rZ fromprefixtoprefixrrr _make_prefixIs  zHtmlDiff._make_prefixcCsY|jd}dgt|}dgt|}d \} } d} xt|D]x\} } | r| sd} | } td| |g} d|| f|| <| d7} d|| f|| nz2 No Differences Found z( Empty File z!fz#t)r F)rr,r%rT)rrrrrrrnext_id next_hrefZnum_chgZ in_changerr.rrrr_convert_flagsTs:          zHtmlDiff._convert_flagsc Cs|j|j||\}}|r1|}nd}t|||d|jd|j}|jrv|j|}n|j|\} } } |j| | | ||\} } } } } g}dd}x}t t | D]i}| |dkr|dkrD|j dqDq|j || || || || || |fqW|sT|rudd d |d d |f}nd }|j t d d j|d |d|jd}|jddjddjddjddjddS)aReturns HTML table of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). Nrlrmz1 %s%sz%%s%s r z) z %s%s%s%sz!
    z+%srZ data_rows header_rowrr#Z+zZ-zZ^zrzrz )rrrrrrrrrr3r,r'_table_templaterrrrI)rrrrrrrZ context_linesrrrrrrrhZfmtr.rrrrrrsJ    $      zHtmlDiff.make_table)r^r_r`rarrrrrrrrrrrrrrrrrrrrr ts&     7    / c csy"idd6dd6t|}Wn"tk rFtd|YnXd|f}x6|D].}|dd|krZ|ddVqZqZWdS)a0 Generate one of the two sequences that generated a delta. Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract lines originating from file 1 or 2 (parameter `which`), stripping off line prefixes. Examples: >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) >>> diff = list(diff) >>> print(''.join(restore(diff, 1)), end="") one two three >>> print(''.join(restore(diff, 2)), end="") ore tree emu z- r#z+ rz)unknown delta choice (must be 1 or 2): %rz N)intKeyErrorrc)ZdeltaZwhichrPprefixesrirrrrs"   cCs%ddl}ddl}|j|S)Nr )doctestdifflibZtestmod)rrrrr_testsr__main__) ra__all__rd collectionsr Z _namedtupler rrrrkrrrmatchrrrr rrrrrrrrobjectr rrr^rrrrsL    0 O  G J$  ]  lib64/python3.4/__pycache__/heapq.cpython-34.pyo000064400000033126152342604300015204 0ustar00 e fMF@sdZdZdddddddd gZd d lmZmZmZmZd dZd dZ ddZ dd Z ddZ ddZ ddZddZddZddZddZddZddZyd dlTWnek r YnXd dZeZd!d"dZeZd!d#dZed$krgZd%d&d'd(d)d*d+d,d-d g ZxeD]Zeeeq~WgZxereje eqWe ed d!l!Z!e!j"nd!S).aHeap queue algorithm (a.k.a. priority queue). Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is that a[0] is always its smallest element. Usage: heap = [] # creates an empty heap heappush(heap, item) # pushes a new item on the heap item = heappop(heap) # pops the smallest item from the heap item = heap[0] # smallest item on the heap without popping it heapify(x) # transforms list into a heap, in-place, in linear time item = heapreplace(heap, item) # pops and returns smallest item, and adds # new item; the heap size is unchanged Our API differs from textbook heap algorithms as follows: - We use 0-based indexing. This makes the relationship between the index for a node and the indexes for its children slightly less obvious, but is more suitable since Python uses 0-based indexing. - Our heappop() method returns the smallest item, not the largest. These two make it possible to view the heap as a regular Python list without surprises: heap[0] is the smallest item, and heap.sort() maintains the heap invariant! upHeap queues [explanation by François Pinard] Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is that a[0] is always its smallest element. The strange invariant above is meant to be an efficient memory representation for a tournament. The numbers below are `k', not a[k]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 In the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In an usual binary tournament we see in sports, each cell is the winner over the two cells it tops, and we can trace the winner down the tree to see all opponents s/he had. However, in many computer applications of such tournaments, we do not need to trace the history of a winner. To be more memory efficient, when a winner is promoted, we try to replace it by something else at a lower level, and the rule becomes that a cell and the two cells it tops contain three different items, but the top cell "wins" over the two topped cells. If this heap invariant is protected at all time, index 0 is clearly the overall winner. The simplest algorithmic way to remove it and find the "next" winner is to move some loser (let's say cell 30 in the diagram above) into the 0 position, and then percolate this new 0 down the tree, exchanging values, until the invariant is re-established. This is clearly logarithmic on the total number of items in the tree. By iterating over all items, you get an O(n ln n) sort. A nice feature of this sort is that you can efficiently insert new items while the sort is going on, provided that the inserted items are not "better" than the last 0'th element you extracted. This is especially useful in simulation contexts, where the tree holds all incoming events, and the "win" condition means the smallest scheduled time. When an event schedule other events for execution, they are scheduled into the future, so they can easily go into the heap. So, a heap is a good structure for implementing schedulers (this is what I used for my MIDI sequencer :-). Various structures for implementing schedulers have been extensively studied, and heaps are good for this, as they are reasonably speedy, the speed is almost constant, and the worst case is not much different than the average case. However, there are other representations which are more efficient overall, yet the worst cases might be terrible. Heaps are also very useful in big disk sorts. You most probably all know that a big sort implies producing "runs" (which are pre-sorted sequences, which size is usually related to the amount of CPU memory), followed by a merging passes for these runs, which merging is often very cleverly organised[1]. It is very important that the initial sort produces the longest runs possible. Tournaments are a good way to that. If, using all the memory available to hold a tournament, you replace and percolate items that happen to fit the current run, you'll produce runs which are twice the size of the memory for random input, and much better for input fuzzily ordered. Moreover, if you output the 0'th item on disk and get an input which may not fit in the current tournament (because the value "wins" over the last output value), it cannot fit in the heap, so the size of the heap decreases. The freed memory could be cleverly reused immediately for progressively building a second heap, which grows at exactly the same rate the first heap is melting. When the first heap completely vanishes, you switch heaps and start a new run. Clever and quite effective! In a word, heaps are useful memory structures to know. I use them in a few applications, and I think it is good to keep a `heap' module around. :-) -------------------- [1] The disk balancing algorithms which are current, nowadays, are more annoying than clever, and this is a consequence of the seeking capabilities of the disks. On devices which cannot seek, like big tape drives, the story was quite different, and one had to be very clever to ensure (far in advance) that each tape movement will be the most effective possible (that is, will best participate at "progressing" the merge). Some tapes were even able to read backwards, and this was also used to avoid the rewinding time. Believe me, real good tape sorts were quite spectacular to watch! From all times, sorting has always been a Great Art! :-) heappushheappopheapify heapreplacemergenlargest nsmallest heappushpop)islicecountteechaincCs+|j|t|dt|ddS)z4Push item onto heap, maintaining the heap invariant.r N)append _siftdownlen)heapitemr*/opt/alt/python34/lib64/python3.4/heapq.pyrs cCs@|j}|r6|d}||d heap[0]: item = heapreplace(heap, item) r )r)rrrrrrrs   cCs?|r;|d|kr;|d|}|dt|}x+tt|dD]}t||q#WdS)z8Transform list into a heap, in-place, in O(len(x)) time.N)rreversedranger)xnirrrrs cCs?|r;||dkr;|d|}|dt|}x+tt|dD]}t||q#WdS)z;Transform list into a maxheap, in-place, in O(len(x)) time.rN)rrrr)rrrrrr _heapify_maxs r!cCs}|dkrgSt|}tt||}|s;|St|t}x|D]}|||qRW|jdd|S)zfFind the n largest elements in a dataset. Equivalent to: sorted(iterable, reverse=True)[:n] r reverseT)iterlistr rrsort)riterableitresult _heappushpopelemrrrrs    cCsw|dkrgSt|}tt||}|s;|St|t}x|D]}|||qRW|j|S)zYFind the n smallest elements in a dataset. Equivalent to: sorted(iterable)[:n] r )r#r$r r!r r%)rr&r'r(r)r*rrrrs     cCsf||}xK||krW|dd?}||}||krS|||<|}q nPq W|||>> list(merge([1,3,5,7], [0,2,4,8], [5,10,15,20], [], [25])) [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25] rr N) rr StopIterationrr enumeratemapr#__next__r__self__) iterables_heappop _heapreplace_StopIteration_lenhh_appenditnumr'nextvsrrrr]s0  "      Nc CsT|dkrut|}tt|d}|s7gS|dkrYtt||gStt||d|gSyt|}Wnttfk rYn'X||krt|d|d|S|dkrt |t }t ||}dd|DSt |\}}t t ||t |}t ||}dd|DS)zbFind the n smallest elements in a dataset. Equivalent to: sorted(iterable, key=key)[:n] rNkeycSsg|]}|dqS)r r).0rrrr s znsmallest..cSsg|]}|dqS)rr)rFrGrrrrHs )r#r$r minr r TypeErrorAttributeErrorsortedzipr _nsmallestr r7) rr&rEr'headsizer(in1in2rrrrs,     c Csf|dkrut|}tt|d}|s7gS|dkrYtt||gStt||d|gSyt|}Wnttfk rYn-X||krt|d|ddd|S|dkrt |t dd }t ||}dd|DSt |\}}t t ||t dd |}t ||}d d|DS) zoFind the n largest elements in a dataset. Equivalent to: sorted(iterable, key=key, reverse=True)[:n] rNrEr"Tr cSsg|]}|dqS)r r)rFrGrrrrHs znlargest..cSsg|]}|dqS)rr)rFrGrrrrHs rS)r#r$r maxr rrJrKrLrMr _nlargestr r7) rr&rEr'rOrPr(rQrRrrrrs,      $__main__r r)#__doc__ __about____all__ itertoolsr r r r rrrrrr r!rrrrr3r_heapq ImportErrorrrNrU__name__rdatarr%rprintZdoctestZtestmodrrrrsJ`"        5     ($% $    lib64/python3.4/__pycache__/pickle.cpython-34.pyc000064400000133610152342604300015340 0ustar00 f f@sdZddlmZddlmZddlmZmZmZddlm Z ddl Z ddl m Z ddl m Z mZddlZddlZddlZddlZd d d d d ddddg ZeefZdZdddddddgZdZdZGdd d eZGdd d eZGdd d eZGdddeZydd l m!Z!Wne"k rdZ!YnXd!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYeIeSeTeUgZZdXZ[dYZ\dZZ]d[Z^d\Z_d]Z`d^Zad_Zbd`ZcdaZddbZedcZfejgdddeehDGdfdgdgZiGdhdidiZjdjdkdlZkdjdmdnZldodpZmdqdrZnGdsdtdtZoGdudvdvZpddwdxdydzZqddwdxd{d|Zrdwdxd}d~ddddZsdwdxd}d~ddddZtyDddlumZmZmZmvZvmwZwmxZxmyZymzZzm{Z{WnBe"k reoepf\ZvZweqeresetf\ZxZyZzZ{YnXddZ|e}dkrddl~Z~e~jddZejdde~jdddddejddddddejdddddejZejrye|nPej rejn9ddlZx*ejD]ZezeZejeqWndS)aCreate portable serialized representations of Python objects. See module copyreg for a mechanism for registering custom picklers. See module pickletools source for extensive comments. Classes: Pickler Unpickler Functions: dump(object, file) dumps(object) -> string load(file) -> object loads(string) -> object Misc variables: __version__ format_version compatible_formats ) FunctionType)dispatch_table)_extension_registry_inverted_registry_extension_cache)isliceN)maxsize)packunpack PickleError PicklingErrorUnpicklingErrorPickler Unpicklerdumpdumpsloadloadsz4.0z1.0z1.1z1.2z1.3z2.0z3.0c@seZdZdZdS)r z6A common base class for the other pickling exceptions.N)__name__ __module__ __qualname____doc__rr+/opt/alt/python34/lib64/python3.4/pickle.pyr ?s c@seZdZdZdS)r z]This exception is raised when an unpicklable object is passed to the dump() method. N)rrrrrrrrr Cs c@seZdZdZdS)r aThis exception is raised when there is a problem unpickling an object, such as a security violation. Note that other exceptions may also be raised during unpickling, including (but not necessarily limited to) AttributeError, EOFError, ImportError, and IndexError. N)rrrrrrrrr Js c@seZdZddZdS)_StopcCs ||_dS)N)value)selfrrrr__init__Xsz_Stop.__init__N)rrrrrrrrrWs r) PyStringMap(.012FIJKLMNPQRSTUVXabcd}eghijl]opqrst)uGsI01 sI00 ssssssssssssBCsssssssssscCs(g|]}tjd|r|qS)z[A-Z][A-Z0-9_]+$)rematch).0xrrr s rPc@sUeZdZdZddZddZddZd d d Zd d ZdS)_Framer@icCs||_d|_dS)N) file_write current_frame)rrSrrrrs z_Framer.__init__cCstj|_dS)N)ioBytesIOrT)rrrr start_framingsz_Framer.start_framingcCs>|jr:|jjdkr:|jddd|_ndS)NrforceT)rTtell commit_frame)rrrr end_framingsz_Framer.end_framingFc Cs|jr|j}|j|jks-|r|jC}t|}|j}|t|td|||WdQX|jd|j qndS)Nz= 4 to enable supportzz&Can't get local attribute {!r} on {!r}z Can't get attribute {!r} on {!r})splitr^AttributeErrorformatgetattr)objnameallow_qualnameZ dotted_pathZsubpathrrr _getattributes     ryc Cst|dd}|dk r"|SxvttjjD]_\}}|dks8|dkrbq8ny t||||kr|SWq8tk rYq8Xq8WdS)z$Find the module an object belong to.rN__main__)rulistsysmodulesitemsryrs)rvrwrx module_namemodulerrr whichmodules "  rcCs|dkrdS|jd?d}|j|dddd}|dkr|dkr|d d kr|dd @dkr|d d}qn|S)aEncode a long to a two's complement little-endian binary string. Note that 0 is a special case, returning an empty string, to save a byte in the LONG1 pickling context. >>> encode_long(0) b'' >>> encode_long(255) b'\xff\x00' >>> encode_long(32767) b'\xff\x7f' >>> encode_long(-256) b'\x00\xff' >>> encode_long(-32768) b'\x00\x80' >>> encode_long(-128) b'\x80' >>> encode_long(127) b'\x7f' >>> rrnrrj byteorderlittlesignedTNrkrk) bit_lengthto_bytes)rOnbytesresultrrr encode_long's $rcCstj|ddddS)a\Decode a long from a two's complement little-endian binary string. >>> decode_long(b'') 0 >>> decode_long(b"\xff\x00") 255 >>> decode_long(b"\xff\x7f") 32767 >>> decode_long(b"\x00\xff") -256 >>> decode_long(b"\x00\x80") -32768 >>> decode_long(b"\x80") -128 >>> decode_long(b"\x7f") 127 rrrT)int from_bytes)rcrrr decode_longEsrc@seZdZdddddZddZdd Zd d Zd d ZddZdddZ ddZ ddZ ddddddZ iZ ddZee eddrs )rreBINFLOATr FLOATrr)rrvrrr save_floats z_Pickler.save_floatcCs|jdkrZ|s.|jtfd|n(|jtjt|ddfd|dSt|}|dkr|jtt d||nZ|dkr|jdkr|jt t d||n|jt t d |||j |dS) Nrrvlatin1rzd?Z5e5ee6dd sys.maxsize: %d)r rir|rrr7rp)rrorrrrp-sz_Unpickler.load_framecCs9|jddjd}|j|j|dS)Nrjrrk)rmdecoder;r@)rrrrr load_persid4sz_Unpickler.load_persidcCs)|jj}|j|j|dS)N)r:popr;r@)rrrrrload_binpersid9sz_Unpickler.load_binpersidcCs|jddS)N)r;)rrrr load_none>sz_Unpickler.load_nonecCs|jddS)NF)r;)rrrr load_falseBsz_Unpickler.load_falsecCs|jddS)NT)r;)rrrr load_trueFsz_Unpickler.load_truecCsj|j}|tddkr+d}n.|tddkrJd}nt|d}|j|dS)NrjFTr)rmrrrr;)rrcvalrrrload_intJs   z_Unpickler.load_intcCs'|jtd|jdddS)NzdrBr)r;r ri)rrrr load_binfloat{sz_Unpickler.load_binfloatcCs-|jdkr|S|j|j|jSdS)Nr)r1rCr3)rrrrr_decode_stringsz_Unpickler._decode_stringcCs|jdd}t|dkr_|d|dkr_|ddkr_|dd}n td|j|jtj|ddS) Nrjrrs"'z)the STRING opcode argument must be quotedrkrkrk)rmr^r r;rUr escape_decode)rrcrrr load_strings 6 z_Unpickler.load_stringcCs_td|jd\}|dkr6tdn|j|}|j|j|dS)Nzs z(_Unpickler.load_dict..rr)r?r:ranger^)rrdr)r~r load_dicts  z_Unpickler.load_dictcCst|j|dd}|j|d=|sRt|t sRt|dry||}Wqtk r}z1td|jt|ftj dWYdd}~XqXn|j |}|j |dS)NrjZ__getinitargs__zin constructor for %s: %sr) rr:rrrrrrr|exc_inforr;)rklassrrrerrrrr _instantiates<z_Unpickler._instantiatecCsj|jddjd}|jddjd}|j||}|j||jdS)Nrjrrkrk)rmrC find_classrsr?)rrrwrqrrr load_instsz_Unpickler.load_instcCs6|j}|jj|d}|j||dS)Nrj)r?r:rErs)rrrqrrrload_objs z_Unpickler.load_objcCsA|jj}|jj}|j||}|j|dS)N)r:rErr;)rrrrvrrr load_newobj#sz_Unpickler.load_newobjcCsS|jj}|jj}|jj}|j|||}|j|dS)N)r:rErr;)rrrrrvrrrload_newobj_ex*s z_Unpickler.load_newobj_excCsa|jddjd}|jddjd}|j||}|j|dS)Nrjzutf-8rkrk)rmrCrtr;)rrrwrqrrr load_global2sz_Unpickler.load_globalcCsn|jj}|jj}t|tk sBt|tk rQtdn|j|j||dS)NzSTACK_GLOBAL requires str)r:rErrr r;rt)rrwrrrrload_stack_global9s $z_Unpickler.load_stack_globalcCs$|jdd}|j|dS)Nrjr)ri get_extension)rr*rrr load_ext1Asz_Unpickler.load_ext1cCs,td|jd\}|j|dS)Nzrrrr{Ps    z_Unpickler.get_extensioncCs|jdkrk|jrk||ftjkrItj||f\}}qk|tjkrktj|}qknt|ddttj||d|jdkS)Nrrrrxr) rrr(Z NAME_MAPPINGZIMPORT_MAPPINGr ryr|r})rrrwrrrrt`sz_Unpickler.find_classcCs3|j}|j}|d}|||dr/rrr load_setitems     z_Unpickler.load_setitemcCsq|j}|j}||d}x:t|dt|dD]}||d|||s"           $*  t5D #              lib64/python3.4/__pycache__/sndhdr.cpython-34.pyo000064400000015161152342604300015367 0ustar00 i fp@sZdZddgZddZddZgZddZejeddZejed d Zejed d Z eje d dZ eje ddZ eje ddZ eje ddZ eje ddZddZddZddZddZdd Zed!krVend"S)#aRoutines to help recognizing sound files. Function whathdr() recognizes various types of sound file headers. It understands almost all headers that SOX can decode. The return tuple contains the following items, in this order: - file type (as SOX understands it) - sampling rate (0 if unknown or hard to decode) - number of channels (0 if unknown or hard to decode) - number of frames in the file (-1 if unknown or hard to decode) - number of bits/sample, or 'U' for U-LAW, or 'A' for A-LAW If the file doesn't have a recognizable type, it returns None. If the file can't be opened, OSError is raised. To compute the total time, divide the number of frames by the sampling rate (a frame contains a sample for each channel). Function what() calls whathdr(). (It used to also use some heuristics for raw data, but this doesn't work very well.) Finally, the function test() is a simple main program that calls what() for all files mentioned on the argument list. For directory arguments it calls what() for all files in that directory. Default argument is "." (testing all files in the current directory). The option -r tells it to recurse down directories found inside explicitly given directories. whatwhathdrcCst|}|S)zGuess the type of a sound file.)r)filenameresr+/opt/alt/python34/lib64/python3.4/sndhdr.pyr#s c CsYt|dD}|jd}x'tD]}|||}|r(|Sq(WdSWdQXdS)zRecognize sound headers.rbiN)openreadtests)rfhZtfrrrrr)s cCsddl}|jdsdS|dddkr>d}n#|dddkr]d}ndS|jdy|j|d }Wnt|jfk rdSYnX||j|j|jd|j fS) NsFORM sAIFCaifcsAIFFZaiffr) r startswithseekrEOFErrorError getframerate getnchannels getnframes getsampwidth)r r rZfmtarrr test_aifc:s     rc Cs6|jdrt}n#|dddkr7t}ndSd}||dd}||dd}||dd}||dd }||d d }d } |d krd } n6|d krd} n!|dkrd} d } nd} | |} | r|| } nd} |||| | fS)Ns.sndds.dns.ZaurrU?)rr)r get_long_be get_long_le) r r funcZfiletypeZhdr_sizeZ data_sizeencodingrateZ nchannelsZ sample_sizeZ sample_bitsZ frame_sizeZnframerrrtest_auOs2          r-cCsr|dddks,|dddkr0dSt|dd}|rYd |}nd }d |d dd fS)NAEsFSSDsHCOMi"Vr Zhcomr"rr')r()r r Zdivisorr,rrr test_hcomps, r4cCs|jdsdSt|dd}d}d|koFdknr||dkrd||d}|rtd |}qnd |dd d fS) NsCreative Voice Filer r ir"rg.AZvocrr')r get_short_leint)r r Zsbseekr,Zratecoderrrtest_voc}s,r9cCsddl}|jd sH|dddksH|dddkrLdS|jdy|j|d}Wnt|jfk rdSYnXd |j|j|jd|j fS) Nr sRIFFrrsWAVErsfmt rZwav) waverrZopenfprrrrrr)r r r:wrrrtest_wavs <  r<cCs.|jd s&|dddkr*dSdS) NsFORMrrs8SVX8svxr r")r=r r"r r)r)r r rrr test_8svxs&r>cCsR|jdrNt|dd}t|dd}d|d|dfSdS)NsSOUNDrrr r5Zsndtr")rr)r7)r r Znsamplesr,rrr test_sndtsr?cCs[|jdrWt|dd}d|ko<dknrWd|dd dfSndS) Nsr$riiaZsndrr"rr')rr7)r r r,rrr test_sndrsr@cCs,|dd>|dd>B|dd>B|dBS)Nr r!r"rr$rr%r)brrrr(sr(cCs,|dd>|dd>B|dd>B|dBS)Nr%r!r$rr"rr r)rArrrr)sr)cCs|dd>|dBS)Nr rr"r)rArrr get_short_besrBcCs|dd>|dBS)Nr"rr r)rArrrr7sr7c Csddl}d}|jddrQ|jddkrQ|jdd=d}nyJ|jddrt|jdd|dntdg|dWn/tk r|jjd|jdYnXdS)Nr r"z-rr$.z [Interrupted] )sysargvtestallKeyboardInterruptstderrwriteexit)rD recursiverrrtests &   rLc Csddl}ddl}x|D]}|jj|rt|ddd|sW|rtdddl}|j|jj|d}t||dqtdqt|ddd|jj ytt |Wqt k rtd YqXqWdS) Nr z/:end zrecursing down:*z*** directory (use -r) ***:z*** not found ***) rDospathisdirprintglobjoinrFstdoutflushrOSError)listrKZtoplevelrDrQrrUnamesrrrrFs"         rF__main__N)__doc____all__rrr rappendr-r4r9r<r>r?r@r(r)rBr7rLrF__name__rrrrs8                       lib64/python3.4/__pycache__/hmac.cpython-34.pyo000064400000012032152342604300015007 0ustar00 f f@sdZddlZddlmZddlZedde dDZ edde dDZ dZ Gdd d Z ddd d ZdS) zxHMAC (Keyed-Hashing for Message Authentication) Python module. Implements the HMAC algorithm as described by RFC 2104. N)_compare_digestccs|]}|dAVqdS)\N).0xrr)/opt/alt/python34/lib64/python3.4/hmac.py srccs|]}|dAVqdS)6Nr)rrrrrr sc@s|eZdZdZdZddddZeddZdd Zd d Z d d Z ddZ ddZ dS)HMACz~RFC 2104 HMAC class. Also complies with RFC 4231. This supports the API for Cryptographic Hash Functions (PEP 247). @Ncst|ttfs1tdt|jndkr\tjdtdt j nt rt|_ nBtt rdfdd|_ ndfdd|_ |j |_|j |_|jj|_t|jd r<|jj}|d kr_tjd ||jftd|j}q_n#tjd |jtd|j}||_t||kr|j |j}n|t|t|}|jj|jt|jj|jt|dk r|j|ndS) a1Create a new HMAC object. key: key for the keyed hash object. msg: Initial input for the hash, if provided. digestmod: A module supporting PEP 247. *OR* A hashlib constructor returning a new hash object. *OR* A hash name suitable for hashlib.new(). Defaults to hashlib.md5. Implicit default to hashlib.md5 is deprecated and will be removed in Python 3.6. Note: key and msg must be a bytes or bytearray objects. z,key: expected bytes or bytearray, but got %rNz4szHMAC.__init__..cs j|S)N)r)r)rrrr6s block_sizez:block_size of %d seems too small; using our default of %d.zs  rlib64/python3.4/__pycache__/bdb.cpython-34.pyo000064400000044406152342604300014640 0ustar00 h f:[@sdZddlZddlZddlZddlmZdddgZGdddeZGdddZ d d Z Gd ddZ d d Z ddZ Gddde ZddZddZddZdS)zDebugger basicsN) CO_GENERATORBdbQuitBdb Breakpointc@seZdZdZdS)rz Exception to give up completely.N)__name__ __module__ __qualname____doc__r r (/opt/alt/python34/lib64/python3.4/bdb.pyr s c@s2eZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&d'Zdd(d)Zd*d+Zd,d-Zd.d/Zdd0d1Zd2d3Zd4d5Zd6ddd7d8Zd9d:Zd;d<Zd=d>Z d?d@Z!dAdBZ"dCdDZ#dEdFZ$dGdHZ%dIdJZ&dKdLZ'dMdNZ(dOdPdQZ)dddRdSZ*dddTdUZ+dVdWZ,dXdYZ-dS)ZrzGeneric Python debugger base class. This class takes care of details of the trace facility; a derived class should implement user interaction. The standard debugger class (pdb.Pdb) is an example. NcCs:|rt|nd|_i|_i|_d|_dS)N)setskipbreaksfncacheframe_returning)selfr r r r __init__s  z Bdb.__init__cCsr|d|dddkr"|S|jj|}|sntjj|}tjj|}||j|)rgetospathabspathnormcase)rfilenamecanonicr r r rsz Bdb.canoniccCs3ddl}|jd|_|jdddS)Nr) linecache checkcachebotframe _set_stopinfo)rrr r r reset&s   z Bdb.resetcCs|jr dS|dkr&|j|S|dkrB|j||S|dkr^|j||S|dkrz|j||S|dkr|jS|dkr|jS|dkr|jStdt||jS) NlinecallreturnZ exceptionZc_callZ c_exceptionZc_returnz*bdb.Bdb.dispatch: unknown debugging event:)quitting dispatch_line dispatch_calldispatch_returndispatch_exceptiontrace_dispatchprintrepr)rframeZeventargr r r r+,s$         zBdb.trace_dispatchcCsG|j|s|j|r@|j||jr@tq@n|jS)N) stop_here break_here user_liner&rr+)rr.r r r r'@s   zBdb.dispatch_linecCs|jdkr"|j|_|jS|j|p=|j|sDdS|jrd|jjt@rd|jS|j |||j rt n|jS)N) r f_backr+r0break_anywhere stopframef_codeco_flagsr user_callr&r)rr.r/r r r r(Fs  zBdb.dispatch_callc Cs|j|s||jkr|jr>|jjt@r>|jSz||_|j||Wdd|_X|j rzt n|j|kr|j dkr|j ddqn|jS)Nrr) r0 returnframer5r6r7rr+r user_returnr&r stoplinenor!)rr.r/r r r r)Vs   zBdb.dispatch_returncCs|j|rg|jjt@o<|dtko<|ddks|j|||jrdtqdqnf|jr||jk r|jjjt@r|dtt fkr|j|||jrtqn|j S)Nr) r0r6r7r StopIterationuser_exceptionr&rr5 GeneratorExitr+)rr.r/r r r r*fs   zBdb.dispatch_exceptioncCs.x'|jD]}tj||r dSq WdS)NTF)r fnmatch)rZ module_namepatternr r r is_skipped_moduleszBdb.is_skipped_modulecCsk|jr(|j|jjdr(dS||jkrZ|jdkrJdS|j|jkS|jsgdSdS)NrFrTr)r rB f_globalsrr5r;f_lineno)rr.r r r r0s  z Bdb.stop_herecCs|j|jj}||jkr(dS|j}||j|krj|jj}||j|krjdSnt|||\}}|r|j|_|r|j r|j t |jndSdSdS)NFT) rr6 co_filenamerrDco_firstlineno effectivenumberZ currentbp temporarydo_clearstr)rr.rlinenobpZflagr r r r1s   zBdb.break_herecCstddS)Nz)subclass of bdb must implement do_clear())NotImplementedError)rr/r r r rJsz Bdb.do_clearcCs|j|jj|jkS)N)rr6rEr)rr.r r r r4szBdb.break_anywherecCsdS)znThis method is called when there is the remote possibility that we ever need to stop in this function.Nr )rr.Z argument_listr r r r8sz Bdb.user_callcCsdS)z9This method is called when we stop or break at this line.Nr )rr.r r r r2sz Bdb.user_linecCsdS)z5This method is called when a return trap is set here.Nr )rr.Z return_valuer r r r:szBdb.user_returncCsdS)zmThis method is called if an exception occurs, but only if we are to stop at or just below this level.Nr )rr.exc_infor r r r>szBdb.user_exceptionrcCs(||_||_d|_||_dS)NF)r5r9r&r;)rr5r9r;r r r r!s   zBdb._set_stopinfocCs3|dkr|jd}n|j|||dS)zxStop when the line with the line no greater than the current one is reached or when returning from current frameNr)rDr!)rr.rLr r r set_untils z Bdb.set_untilcCsK|jr7|jj}|r7|j r7|j|_q7n|jdddS)zStop after one line of code.N)rr3f_tracer+r!)rZ caller_framer r r set_steps   z Bdb.set_stepcCs|j|ddS)z2Stop on the next line in or below the given frame.N)r!)rr.r r r set_nextsz Bdb.set_nextcCs=|jjt@r&|j|ddn|j|j|dS)z)Stop when returning from the given frame.Nrr)r6r7rr!r3)rr.r r r set_returnszBdb.set_returncCsq|dkrtjj}n|jx(|rR|j|_||_|j}q+W|jtj|jdS)zpStart debugging from `frame`. If frame is not specified, debugging starts from caller's frame. N) sys _getframer3r"r+rQr rRsettrace)rr.r r r set_traces       z Bdb.set_tracecCsm|j|jdd|jsitjdtjj}x+|re||jk re|`|j}q>WndS)Nrr)r!r rrUrWrVr3rQ)rr.r r r set_continues  zBdb.set_continuecCs/|j|_d|_d|_tjddS)NT)r r5r9r&rUrW)rr r r set_quits   z Bdb.set_quitFc Cs|j|}ddl}|j||}|sAd||fS|jj|g}||krr|j|nt|||||} dS)NrzLine %s:%d does not exist)rrgetliner setdefaultappendr) rrrLrIcondfuncnamerr#listrMr r r set_breaks  z Bdb.set_breakcCsJ||ftjkr,|j|j|n|j|sF|j|=ndS)N)rbplistrremove)rrrLr r r _prune_breaks!s zBdb._prune_breakscCs|j|}||jkr&d|S||j|krGd||fSx/tj||fddD]}|jqeW|j||dS)NzThere are no breakpoints in %szThere is no breakpoint at %s:%d)rrrrbdeleteMerd)rrrLrMr r r clear_break's$zBdb.clear_breakcCsiy|j|}Wn/tk rD}zt|SWYdd}~XnX|j|j|j|jdS)N)get_bpbynumber ValueErrorrKrerdfiler#)rr/rMerrr r r clear_bpbynumber3s  zBdb.clear_bpbynumbercCsz|j|}||jkr&d|SxC|j|D]4}tj||f}x|D]}|jqTWq4W|j|=dS)NzThere are no breakpoints in %s)rrrrbre)rrr#ZblistrMr r r clear_all_file_breaks;s zBdb.clear_all_file_breakscCsA|js dSx$tjD]}|r|jqqWi|_dS)NzThere are no breakpoints)rr bpbynumberre)rrMr r r clear_all_breaksEs  zBdb.clear_all_breakscCs|stdnyt|}Wn"tk rItd|YnXytj|}Wn"tk rtd|YnX|dkrtd|n|S)NzBreakpoint number expectedz Non-numeric breakpoint number %sz!Breakpoint number %d out of rangezBreakpoint %d already deleted)rhintrrm IndexError)rr/rHrMr r r rgMs   zBdb.get_bpbynumbercCs/|j|}||jko.||j|kS)N)rr)rrrLr r r get_break\sz Bdb.get_breakcCsH|j|}||jkrD||j|krDtj||fpGgS)N)rrrrb)rrrLr r r get_breaksaszBdb.get_breakscCs1|j|}||jkr)|j|SgSdS)N)rr)rrr r r get_file_breaksgs zBdb.get_file_breakscCs|jS)N)r)rr r r get_all_breaksnszBdb.get_all_breakscCsg}|r'|j|kr'|j}nxB|dk rk|j||jf||jkr_Pn|j}q*W|jtdt|d}x2|dk r|j|j|j f|j}qW|dkrtdt|d}n||fS)Nrr) tb_frametb_nextr]rDr r3reversemaxlen tb_lineno)rftstackir r r get_stackts      z Bdb.get_stackz: c Cs2ddl}ddl}|\}}|j|jj}d||f}|jjrh||jj7}n |d7}d|jkr|jd} nd} | r||j| 7}n |d7}d|jkr|jd} |d7}||j| 7}n|j|||j } | r.||| j 7}n|S)Nrz%s(%r)zZ__args__z()Z __return__z->) rreprlibrr6rEco_namef_localsr-r[rCstrip) rZ frame_linenoZlprefixrrr.rLrsargsrvr#r r r format_stack_entrys*      zBdb.format_stack_entrycCs|dkr$ddl}|j}n|dkr9|}n|jt|trgt|dd}ntj|jz-yt |||Wnt k rYnXWdd|_ tjdXdS)NrzexecT) __main____dict__r" isinstancerKcompilerUrWr+rrr&)rcmdglobalslocalsrr r r runs         zBdb.runcCs|dkr$ddl}|j}n|dkr9|}n|jtj|jz-yt|||SWntk r~YnXWdd|_tjdXdS)NrT) rrr"rUrWr+evalrr&)rexprrrrr r r runevals         z Bdb.runevalcCs|j|||dS)N)r)rrrrr r r runctxsz Bdb.runctxcOsj|jtj|jd}z,y|||}Wntk rJYnXWdd|_tjdX|S)NT)r"rUrWr+rr&)rfuncrkwdsresr r r runcalls    z Bdb.runcall).rrrr rrr"r+r'r(r)r*rBr0r1rJr4r8r2r:r>r!rPrRrSrTrXrYrZrardrfrkrlrnrgrqrrrsrtrrrrrrr r r r rsX                              cCstjdS)N)rrXr r r r rXsrXc@seZdZdZdZiZdgZdddddZddZd d Z d d Z dd dZ ddZ ddZ dS)raBreakpoint class. Implements temporary breakpoints, ignore counts, disabling and (re)-enabling, and conditionals. Breakpoints are indexed by number through bpbynumber and by the file,line tuple using bplist. The former points to a single instance of class Breakpoint. The latter points to a list of such instances since there may be more than one breakpoint per line. rNFcCs||_d|_||_||_||_||_d|_d|_d|_t j |_ t j d7_ |j j |||f|jkr|j||fj |n|g|j||fs zTdb.user_exceptionN)rrrr8r2r:r>r r r r rs    rcCs1td|dt|d}td|dS)Nzfoo() z bar returned)r,bar)nxr r r foosrcCstd|d|dS)Nzbar(rr<)r,)ar r r rsrcCst}|jddS)Nzimport bdb; bdb.foo(10))rr)r|r r r tests r)r r@rUrinspectr__all__ ExceptionrrrXrrrGrrrrr r r r s     Z  0  lib64/python3.4/__pycache__/shlex.cpython-34.pyo000064400000016536152342604300015237 0ustar00 j f- @sdZddlZddlZddlZddlmZddlmZdddgZGdddZ d d d dZ ej d ej j Zd dZddZedkreejdkree qejdZeeZee eeWdQXndS)z8A lexical analyzer class for simple shell-like syntaxes.N)deque)StringIOshlexsplitquotec@seZdZdZdddddZddZddd Zd d Zd d ZddZ ddZ ddddZ ddZ ddZ dS)rz8A lexical analyzer class for simple shell-like syntaxes.NFcCsAt|trt|}n|dk r?||_||_ntj|_d|_||_|rod|_n d|_d|_ d|_ |jr|j d7_ nd|_ d|_ d|_ d|_d |_d |_t|_d |_d |_d|_t|_d|_|jr=td |j|jfndS)N#Z?abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_u|ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞz Fz'"\" rzshlex: reading from %s, line %d) isinstancestrrinstreaminfilesysstdinposixeof commenters wordchars whitespacewhitespace_splitquotesescape escapedquotesstaterpushbacklinenodebugtoken filestacksourceprint)selfrrrr%*/opt/alt/python34/lib64/python3.4/shlex.py__init__s<                        zshlex.__init__cCs:|jdkr&tdt|n|jj|dS)z:Push a token onto the stack popped by the get_token methodr zshlex: pushing token N)rr#reprr appendleft)r$tokr%r%r& push_token8szshlex.push_tokencCst|trt|}n|jj|j|j|jf||_||_d|_|jr|dk rt d|jfqt d|jfndS)z9Push an input source onto the lexer's input source stack.r Nzshlex: pushing to file %szshlex: pushing to stream %s) r rrr!r)rrrrr#)r$ newstreamnewfiler%r%r& push_source>s"     zshlex.push_sourcecCsa|jj|jj\|_|_|_|jrTtd|j|jfnd|_dS)zPop the input source stack.zshlex: popping to %s, line %dr N) rcloser!popleftrrrr#r)r$r%r%r& pop_sourceLs  ! zshlex.pop_sourcecCs>|jrB|jj}|jdkr>tdt|n|S|j}|jdk rx\||jkr|j|j}|r|\}}|j||n|j }q`Wnx9||j kr|j s|j S|j |j }qW|jdkr:||j kr-tdt|q:tdn|S)zBGet a token from the input stream (or from stack if it's nonempty)r zshlex: popping token Nz shlex: token=zshlex: token=EOF) rr0rr#r( read_tokenr" sourcehookr. get_tokenrr!r1)r$r*rawspecr-r,r%r%r&r4Us.      zshlex.get_tokencCsd}d}x|jjd}|dkr@|jd|_n|jdkrttdt|jdt|n|jdkrd|_Pq|jdkr|sd|_Pq||jkr|jd krtd n|js|j r|rPqqq||j kr.|jj |jd|_q|j rX||j krXd }||_q||j kr|||_d |_q||jkr|j s||_n||_q|jr||_d |_q||_|js|j r|rPqqq|j|jkrd }|s>|jd kr/td ntdn||jkr|j ss|j||_d|_Pqd |_q|j r||j kr|j|jkr|j}||_q|j||_q|j|j krp|s|jd krtdntdn||jkrT||jkrT||krT|j|j|_n|j||_||_q|jd kr|sd|_Pq||jkr|jd krtdnd|_|js|j r|rPqqq||j krK|jj |jd|_|j rd|_|js>|j r|rPqHqqq|j ro||jkro||_q|j r||j krd }||_q||j ks||jks|jr|j||_q|jj||jd krtdnd|_|jrPqqqqW|j}d|_|j rV| rV|dkrVd}n|jdkr|rtdt|qtdn|S)NFr r  zshlex: in statezI see character:rz+shlex: I see whitespace in whitespace stateaTz shlex: I see EOF in quotes statezNo closing quotationz shlex: I see EOF in escape statezNo escaped characterz%shlex: I see whitespace in word statez&shlex: I see punctuation in word statezshlex: raw token=zshlex: raw token=EOF)rreadrrr#r(rr rrrreadlinerrrr ValueErrorrrr))r$ZquotedZ escapedstateZnextcharresultr%r%r&r2us                                         zshlex.read_tokencCs|ddkr#|dd}nt|jtrotjj| rotjjtjj|j|}n|t|dfS)z(Hook called on a filename to be sourced.rr r r) r rrospathisabsjoindirnameopen)r$r-r%r%r&r3s %'zshlex.sourcehookcCs>|dkr|j}n|dkr0|j}nd||fS)zs"      lib64/python3.4/__pycache__/random.cpython-34.pyo000064400000045163152342604300015372 0ustar00 e fe@sdZddlmZddlmZmZddl m Z m Z mZmZmZddl mZmZmZmZddlmZddlm Z!m"Z#ddl$m%Z&d d d d d ddddddddddddddddddgZ'd e d! ed"Z(d"eZ)e d#Z*d$e d%Z+d&Z,d'e, Z-dd(l.Z.Gd)d d e.j/Z/Gd*dde/Z0d+d,Z1d-d.d/Z2e/Z3e3j4Z4e3j5Z5e3j6Z6e3j7Z7e3j8Z8e3j9Z9e3j:Z:e3j;Z;e3j<Z<e3j=Z=e3j>Z>e3j?Z?e3j@Z@e3jAZAe3jBZBe3jCZCe3jDZDe3jEZEe3jFZFe3jGZGe3jHZHeId0kr{e2nd(S)1aRandom variable generators. integers -------- uniform within range sequences --------- pick random element pick random sample generate random permutation distributions on the real line: ------------------------------ uniform triangular normal (Gaussian) lognormal negative exponential gamma beta pareto Weibull distributions on the circle (angles 0 to 2pi) --------------------------------------------- circular uniform von Mises General notes on the underlying Mersenne Twister core generator: * The period is 2**19937-1. * It is one of the most extensively tested generators in existence. * The random() method is implemented in C, executes in a single Python step, and is, therefore, threadsafe. )warn) MethodTypeBuiltinMethodType)logexppieceil)sqrtacoscossin)urandom)SetSequence)sha512Randomseedrandomuniformrandintchoicesample randrangeshuffle normalvariatelognormvariate expovariatevonmisesvariate gammavariate triangulargauss betavariate paretovariateweibullvariategetstatesetstate getrandbits SystemRandomg?g@g@g?g@5NcseZdZdZdZdddZddfddZfd d Zfd d Zd dZ ddZ ddZ dde ddZ ddZe de>eeeddZddZdddZddZd d!Zd"d#dd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Z d6d7Z!S)8raRandom number generator base class used by bound module functions. Used to instantiate instances of Random to get generators that don't share state. Class Random can also be subclassed if you want to use a different basic generator of your own devising: in that case, override the following methods: random(), seed(), getstate(), and setstate(). Optionally, implement a getrandbits() method so that randrange() can cover arbitrarily large ranges. NcCs|j|d|_dS)zeInitialize an instance. Optional argument x controls seeding, as for Random.seed(). N)r gauss_next)selfxr0+/opt/alt/python34/lib64/python3.4/random.py__init__Ts zRandom.__init__r+c s|dkrbytjtdd}Wqbtk r^ddl}t|jd}YqbXn|dkrt|tttfrt|tr|j }n|t |j 7}tj|d}qnt j |d|_dS)aInitialize internal state from hashable object. None or no argument seeds from current time or from an operating system specific randomness source if available. For version 2 (the default), all of the bits are used if *a* is a str, bytes, or bytearray. For version 1, the hash() of *a* is used instead. If *a* is an int, all bits are used. Ni bigrr+)int from_bytes_urandomNotImplementedErrortime isinstancestrbytes bytearrayencode_sha512Zdigestsuperrr-)r.aversionr9) __class__r0r1r]s    z Random.seedcs|jtj|jfS)z9Return internal state; can be passed to setstate() later.)VERSIONr@r%r-)r.)rCr0r1r%}szRandom.getstatecs|d}|dkr;|\}}|_tj|n|dkr|\}}|_ytdd|D}Wn.tk r}zt|WYdd}~XnXtj|ntd||jfdS)z:Restore internal state from object returned by getstate().rr,r+css|]}|dVqdS)r+ Nlr0).0r/r0r0r1 sz"Random.setstate..Nz?state with version %s passed to Random.setstate() of version %s)r-r@r&tuple ValueError TypeErrorrD)r.staterBZ internalstater)rCr0r1r&s   zRandom.setstatecCs |jS)N)r%)r.r0r0r1 __getstate__szRandom.__getstate__cCs|j|dS)N)r&)r.rKr0r0r1 __setstate__szRandom.__setstate__cCs|jf|jfS)N)rCr%)r.r0r0r1 __reduce__szRandom.__reduce__c Cs||}||kr'tdn|dkr[|dkrL|j|Stdn||}||krtdn||}|dkr|dkr||j|S|dkrtd|||fn||}||krtdn|dkr%||d|} n-|dkrF||d|} n td | dkrmtdn|||j| S) zChoose a random item from range(start, stop[, step]). This fixes the problem with randint() which includes the endpoint; in Python this is usually not what you want. z!non-integer arg 1 for randrange()Nrzempty range for randrange()z non-integer stop for randrange()rOz'empty range for randrange() (%d,%d, %d)z non-integer step for randrange()zzero step for randrange())rI _randbelow) r.startstopstep_intZistartZistopwidthZistepnr0r0r1rs4               zRandom.randrangecCs|j||dS)zJReturn random integer in range [a, b], including both end points. rO)r)r.rAbr0r0r1rszRandom.randintc Cs|j}|j}|||ks6|||krq|j} || } x| |krl|| } qQW| S||krtd|||S||} || |} |} x| | kr|} qW|| ||S)zCReturn a random int in the range [0,n). Raises ValueError if n==0.zUnderlying random() generator does not supply enough bits to choose from a population range this large. To remove the range limitation, add a getrandbits() method.)rr' bit_length_warn) r.rVr5maxsizetypeZMethodZ BuiltinMethodrr'krZremlimitr0r0r1rPs"  $       zRandom._randbelowc CsBy|jt|}Wntk r9tdYnX||S)z2Choose a random element from a non-empty sequence.z$Cannot choose from an empty sequence)rPlenrI IndexError)r.seqir0r0r1rs  z Random.choicecCs|dkrk|j}xttdt|D]3}||d}||||||<||Population must be a sequence or set. For dicts, use list(d).rzSample larger than populationNr)r,rO)r:_SetrH _SequencerJrPr_rI_ceil_loglistrdsetadd) r.Z populationr\rerVresultZsetsizeZpoolrbrfZselectedZ selected_addr0r0r1rs6    $      z Random.samplecCs||||jS)zHGet a random number in the range [a, b) or [a, b] depending on rounding.)r)r.rArWr0r0r1rVszRandom.uniformgg?c Cs|j}y(|dkr!dn||||}Wntk rL|SYnX||kr}d|}d|}||}}n|||||dS)zTriangular distribution. Continuous distribution bounded by given lower and upper limits, and having a given mode value in-between. http://en.wikipedia.org/wiki/Triangular_distribution Ng?g?)rZeroDivisionError)r.ZlowZhighmodeucr0r0r1r \s (     zRandom.triangularcCsi|j}xQ|}d|}t|d|}||d}|t| kr Pq q W|||S)z\Normal distribution. mu is the mean, and sigma is the standard deviation. g?g?g@)r NV_MAGICCONSTrl)r.musigmaru1u2zZzzr0r0r1rrs   zRandom.normalvariatecCst|j||S)zLog normal distribution. If you take the natural logarithm of this distribution, you'll get a normal distribution with mean mu and standard deviation sigma. mu can have any value, and sigma must be greater than zero. )_expr)r.rvrwr0r0r1rszRandom.lognormvariatecCstd|j |S)a^Exponential distribution. lambd is 1.0 divided by the desired mean. It should be nonzero. (The parameter would be called "lambda", but that is a reserved word in Python.) Returned values range from 0 to positive infinity if lambd is positive, and from negative infinity to 0 if lambd is negative. g?)rlr)r.Zlambdr0r0r1rszRandom.expovariatecCs|j}|dkr t|Sd|}|td||}xf|}tt|}|||}|} | d||ks| d|t|krEPqEqEWd|} | |d| |} |} | dkr|t| t} n|t| t} | S)aFCircular data distribution. mu is the mean angle, expressed in radians between 0 and 2*pi, and kappa is the concentration parameter, which must be greater than or equal to zero. If kappa is equal to zero, this distribution reduces to a uniform random angle over the range 0 to 2*pi. gư>g?g?)rTWOPI_sqrt_cos_pir{_acos)r.rvZkapparsr]rxrzdryqfZu3Zthetar0r0r1rs&      .   zRandom.vonmisesvariatecCs |dks|dkr'tdn|j}|dkr td|d}|t}||}x|}d|kodknsqgnd|}t|d||} |t| } |||} ||| | } | td| dks| t| krg| |SqgWn|dkr`|} x| dkrP|} q8Wt|  |Sx|} t|t}|| }|dkr|d|} nt||| } |}|dkr|| |dkrPqqc|t| krcPqcqcW| |SdS) aZGamma distribution. Not the gamma function! Conditions on the parameters are alpha > 0 and beta > 0. The probability distribution function is: x ** (alpha - 1) * math.exp(-x / beta) pdf(x) = -------------------------------------- math.gamma(alpha) * beta ** alpha gz*gammavariate: alpha and beta must be > 0.0g?g@gHz>gP?g@N)rIrr}LOG4rlr{ SG_MAGICCONST_e)r.alphabetarZainvZbbbZcccrxryvr/rzr]rsrWpr0r0r1rsJ      *        zRandom.gammavariatecCs|j}|j}d|_|dkrw|t}tdtd|}t||}t|||_n|||S)zGaussian distribution. mu is the mean, and sigma is the standard deviation. This is slightly faster than the normalvariate() function. Not thread-safe without a lock around calls. Ng@g?g)rr-r|r}rlr~_sin)r.rvrwrrzZx2piZg2radr0r0r1r!"s     z Random.gausscCs>|j|d}|dkr"dS|||j|dSdS)zBeta distribution. Conditions on the parameters are alpha > 0 and beta > 0. Returned values range between 0 and 1. g?rgN)r)r.rryr0r0r1r"Ws  zRandom.betavariatecCs d|j}d|d|S)z3Pareto distribution. alpha is the shape parameter.g?)r)r.rrsr0r0r1r#iszRandom.paretovariatecCs'd|j}|t| d|S)zfWeibull distribution. alpha is the scale parameter and beta is the shape parameter. g?)rrl)r.rrrsr0r0r1r$rszRandom.weibullvariate)"__name__ __module__ __qualname____doc__rDr2rr%r&rLrMrNr5rrBPFr[ _MethodType_BuiltinMethodTyperPrrrrr rrrrrr!r"r#r$r0r0)rCr1rDs6      ,    >    0 H 5  c@sPeZdZdZddZddZddZdd ZeZZ d S) r(zAlternate random number generator using sources provided by the operating system (such as /dev/urandom on Unix or CryptGenRandom on Windows). Not available on all systems (see os.urandom() for details). cCstjtddd?tS)z3Get the next random number in the range [0.0, 1.0).r3r,)r5r6r7 RECIP_BPF)r.r0r0r1rszSystemRandom.randomcCsr|dkrtdn|t|kr<tdn|dd}tjt|d}||d|?S)z:getrandbits(k) -> x. Generates an int with k random bits.rz(number of bits must be greater than zeroz#number of bits should be an integerrr3)rIr5rJr6r7)r.r\Znumbytesr/r0r0r1r's zSystemRandom.getrandbitscOsdS)z%sd("         =!                        lib64/python3.4/__pycache__/mailcap.cpython-34.pyc000064400000014620152342604300015476 0ustar00 e f @sdZddlZddgZddZddZdd Zd d Zd d ZddgddZdddZ gddZ ddZ ddZ ddZ edkre ndS)z%Mailcap file handling. See RFC 1524.Ngetcaps findmatchcCsi}xtD]}yt|d}Wntk r@wYnX|t|}WdQXxE|jD]7\}}||kr|||)r rr s zlookup..)r)r r:r r=Z MIMEtypesr)r rr7s   r7c Csfd}dt|}}xF||kra||}|d}|dkr|dkru|||d}|d}n||}q||}|d}|dkr||}q|dkr||}q|dkr||}q|dkrP|}x*||kr||d kr|d}qW|||} |d}|t| |}q|d|}qW|S) Nrrr)%r3st{})r! findparam) r0r:r;r<resr.r/r5r4namerrrr8s6              r8cCs[|jd}t|}x8|D]0}|d|j|kr#||dSq#WdS)Nr+r)r#r!)rIr<r/prrrrGs   rGc Csddl}t}|jdds6t|dSxtdt|jdD]}|j||d}t|dkrtddS|d}|d}t||d|\}}|stdtqRtd|t j |}|rRtd|qRqRWdS) Nrr)rz"usage: mailcap [MIMEtype file] ...r*zNo viewer found forz Executing:z Exit status:) sysrargvshowr r!printrtyperr9) rKr r.argsr:filer?r>stsrrrr6s&   "    r6cCstdxtD]}td|qWt|sEt}ntdtt|}xl|D]d}t|||}xG|D]?}t|}x#|D]}td|||qWtqWqiWdS)NzMailcap files: zMailcap entries:z %-15s)rNrrsorted)r fnZckeysrOr=r>keyskrrrrMs"          rM__main__)__doc__r__all__rrrrr,rr7r8rGr6rM__name__rrrrs     &      lib64/python3.4/__pycache__/pkgutil.cpython-34.pyc000064400000042300152342604300015543 0ustar00 e fR @sdZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl Z ddddd d d d d ddg Z ddZddZddddd Zdddd ZedddZdddZejejjeddZGdd d ZGdd d Zy?ddlZddlmZddd ZejeeWnek rYnXd!dZdd"dZd#dZ d$dZ!d%dZ"d&d Z#dS)'zUtilities to support packages.)singledispatchN) ModuleType get_importeriter_importers get_loader find_loader walk_packages iter_modulesget_data ImpImporter ImpLoader read_code extend_pathc Csby |j}WnDtk rS|j|}|dkr<dStjj||SYn X||SdS)z'Return the finder-specific module spec.N) find_specAttributeError find_module importlibutilspec_from_loader)findernamerloaderr,/opt/alt/python34/lib64/python3.4/pkgutil.py _get_specs   rcCsKddl}|jd}|tjjkr1dS|jd|j|S)Nr)marshalreadrr MAGIC_NUMBERload)streamrmagicrrrr "s   c #siddxt||D]\}}}|||fV|ryt|WnXtk r}|dk ry||nYqtk r|dk r||nYqXttj|ddpg}fdd|D}t||d|DdHqqWdS)aYields (module_loader, name, ispkg) for all modules recursively on path, or, if path is None, all accessible modules. 'path' should be either None or a list of paths to look for modules in. 'prefix' is a string to output on the front of every module name on output. Note that this function must import all *packages* (NOT all modules!) on the given path, in order to access the __path__ attribute to find submodules. 'onerror' is a function which gets called with one argument (the name of the package which was being imported) if any exception occurs while trying to import a package. If no onerror function is supplied, ImportErrors are caught and ignored, while all other exceptions are propagated, terminating the search. Examples: # list all modules python can access walk_packages() # list all submodules of ctypes walk_packages(ctypes.__path__, ctypes.__name__+'.') cSs||krdSd||.seenN__path__cs"g|]}|s|qSrr).0r$)r&rr cs z!walk_packages...)r __import__ ImportError Exceptiongetattrsysmodulesr)pathprefixonerrorimporterrispkgr)r&rr/s      ccs|dkrt}ntt|}i}xU|D]M}xDt||D]3\}}||krJd||<|||fVqJqJWq4WdS)a&Yields (module_loader, name, ispkg) for all submodules on path, or, if path is None, all top-level modules on sys.path. 'path' should be either None or a list of paths to look for modules in. 'prefix' is a string to output on the front of every module name on output. N)rmapriter_importer_modules)r1r2Z importersyieldedirr5rrrr hs     cCs t|dsgS|j|S)Nr )hasattrr )r4r2rrrr8sr8c cs|jdks%tjj|j r)dSi}ddl}ytj|j}Wntk rkg}YnX|jx|D]}|j|}|dks}||krq}ntjj|j|}d}| rctjj|rcd|krc|}ytj|} Wntk r&g} YnXx9| D]+}|j|} | dkr.d}Pq.q.Wq}n|r}d|kr}d||<|||fVq}q}WdS)Nr__init__Fr*Tr6) r1osisdirinspectlistdirOSErrorsort getmodulenamejoin) r4r2r9r? filenamesfnmodnamer1r5 dircontentssubnamerrr_iter_file_finder_moduless<%     %     rJc Cs6tj$tjdttjdaWdQXdS)Nignoreimp)warningscatch_warnings simplefilterPendingDeprecationWarningr import_modulerLrrrr _import_imps rRc@sCeZdZdZdddZdddZddd ZdS) r aPEP 302 Importer that wraps Python's "classic" import algorithm ImpImporter(dirname) produces a PEP 302 importer that searches that directory. ImpImporter(None) produces a PEP 302 importer that searches the current sys.path, plus any modules that are frozen or built-in. Note that ImpImporter does not currently support being used by placement on sys.meta_path. NcCs$tjdtt||_dS)Nz5This emulation is deprecated, use 'importlib' instead)rMwarnDeprecationWarningrRr1)selfr1rrrr<s zImpImporter.__init__c Cs|jdd}||kr2|jdkr2dS|jdkrJd}ntjj|jg}ytj||\}}}Wntk rdSYnXt||||S)Nr*r6)splitr1r=realpathrLrr,r )rUfullnamer1rIfilefilenameetcrrrrs   zImpImporter.find_moduler#c cs|jdks%tjj|j r)dSi}ddl}ytj|j}Wntk rkg}YnX|jx|D]}|j|}|dks}||krq}ntjj|j|}d}| rctjj|rcd|krc|}ytj|} Wntk r&g} YnXx9| D]+}|j|} | dkr.d}Pq.q.Wq}n|r}d|kr}d||<|||fVq}q}WdS)Nrr<Fr*Tr6) r1r=r>r?r@rArBrCrD) rUr2r9r?rErFrGr1r5rHrIrrrr s<%     %     zImpImporter.iter_modules)__name__ __module__ __qualname____doc__r<rr rrrrr s c@seZdZdZdZZddZddZddZd d Z d d Z d dZ dddZ dddZ ddZdddZdS)r zBPEP 302 Loader that wraps Python's "classic" import algorithm NcCs?tjdtt||_||_||_||_dS)Nz5This emulation is deprecated, use 'importlib' instead)rMrSrTrRrZr[rYr\)rUrYrZr[r\rrrr< s    zImpLoader.__init__c CsP|jz%tj||j|j|j}Wd|jrK|jjnX|S)N)_reopenrL load_modulerZr[r\close)rUrYmodrrrrbs  % zImpLoader.load_modulecCs&t|d}|jSWdQXdS)Nrb)openr)rUpathnamerZrrrr szImpLoader.get_datacCs|jr||jjr||jd}|tjkrIt|jd|_q||tjtjfkr|t|jd|_q|ndS)Nrre) rZclosedr\rL PY_SOURCErfr[ PY_COMPILED C_EXTENSION)rUmod_typerrrra!s  zImpLoader._reopencCsG|dkr|j}n+||jkrCtd|j|fn|S)Nz,Loader for module %s cannot handle module %s)rYr,)rUrYrrr _fix_name)s   zImpLoader._fix_namecCs#|j|}|jdtjkS)Nrh)ror\rL PKG_DIRECTORY)rUrYrrr is_package1szImpLoader.is_packagec Cs|j|}|jdkr|jd}|tjkrd|j|}t||jd|_q|tjkr|j zt |j |_Wd|j j Xq|tj kr|jj|_qn|jS)Nrhexec)rocoder\rLrk get_sourcecompiler[rlrar rZrcrp _get_delegateget_code)rUrYrnsourcerrrrw5s  zImpLoader.get_codec Cs|j|}|jdkr|jd}|tjkrn|jz|jj|_Wd|jjXq|tj krt j j |j ddrt|j ddd}|j|_WdQXqq|tjkr|jj|_qn|jS)Nrhr6rirVrV)rorxr\rLrkrarZrrcrlr=r1existsr[rfrprvrt)rUrYrnfrrrrtFs  zImpLoader.get_sourcecCs%t|j}t|d}|jS)Nr<)r r[rr)rUrspecrrrrvXszImpLoader._get_delegatecCsd|j|}|jd}|tjkr;|jjS|tjtjtjfkr`|j SdS)Nrh) ror\rLrprv get_filenamerkrlrmr[)rUrYrnrrrr|]s zImpLoader.get_filename)r]r^r_r`rsrxr<rbr rarorqrwrtrvr|rrrrr s       ) zipimporterc csRttj|j}|j}t|}i}ddl}x|D]}|j|s_qDn||djt j }t|dkr|djdr|d|krd||d<|ddfVqnt|dkrqDn|j |d}|dkrqDn|rDd|krD||krDd||<||dfVqDqDWdS) Nrrhr6z __init__.pyTr<r*F) sorted zipimport_zip_directory_cachearchiver2lenr? startswithrWr=seprC) r4r2ZdirlistZ_prefixZplenr9r?rFrGrrriter_zipimport_modulesks*    %  rcCs}ytj|}Wnetk rxxPtjD]?}y$||}tjj||PWq+tk riYq+Xq+Wd}YnX|S)a Retrieve a PEP 302 importer for the given path item The returned importer is cached in sys.path_importer_cache if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a rescan of sys.path_hooks is necessary. N)r/path_importer_cacheKeyError path_hooks setdefaultr,)Z path_itemr4 path_hookrrrrs      ccs|jdr-dj|}t|nd|kr|jdd}tj|}t|dd}|dkrdSntjDdHtj }x|D]}t |VqWdS)aYield PEP 302 importers for the given module name If fullname contains a '.', the importers will be for the package containing fullname, otherwise they will be all registered top level importers (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. If no module name is specified, all top level importers are produced. r*z'Relative module name {!r} not supportedrr'N) rformatr, rpartitionrrQr.r/ meta_pathr1r)rYmsgZpkg_nameZpkgr1itemrrrrs      cCs|tjkr/tj|}|dkr/dSnt|tr|}t|dd}|dk rf|St|dddkrdS|j}n|}t|S)aGet a PEP 302 "loader" object for module_or_name Returns None if the module cannot be found or imported. If the named module is not already imported, its containing package (if any) is imported, in order to establish the package __path__. N __loader____spec__)r/r0 isinstancerr.r]r)Zmodule_or_namemodulerrYrrrrs    cCs|jdr-dj|}t|nytjj|}Wn[ttttfk r}z/d}t|j|t |||WYdd}~XnX|dk r|j SdS)zFind a PEP 302 "loader" object for fullname This is a backwards compatibility wrapper around importlib.util.find_spec that converts most failures to ImportError and only returns the loader rather than the full spec r*z'Relative module name {!r} not supportedz,Error while finding loader for {!r} ({}: {})N) rrr,rrrr TypeError ValueErrortyper)rYrr{Zexrrrrs7cCs:t|ts|S|d}|dd}|jd\}}}|rytj|j}Wqttfk r}|SYqXn tj}x|D]}t|t sqnt |}|dk r`g} t |dr |j |} | dk r0| j pg} q0n't |dr0|j|\}} nx-| D]"} | |kr7|j| q7q7Wntjj||} tjj| ryt| } Wn?tk r}ztjjd| |fWYdd}~Xq2X| NxF| D]>}|jd}| s|jdrqn|j|qWWdQXqqW|S) aExtend a package's path. Intended use is to place the following code in a package's __init__.py: from pkgutil import extend_path __path__ = extend_path(__path__, __name__) This will add to the package's __path__ all subdirectories of directories on sys.path named after the package. This is useful if one wants to distribute different parts of a single logical package as multiple directories. It also looks for *.pkg files beginning where * matches the name argument. This feature is similar to *.pth files (see site.py), except that it doesn't special-case lines starting with 'import'. A *.pkg file is trusted at face value: apart from checking for duplicates, all entries found in a *.pkg file are added to the path, regardless of whether they are exist the filesystem. (This is a feature.) If the input path is not a list (as is the case for frozen packages) it is returned unchanged. The input path is not modified; an extended copy is returned. Items are only appended to the copy at the end. It is assumed that sys.path is a sequence. Items of sys.path that are not (unicode or 8-bit) strings referring to existing directories are ignored. Unicode items of sys.path that cause errors when used as filenames may cause this function to raise an exception (in line with os.path.isdir() behavior). z.pkgNr*rrzCan't open %s: %s  #)rlistrr/r0r'rrr1strrr;rsubmodule_search_locationsrappendr=rDisfilerfrAstderrwriterstripr)r1rZ sname_pkgZparent_package_Z final_nameZ search_pathdirrportionsr{ZportionZpkgfilerzrlinerrrrsP!          ! cCstjj|}|dkr"dS|j}|dksGt|d rKdStjj|prtjj |j }|dkst|d rdS|j d}|j dt jj|jt jj|}|j|S)afGet a resource from a package. This is a wrapper round the PEP 302 loader get_data API. The package argument should be the name of a package, in standard module format (foo.bar). The resource argument should be in the form of a relative filename, using '/' as the path separator. The parent directory name '..' is not allowed, and nor is a rooted name (starting with a '/'). The function returns a binary string, which is the contents of the specified resource. For packages located in the filesystem, which have already been imported, this is the rough equivalent of d = os.path.dirname(sys.modules[package].__file__) data = open(os.path.join(d, resource), 'rb').read() If the package cannot be located or loaded, or it uses a PEP 302 loader which does not support get_data(), then None is returned. Nr __file__/r)rrrrr;r/r0get _bootstrap _SpecMethodsr rWinsertr=r1dirnamerrDr )packageZresourcer{rrdpartsZ resource_namerrrr Ms  )$r` functoolsrZ simplegenericrimportlib.utilimportlib.machineryr=Zos.pathr/typesrrM__all__rr rr r8rJregister machinery FileFinderrRr r rr}rr,rrrrrr rrrrsJ           9( Jc      ^lib64/python3.4/__pycache__/ntpath.cpython-34.pyc000064400000031771152342604300015374 0ustar00 e fO&@sNdZddlZddlZddlZddlZddlTdddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)g&Zd*Zd+Zd*Zd,Z d-Z d.Z d/Z d0ej krd1Z nd2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdZdBdZdCdZdDdZdEdZdFdZdGd Zejje_dHd ZdId ZdJdZ dKdZ!yddLl"m#Z#Wne$k rdZ#YnXdMdZ%dNdZ&dOdZ'dPdZ(yddQl"m)Z)Wne$k rzdRdZ*Yn XdSdZ*e*Z+e,edToej-dUdVkZ.edWd&Z/y9ej-ddVd]krddYl"m0Z0ne$Wn$e1e$fk r dZd[Z0YnXydd\l"m2Z3Wne$k rIYnXdS)^zCommon pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. N)*normcaseisabsjoin splitdrivesplitsplitextbasenamedirname commonprefixgetsizegetmtimegetatimegetctimeislinkexistslexistsisdirisfileismount expanduser expandvarsnormpathabspathsplitunccurdirpardirseppathsepdefpathaltsepextsepdevnullrealpathsupports_unicode_filenamesrelpathsamefile sameopenfilesamestat.z..\;/z.;C:\binZcez\WindowsZnulcCst|trdSdSdS)N) isinstancebytes)pathr2+/opt/alt/python34/lib64/python3.4/ntpath.py _get_empty#sr4cCst|trdSdSdS)Ns\r*)r/r0)r1r2r2r3_get_sep)sr5cCst|trdSdSdS)N/r,)r/r0)r1r2r2r3 _get_altsep/sr7cCst|trdSdSdS)Ns\/z\/)r/r0)r1r2r2r3 _get_bothseps5sr8cCst|trdSdSdS)N.r))r/r0)r1r2r2r3_get_dot;sr:cCst|trdSdSdS)N::)r/r0)r1r2r2r3 _get_colonAsr=cCst|trdSdSdS)N\\.\\\?\\\.\\\?\)r>r?)r@rA)r/r0)r1r2r2r3 _get_specialGsrBcCsUt|ttfs3tdj|jjn|jt|t |j S)zaNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes.z2normcase() argument must be str or bytes, not '{}') r/r0str TypeErrorformat __class____name__replacer7r5lower)sr2r2r3rQs cCs<t|d}t|dko;|ddt|kS)zTest whether a path is absoluterN)rlenr8)rJr2r2r3rasc GsIt|}t|}t|}t|\}}x|D]}t|\}} | r| d|kr|sx| r|}n| }q=nE|r||kr|j|jkr|}| }q=n|}n|r|d|kr||}n|| }q=W|rA|d|krA|rA|dd|krA|||S||S)NrrKrM)r5r8r=rrI) r1pathsrsepsZcolonZ result_driveZ result_pathpZp_driveZp_pathr2r2r3rhs0         cCsJt|}t|dkr@t|}|jt||}|dd|dkr|dd|kr|j|d}|dkr||fS|j||d}||dkr||fS|dkrt|}n|d|||dfS|ddt|kr@|dd|ddfSn||fS)aSplit a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. rKrNrMrM)r4rLr5rHr7findr=)rPemptyrZnormpindexZindex2r2r2r3rs"  0    !cCsaddl}|jdtdt|\}}t|dkrW|dd|fS||fS)aDeprecated since Python 3.1. Please use splitdrive() instead; it now handles UNC paths. Split a pathname into UNC mount point and relative path specifiers. Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. Paths containing drive letters never have an UNC part. rNzs0 %   "cCsyt|trtd|kr7td|kr7|Sddl}t|j|jdd}d}d}d }d }ttd d}n]d|krd|kr|Sddl}|j|jd}d }d}d }d}tj}|dd}d} t |} xf| | krt|| | d} | |kr|| dd}t |} y/|j | } || |d| d7}Wqgt k r|| |7}| d} YqgXn| |kr|| d| d|kr|| 7}| d7} qg|| dd}t |} y|j |} Wn*t k rZ|||7}| d} YqgX|d| } y<|dkrtj tjtj | } n || } Wn tk r|| |} YnX|| 7}n| |kr]|| d| d|kr|| 7}| d7} qg|| d| d|krs|| dd}t |} y4t|trz|j d} n|j d} WnJt k rt|tr|d|7}n|d|7}| d} YqZX|d| } y<|dkrtj tjtj | } n || } Wn@tk ret|trSd| d} nd| d} YnX|| 7}qg|dd} | d7} || | d} x>| r| |kr| | 7} | d7} || | d} qWy<|dkrtj tjtj | } n || } Wntk r<|| } YnX|| 7}| rg| d8} qgn || 7}| d7} qW|S)zfExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.$%rNz_-asciis'%{$environb'{rKrQ}}s${z${)r/r0ordstringZ ascii_lettersZdigitsgetattrr`rprLrU ValueErrorfsencodefsdecoderq)r1rZvarcharsZquoteZpercentZbraceZdollarrpresrUZpathlencvarvaluer2r2r3ros$              "        "      "   cCst|}t|d}t|}|j|r;|S|jt||}t|\}}|j|r||7}|j|}n|j|}d}x|t |kr||| s||t|kr||=q|||kro|dkr7||d|kr7||d|d=|d8}qy|dkrb|j t|rb||=qy|d7}q|d7}qW| r| r|j t|n||j |S)z0Normalize path, eliminating double slashes, etc.rQrrK) r5r:rBrorHr7rlstriprrLendswithappendr)r1rdotdotZspecial_prefixesprefixcompsr[r2r2r3rs4   !   !  )_getfullpathnamecCsRt|sHt|tr*tj}n tj}t||}nt|S)z&Return the absolute version of a path.)rr/r0r`getcwdbgetcwdrr)r1cwdr2r2r3rs   c Csb|r.yt|}WqXtk r*YqXXn*t|trLtj}n tj}t|S)z&Return the absolute version of a path.)rrbr/r0r`rrr)r1r2r2r3rs  getwindowsversionrRrQcCst|}|tkr't|}n|s<tdntt|}tt|}t|\}}t|\}}t|t|krdj||} t| ndd|j |D} dd|j |D} d} xCt | | D]2\} }t| t|kr3Pn| d7} q Wt |t rYd}nd }|gt | | | | d }|st|St|S) z#Return a relative version of a pathzno path specifiedz,path is on mount '{0}', start on mount '{1}'cSsg|]}|r|qSr2r2).0xr2r2r3 Es zrelpath..cSsg|]}|r|qSr2r2)rrr2r2r3rFs rrKs..z..N)r5rr:rrrrrrErzipr/r0rLr)r1startrZ start_absZpath_absZ start_driveZ start_restZ path_driveZ path_resterror start_list path_listr[Ze1Ze2rrel_listr2r2r3r%2s6    % )_getfinalpathnamecCstt|S)N)rr)fr2r2r3resr)_isdir)rr)4__doc__r`rsrdr^__all__rrr!rrr rbuiltin_module_namesr"r4r5r7r8r:r=rBrrrrrrrr_r r rrntrh ImportErrorrrrrrrr#hasattrrr$r%rrcrrr2r2r2r3s               # -          1 w )  '  lib64/python3.4/__pycache__/ipaddress.cpython-34.pyo000064400000173010152342604300016061 0ustar00 i f@sdZdZddlZdZdZGdddeZGdd d eZd d Zd d dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"ZGd#d$d$ZejGd%d&d&eZejGd'd(d(eZGd)d*d*ZGd+d,d,eeZGd-d.d.eZGd/d0d0eeZGd1d2d2ZGd3d4d4eeZGd5d6d6eZGd7d8d8eeZdS)9zA fast, lightweight IPv4/IPv6 manipulation library in Python. This library is used to create/poke/manipulate IPv4 and IPv6 addresses and networks. z1.0N c@seZdZdZdS)AddressValueErrorz%A Value Error related to the address.N)__name__ __module__ __qualname____doc__r r ./opt/alt/python34/lib64/python3.4/ipaddress.pyrs rc@seZdZdZdS)NetmaskValueErrorz%A Value Error related to the netmask.N)rrrrr r r r r s r cCsfyt|SWnttfk r(YnXyt|SWnttfk rQYnXtd|dS)aTake an IP string/int and return an object of the correct type. Args: address: A string or integer, the IP address. Either IPv4 or IPv6 addresses may be supplied; integers less than 2**32 will be considered to be IPv4 by default. Returns: An IPv4Address or IPv6Address object. Raises: ValueError: if the *address* passed isn't either a v4 or a v6 address z0%r does not appear to be an IPv4 or IPv6 addressN) IPv4Addressrr IPv6Address ValueError)addressr r r ip_addresssrTcCslyt||SWnttfk r+YnXyt||SWnttfk rWYnXtd|dS)aTake an IP string/int and return an object of the correct type. Args: address: A string or integer, the IP network. Either IPv4 or IPv6 networks may be supplied; integers less than 2**32 will be considered to be IPv4 by default. Returns: An IPv4Network or IPv6Network object. Raises: ValueError: if the string passed isn't either a v4 or a v6 address. Or if the network has host bits set. z0%r does not appear to be an IPv4 or IPv6 networkN) IPv4Networkrr IPv6Networkr)rstrictr r r ip_network9srcCsfyt|SWnttfk r(YnXyt|SWnttfk rQYnXtd|dS)agTake an IP string/int and return an object of the correct type. Args: address: A string or integer, the IP address. Either IPv4 or IPv6 addresses may be supplied; integers less than 2**32 will be considered to be IPv4 by default. Returns: An IPv4Interface or IPv6Interface object. Raises: ValueError: if the string passed isn't either a v4 or a v6 address. Notes: The IPv?Interface classes describe an Address on a particular Network, so they're basically a combination of both the Address and Network classes. z2%r does not appear to be an IPv4 or IPv6 interfaceN) IPv4Interfacerr IPv6Interfacer)rr r r ip_interfaceWsrc Cs/y|jddSWntdYnXdS)a`Represent an address as 4 packed bytes in network (big-endian) order. Args: address: An integer representation of an IPv4 IP address. Returns: The integer address packed as 4 bytes in network (big-endian) order. Raises: ValueError: If the integer is negative or too large to be an IPv4 IP address. bigz&Address negative or too large for IPv4N)to_bytesr)rr r r v4_int_to_packedzsrc Cs/y|jddSWntdYnXdS)zRepresent an address as 16 packed bytes in network (big-endian) order. Args: address: An integer representation of an IPv6 IP address. Returns: The integer address packed as 16 bytes in network (big-endian) order. rz&Address negative or too large for IPv6N)rr)rr r r v6_int_to_packeds rcCs>t|jd}t|dkr:td|n|S)zAHelper to split the netmask and raise AddressValueError if needed/zOnly one '/' permitted in %r)strsplitlenr)raddrr r r _split_optional_netmasksr$cCsS|d}}x8|ddD]&}|j|jdkrD|}qPqW||fS)zFind a sequence of IPv#Address. Args: addresses: a list of IPv#Address objects. Returns: A tuple containing the first and last IP addresses in the sequence. rN)_ip) addressesfirstlastipr r r _find_address_ranges  r+cCs=|dkr|Sx&t|D]}||?d@r|SqW|S)zCount the number of zero bits on the right hand side. Args: number: an integer. bits: maximum number of bits to count. Returns: The number of zero bits on the right hand side of the number. rr%)range)Znumberbitsir r r _count_righthand_zero_bitss r/ccs^t|tot|ts-tdn|j|jkrXtd||fn||krstdn|jdkrt}n$|jdkrt}n td|j}|j}|j}x||krYt t ||||dj d}|d|||f}|V|d|>7}|d|j krGPn|j |}qWd S) aSummarize a network range given the first and last IP addresses. Example: >>> list(summarize_address_range(IPv4Address('192.0.2.0'), ... IPv4Address('192.0.2.130'))) ... #doctest: +NORMALIZE_WHITESPACE [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')] Args: first: the first IPv4Address or IPv6Address in the range. last: the last IPv4Address or IPv6Address in the range. Returns: An iterator of the summarized IPv(4|6) network objects. Raise: TypeError: If the first and last objects are not IP addresses. If the first and last objects are not the same version. ValueError: If the last object is not greater than the first. If the version of the first address is not 4 or 6. z1first and last must be IP addresses, not networksz%%s and %s are not of the same versionz*last IP address must be greater than firstrzunknown IP versionr%z%s/%dN) isinstance _BaseAddress TypeErrorversionrrr_max_prefixlenr&minr/ bit_length _ALL_ONES __class__)r(r)r*Zip_bitsZ first_intZlast_intZnbitsZnetr r r summarize_address_ranges2       r:cCsxd}g}d}x|D]}|s>|}|j|q|j|jkrk|j|jkrkd}q|t|jjdkr|j|d<}d}q|}|j|qW|}|s|SqWdS)avLoops through the addresses, collapsing concurrent netblocks. Example: ip1 = IPv4Network('192.0.2.0/26') ip2 = IPv4Network('192.0.2.64/26') ip3 = IPv4Network('192.0.2.128/26') ip4 = IPv4Network('192.0.2.192/26') _collapse_addresses_recursive([ip1, ip2, ip3, ip4]) -> [IPv4Network('192.0.2.0/24')] This shouldn't be called directly; it is called via collapse_addresses([]). Args: addresses: A list of IPv4Network's or IPv6Network's Returns: A list of IPv4Network's or IPv6Network's depending on what we were passed. NFTr%)appendnetwork_addressbroadcast_addresslistsupernetsubnets)r'Z last_addrZ ret_arrayZ optimizedZcur_addrr r r _collapse_addresses_recursives&  " rBc Csd}g}g}g}x3|D]+}t|tr}|rm|dj|jkrmtd||dfn|j|q|j|jkr|r|dj|jkrtd||d fny|j|jWqJtk r|j|j YqJXq|r=|d j|jkr=td||d fn|j|qWt t |}t t |}x[|t |krt ||d\}}|j|d}|jt||quWttt ||dtjS) aCollapse a list of IP objects. Example: collapse_addresses([IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]) -> [IPv4Network('192.0.2.0/24')] Args: addresses: An iterator of IPv4Network or IPv6Network objects. Returns: An iterator of the collapsed IPv(4|6)Network objects. Raises: TypeError: If passed a list of mixed version objects. rr%z%%s and %s are not of the same versionNkeyr;r;r;r;r;r;)r1r2_versionr3r< _prefixlenr5r*AttributeErrorr=sortedsetr"r+indexextendr:iterrB _BaseNetwork_get_networks_key)r'r.ZaddrsZipsZnetsr*r(r)r r r collapse_addresses5s<   rNcCs6t|tr|jSt|tr2|jStS)a2Return a key suitable for sorting between networks and addresses. Address and Network objects are not sortable by default; they're fundamentally different so the expression IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24') doesn't make any sense. There are some times however, where you may wish to have ipaddress sort these for you anyway. If you need to do this, you can use this function as the key= argument to sorted(). Args: obj: either a Network or Address object. Returns: appropriate key. )r1rLrMr2_get_address_keyNotImplemented)objr r r get_mixed_type_keyns   rRc@seZdZdZeddZeddZeddZdd Zd d Z d d Z ddZ ddZ ddZ ddZdS)_IPAddressBasezThe mother class.cCs |jS)z:Return the longhand version of the IP address as a string.)_explode_shorthand_ip_string)selfr r r explodedsz_IPAddressBase.explodedcCs t|S)z;Return the shorthand version of the IP address as a string.)r )rUr r r compressedsz_IPAddressBase.compressedcCs#dt|f}t|dS)Nz%200s has no version specified)typeNotImplementedError)rUmsgr r r r4sz_IPAddressBase.versioncCsi|dkr.d}t|||jfn||jkred}t|||j|jfndS)Nrz-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)rrDr8r5)rUrrZr r r _check_int_addresss z!_IPAddressBase._check_int_addresscCsDt|}||kr@d}t|||||jfndS)Nz6%r (len %d != %d) is not permitted as an IPv%d address)r"rrD)rUrZ expected_lenZ address_lenrZr r r _check_packed_addresss    z$_IPAddressBase._check_packed_addresscCs|j|j|?AS)zTurn the prefix length into a bitwise netmask Args: prefixlen: An integer, the prefix length. Returns: An integer. )r8)rU prefixlenr r r _ip_int_from_prefixs z"_IPAddressBase._ip_int_from_prefixc Cst||j}|j|}||?}d|>d}||kr{|jd}|j|d}d}t||n|S)aReturn prefix length from the bitwise netmask. Args: ip_int: An integer, the netmask in expanded bitwise format Returns: An integer, the prefix length. Raises: ValueError: If the input intermingles zeroes & ones r%rz&Netmask pattern %r mixes zeroes & ones)r/r5rr) rUip_intZtrailing_zeroesr]Z leading_onesZall_onesZbyteslenZdetailsrZr r r _prefix_from_ip_ints      z"_IPAddressBase._prefix_from_ip_intcCsd|}t|ddS)Nz%r is not a valid netmask)r )rUZ netmask_strrZr r r _report_invalid_netmasks z&_IPAddressBase._report_invalid_netmaskc Cstjj|s"|j|nyt|}Wntk rS|j|YnXd|kon|jkns|j|n|S)a Return prefix length from a numeric string Args: prefixlen_str: The string to be converted Returns: An integer, the prefix length. Raises: NetmaskValueError: If the input is not a valid netmask r)_BaseV4_DECIMAL_DIGITS issupersetrbintrr5)rUZ prefixlen_strr]r r r _prefix_from_prefix_strings z)_IPAddressBase._prefix_from_prefix_stringcCsy|j|}Wntk r4|j|YnXy|j|SWntk rZYnX||jN}y|j|SWntk r|j|YnXdS)aTurn a netmask/hostmask string into a prefix length Args: ip_str: The netmask/hostmask to be converted Returns: An integer, the prefix length. Raises: NetmaskValueError: If the input is not a valid netmask/hostmask N)_ip_int_from_stringrrbrarr8)rUip_strr`r r r _prefix_from_ip_strings     z%_IPAddressBase._prefix_from_ip_stringN)rrrrpropertyrVrWr4r[r\r^rarbrgrjr r r r rSs     rSc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ dS)r2zA generic IP object. This IP class contains the version independent methods which are used by single IP addresses. cCs9t|t r5dt|kr5td|ndS)NrzUnexpected '/' in %r)r1bytesr r)rUrr r r __init__sz_BaseAddress.__init__cCs|jS)N)r&)rUr r r __int__sz_BaseAddress.__int__c CsCy&|j|jko$|j|jkSWntk r>tSYnXdS)N)r&rDrFrP)rUotherr r r __eq__s  z_BaseAddress.__eq__cCsdt|tstS|j|jkr>td||fn|j|jkr`|j|jkSdS)Nz%%s and %s are not of the same versionF)r1r2rPrDr3r&)rUror r r __lt__$sz_BaseAddress.__lt__cCs*t|tstS|jt||S)N)r1rfrPr9)rUror r r __add__0sz_BaseAddress.__add__cCs*t|tstS|jt||S)N)r1rfrPr9)rUror r r __sub__5sz_BaseAddress.__sub__cCsd|jjt|fS)Nz%s(%r))r9rr )rUr r r __repr__:sz_BaseAddress.__repr__cCst|j|jS)N)r _string_from_ip_intr&)rUr r r __str__=sz_BaseAddress.__str__cCsttt|jS)N)hashhexrfr&)rUr r r __hash__@sz_BaseAddress.__hash__cCs |j|fS)N)rD)rUr r r rOCsz_BaseAddress._get_address_keyN)rrrrrmrnrprqrrrsrtrvryrOr r r r r2 s         r2c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZeddZeddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zd(d)Zd*d+Zd,d-Zd.d/d0d1Zd.d/d2d3Zed4d5Zed6d7Zed8d9Zed:d;Z ed<d=Z!ed>d?Z"ed@dAZ#d/S)BrLz~A generic IP network object. This IP class contains the version independent methods which are used by networks. cCs i|_dS)N)_cache)rUrr r r rmPsz_BaseNetwork.__init__cCsd|jjt|fS)Nz%s(%r))r9rr )rUr r r rtSsz_BaseNetwork.__repr__cCsd|j|jfS)Nz%s/%d)r=r])rUr r r rvVsz_BaseNetwork.__str__ccsNt|j}t|j}x)t|d|D]}|j|Vq2WdS)zGenerate Iterator over usable hosts in a network. This is like __iter__ except it doesn't return the network or broadcast addresses. r%N)rfr=r>r,_address_class)rUnetwork broadcastxr r r hostsYsz_BaseNetwork.hostsccsNt|j}t|j}x)t||dD]}|j|Vq2WdS)Nr%)rfr=r>r,r{)rUr|r}r~r r r __iter__esz_BaseNetwork.__iter__cCst|j}t|j}|dkrT|||krCtn|j||S|d7}|||krwtn|j||SdS)Nrr%)rfr=r> IndexErrorr{)rUnr|r}r r r __getitem__ks    z_BaseNetwork.__getitem__cCst|tstS|j|jkr>td||fn|j|jkr`|j|jkS|j|jkr|j|jkSdS)Nz%%s and %s are not of the same versionF)r1rLrPrDr3r=netmask)rUror r r rqxsz_BaseNetwork.__lt__c CsayD|j|jkoB|j|jkoBt|jt|jkSWntk r\tSYnXdS)N)rDr=rfrrFrP)rUror r r rps   z_BaseNetwork.__eq__cCs tt|jt|jAS)N)rwrfr=r)rUr r r rysz_BaseNetwork.__hash__cCs`|j|jkrdSt|tr)dSt|jt|jkoYt|jkSSdS)NF)rDr1rLrfr=r&r>)rUror r r __contains__s  z_BaseNetwork.__contains__cCs:|j|kp9|j|kp9|j|kp9|j|kS)z*Tell if self is partly contained in other.)r=r>)rUror r r overlapssz_BaseNetwork.overlapscCsW|jjd}|dkrS|jt|jt|jB}||jd)rzgetr{rfr=hostmask)rUr~r r r r>s  z_BaseNetwork.broadcast_addresscCsQ|jjd}|dkrM|jt|j|jA}||jdr=)rUr r r num_addressessz_BaseNetwork.num_addressescCs#dt|f}t|dS)Nz%%200s has no associated address class)rXrY)rUrZr r r r{sz_BaseNetwork._address_classcCs|jS)N)rE)rUr r r r]sz_BaseNetwork.prefixlenccs|j|jks+td||fnt|tsMtd|n|j|jkon|j|jkstd||fn||krtn|jd|j|j f}|j \}}x||kr||kr|j|jkr)|j|jkr)|V|j \}}q|j|jkrg|j|jkrg|V|j \}}qt d|||fqW||kr|Vn-||kr|Vnt d|||fdS)aRemove an address from a larger block. For example: addr1 = ip_network('192.0.2.0/28') addr2 = ip_network('192.0.2.1/32') addr1.address_exclude(addr2) = [IPv4Network('192.0.2.0/32'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.8/29')] or IPv6: addr1 = ip_network('2001:db8::1/32') addr2 = ip_network('2001:db8::1/128') addr1.address_exclude(addr2) = [ip_network('2001:db8::1/128'), ip_network('2001:db8::2/127'), ip_network('2001:db8::4/126'), ip_network('2001:db8::8/125'), ... ip_network('2001:db8:8000::/33')] Args: other: An IPv4Network or IPv6Network object of the same type. Returns: An iterator of the IPv(4|6)Network objects which is self minus other. Raises: TypeError: If self and other are of differing address versions, or if other is not a network object. ValueError: If other is not completely contained by self. z%%s and %s are not of the same versionz%s is not a network objectz%s not contained in %sz%s/%sz3Error performing exclusion: s1: %s s2: %s other: %sN) rDr3r1rLr=r>r StopIterationr9r]rAAssertionError)rUros1s2r r r address_excludes<$    z_BaseNetwork.address_excludecCs|j|jkr+td||fn|j|jkrAdS|j|jkrWdS|j|jkrmdS|j|jkrdSdS)aCompare two IP objects. This is only concerned about the comparison of the integer representation of the network addresses. This means that the host bits aren't considered at all in this method. If you want to compare host bits, you can easily enough do a 'HostA._ip < HostB._ip' Args: other: An IP object. Returns: If the IP versions of self and other are the same, returns: -1 if self < other: eg: IPv4Network('192.0.2.0/25') < IPv4Network('192.0.2.128/25') IPv6Network('2001:db8::1000/124') < IPv6Network('2001:db8::2000/124') 0 if self == other eg: IPv4Network('192.0.2.0/24') == IPv4Network('192.0.2.0/24') IPv6Network('2001:db8::1000/124') == IPv6Network('2001:db8::1000/124') 1 if self > other eg: IPv4Network('192.0.2.128/25') > IPv4Network('192.0.2.0/25') IPv6Network('2001:db8::2000/124') > IPv6Network('2001:db8::1000/124') Raises: TypeError if the IP versions are different. z"%s and %s are not of the same typer%rr;r;)rDr3r=r)rUror r r compare_networkss!z_BaseNetwork.compare_networkscCs|j|j|jfS)zNetwork-only key function. Returns an object that identifies this address' network and netmask. This function is a suitable "key" argument for sorted() and list.sort(). )rDr=r)rUr r r rMOsz_BaseNetwork._get_networks_keyr%NccsL|j|jkr|VdS|dk rp||jkrEtdn|dkr`tdn||j}n|dkrtdn|j|}||jkrtd||fn|jd|j|j|f}|V|}xW|j}||jkr dS|jt|d}|jd||f}|VqWdS) aThe subnets which join to make the current subnet. In the case that self contains only one IP (self._prefixlen == 32 for IPv4 or self._prefixlen == 128 for IPv6), yield an iterator with just ourself. Args: prefixlen_diff: An integer, the amount the prefix length should be increased by. This should not be set if new_prefix is also set. new_prefix: The desired new prefix length. This must be a larger number (smaller prefix) than the existing prefix. This should not be set if prefixlen_diff is also set. Returns: An iterator of IPv(4|6) objects. Raises: ValueError: The prefixlen_diff is too small or too large. OR prefixlen_diff and new_prefix are both set or new_prefix is a smaller number than the current prefix (smaller number means a larger network) Nznew prefix must be longerr%z(cannot set prefixlen_diff and new_prefixrzprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %sz%s/%s)rEr5rr9r=r>r{rf)rUprefixlen_diff new_prefixZ new_prefixlenr(Zcurrentr}Znew_addrr r r rAYs:        z_BaseNetwork.subnetscCs|jdkr|S|dk rh||jkr=tdn|dkrXtdn|j|}n|j|dkrtd|j|fn|jd|j|j|fdd }|jd|j|jfS) aThe supernet containing the current network. Args: prefixlen_diff: An integer, the amount the prefix length of the network should be decreased by. For example, given a /24 network and a prefixlen_diff of 3, a supernet with a /21 netmask is returned. Returns: An IPv4 network object. Raises: ValueError: If self.prefixlen - prefixlen_diff < 0. I.e., you have a negative prefix length. OR If prefixlen_diff and new_prefix are both set or new_prefix is a larger number than the current prefix (larger number means a smaller network) rNznew prefix must be shorterr%z(cannot set prefixlen_diff and new_prefixz;current prefixlen is %d, cannot have a prefixlen_diff of %dz%s/%drF)rErr]r9r=)rUrrtr r r r@s    z_BaseNetwork.supernetcCs|jjo|jjS)zTest if the address is reserved for multicast use. Returns: A boolean, True if the address is a multicast address. See RFC 2373 2.7 for details. )r= is_multicastr>)rUr r r rs z_BaseNetwork.is_multicastcCs|jjo|jjS)zTest if the address is otherwise IETF reserved. Returns: A boolean, True if the address is within one of the reserved IPv6 Network ranges. )r= is_reservedr>)rUr r r rs z_BaseNetwork.is_reservedcCs|jjo|jjS)zTest if the address is reserved for link-local. Returns: A boolean, True if the address is reserved per RFC 4291. )r= is_link_localr>)rUr r r rs z_BaseNetwork.is_link_localcCs|jjo|jjS)zTest if this address is allocated for private networks. Returns: A boolean, True if the address is reserved per iana-ipv4-special-registry or iana-ipv6-special-registry. )r= is_privater>)rUr r r rs z_BaseNetwork.is_privatecCs|j S)zTest if this address is allocated for public networks. Returns: A boolean, True if the address is not reserved per iana-ipv4-special-registry or iana-ipv6-special-registry. )r)rUr r r is_globals z_BaseNetwork.is_globalcCs|jjo|jjS)zTest if the address is unspecified. Returns: A boolean, True if this is the unspecified address as defined in RFC 2373 2.5.2. )r=is_unspecifiedr>)rUr r r rs z_BaseNetwork.is_unspecifiedcCs|jjo|jjS)zTest if the address is a loopback address. Returns: A boolean, True if the address is a loopback address as defined in RFC 2373 2.5.3. )r= is_loopbackr>)rUr r r rs z_BaseNetwork.is_loopback)$rrrrrmrtrvrrrrqrpryrrrkr>rrrrrr{r]rrrMrAr@rrrrrrrr r r r rLGs@          N 0 >)      rLc @seZdZdZdedZedZed!ZddZ ddZ ddZ ddZ ddZ ddZddZeddZeddZd S)"rczyBase IPv4 object. The following methods are used by IPv4 objects in both single IP addresses and networks. rr% 0123456789rrcCsd|_t|_dS)Nr)rD IPV4LENGTHr5)rUrr r r rm#s z_BaseV4.__init__cCs t|S)N)r )rUr r r rT'sz$_BaseV4._explode_shorthand_ip_stringcCs|stdn|jd}t|dkrItd|ny tjt|j|dSWn>tk r}ztd||fdWYdd}~XnXdS)aTurn the given IP string into an integer for comparison. Args: ip_str: A string, the IP ip_str. Returns: The IP ip_str as an integer. Raises: AddressValueError: if ip_str isn't a valid IPv4 Address. zAddress cannot be empty.rzExpected 4 octets in %rrz%s in %rN)rr!r"rf from_bytesmap _parse_octetr)rUriZoctetsexcr r r rh*s  z_BaseV4._ip_int_from_stringcCs|stdn|jj|s@d}t||nt|dkrkd}t||nt|d}|dkr|ddkrd }t||n|d krtd |n|S) a Convert a decimal octet into an integer. Args: octet_str: A string, the number to parse. Returns: The octet as an integer. Raises: ValueError: if the octet isn't strictly a decimal from [0..255]. zEmpty octet not permittedz#Only decimal digits permitted in %rz$At most 3 characters permitted in %r r0z3Ambiguous (octal/decimal) value in %r not permittedrzOctet %d (> 255) not permitted)rrdrer"rf)rUZ octet_strrZZ octet_intr r r rCs  z_BaseV4._parse_octetcCs"djtt|jddS)zTurns a 32-bit integer into dotted decimal notation. Args: ip_int: An integer, the IP address. Returns: The IP address as a string in dotted decimal notation. rrr)joinrr r)rUr`r r r rugs z_BaseV4._string_from_ip_intcCs|jd}t|dkry.x'|D]}t||jkr+dSq+WWntk rgdSYnXx>t|D]0\}}|dkru|||dkrudSquWdSyt|}Wntk rdSYnXd|ko|jkSS)zVerify that the netmask is valid. Args: netmask: A string, either a prefix or dotted decimal netmask. Returns: A boolean, True if the prefix represents a valid IPv4 netmask. rrFrr%T)r!r"rf_valid_mask_octetsr enumerater5)rUrmaskr~idxyr r r _is_valid_netmaskss"        z_BaseV4._is_valid_netmaskc s|jd}y&fddtt|D}Wntk rMdSYnXt|t|krjdS|d|dkrdSdS) zTest if the IP string is a hostmask (rather than a netmask). Args: ip_str: A string, the potential hostmask. Returns: A boolean, True if the IP string is a hostmask. rcs%g|]}|jkr|qSr )r).0r~)rUr r s z(_BaseV4._is_hostmask..Frr%Tr;)r!rrfrr")rUrir-partsr )rUr _is_hostmasks &  z_BaseV4._is_hostmaskcCs|jS)N)r5)rUr r r max_prefixlensz_BaseV4.max_prefixlencCs|jS)N)rD)rUr r r r4sz_BaseV4.versionN) rrrrrrrrr)rrrrrr8 frozensetrdrrmrTrhrrurrrkrr4r r r r rcs       $  rcc@seZdZdZddZeddZeddZeej dd Z ed d Z ed d Z eddZ eddZdS)r z/Represent and manipulate single IPv4 Addresses.cCstj||tj||t|trI|j|||_dSt|tr|j|dtj |d|_dSt |}|j ||_dS)a Args: address: A string or integer representing the IP Additionally, an integer can be passed, so IPv4Address('192.0.2.1') == IPv4Address(3221225985). or, more generally IPv4Address(int(IPv4Address('192.0.2.1'))) == IPv4Address('192.0.2.1') Raises: AddressValueError: If ipaddress isn't a valid IPv4 address. Nrr) r2rmrcr1rfr[r&rlr\rr rh)rUraddr_strr r r rms   zIPv4Address.__init__cCs t|jS)z*The binary representation of this address.)rr&)rUr r r packedszIPv4Address.packedcCstd}||kS)zTest if the address is otherwise IETF reserved. Returns: A boolean, True if the address is within the reserved IPv4 Network range. z 240.0.0.0/4)r)rUZreserved_networkr r r rs zIPv4Address.is_reservedcCs|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|td kp|td kp|td kp|td kp|td kp|tdkS)zTest if this address is allocated for private networks. Returns: A boolean, True if the address is reserved per iana-ipv4-special-registry. z 0.0.0.0/8z 10.0.0.0/8z 127.0.0.0/8z169.254.0.0/16z 172.16.0.0/12z 192.0.0.0/29z192.0.0.170/31z 192.0.2.0/24z192.168.0.0/16z 198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z 240.0.0.0/4z255.255.255.255/32)r)rUr r r rs zIPv4Address.is_privatecCstd}||kS)zTest if the address is reserved for multicast use. Returns: A boolean, True if the address is multicast. See RFC 3171 for details. z 224.0.0.0/4)r)rUmulticast_networkr r r rs zIPv4Address.is_multicastcCstd}||kS)zTest if the address is unspecified. Returns: A boolean, True if this is the unspecified address as defined in RFC 5735 3. z0.0.0.0)r )rUZunspecified_addressr r r rs zIPv4Address.is_unspecifiedcCstd}||kS)zTest if the address is a loopback address. Returns: A boolean, True if the address is a loopback per RFC 3330. z 127.0.0.0/8)r)rUZloopback_networkr r r rs zIPv4Address.is_loopbackcCstd}||kS)zTest if the address is reserved for link-local. Returns: A boolean, True if the address is link-local per RFC 3927. z169.254.0.0/16)r)rUlinklocal_networkr r r r&s zIPv4Address.is_link_localN)rrrrrmrkrr functools lru_cacherrrrrr r r r r s  $    r c@seZdZddZddZddZddZd d Zed d Z ed dZ eddZ eddZ dS)rcCst|ttfrGtj||t|j|_|j|_ dSt |}tj||dt|dd|_|jj |_ |jj |_ |jj |_ dS)NrrF) r1rlrfr rmrr&r|r5rEr$rr)rUrr#r r r rm4s  zIPv4Interface.__init__cCs d|j|j|jjfS)Nz%s/%d)rur&r|r])rUr r r rvDszIPv4Interface.__str__c CsZtj||}| s%|tkr)|Sy|j|jkSWntk rUdSYnXdS)NF)r rprPr|rF)rUro address_equalr r r rpHs zIPv4Interface.__eq__c CsStj||}|tkr"tSy|j|jkSWntk rNdSYnXdS)NF)r rqrPr|rF)rUro address_lessr r r rqTs  zIPv4Interface.__lt__cCs|j|jAt|jjAS)N)r&rErfr|r=)rUr r r ry_szIPv4Interface.__hash__cCs t|jS)N)r r&)rUr r r r*bszIPv4Interface.ipcCsd|j|j|jfS)Nz%s/%s)rur&rE)rUr r r rfszIPv4Interface.with_prefixlencCsd|j|j|jfS)Nz%s/%s)rur&r)rUr r r rkszIPv4Interface.with_netmaskcCsd|j|j|jfS)Nz%s/%s)rur&r)rUr r r rpszIPv4Interface.with_hostmaskN) rrrrmrvrprqryrkr*rrrr r r r r2s    rc@sIeZdZdZeZdddZeej ddZ dS)raeThis class represents and manipulates 32-bit IPv4 network + addresses.. Attributes: [examples for IPv4Network('192.0.2.0/27')] .network_address: IPv4Address('192.0.2.0') .hostmask: IPv4Address('0.0.0.31') .broadcast_address: IPv4Address('192.0.2.32') .netmask: IPv4Address('255.255.255.224') .prefixlen: 27 Tc Cstj||tj||t|tr`t||_|j|_t|j |_ dSt|t rt||_|j|_t|j |_ dSt |}t|j |d|_t|dkr"y|j|d|_Wq.tk r|j|d|_Yq.Xn |j|_t|j|j|_ |rtt |jt |j @|jkrtd|qntt |jt |j @|_|j|jdkr|j|_ndS)aInstantiate a new IPv4 network object. Args: address: A string or integer representing the IP [& network]. '192.0.2.0/24' '192.0.2.0/255.255.255.0' '192.0.0.2/0.0.0.255' are all functionally the same in IPv4. Similarly, '192.0.2.1' '192.0.2.1/255.255.255.255' '192.0.2.1/32' are also functionally equivalent. That is to say, failing to provide a subnetmask will create an object with a mask of /32. If the mask (portion after the / in the argument) is given in dotted quad form, it is treated as a netmask if it starts with a non-zero field (e.g. /255.0.0.0 == /8) and as a hostmask if it starts with a zero field (e.g. 0.255.255.255 == /8), with the single exception of an all-zero mask which is treated as a netmask == /0. If no mask is given, a default of /32 is used. Additionally, an integer can be passed, so IPv4Network('192.0.2.1') == IPv4Network(3221225985) or, more generally IPv4Interface(int(IPv4Interface('192.0.2.1'))) == IPv4Interface('192.0.2.1') Raises: AddressValueError: If ipaddress isn't a valid IPv4 address. NetmaskValueError: If the netmask isn't valid for an IPv4 address. ValueError: If strict is True and a network address is not supplied. Nrrr%z%s has host bits set)rcrmrLr1rlr r=r5rEr8rrfr$rhr"rgr rjr^rrr)rUrrr#r r r rms:&      zIPv4Network.__init__cCs3|jtdko'|jtdk o2|j S)zTest if this address is allocated for public networks. Returns: A boolean, True if the address is not reserved per iana-ipv4-special-registry. z 100.64.0.0/10)r=rr>r)rUr r r rs zIPv4Network.is_globalN) rrrrr r{rmrkrrrr r r r rvs Trc@seZdZdZdedZdZedZddZ dd Z d d Z d d Z dddZ ddZeddZeddZdS)_BaseV6zyBase IPv6 object. The following methods are used by IPv6 objects in both single IP addresses and networks. rr%r_Z0123456789ABCDEFabcdefcCsd|_t|_dS)Nr0)rD IPV6LENGTHr5)rUrr r r rms z_BaseV6.__init__cCs|stdn|jd}d}t||kr[d||f}t|nd|dkryt|jj}Wn>tk r}ztd||fdWYdd}~XnX|jd |d ?d @|jd |d @n|jd}t||kr8d |d|f}t|nd}xYtdt|dD]>} || sX|dk rd |}t|n| }qXqXW|dk rr|} t||d} |ds| d8} | rd}t||qn|ds,| d8} | r,d}t||q,n|j| | } | dkrd}t||jd|fqnt||jkrd}t||j|fn|dsd}t||n|dsd}t||nt|} d} d} yd} x5t| D]'} | d K} | |j || O} qW| d | K} x9t| dD]'} | d K} | |j || O} qgW| SWn>t k r}ztd||fdWYdd}~XnXdS)zTurn an IPv6 ip_str into an integer. Args: ip_str: A string, the IPv6 ip_str. Returns: An int, the IPv6 address Raises: AddressValueError: if ip_str isn't a valid IPv6 Address. zAddress cannot be empty:rz At least %d parts expected in %rrr%z%s in %rNz%xriz!At most %d colons permitted in %rz At most one '::' permitted in %rrz0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %rr;r;r;) rr!r"r popr&r< _HEXTET_COUNTr, _parse_hextetr)rUrirZ _min_partsrZZipv4_intrZ _max_partsZ skip_indexr.Zparts_hiZparts_loZ parts_skippedr`r r r rhs ,            #     z_BaseV6._ip_int_from_stringcCs]|jj|s%td|nt|dkrPd}t||nt|dS)a&Convert an IPv6 hextet string into an integer. Args: hextet_str: A string, the number to parse. Returns: The hextet as an integer. Raises: ValueError: if the input isn't strictly a hex number from [0..FFFF]. zOnly hex digits permitted in %rrz$At most 4 characters permitted in %rr) _HEX_DIGITSrerr"rf)rUZ hextet_strrZr r r ras z_BaseV6._parse_hextetc Csd}d}d}d}xot|D]a\}}|dkrz|d7}|dkr\|}n||kr|}|}qq%d}d}q%W|dkr||}|t|kr|dg7}ndg|||<|dkrdg|}qn|S) aCompresses a list of hextets. Compresses a list of strings, replacing the longest continuous sequence of "0" in the list with "" and adding empty strings at the beginning or at the end of the string such that subsequently calling ":".join(hextets) will produce the compressed version of the IPv6 address. Args: hextets: A list of strings, the hextets to compress. Returns: A list of strings. r%rrr;r;r;r;)rr") rUhextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenrIZhextetZbest_doublecolon_endr r r _compress_hextetszs.         z_BaseV6._compress_hextetsNcs|dkrt|j}n||jkr<tdnd|fddtdddD}|j|}d j|S) a,Turns a 128-bit integer into hexadecimal notation. Args: ip_int: An integer, the IP address. Returns: A string, the hexadecimal representation of the address. Raises: ValueError: The address is bigger than 128 bits of all ones. NzIPv6 address is too largez%032xcs1g|]'}dt||ddqS)z%xrr)rf)rr~)hex_strr r rs z/_BaseV6._string_from_ip_int..rrrr)rfr&r8rr,rr)rUr`rr )rr rus  %z_BaseV6._string_from_ip_intcst|tr!t|j}n-t|trBt|j}n t|}|j|}d|fddtdddD}t|ttfrddj ||j fSdj |S) zExpand a shortened IPv6 address. Args: ip_str: A string, the IPv6 address. Returns: A string, the expanded IPv6 address. z%032xcs$g|]}||dqS)rr )rr~)rr r rs z8_BaseV6._explode_shorthand_ip_string..rrrz%s/%dr) r1rr r=rr*rhr,rLrrE)rUrir`rr )rr rTs   %z$_BaseV6._explode_shorthand_ip_stringcCs|jS)N)r5)rUr r r rsz_BaseV6.max_prefixlencCs|jS)N)rD)rUr r r r4sz_BaseV6.version)rrrrrr8rrrrmrhrrrurTrkrr4r r r r rs    g  / rc@seZdZdZddZeddZeddZedd Zed d Z ed d Z ee j ddZ eddZeddZeddZeddZeddZeddZdS)r z/Represent and manipulate single IPv6 Addresses.cCstj||tj||t|trI|j|||_dSt|tr|j|dtj |d|_dSt |}|j ||_dS)aInstantiate a new IPv6 address object. Args: address: A string or integer representing the IP Additionally, an integer can be passed, so IPv6Address('2001:db8::') == IPv6Address(42540766411282592856903984951653826560) or, more generally IPv6Address(int(IPv6Address('2001:db8::'))) == IPv6Address('2001:db8::') Raises: AddressValueError: If address isn't a valid IPv6 address. Nrr) r2rmrr1rfr[r&rlr\rr rh)rUrrr r r rms   zIPv6Address.__init__cCs t|jS)z*The binary representation of this address.)rr&)rUr r r r szIPv6Address.packedcCstd}||kS)zTest if the address is reserved for multicast use. Returns: A boolean, True if the address is a multicast address. See RFC 2373 2.7 for details. zff00::/8)r)rUrr r r rs zIPv6Address.is_multicastcstdtdtdtdtdtdtdtdtd td td td td tdtdg}tfdd|DS)zTest if the address is otherwise IETF reserved. Returns: A boolean, True if the address is within one of the reserved IPv6 Network ranges. z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9c3s|]}|kVqdS)Nr )rr~)rUr r /sz*IPv6Address.is_reserved..)rany)rUZreserved_networksr )rUr rs zIPv6Address.is_reservedcCstd}||kS)zTest if the address is reserved for link-local. Returns: A boolean, True if the address is reserved per RFC 4291. z fe80::/10)r)rUrr r r r1s zIPv6Address.is_link_localcCstd}||kS)a`Test if the address is reserved for site-local. Note that the site-local address space has been deprecated by RFC 3879. Use is_private to test if this address is in the space of unique local addresses as defined by RFC 4193. Returns: A boolean, True if the address is reserved per RFC 3513 2.5.6. z fec0::/10)r)rUZsitelocal_networkr r r is_site_local<s zIPv6Address.is_site_localcCs|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|tdkp|td kp|td kS) zTest if this address is allocated for private networks. Returns: A boolean, True if the address is reserved per iana-ipv6-special-registry. z::1/128z::/128z ::ffff:0:0/96z100::/64z 2001::/23z 2001:2::/48z 2001:db8::/32z 2001:10::/28zfc00::/7z fe80::/10)r)rUr r r rKs zIPv6Address.is_privatecCs|j S)zTest if this address is allocated for public networks. Returns: A boolean, true if the address is not reserved per iana-ipv6-special-registry. )r)rUr r r r`s zIPv6Address.is_globalcCs |jdkS)zTest if the address is unspecified. Returns: A boolean, True if this is the unspecified address as defined in RFC 2373 2.5.2. r)r&)rUr r r rks zIPv6Address.is_unspecifiedcCs |jdkS)zTest if the address is a loopback address. Returns: A boolean, True if the address is a loopback address as defined in RFC 2373 2.5.3. r%)r&)rUr r r rvs zIPv6Address.is_loopbackcCs(|jd?dkrdSt|jd@S)zReturn the IPv4 mapped address. Returns: If the IPv6 address is a v4 mapped address, return the IPv4 mapped address. Return None otherwise. riNl)r&r )rUr r r ipv4_mappeds zIPv6Address.ipv4_mappedcCs@|jd?dkrdSt|jd?d@t|jd@fS)zTuple of embedded teredo IPs. Returns: Tuple of the (server, client) IPs or None if the address doesn't appear to be a teredo address (doesn't start with 2001::/32) `i N@l)r&r )rUr r r teredos zIPv6Address.teredocCs,|jd?dkrdSt|jd?d@S)zReturn the IPv4 6to4 embedded address. Returns: The IPv4 6to4-embedded address if present or None if the address doesn't appear to contain a 6to4 embedded address. pi NPl)r&r )rUr r r sixtofours zIPv6Address.sixtofourN)rrrrrmrkrrrrrrrrrrrrrrr r r r r s  %      r c@seZdZddZddZddZddZd d Zed d Z ed dZ eddZ eddZ eddZ eddZdS)rcCst|ttfrGtj||t|j|_|j|_ dSt |}tj||dt|dd|_|jj |_ |jj |_ |jj |_ dS)NrrF) r1rlrfr rmrr&r|r5rEr$rr)rUrr#r r r rms  zIPv6Interface.__init__cCs d|j|j|jjfS)Nz%s/%d)rur&r|r])rUr r r rvszIPv6Interface.__str__c CsZtj||}| s%|tkr)|Sy|j|jkSWntk rUdSYnXdS)NF)r rprPr|rF)rUrorr r r rps zIPv6Interface.__eq__c CsStj||}|tkr"tSy|j|jkSWntk rNdSYnXdS)NF)r rqrPr|rF)rUrorr r r rqs  zIPv6Interface.__lt__cCs|j|jAt|jjAS)N)r&rErfr|r=)rUr r r ryszIPv6Interface.__hash__cCs t|jS)N)r r&)rUr r r r*szIPv6Interface.ipcCsd|j|j|jfS)Nz%s/%s)rur&rE)rUr r r rszIPv6Interface.with_prefixlencCsd|j|j|jfS)Nz%s/%s)rur&r)rUr r r rszIPv6Interface.with_netmaskcCsd|j|j|jfS)Nz%s/%s)rur&r)rUr r r rszIPv6Interface.with_hostmaskcCs|jdko|jjS)Nr)r&r|r)rUr r r rszIPv6Interface.is_unspecifiedcCs|jdko|jjS)Nr%)r&r|r)rUr r r rszIPv6Interface.is_loopbackN)rrrrmrvrprqryrkr*rrrrrr r r r rs    rc@sIeZdZdZeZdddZddZeddZ d S) ravThis class represents and manipulates 128-bit IPv6 networks. Attributes: [examples for IPv6('2001:db8::1000/124')] .network_address: IPv6Address('2001:db8::1000') .hostmask: IPv6Address('::f') .broadcast_address: IPv6Address('2001:db8::100f') .netmask: IPv6Address('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0') .prefixlen: 124 TcCstj||tj||t|tr`t||_|j|_t|j |_ dSt|t rt||_|j|_t|j |_ dSt |}t|j |d|_t|dkr|j|d|_n |j|_t|j|j|_ |ratt|jt|j @|jkratd|qantt|jt|j @|_|j|jdkr|j|_ndS)aInstantiate a new IPv6 Network object. Args: address: A string or integer representing the IPv6 network or the IP and prefix/netmask. '2001:db8::/128' '2001:db8:0000:0000:0000:0000:0000:0000/128' '2001:db8::' are all functionally the same in IPv6. That is to say, failing to provide a subnetmask will create an object with a mask of /128. Additionally, an integer can be passed, so IPv6Network('2001:db8::') == IPv6Network(42540766411282592856903984951653826560) or, more generally IPv6Network(int(IPv6Network('2001:db8::'))) == IPv6Network('2001:db8::') strict: A boolean. If true, ensure that we have been passed A true network address, eg, 2001:db8::1000/124 and not an IP address on a network, eg, 2001:db8::1/124. Raises: AddressValueError: If address isn't a valid IPv6 address. NetmaskValueError: If the netmask isn't valid for an IPv6 address. ValueError: If strict was True and a network address was not supplied. Nrrr%z%s has host bits set)rrmrLr1rfr r=r5rEr8rrlr$rhr"rgr^rrr)rUrrr#r r r rms4      zIPv6Network.__init__ccsRt|j}t|j}x-t|d|dD]}|j|Vq6WdS)zGenerate Iterator over usable hosts in a network. This is like __iter__ except it doesn't return the Subnet-Router anycast address. r%N)rfr=r>r,r{)rUr|r}r~r r r rMszIPv6Network.hostscCs|jjo|jjS)a`Test if the address is reserved for site-local. Note that the site-local address space has been deprecated by RFC 3879. Use is_private to test if this address is in the space of unique local addresses as defined by RFC 4193. Returns: A boolean, True if the address is reserved per RFC 3513 2.5.6. )r=rr>)rUr r r rYs zIPv6Network.is_site_localN) rrrrr r{rmrrkrr r r r rs H r) r __version__rrrrrr rrrrrr$r+r/r:rBrNrRrStotal_orderingr2rLrcr rrrr rrr r r r  s@   #      8 0 9  : DsJlib64/python3.4/__pycache__/subprocess.cpython-34.pyc000064400000124537152342604300016271 0ustar00 e f%@s4dZddlZejdkZddlZddlZddlZddlZddlZddl Z ddl Z yddlm Z Wn"e k rddlmZ YnXGdddeZGdd d eZGd d d eZer0ddlZddlZddlZGd d d ZnddlZddlZddlZyddlZWne k rddlZYnXeeddZeedrejZn ejZddddddddd dg Z er]ddlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(e j)dddddd d!d"gGd#d$d$e*Z+nyej,d%Z-Wnd&Z-YnXgZ.d'd(Z/d9Z0d:Z1d;Z2d,d-Z3d.d/Z4d0dd1dZ5d2dZ6d0dd3dZ7d4d5Z8d6dZ9d7dZ:e;Z<Gd8dde;Z=dS)>> retcode = subprocess.call(["ls", "-l"]) check_call(*popenargs, **kwargs): Run command with arguments. Wait for command to complete. If the exit code was zero then return, otherwise raise CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute. The arguments are the same as for the Popen constructor. Example: >>> subprocess.check_call(["ls", "-l"]) 0 getstatusoutput(cmd): Return (status, output) of executing cmd in a shell. Execute the string 'cmd' in a shell with 'check_output' and return a 2-tuple (status, output). Universal newlines mode is used, meaning that the result with be decoded to a string. A trailing newline is stripped from the output. The exit status for the command can be interpreted according to the rules for the function 'wait'. Example: >>> subprocess.getstatusoutput('ls /bin/ls') (0, '/bin/ls') >>> subprocess.getstatusoutput('cat /bin/junk') (256, 'cat: /bin/junk: No such file or directory') >>> subprocess.getstatusoutput('/bin/junk') (256, 'sh: /bin/junk: not found') getoutput(cmd): Return output (stdout or stderr) of executing cmd in a shell. Like getstatusoutput(), except the exit status is ignored and the return value is a string containing the command's output. Example: >>> subprocess.getoutput('ls /bin/ls') '/bin/ls' check_output(*popenargs, **kwargs): Run command with arguments and return its output. If the exit code was non-zero it raises a CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute and output in the output attribute. The arguments are the same as for the Popen constructor. Example: >>> output = subprocess.check_output(["ls", "-l", "/dev/null"]) There is an additional optional argument, "input", allowing you to pass a string to the subprocess's stdin. If you use this argument you may not also use the Popen constructor's "stdin" argument. Exceptions ---------- Exceptions raised in the child process, before the new program has started to execute, will be re-raised in the parent. Additionally, the exception object will have one extra attribute called 'child_traceback', which is a string containing traceback information from the child's point of view. The most common exception raised is OSError. This occurs, for example, when trying to execute a non-existent file. Applications should prepare for OSErrors. A ValueError will be raised if Popen is called with invalid arguments. Exceptions defined within this module inherit from SubprocessError. check_call() and check_output() will raise CalledProcessError if the called process returns a non-zero return code. TimeoutExpired be raised if a timeout was specified and expired. Security -------- Unlike some other popen functions, this implementation will never call /bin/sh implicitly. This means that all characters, including shell metacharacters, can safely be passed to child processes. Popen objects ============= Instances of the Popen class have the following methods: poll() Check if child process has terminated. Returns returncode attribute. wait() Wait for child process to terminate. Returns returncode attribute. communicate(input=None) Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optional input argument should be a string to be sent to the child process, or None, if no data should be sent to the child. communicate() returns a tuple (stdout, stderr). Note: The data read is buffered in memory, so do not use this method if the data size is large or unlimited. The following attributes are also available: stdin If the stdin argument is PIPE, this attribute is a file object that provides input to the child process. Otherwise, it is None. stdout If the stdout argument is PIPE, this attribute is a file object that provides output from the child process. Otherwise, it is None. stderr If the stderr argument is PIPE, this attribute is file object that provides error output from the child process. Otherwise, it is None. pid The process ID of the child process. returncode The child return code. A None value indicates that the process hasn't terminated yet. A negative value -N indicates that the child was terminated by signal N (POSIX only). Replacing older functions with the subprocess module ==================================================== In this section, "a ==> b" means that b can be used as a replacement for a. Note: All functions in this section fail (more or less) silently if the executed program cannot be found; this module raises an OSError exception. In the following examples, we assume that the subprocess module is imported with "from subprocess import *". Replacing /bin/sh shell backquote --------------------------------- output=`mycmd myarg` ==> output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] Replacing shell pipe line ------------------------- output=`dmesg | grep hda` ==> p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0] Replacing os.system() --------------------- sts = os.system("mycmd" + " myarg") ==> p = Popen("mycmd" + " myarg", shell=True) pid, sts = os.waitpid(p.pid, 0) Note: * Calling the program through the shell is usually not required. * It's easier to look at the returncode attribute than the exitstatus. A more real-world example would look like this: try: retcode = call("mycmd" + " myarg", shell=True) if retcode < 0: print("Child was terminated by signal", -retcode, file=sys.stderr) else: print("Child returned", retcode, file=sys.stderr) except OSError as e: print("Execution failed:", e, file=sys.stderr) Replacing os.spawn* ------------------- P_NOWAIT example: pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") ==> pid = Popen(["/bin/mycmd", "myarg"]).pid P_WAIT example: retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") ==> retcode = call(["/bin/mycmd", "myarg"]) Vector example: os.spawnvp(os.P_NOWAIT, path, args) ==> Popen([path] + args[1:]) Environment example: os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) ==> Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) Nwin32) monotonic)timec@seZdZdS)SubprocessErrorN)__name__ __module__ __qualname__r r //opt/alt/python34/lib64/python3.4/subprocess.pyrks rc@s1eZdZdZdddZddZdS)CalledProcessErrorzThis exception is raised when a process run by check_call() or check_output() returns a non-zero exit status. The exit status will be stored in the returncode attribute; check_output() will also store the output in the output attribute. NcCs||_||_||_dS)N) returncodecmdoutput)selfr r rr r r __init__ts  zCalledProcessError.__init__cCsd|j|jfS)Nz-Command '%s' returned non-zero exit status %d)r r )rr r r __str__xszCalledProcessError.__str__)rrr__doc__rrr r r r r ns r c@s1eZdZdZdddZddZdS)TimeoutExpiredz]This exception is raised when the timeout expires while waiting for a child process. NcCs||_||_||_dS)N)r timeoutr)rr rrr r r rs  zTimeoutExpired.__init__cCsd|j|jfS)Nz'Command '%s' timed out after %s seconds)r r)rr r r rszTimeoutExpired.__str__)rrrrrrr r r r r|s rc@s.eZdZdZdZdZdZdZdS) STARTUPINFOrN)rrrdwFlags hStdInput hStdOutput hStdError wShowWindowr r r r rs rZPIPE_BUFi PollSelectorPopenPIPESTDOUTcall check_callgetstatusoutput getoutput check_outputDEVNULL)CREATE_NEW_CONSOLECREATE_NEW_PROCESS_GROUPSTD_INPUT_HANDLESTD_OUTPUT_HANDLESTD_ERROR_HANDLESW_HIDESTARTF_USESTDHANDLESSTARTF_USESHOWWINDOWr%r&r'r(r)r*r+r,c@sLeZdZdZejddZddZddZeZ eZ dS) HandleFcCs#|jsd|_||ndS)NT)closed)r CloseHandler r r Closes  z Handle.ClosecCs,|jsd|_t|StddS)NTzalready closed)r.int ValueError)rr r r Detachs   z Handle.DetachcCsdt|S)Nz Handle(%d))r1)rr r r __repr__szHandle.__repr__N) rrrr._winapir/r0r3r4__del__rr r r r r-s   r- SC_OPEN_MAXc CsixbtddD]P}|jdtj}|dk rytj|Wqatk r]YqaXqqWdS)N _deadstate)_active_internal_pollsysmaxsizeremover2)Zinstresr r r _cleanups  r@c Gs1x*y||SWqtk r(wYqXqWdS)N)InterruptedError)funcargsr r r _eintr_retry_calls  rGcCsi dd6dd6dd6dd6d d 6d d 6d d6dd6dd6}g}xP|jD]B\}}ttj|}|dkrX|jd||qXqXWx"tjD]}|jd|qW|S)znReturn a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.ddebugOoptimizeBdont_write_bytecodes no_user_siteSno_siteEignore_environmentvverboseb bytes_warningqquietr-z-W)itemsgetattrr<flagsappend warnoptions)Z flag_opt_maprFZflagZoptrTr r r _args_from_interpreter_flagss$  r`rcOsRt||=}y|jd|SWn|j|jYnXWdQXdS)zRun command with arguments. Wait for command to complete or timeout, then return the returncode attribute. The arguments are the same as for the Popen constructor. Example: retcode = call(["ls", "-l"]) rN)rwaitkill)r popenargskwargspr r r rs  cOsSt||}|rO|jd}|dkr=|d}nt||ndS)aORun command with arguments. Wait for command to complete. If the exit code was zero then return, otherwise raise CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute. The arguments are the same as for the call function. Example: check_call(["ls", "-l"]) rFNr)rgetr )rcrdretcoder r r r r s   cOs;d|krtdnd|kr`d|krBtdn|d}|d=t|d>> check_output(["ls", "-l", "/dev/null"]) b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' The stdout argument is not allowed as it is used internally. To capture standard error in the result, use stderr=STDOUT. >>> check_output(["/bin/sh", "-c", ... "ls -l non_existent_file ; exit 0"], ... stderr=STDOUT) b'ls: non_existent_file: No such file or directory\n' There is an additional optional argument, "input", allowing you to pass a string to the subprocess's stdin. If you use this argument you may not also use the Popen constructor's "stdin" argument, as it too will be used internally. Example: >>> check_output(["sed", "-e", "s/foo/bar/"], ... input=b"when in the course of fooman events\n") b'when in the course of barman events\n' If universal_newlines=True is passed, the return value will be a string rather than bytes. stdoutz3stdout argument not allowed, it will be overridden.inputstdinz/stdin and input arguments may not both be used.Nrr) r2rr communicaterrbrFrapollr )rrcrdZ inputdataZprocessrZ unused_errrgr r r r#2s0          !cCsGg}d}x+|D]#}g}|r5|jdnd|kpQd|kpQ| }|rj|jdnx|D]}|dkr|j|qq|dkr|jdt|dg}|jdqq|r|j|g}n|j|qqW|r|j|n|r|j||jdqqWdj|S) a Translate a sequence of arguments into a command line string, using the same rules as the MS C runtime: 1) Arguments are delimited by white space, which is either a space or a tab. 2) A string surrounded by double quotation marks is interpreted as a single argument, regardless of white space contained within. A quoted string can be embedded in an argument. 3) A double quotation mark preceded by a backslash is interpreted as a literal double quotation mark. 4) Backslashes are interpreted literally, unless they immediately precede a double quotation mark. 5) If backslashes immediately precede a double quotation mark, every pair of backslashes is interpreted as a literal backslash. If the number of backslashes is odd, the last backslash escapes the next double quotation mark as described in rule 3. F  "\rBz\")r^lenextendjoin)seqresultZ needquoteargZbs_bufcr r r list2cmdlinems4       rycCsy(t|dddddt}d}Wn7tk ra}z|j}|j}WYdd}~XnX|d ddkr|dd }n||fS) a Return (status, output) of executing cmd in a shell. Execute the string 'cmd' in a shell with 'check_output' and return a 2-tuple (status, output). Universal newlines mode is used, meaning that the result with be decoded to a string. A trailing newline is stripped from the output. The exit status for the command can be interpreted according to the rules for the function 'wait'. Example: >>> import subprocess >>> subprocess.getstatusoutput('ls /bin/ls') (0, '/bin/ls') >>> subprocess.getstatusoutput('cat /bin/junk') (256, 'cat: /bin/junk: No such file or directory') >>> subprocess.getstatusoutput('/bin/junk') (256, 'sh: /bin/junk: not found') shellTuniversal_newlinesstderrrNrA r~)r#rr rr )r dataZstatusZexr r r r!s  cCst|dS)a%Return output (stdout or stderr) of executing cmd in a shell. Like getstatusoutput(), except the exit status is ignored and the return value is a string containing the command's output. Example: >>> import subprocess >>> subprocess.getoutput('ls /bin/ls') '/bin/ls' rA)r!)r r r r r"s c@s#eZdZdZd=dddddeddddddddfddZdd Zd d Zd d Ze j ddZ ddZ ddddZ ddZddZddZer\ddZddZddZdejejejd d!Zddd"d#Zd$d%Zd&d'Zd(d)Zd*d+ZeZnd,dZd-d.Z d/dZe!j"e!j#e!j$e!j%d0d1Z&de!j'e!j(e)j*d2d!Zd3d4Z+ddd5d#Zd6d'Zd7d8Z,d9d)Zd:d+Zd;d<ZdS)>rFrANrTcCsttj|_d|_d|_|dkr=d}nt|ts[tdnt r|dk r|t dn|dk p|dk p|dk }|t kr|rd}qd}qS|rS|rSt dqSnq|t krd}n|r| rt j dtd}n| dk r8t d n|d krSt d n||_d|_d|_d|_d|_d|_| |_|j|||\}}}}}}t r7|dkrtj|jd }n|dkr tj|jd }n|dkr7tj|jd }q7n|dkrtj|d ||_| rtj|jd dd|dk|_qn|dkrtj|d||_| rtj|j|_qn|dkrtj|d||_| rtj|j|_qnd|_yD|j|||||| | | || ||||||||WnxLtd|j|j|jfD])}y|j Wqt!k rYqXqW|jsyg}|t"kr|j#|n|t"kr|j#|n|t"kr|j#|nt$|dr?|j#|j%nx7|D],}yt&j |WqFt!k rqYqFXqFWnYnXdS)zCreate new Popen instance.NFrAzbufsize must be an integerz0preexec_fn is not supported on Windows platformsTzSclose_fds is not supported on Windows platforms if you redirect stdin/stdout/stderrzpass_fds overriding close_fds.z2startupinfo is only supported on Windows platformsrz4creationflags is only supported on Windows platformswbZ write_throughline_bufferingrb_devnullr~r~r~r~r~r~r~)'r@ threadingZLock _waitpid_lock_input_communication_started isinstancer1 TypeError mswindowsr2_PLATFORM_DEFAULT_CLOSE_FDSwarningswarnRuntimeWarningrFrjrhr|pidr r{ _get_handlesmsvcrtZopen_osfhandler3ioopen TextIOWrapper_closed_child_pipe_fds_execute_childfiltercloseOSErrorrr^hasattrros)rrFbufsize executablerjrhr| preexec_fn close_fdsrzcwdenvr{ startupinfo creationflagsrestore_signalsstart_new_sessionpass_fdsZ any_stdio_setp2creadp2cwritec2preadc2pwriteerrreaderrwritefZto_closefdr r r rs                       '         (         zPopen.__init__cCs+|j|}|jddjddS)Nz r} )decodereplace)rrencodingr r r _translate_newlinestszPopen._translate_newlinescCs|S)Nr )rr r r __enter__xszPopen.__enter__c Csa|jr|jjn|jr2|jjnz|jrN|jjnWd|jXdS)N)rhrr|rjra)rtypevalue tracebackr r r __exit__{s   zPopen.__exit__cCsL|js dS|jd||jdkrHtdk rHtj|ndS)Nr9)_child_createdr;r r:r^)rZ_maxsizer r r r6s  z Popen.__del__cCs4t|ds-tjtjtj|_n|jS)Nr)rrrdevnullO_RDWRr)rr r r _get_devnullszPopen._get_devnullcCs|jr|rtdn|dkrR|j rR|j|j|jgjddkrRd}d}|jr|ry|jj|Wqtk r}z/|jtj kr|jtj krnWYdd}~XqXn|jj nV|jrt |jj }|jj n+|jrEt |jj }|jj n|jni|dk rnt|}nd}z|j|||\}}Wdd|_X|jd|j|}||fS)acInteract with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optional input argument should be bytes to be sent to the child process, or None, if no data should be sent to the child. communicate() returns a tuple (stdout, stderr).z.Cannot send input after starting communicationNrBTr)rr2rjrhr|countwritererrnoEPIPEEINVALrrGreadra_time _communicate_remaining_time)rrirrhr|eendtimestsr r r rks: ' $     zPopen.communicatecCs |jS)N)r;)rr r r rlsz Popen.pollcCs|dkrdS|tSdS)z5Convenience for _communicate when computing timeouts.N)r)rrr r r rs zPopen._remaining_timecCs8|dkrdSt|kr4t|j|ndS)z2Convenience for checking if a timeout has expired.N)rrrF)rr orig_timeoutr r r _check_timeouts zPopen._check_timeoutc Cs|dkr(|dkr(|dkr(d Sd \}}d\}}d\}} |dkrtjtj}|dkrGtjdd\}} t|}tj| qGn|tkrtjdd\}}t|t|}}nZ|tkrtj |j }n6t |t r2tj |}ntj |j }|j|}|dkrtjtj}|dkrQtjdd\} }t|}tj| qQn|tkrtjdd\}}t|t|}}nZ|tkrtj |j }n6t |t r<tj |}ntj |j }|j|}|dkrtjtj} | dkrptjdd\} } t| } tj| qpn|tkrtjdd\}} t|t| }} no|tkr|} nZ|tkr:tj |j } n6t |t r[tj |} ntj |j } |j| } |||||| fS)z|Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite NrArr~r~r~r~r~r~)r~r~r~r~r~r~r~r~)r~r~r~r~)r~r~r~r~)r~r~)r5Z GetStdHandler'Z CreatePiper-r/rr$rZ get_osfhandlerrr1fileno_make_inheritabler(r)r) rrjrhr|rrrrrr_r r r rsn$                    zPopen._get_handlescCs7tjtj|tjddtj}t|S)z2Return a duplicate of handle, which is inheritablerrA)r5ZDuplicateHandleZGetCurrentProcessZDUPLICATE_SAME_ACCESSr-)rZhandlehr r r r(s   zPopen._make_inheritablecCs| stdt|ts1t|}n|dkrIt}nd | ||fkr|jtjO_| |_||_ ||_ n| r|jtj O_tj |_ tjjdd}dj||}nz>tj||ddt| | ||| \}}}}Wd| d kr6| jn|d krO|jn|d krh|jnt|drtj|jnXd|_t||_||_tj|dS) z$Execute program (MS Windows version)z"pass_fds not supported on Windows.NrAZCOMSPECzcmd.exez {} /c "{}"rTr~r~r~r~)AssertionErrorrstrryrrr5r+rrrr,r*rrenvironrfformatZ CreateProcessr1r0rrrrr-_handlerr/)rrFrrrrrrrrrzrrrrrrZunused_restore_signalsZunused_start_new_sessionZcomspecZhpZhtrtidr r r r1sF                 zPopen._execute_childcCsF|jdkr?||jd|kr?||j|_q?n|jS)zCheck if child process has terminated. Returns returncode attribute. This method is called by __del__, so it can only refer to objects in its local scope. Nr)r r)rr9Z_WaitForSingleObjectZ_WAIT_OBJECT_0Z_GetExitCodeProcessr r r r;ns zPopen._internal_pollcCs|dk r|j|}n|dkr6tj}nt|d}|jdkrtj|j|}|tjkrt|j |ntj |j|_n|jS)zOWait for child process to terminate. Returns returncode attribute.Ni) rr5ZINFINITEr1r WaitForSingleObjectrZ WAIT_TIMEOUTrrFGetExitCodeProcess)rrrZtimeout_millisrvr r r ras     z Popen.waitcCs!|j|j|jdS)N)r^rr)rZfhbufferr r r _readerthreadszPopen._readerthreadcCs|jrht|d rhg|_tjd|jd|j|jf|_d|j_|jjn|j rt|d rg|_ tjd|jd|j |j f|_ d|j _|j jn|j rs|dk rcy|j j |Wqctk r_}zD|jtjkr#n*|jtjkrJ|jdk rJnWYdd}~XqcXn|j jn|jdk r|jj|j||jjrt|j|qn|j dk r|j j|j||j jrt|j|qnd}d}|jr?|j}|jjn|j ra|j }|j jn|dk rz|d}n|dk r|d}n||fS)N _stdout_bufftargetrFT _stderr_buffr)rhrrrZThreadrZ stdout_threadZdaemonstartr|rZ stderr_threadrjrrrrrrlrrtrZis_aliverrF)rrirrrrhr|r r r rsZ              zPopen._communicatecCs|jdk rdS|tjkr/|jne|tjkrWtj|jtjn=|tjkrtj|jtjnt dj |dS)zSend a signal to the process.NzUnsupported signal: {}) r signalSIGTERM terminateZ CTRL_C_EVENTrrbrZCTRL_BREAK_EVENTr2r)rsigr r r send_signals zPopen.send_signalc Css|jdk rdSytj|jdWnBtk rntj|j}|tjkran||_YnXdS)zTerminates the process.NrA)r r5ZTerminateProcessrPermissionErrorrZ STILL_ACTIVE)rrcr r r rs zPopen.terminatec Csd\}}d\}}d \}} |dkr3n`|tkrTtj\}}n?|tkro|j}n$t|tr|}n |j}|dkrn`|tkrtj\}}n?|tkr|j}n$t|tr|}n |j}|dkrnu|tkr2tj\}} nT|tkrG|} n?|tkrb|j} n$t|trz|} n |j} |||||| fS) z|Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite rANr~r~)r~r~r~r~)r~r~r~r~)r~r~) rrpiper$rrr1rr) rrjrhr|rrrrrrr r r rsF                    cCsid}x=t|D]/}||krtj|||d}qqW|tkretj|tndS)NrCrA)sortedr closerangeMAXFD)r fds_to_keepZstart_fdrr r r _close_fds.s  zPopen._close_fdsc'(st|ttfr!|g}n t|}| rYddg|}rY|dpsz'Popen._execute_child..TrrAiP:rBsSubprocessError0sBad exception data from child: asciierrors surrogatepassZnoexecrqz: r~r~r~r~r~r~)*rrbyteslistrrr^duprr[rr2rdirnametuple get_exec_pathsetadd_posixsubprocessZ fork_execrrrr\r bytearrayrGrrrwaitpidrrECHILDsplitreprbuiltinsrr issubclassr1strerrorENOENT)'rrFrrrrrrrrrzrrrrrrrrZorig_executableZ errpipe_readZ errpipe_writeZlow_fds_to_closeZlow_fdZenv_listkrTZexecutable_listrZ devnull_fdZ errpipe_datapartrZexception_nameZ hex_errnoZerr_msgZchild_exception_typeZ errno_numZchild_exec_never_calledr )rr r8s         %     $$$          cCsM||r|| |_n*||r=|||_n tddS)z:All callers to this function MUST hold self._waitpid_lock.zUnknown child exit status!N)r r)rrZ _WIFSIGNALEDZ _WTERMSIGZ _WIFEXITEDZ _WEXITSTATUSr r r _handle_exitstatuss   zPopen._handle_exitstatuscCs|jdkr|jjds%dSzyQ|jdk rA|jS||j|\}}||jkrx|j|nWnXtk r}z8|dk r||_n|j|krd|_nWYdd}~XnXWd|jjXn|jS)zCheck if child process has terminated. Returns returncode attribute. This method is called by __del__, so it cannot reference anything outside of the local scope (nor can any methods it calls). NFr)r racquirerr rrrelease)rr9Z_waitpidZ_WNOHANGZ_ECHILDrrrr r r r;s   #cCs{y"ttj|j|\}}WnLtk rp}z,|jtjkrOn|j}d}WYdd}~XnX||fS)z:All callers to this function MUST hold self._waitpid_lock.rN)rGrrrrrr)rZ wait_flagsrrrr r r _try_waits" zPopen._try_waitc Cs|jdk r|jS|dk s.|dk rk|dkrJt|}qk|dkrk|j|}qkn|dk rpd}x]|jjdrzp|jdk rPn|jtj\}}||jks|dkst ||jkr|j |PnWd|jj Xn|j|}|dkrFt |j |nt|d|d}tj|qWnmxj|jdkr|jL|jdk rPn|jd\}}||jkr|j |nWdQXqsW|jS)zOWait for child process to terminate. Returns returncode attribute.NgMb@?FrrBg?)r rrrr r rWNOHANGrrr r rrFminrZsleep)rrrZdelayrrZ remainingr r r rasB   !   cCs|jr9|j r9|jj|s9|jjq9nd}d}|jsi|_|jrsg|j|jrr<platformrrrrrrrrrr ImportError Exceptionrr rrrr5rrrrZdummy_threadingr\rrrrZSelectSelector__all__r%r&r'r(r)r*r+r,rsr1r-sysconfrr:r@rrr$rGr`rr r#ryr!r"objectrrr r r r Ysx                  :      ; I  lib64/python3.4/__pycache__/contextlib.cpython-34.pyo000064400000024202152342604300016254 0ustar00 e fw-@sdZddlZddlmZddlmZddddd d gZGd ddeZGd d d eZ ddZ GdddeZ Gdd d Z Gdd d Z GdddeZdS)z4Utilities for with-statement contexts. See PEP 343.N)deque)wrapscontextmanagerclosingContextDecorator ExitStackredirect_stdoutsuppressc@s.eZdZdZddZddZdS)rzJA base class or mixin that enables context managers to work as decorators.cCs|S)a6Return a recreated instance of self. Allows an otherwise one-shot context manager like _GeneratorContextManager to support use as a decorator via implicit recreation. This is a private interface just for _GeneratorContextManager. See issue #11647 for details. )selfr r //opt/alt/python34/lib64/python3.4/contextlib.py _recreate_cms zContextDecorator._recreate_cmcs%tfdd}|S)Nc s$j||SWdQXdS)N)r )argskwds)funcr r r inners z(ContextDecorator.__call__..inner)r)r rrr )rr r __call__s!zContextDecorator.__call__N)__name__ __module__ __qualname____doc__r rr r r r r s  c@sFeZdZdZddZddZddZdd Zd S) _GeneratorContextManagerz%Helper for @contextmanager decorator.cCsl||||_||||_|_|_t|dd}|dkr_t|j}n||_dS)Nr)genrrrgetattrtyper)r rrrdocr r r __init__%s  z!_GeneratorContextManager.__init__cCs|j|j|j|jS)N) __class__rrr)r r r r r 3sz%_GeneratorContextManager._recreate_cmc Cs9yt|jSWn!tk r4tddYnXdS)Nzgenerator didn't yield)nextr StopIteration RuntimeError)r r r r __enter__9s z"_GeneratorContextManager.__enter__cCs|dkrEyt|jWntk r5dSYqXtdn|dkr]|}ny&|jj|||tdWnRtk r}z||k SWYdd}~Xn$tjd|k rnYnXdS)Nzgenerator didn't stopz#generator didn't stop after throw())rrrr throwsysexc_info)r rvalue tracebackexcr r r __exit__?s      z!_GeneratorContextManager.__exit__N)rrrrrr r!r)r r r r r"s    rcs"tfdd}|S)a@contextmanager decorator. Typical usage: @contextmanager def some_generator(): try: yield finally: This makes this: with some_generator() as : equivalent to this: try: = finally: cst||S)N)r)rr)rr r helper|szcontextmanager..helper)r)rr*r )rr r`sc@s:eZdZdZddZddZddZdS) ra2Context to automatically close something at the end of a block. Code like this: with closing(.open()) as f: is equivalent to this: f = .open() try: finally: f.close() cCs ||_dS)N)thing)r r+r r r rszclosing.__init__cCs|jS)N)r+)r r r r r!szclosing.__enter__cGs|jjdS)N)r+close)r r%r r r r)szclosing.__exit__N)rrrrrr!r)r r r r rs   c@s:eZdZdZddZddZddZdS) ra@Context manager for temporarily redirecting stdout to another file # How to send help() to stderr with redirect_stdout(sys.stderr): help(dir) # How to write help() to a file with open('help.txt', 'w') as f: with redirect_stdout(f): help(pow) cCs||_g|_dS)N) _new_target _old_targets)r new_targetr r r rs zredirect_stdout.__init__cCs&|jjtj|jt_|jS)N)r.appendr$stdoutr-)r r r r r!s zredirect_stdout.__enter__cCs|jjt_dS)N)r.popr$r1)r exctypeexcinstexctbr r r r)szredirect_stdout.__exit__N)rrrrrr!r)r r r r rs   c@s:eZdZdZddZddZddZdS) r a?Context manager to suppress specified exceptions After the exception is suppressed, execution proceeds with the next statement following the with statement. with suppress(FileNotFoundError): os.remove(somefile) # Execution still resumes here if the file was already removed cGs ||_dS)N) _exceptions)r exceptionsr r r rszsuppress.__init__cCsdS)Nr )r r r r r!szsuppress.__enter__cCs|dk ot||jS)N) issubclassr6)r r3r4r5r r r r)s zsuppress.__exit__N)rrrrrr!r)r r r r r s   c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)raContext manager for dynamic management of a stack of exit callbacks For example: with ExitStack() as stack: files = [stack.enter_context(open(fname)) for fname in filenames] # All opened files will automatically be closed at the end of # the with statement, even if attempts to open files later # in the list raise an exception cCst|_dS)N)r_exit_callbacks)r r r r rszExitStack.__init__cCs+t|}|j|_t|_|S)z?Preserve the context stack by transferring it to a new instance)rr9r)r new_stackr r r pop_alls  zExitStack.pop_allcs/fdd}|_|j|dS)z:Helper to correctly register callbacks to __exit__ methodscs |S)Nr ) exc_details)cmcm_exitr r _exit_wrappersz.ExitStack._push_cm_exit.._exit_wrapperN)__self__push)r r=r>r?r )r=r>r _push_cm_exits zExitStack._push_cm_exitc CsRt|}y |j}Wn"tk r=|jj|YnX|j|||S)aRegisters a callback with the standard __exit__ method signature Can suppress exceptions the same way __exit__ methods can. Also accepts any object with an __exit__ method (registering a call to the method instead of the object itself) )rr)AttributeErrorr9r0rB)r exit_cb_type exit_methodr r r rAs   zExitStack.pushcs2fdd}|_|j|S)z\Registers an arbitrary callback and arguments. Cannot suppress exceptions. csdS)Nr )exc_typer(tb)rcallbackrr r r? sz)ExitStack.callback.._exit_wrapper) __wrapped__rA)r rIrrr?r )rrIrr rIs  zExitStack.callbackcCs8t|}|j}|j|}|j|||S)zEnters the supplied context manager If successful, also pushes its __exit__ method as a callback and returns the result of the __enter__ method. )rr)r!rB)r r=_cm_type_exitresultr r r enter_contexts   zExitStack.enter_contextcCs|jddddS)z$Immediately unwind the context stackN)r))r r r r r,szExitStack.closecCs|S)Nr )r r r r r!#szExitStack.__enter__c s |ddk }tjdfdd}d}d}xy|jr|jj}y%||r}d}d}d}nWqAtj}||d|dd}|}YqAXqAW|ry|dj}|dWqtk r||d_YqXn|o |S)Nrr"csOx?|j}||krdS|dks4|kr8Pn|}qW||_dS)N) __context__)new_excold_exc exc_context) frame_excr r _fix_exception_context,s   z2ExitStack.__exit__.._fix_exception_contextFT)NNN)r$r%r9r2rO BaseException) r r< received_excrTsuppressed_exc pending_raisecbnew_exc_details fixed_ctxr )rSr r)&s2        zExitStack.__exit__N) rrrrrr;rBrArIrNr,r!r)r r r r rs       )rr$ collectionsr functoolsr__all__objectrrrrrr rr r r r s   > "lib64/python3.4/__pycache__/types.cpython-34.pyc000064400000012670152342604300015237 0ustar00 e f# @sdZddlZddZeeZeddZeejZeejZ eej Z ddZ ee Z Gd d d ZeejZeeZegjZeeZy eWnFek r"ejd ZeeZeejZdZ[YnXeejZeejZ[[[ [fddd d ZfdddZ ddZ!GdddZ"dde#DZ$dS)zO Define names for built-in types that aren't directly accessible as a builtin. NcCsdS)Nrrr*/opt/alt/python34/lib64/python3.4/types.py_f srcCsdS)Nrrrrr srccs dVdS)Nrrrrr_gsrc@seZdZddZdS)_CcCsdS)Nr)selfrrr_msz_C._mN)__name__ __module__ __qualname__r rrrrrs rcCsGt|||\}}}|dk r4||n|||||S)zBCreate a class object dynamically using the appropriate metaclass.N) prepare_class)namebaseskwds exec_bodymetansrrr new_class/s  rcCs|dkri}n t|}d|kr?|jd}n|rXt|d}nt}t|trt||}nt|dr|j|||}ni}|||fS)azCall the __prepare__ method of the appropriate metaclass. Returns (metaclass, namespace, kwds) as a 3-tuple *metaclass* is the appropriate metaclass *namespace* is the prepared class namespace *kwds* is an updated copy of the passed in kwds argument with any 'metaclass' entry removed. If no kwds argument is passed in, this will be an empty dict. N metaclassr __prepare__)dictpoptype isinstance_calculate_metahasattrr)rrrrrrrrr6s    rcCsc|}xV|D]N}t|}t||r4q nt||rO|}q ntdq W|S)z%Calculate the most derived metaclass.zxmetaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases)r issubclass TypeError)rrwinnerbase base_metarrrrVs  rc@syeZdZdZddddddZdddZddZd d Zd d Zd dZ ddZ dS)DynamicClassAttributeaRoute attribute access on a class to __getattr__. This is a descriptor, used to define attributes that act differently when accessed through an instance and through a class. Instance access remains normal, but access to an attribute through a class will be routed to the class's __getattr__ method; this is done by raising AttributeError. This allows one to have properties active on an instance, and have virtual attributes on the class with the same name (see Enum for an example). NcCs[||_||_||_|p'|j|_|dk|_tt|dd|_dS)N__isabstractmethod__F)fgetfsetfdel__doc__ overwrite_docboolgetattrr%)r r&r'r(docrrr__init__ss    zDynamicClassAttribute.__init__cCsP|dkr%|jr|Stn|jdkrCtdn|j|S)Nzunreadable attribute)r%AttributeErrorr&)r instance ownerclassrrr__get__}s   zDynamicClassAttribute.__get__cCs2|jdkrtdn|j||dS)Nzcan't set attribute)r'r/)r r0valuerrr__set__szDynamicClassAttribute.__set__cCs/|jdkrtdn|j|dS)Nzcan't delete attribute)r(r/)r r0rrr __delete__sz DynamicClassAttribute.__delete__cCsR|jr|jnd}t|||j|j|p<|j}|j|_|S)N)r*r)rr'r()r r&fdocresultrrrgetters* zDynamicClassAttribute.gettercCs4t||j||j|j}|j|_|S)N)rr&r(r)r*)r r'r7rrrsetters$ zDynamicClassAttribute.settercCs4t||j|j||j}|j|_|S)N)rr&r'r)r*)r r(r7rrrdeleters$ zDynamicClassAttribute.deleter) r r r r)r.r2r4r5r8r9r:rrrrr$gs      r$cCs,g|]"}|dddkr|qS)Nr_r).0nrrr s r>)%r)sysrr FunctionType LambdaType__code__CodeType__dict__MappingProxyTypeimplementationSimpleNamespacer GeneratorTyperr MethodTypelenBuiltinFunctionTypeappendBuiltinMethodType ModuleTyper exc_infotb TracebackTypetb_frame FrameTypeGetSetDescriptorType __globals__MemberDescriptorTyperrrr$globals__all__rrrrs<           :lib64/python3.4/__pycache__/warnings.cpython-34.pyc000064400000027754152342604300015734 0ustar00 e f7@sdZddlZddddddd d gZddd dZdd dZd ed ddddZeddddZdd ZGddde Z ddZ ddZ ddZ ddZddddZdddddZGdd d eZGd!d d eZdZyDdd"lmZmZmZmZmZmZeZeZd#ZWn6ek rgZd$ZiZdad%d&ZYnXe ejesyee gZ!e!j"e#xe!D]Z$ed'd(e$qWej%j&Z&e&dkrd)Z'ne&r&d$Z'nd'Z'ee'd(e(d*de)ed+rZd,Z*nd'Z*ee*d(e+d*dn[dS)-z&Python part of the warnings subsystem.Nwarn warn_explicit showwarning formatwarningfilterwarnings simplefilter resetwarningscatch_warningsc Csd|dkr(tj}|dkr(dSny#|jt|||||Wntk r_YnXdS)z7Hook to write a warning to a file; replace if you like.N)sysstderrwriterOSError)messagecategoryfilenamelinenofileliner-/opt/alt/python34/lib64/python3.4/warnings.pyr s   # cCspddl}d|||j|f}|dkrC|j||n|}|rl|j}|d|7}n|S)z.Function to format a warning the standard way.rNz%s:%s: %s: %s z %s ) linecache__name__getlinestrip)rrrrrrsrrrrs $ FcCsddl}|dks+td |ft|tsFtd t|tsatd t|ts|td t|tstd t|tr|dkstd||j||j ||j||f}|rt j |nt j d|t dS)aInsert an entry into the list of warnings filters (at the front). 'action' -- one of "error", "ignore", "always", "default", "module", or "once" 'message' -- a regex that the warning message must match 'category' -- a class that the warning must be a subclass of 'module' -- a regex that the module name must match 'lineno' -- an integer line number, 0 matches all warnings 'append' -- if true, append to the list of filters rNerrorignorealwaysdefaultmoduleoncezinvalid action: %rzmessage must be a stringzcategory must be a classz#category must be a Warning subclasszmodule must be a stringzlineno must be an int >= 0)zerrorzignorezalwayszdefaultzmodulezonce)reAssertionError isinstancestrtype issubclassWarningintcompileIfiltersappendinsert_filters_mutated)actionrrr rr-r"itemrrrr s  cCs|d kstd|ft|tr:|dksFtd |d |d |f}|rqtj|ntjd|td S) aInsert a simple entry into the list of warnings filters (at the front). A simple filter matches all modules and messages. 'action' -- one of "error", "ignore", "always", "default", "module", or "once" 'category' -- a class that the warning must be a subclass of 'lineno' -- an integer line number, 0 matches all warnings 'append' -- if true, append to the list of filters rrrrr r!zinvalid action: %rrzlineno must be an int >= 0N)zerrorzignorezalwayszdefaultzmodulezonce)r#r$r)r,r-r.r/)r0rrr-r1rrrr=s  cCsgtddks z_setoption..$zinvalid lineno %r) r"splitlenr2r- _getactionescape _getcategoryr) ValueError OverflowErrorr)r9r"partsr0rrr rrrrr6ds.        r6cCsU|s dS|dkrdSx!d D]}|j|r!|Sq!Wtd|fdS) Nrallrrr r!rzinvalid action: %r)zdefaultzalwayszignorezmodulezoncezerror) startswithr2)r0arrrrCs  rCcCs>ddl}|stS|jd|rcyt|}Wqtk r_td|fYqXn|jd}|d|}||dd}yt|dd|g}Wn%tk rtd|fYnXyt ||}Wn%t k rtd|fYnXt |ts:td|fn|S)Nrz^[a-zA-Z0-9_]+$zunknown warning category: %r.zinvalid module name: %rzinvalid warning category: %r) r"r(matcheval NameErrorr2rfind __import__ ImportErrorgetattrAttributeErrorr')rr"catir klassmrrrrEs,    rErMc Csot|tr|j}n|dkr0t}nt|tsEtytj|}Wn!tk r{tj }d}YnX|j }|j }d|kr|d}nd}|j d}|r|j }|jd r=|dd }q=nJ|dkr.ytjd }Wq.tk r*d}Yq.Xn|s=|}n|jd i} t|||||| |dS) z:Issue a warning, or maybe ignore it or raise an exception.NrMrz__file__.pyc.pyo__main__rZ__warningregistry__)r[r\)r$r( __class__ UserWarningr'r#r _getframerF__dict__ f_globalsf_linenogetlowerendswithargvrU setdefaultr) rr stacklevelZcallerglobalsrr rZfnlregistryrrrrs<              cCst|}|dkrV|p!d}|ddjdkrV|dd}qVn|dkrki}n|jddtkr|jt|dz.pyversionrrrMrr!rr rz1Unrecognized action (%r) in warnings.filters: %sz:warnings.showwarning() must be set to a function or methodro)r)rfre_filters_versionclearr$r(r%r_r,rNr' defaultactionrgetlines onceregistry RuntimeErrorcallabler TypeError)rrrrr rlmodule_globalstextkeyr1r0r:rVmodlnrZoncekeyZaltkeyrrrrsn                           c@s:eZdZdZd Zddd d Zd d ZdS)WarningMessagez0Holds the result of a single showwarning() call.rrrrrrNc CsMt}x%|jD]}t||||qW|r@|jnd|_dS)N)locals_WARNING_DETAILSsetattrr_category_name) selfrrrrrr local_valuesattrrrr__init__s zWarningMessage.__init__cCs&d|j|j|j|j|jfS)NzD{message : %r, category : %r, filename : %r, lineno : %s, line : %r})rrrrr)rrrr__str__#s zWarningMessage.__str__)zmessagezcategoryzfilenamezlinenozfilezline)rr3r4r5rrrrrrrr}s r}c@sReZdZdZddddddZdd Zd d Zd d ZdS)r aA context manager that copies and restores the warnings filter upon exiting the context. The 'record' argument specifies whether warnings should be captured by a custom implementation of warnings.showwarning() and be appended to a list returned by the context manager. Otherwise None is returned by the context manager. The objects appended to the list are arguments whose attributes mirror the arguments to showwarning(). The 'module' argument is to specify an alternative module to the module named 'warnings' and imported under that name. This argument is only useful when testing the warnings module itself. recordFr NcCs8||_|dkr"tjdn||_d|_dS)zSpecify whether to record warnings and if an alternative module should be used other than sys.modules['warnings']. For compatibility with Python 3.0, please consider all arguments to be keyword-only. NwarningsF)_recordr modules_module_entered)rrr rrrr:s "zcatch_warnings.__init__cCsrg}|jr|jdn|jtjdk rL|jd|jnt|j}d|dj|fS)Nz record=Truerz module=%rz%s(%s)z, )rr-rr rr&rjoin)rr8namerrr__repr__Fs zcatch_warnings.__repr__cs|jrtd|nd|_|jj|_|jdd|j_|jj|jj|_|jrgfdd}||j_SdSdS)NzCannot enter %r twiceTcsjt||dS)N)r-r})r8kwargs)logrrrYsz-catch_warnings.__enter__..showwarning) rrurr,_filtersr/r _showwarningr)rrr)rr __enter__Os     zcatch_warnings.__enter__cGsK|jstd|n|j|j_|jj|j|j_dS)Nz%Cannot exit %r without entering first)rrurrr,r/rr)rexc_inforrr__exit__`s   zcatch_warnings.__exit__)rr3r4r5rrrrrrrrr )s  )r,_defaultaction _onceregistryrrr/TrcCstd7adS)NrM)rprrrrr/sr/rrrr-gettotalrefcountr),r5r __all__rrr(rrr Exceptionr2r;r6rCrErrobjectr}r Z_warnings_defaults _warningsr,rrr/rrrtrSrp warnoptions ImportWarningPendingDeprecationWarningZsilencer-DeprecationWarningclsflags bytes_warningZ bytes_action BytesWarninghasattrZresource_actionResourceWarningrrrrsb          )HG.           lib64/python3.4/__pycache__/locale.cpython-34.pyo000064400000110634152342604300015345 0ustar00 h f"#@sdZddlZddlZddlZddlZddlZddlmZddl Z dddddd d d d d dddddddddddddgZ ddZ ddZ yddl TWncek r4d Zd!Zd"ZdZd#Zd$Zd%Zd&ZeZd'd Zdd(dZYnXd ekrMe Znd ekree ZneZiZe j ed)d Zd*d+Z!d,d-d.Z"d/d0Z#ej$d1Z%d,d,d2dZ&d,d,d3d4Z'd,d5dZ(d6d,d,d7dZ)d8d Ze*d9dZ+d:dZ,d;d<Z-eZ.d=d>Z/d?d@Z0dAdZ1dBdCZ2dDdEZ3ddHdZ4edIdZ5ddJdZedKd Z6ej7j8dLrd6dMdZ9n;ye:Wn!e;k r d6dNdZ9YnXd6dOdZ9i*dPdQ6dPdR6dSdT6dUdV6dUdW6dXdY6dZd[6d\d]6d^d_6d`da6dSdb6dcdd6dedf6dgdh6dSdi6dSdj6dSdk6dldm6dndo6dpdq6drds6dgdt6dudv6dcdw6dxdy6dzd{6ded|6d}d~6dd6dd6dd6dUd6dd6dd6dXd6dd6dd6dd6dd6d\d6d^d6d`d6Z<xBe=e<j>D].\Z?Z@e?jAddZ?e<jBe?e@qYWi'dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dPdR6dd 6dPd 6dPd 6dd 6d d6dPd6dPd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d&d(6d&d)6d*d+6d,d-6d.d/6d.d06d&d16d&d26d&d36d4d56d4d66d4d76d4d86d9d:6d;d<6d=d>6d?d@6d9dA6dBdC6dDdE6d9dF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dQdS6dTdU6dVdW6dXdY6dVdZ6d[d\6ddT6d]d^6d_d`6dadb6dcdd6dedf6dgdh6didj6dkdl6dmdn6dodp6dqdr6dsdt6dudv6dwdx6dydz6dkd{6dd|6d}d~6dd6dd6dd6dd6dkd6dd6dkd6dd6dPd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dTd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d9d6d9d6d?d6d9d6dd6dd6dd6dd6dVd6dd6dd6dd 6d d 6d d 6d d6d d6dd6dd6dd6dd6dd6d$d6d$d6d$d6dd6dd6dd6dd 6dd!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d,d.6d/d06d1d26d,d36d,d46d*d56d*d66dd76d}d86dd96d}d:6dd;6d}d<6d=d>6d?d@6d=dA6d=dB6dCdD6dCdE6dCdF6d dG6d dH6dIdJ6dKdL6dKdM6dKdN6dOdP6dOdQ6dKdR6dKdS6dKdT6dKdU6dKdV6dWdX6dWdY6dWdZ6d[d\6dWd]6d^d_6d`da6d`db6dcdd6dedf6dedg6dhdi6dhdj6dhdk6dldm6dhdn6dhdo6dpdq6dpdr6dsdt6dudv6dwdx6dwdy6dzd{6dzd|6d}d~6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dId6dd6dKd6dId6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dPd6dPd6dd6dd6dd6dd 6dd 6dd 6d d 6d d6d d6dd6dd6dd6d d6dd6dd6dd6dd6dd6dd 6d!d"6d!d#6d$d%6d&d'6d(d)6d*d+6d*d,6d-d.6d/d06d$d16d-d26d*d36d4d56d6d76d6d86d9d:6d6d;6d<d=6d<d>6d?d@6dAdB6d?dC6d<dD6d?dE6d?dF6dGdH6dIdJ6dKdL6dMdN6dOdP6dOdQ6ddR6ddS6dTdU6dTdV6dWdX6dYdZ6dYd[6d\d]6d^d_6d-d`6d\da6dbdc6dYdd6d*de6d-df6d*dg6dhdi6d-dj6dOdk6dOdl6dhdm6dYdn6dYdo6dYdp6dqdr6dqds6dtdu6dtdv6dwdx6dydz6dwd{6d|d}6d~d6dwd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d6d d6dd6dd6ZCidd6dd6dd6dd6dd6dd6dd6dd6d d 6d d 6d d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d&6d%d'6d(d)6d*d+6d,d-6d.d/6d0d16d0d26d3d46d5d66d7d86d9d$6d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6ddde6dfdg6dhdi6djdk6dldm6dndo6dpdq6drds6dtdu6drdv6dwdx6dydz6d{d|6d}d~6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6dd"6d d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d.d26d3d46d5d66d7d86d9d:6d;d<6d=d>6d?d@6dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUdV6dWdX6dYdZ6d[d\6d]d^6d_d`6dadb6dcdd6dedf6dgdh6didj6dkdl6dmdn6dodp6dqdr6dsdt6dudv6dwdx6dydz6d{d|6d}d~6d}d6dd6dd6dd6dd6dd6dd6dd6dd6ZDddZEyeWne;k rYnXe jFdeGdkreHdeHeEeHeHdeHe-ndS(a Locale support. The module provides low-level access to the C lib's locale APIs and adds high level number formatting APIs as well as a locale aliasing engine to complement these. The aliasing engine includes support for many commonly used locale names and maps them to values suitable for passing to the C lib's setlocale() function. It also includes default encodings for all supported locale names. N)str getlocalegetdefaultlocalegetpreferredencodingError setlocale resetlocale localeconvstrcollstrxfrmratofatoiformat format_stringcurrency normalizeLC_CTYPE LC_COLLATELC_TIME LC_MONETARY LC_NUMERICLC_ALLCHAR_MAXcCs||k||kS)zZ strcoll(string,string) -> int. Compares two strings according to the locale. )abrr+/opt/alt/python34/lib64/python3.4/locale.py_strcoll"srcCs|S)z\ strxfrm(string) -> string. Returns a string that behaves for cmp locale-aware. r)srrr_strxfrm(sr)*cCsidgd6dd6dd6dd6dd6gd6dd 6d d 6dd 6dd 6dd6dd6dd6dd6dd6dd6dd6dd6S)zd localeconv() -> dict. Returns numeric and monetary locale-specific parameters. r!groupingcurrency_symbol n_sign_posn p_cs_precedes n_cs_precedes mon_groupingn_sep_by_space. decimal_point negative_sign positive_signp_sep_by_spaceint_curr_symbol p_sign_posn thousands_sepmon_thousands_sep frac_digitsmon_decimal_pointint_frac_digitsrrrrrr @s$ cCs|dkrtdndS)zd setlocale(integer,string=None) -> string. Activates/queries locale processing. Nr)Cz*_locale emulation only supports "C" locale)Nr)r<)r)categoryvaluerrrrXs cCs#t}tr|jtn|S)N) _localeconv_override_localeconvupdate)drrrr ms ccsld}x_|D]W}|tkr#dS|dkrY|dkrJtdnx |VqMWn|V|}q WdS)Nrzinvalid grouping)r ValueError)r(Z last_intervalintervalrrr_grouping_intervals{s     rEFc CsHt}||rdpd}||r.dp1d}|sE|dfS|d dkr|j}|t|d}|}nd}d}g}xdt|D]V} | s|d d kr|}d}Pn|j|| d|d| }qW|r|j|n|j||j||t|t|dfS) Nr8r7r.r(rr& r) 0123456789rH)r rstriplenrEappendreversejoin) rmonetaryconvr7r(ZstrippedZ right_spacesZ left_spacesgroupsrDrrr_groups0     rQcCsd}x.|r6||dkr6|d7}|d8}q Wt|d}x.|rw||dkrw|d8}|d8}qJW|||dS)NrrFr&)rJ)rZamountZlposZrposrrr_strip_paddings  rRzG%(?:\((?P.*?)\))?(?P[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]cGsctj|}| s4t|jt|krMtdt|nt|||||S)zReturns the locale-aware substitution of a %? specifier (percent). additional is for format strings which contain one or more '*' modifiers.zHformat() must be given exactly one %%char format specifier, %s not valid) _percent_rematchrJgrouprCrepr_format)percentr>r(rN additionalrTrrrrs %c Gs |r||f|}n ||}|d dkrd}|jd}|rrt|dd|\|d<}nt|rdpd}|j|}|rt||}qnR|d dkrd}|rt|d|\}}n|rt||}qn|S) Nr&ZeEfFgGrr0rNr:r1ZdiurHrH)splitrQr rMrR) rXr>r(rNrYZ formattedZsepspartsr1rrrrWs( #rWc Csottj|}tjd|}t|tjrg}x|D]K}|jddkrr|jdqF|jt |j||qFWnt|t s|f}ng}d}x|D]}|jd dkr|jdq|jdj d}|jt |j|||d||d|d||d|7}qWt |}||S) zFormats a string in the same way that the % formatting would use, but takes the current locale into account. Grouping is applied if the third parameter is true.z%sr&%rZ modifiersr FrHrH) listrSfinditersub isinstance collectionsMappingrUrKrtuplecountrW) fvalr(ZpercentsZnew_fZnew_valZperciZ starcountrrrrs0 &    Tc Cst}||rdpd}|dkr:tdntd|t||dd}d|d }|r||rd pd }||d krd pd}||d krdpd} |r|| rdpd|}q|| rdpd|}n||d krdpd} ||d kr/dp2d} | d krSd|d}n~| dkrl| |}ne| dkr|| }nL| dkr|jd| }n+| dkr|jd | }n | |}|jddjd dS)zIFormats val according to the currency settings in the current locale.r;r9r!z9Currency formatting is not possible using the 'C' locale.z%%.%ifrNT<>r5r*rr-r,r/r4rFr)r+r6r2r3()r&r'r#r%)r rCrabsreplace) rfZsymbolr(Z internationalrOZdigitsrZsmbZprecedesZ separatedZsign_posZsignrrrrs6  "        cCs td|S)z9Convert float to integer, taking the locale into account.z%.12g)r)rfrrrr,scCsZtd}|r(|j|d}ntd}|rP|j|d}n||S)zZms_BNi>Zml_INiLZmt_MTi:Zmi_NZiZarn_CLizZmr_INiNZmoh_CAi|Zmn_MNiPZmn_CNiPZne_NPiaZnb_NOiZnn_NOiZoc_FRiZor_INiHZps_AFicZfa_IRi)Zpl_PLiZpt_BRiZpt_PTiZpa_INiFZquz_BOikZquz_ECikZquz_PEik Zro_ROiZrm_CHiZru_RUiZsmn_FIi;$Zsmj_NOi;Zsmj_SEi;Zse_NOi;Zse_SEi;Zse_FIi; Zsms_FIi; Zsma_NOi;Zsma_SEi;Zsa_INiOZsr_SPi Zsr_BAiiiZsi_LKi[Zns_ZAilZtn_ZAi2Zsk_SKiZsl_SIi$Zes_ESi Zes_MXi i Zes_GTi Zes_CRi Zes_PAi Zes_DOi Zes_VEi Zes_COi $Zes_PEi (Zes_ARi ,Zes_ECi 0Zes_CLi 4Zes_URi 8Zes_PYi <Zes_BOi @Zes_SVi DZes_HNi HZes_NIi LZes_PRi PZes_USi TZsw_KEiAZsv_SEiZsv_FIiZsyr_SYiZZtg_TJi(Ztmz_DZi_Zta_INiIZtt_RUiDZte_INiJZth_THiZbo_BTiQZbo_CNiQZtr_TRiZtk_TMiBZug_CNiZuk_UAi"Zwen_DEi.Zur_PKi Zur_INi Zuz_UZiCiCZvi_VNi*Zcy_GBiRZwo_SNiZxh_ZAi4Zsah_RUiZii_CNixZyo_NGijZzu_ZAi5c CsMi}|dd}||d=tdtddt\}}td|pYdtd |pldttd tddxf|jD]X\}}t|d t|\}}td |pdtd |pdtqWttdtddtxf|jD]X\}}t|d t|\}}td |pedtd |pxdtq+WyttdWn&tdtdtdYnXttdtddxf|jD]X\}}t|d t|\}}td |p'dtd |p:dtqWdS)z Test function. cSsGx@tjD]/\}}|dddkr|||._init_categoriesrz4Locale defaults as determined by getdefaultlocale():rwHz Language: z (undefined)z Encoding: zLocale settings on startup:z...z Language: z Encoding: z,Locale settings after calling resetlocale():r)zNOTE:z9setlocale(LC_ALL, "") does not support the default localez&given in the OS environment variables.z4Locale settings after calling setlocale(LC_ALL, ""):N)rsrrrrrr)rrZlangencnamer=rrr _print_localeDsV           r LC_MESSAGES__main__zLocale aliasing:zNumber formatting:)zLC_ALLzLC_CTYPErzLANGUAGE)I__doc__rryZencodings.aliasesrerabuiltinsrr functools__all__rrrrrrrrrrrrrCrr rrr r r?r@wrapsrErQrRcompilerSrrWrrfloatr r rurrrrrrrrrr startswithrCODESET NameErrorr~sortedrrrrm setdefaultrrrrK__name__rsrrrr s                 "-     S  5    r   :     lib64/python3.4/__pycache__/linecache.cpython-34.pyc000064400000006050152342604300016001 0ustar00 e fq@sdZddlZddlZddlZdddgZdddZiaddZddd Zdd dZ dd d Z dS) zCache lines from Python source files. This is intended to read lines from modules imported -- hence if a filename is not found, it will look down the module search path for a file by that name. Ngetline clearcache checkcachecCsEt||}d|ko,t|knr=||dSdSdS)N)getlineslen)filenamelinenomodule_globalslinesr ./opt/alt/python34/lib64/python3.4/linecache.pyrs" cCs iadS)zClear the cache entirely.N)cacher r r rrsc CsM|tkrt|dSyt||SWntk rHtgSYnXdS)zGet the lines for a Python source file from the cache. Update the cache if it doesn't contain an entry for this file already.N)r updatecache MemoryErrorr)r r r r rr"s   rc Cs|dkr!ttj}n|tkr9|g}ndSx|D]}t|\}}}}|dkrrqDnytj|}Wntk rt|=wDYnX||jks||jkrDt|=qDqDWdS)zUDiscard cache entries that are out of date. (This is not checked upon each call!)N)listrkeysosstatOSErrorst_sizest_mtime)r filenamessizemtimer fullnamerr r rr0s       c"Cs_|tkrt|=n| s;|jdr?|jdr?gS|}ytj|}Wnktk r|}|r3d|kr3|jd}|d}t|dd}|r3|r3y||}Wnttfk rYq0X|dkrgSt |ddd|j D|ft| __loader____name__ get_sourceNcSsg|]}|dqS) r ).0liner r r ks zupdatecache..rrr#r')r startswithendswithrrrgetgetattr ImportErrorr splitlinespathisabssysjoin TypeErrorAttributeErrortokenizeopen readlinesrr)r r rrbasenamenameloaderr"datadirnamefpr rrr r rrIs\  %     #     r) __doc__r0rr4__all__rrrrrrr r r rs     lib64/python3.4/__pycache__/opcode.cpython-34.pyc000064400000012066152342604300015343 0ustar00 j fB@sdZddddddddd d d d d g Zy!ddlmZejdWnek rhYnXdZgZgZgZ gZ gZ gZ gZ gZiZdgdZx%edD]Zdefeed?ed@dAedBdCedDdEedFdGedHdIedJdKedLdMedNdOedPdQedRdSedTdUedVdWedXdYedZd[ed\d]ed^d_ed`daedbdcedddeedfdgedhdiedjdkedldmedndoedpdqedrdsedtduedvdwedxdyedzd{ed|d}ed~deddeddeddeddeddedddZeddeddeddeddeddeddeddeddeddeddejdeddeddeddeddeddeddedde jdeddeddeddeddeddeddeddeddeddeddeddeddeddedde jdedde jdedde jdeddeddejdeddeddeddedde jdedde jdedde jdedde jdeddejdeddejdeddejdeddeddeddeddedde jded ddZ[[[[dS)zy opcode module - potentially shared between dis and other modules which operate on bytecodes (e.g. peephole optimizers). cmp_ophasconsthasnamehasjrelhasjabshaslocal hascomparehasfreeopnameopmap HAVE_ARGUMENT EXTENDED_ARGhasnargs) stack_effectr<<===!=>>=innot inisis notexception matchBADz<%r>cCs|t|<|t|Z BINARY_RSHIFT?Z BINARY_AND@Z BINARY_XORAZ BINARY_ORBZ INPLACE_POWERCZGET_ITERDZ PRINT_EXPRFZLOAD_BUILD_CLASSGZ YIELD_FROMHZINPLACE_LSHIFTKZINPLACE_RSHIFTLZ INPLACE_ANDMZ INPLACE_XORNZ INPLACE_OROZ BREAK_LOOPPZ WITH_CLEANUPQZ RETURN_VALUESZ IMPORT_STARTZ YIELD_VALUEVZ POP_BLOCKWZ END_FINALLYXZ POP_EXCEPTYZZ STORE_NAMEZ DELETE_NAME[ZUNPACK_SEQUENCE\ZFOR_ITER]Z UNPACK_EX^Z STORE_ATTR_Z DELETE_ATTR`Z STORE_GLOBALaZ DELETE_GLOBALbZ LOAD_CONSTdZ LOAD_NAMEeZ BUILD_TUPLEfZ BUILD_LISTgZ BUILD_SEThZ BUILD_MAPiZ LOAD_ATTRjZ COMPARE_OPkZ IMPORT_NAMElZ IMPORT_FROMmZ JUMP_FORWARDnZJUMP_IF_FALSE_OR_POPoZJUMP_IF_TRUE_OR_POPpZ JUMP_ABSOLUTEqZPOP_JUMP_IF_FALSErZPOP_JUMP_IF_TRUEsZ LOAD_GLOBALtZ CONTINUE_LOOPwZ SETUP_LOOPxZ SETUP_EXCEPTyZ SETUP_FINALLYzZ LOAD_FAST|Z STORE_FAST}Z DELETE_FAST~Z RAISE_VARARGSZ CALL_FUNCTIONZ MAKE_FUNCTIONZ BUILD_SLICEZ MAKE_CLOSUREZ LOAD_CLOSUREZ LOAD_DEREFZ STORE_DEREFZ DELETE_DEREFZCALL_FUNCTION_VARZCALL_FUNCTION_KWZCALL_FUNCTION_VAR_KWZ SETUP_WITHZ LIST_APPENDZSET_ADDZMAP_ADDZLOAD_CLASSDEREFN) rrrrrrzinrzisrrr)__doc____all__Z_opcoderr# ImportErrorrrrrrrrrr r r rangerr"r$r%r&r r r r r r!s"                                                                                                                          lib64/python3.4/__pycache__/bz2.cpython-34.pyo000064400000035464152342604300014612 0ustar00 i fI@s dZddddddgZdZdd lmZdd lZdd lZydd lm Z Wn"e k rdd l m Z YnXdd l m Z mZdZd ZdZdZdZGdddejZddd d d ddZdddZddZd S)zInterface to the libbzip2 compression library. This module provides a file interface, classes for incremental (de)compression, and functions for one-shot (de)compression. BZ2File BZ2CompressorBZ2Decompressoropencompress decompressz%Nadeem Vawda )rN)RLock)rri c@sieZdZdZdddddZddZed d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdddZdd d!Zd"d#d$Zd:d&d'Zd;d(d)Zd*d+Zd<d,d-Zd=d.d/Zd0d1Zd2d3Zd4d5Zd"d6d7Zd8d9ZdS)>ra@A file object providing transparent bzip2 (de)compression. A BZ2File can act as a wrapper for an existing file object, or refer directly to a named file on disk. Note that BZ2File provides a *binary* file interface - data read is returned as bytes, and data to be written should be given as bytes. rN cCst|_d|_d|_t|_d|_d|_|dk rXtj dt nd|koodknst dn|dkrd }t }t |_d |_d|_n|dkrd }t}t||_ng|dkrd}t}t||_n=|dkr:d}t}t||_nt d|ft|ttfrt|||_d|_||_n?t|dst|dr||_||_n tddS)a3Open a bzip2-compressed file. If filename is a str or bytes object, it gives the name of the file to be opened. Otherwise, it should be a file object, which will be used to read or write the compressed data. mode can be 'r' for reading (default), 'w' for (over)writing, 'x' for creating exclusively, or 'a' for appending. These can equivalently be given as 'rb', 'wb', 'xb', and 'ab'. buffering is ignored. Its use is deprecated. If mode is 'w', 'x' or 'a', compresslevel can be a number between 1 and 9 specifying the level of compression: 1 produces the least compression, and 9 (default) produces the most compression. If mode is 'r', the input file may be the concatenation of multiple compressed streams. NFrr z)Use of 'buffering' argument is deprecatedr z%compresslevel must be between 1 and 9r rbwwbxxbaabzInvalid mode: %rTreadwritez1filename must be a str or bytes object, or a file)rr zrb)rzwb)rr)rr)r_lock_fp_closefp _MODE_CLOSED_mode_pos_sizewarningswarnDeprecationWarning ValueError _MODE_READr _decompressor_buffer_buffer_offset _MODE_WRITEr _compressor isinstancestrbytes _builtin_openhasattr TypeError)selffilenamemode buffering compresslevelZ mode_coder6(/opt/alt/python34/lib64/python3.4/bz2.py__init__+sL                    zBZ2File.__init__cCs|j|jtkrdSzY|jttfkrAd|_n4|jtkru|jj|j j d|_ nWdz|j r|jj nWdd|_d|_ t|_d|_ d|_XXWdQXdS)zFlush and close the file. May be called more than once without error. Once the file is closed, any other operation on it will raise a ValueError. NFrr)rrrr%_MODE_READ_EOFr&r)rrr*flushrcloser'r()r1r6r6r7r;ns"       z BZ2File.closecCs |jtkS)zTrue if this file is closed.)rr)r1r6r6r7closedszBZ2File.closedcCs|j|jjS)z3Return the file descriptor for the underlying file.)_check_not_closedrfileno)r1r6r6r7r>s zBZ2File.filenocCs|jo|jjS)z)Return whether the file supports seeking.)readablerseekable)r1r6r6r7r@szBZ2File.seekablecCs|j|jttfkS)z/Return whether the file was opened for reading.)r=rr%r9)r1r6r6r7r?s zBZ2File.readablecCs|j|jtkS)z/Return whether the file was opened for writing.)r=rr))r1r6r6r7writables zBZ2File.writablecCs|jrtdndS)NzI/O operation on closed file)r<r$)r1r6r6r7r=s zBZ2File._check_not_closedcCs5|jttfkr1|jtjdndS)NzFile not open for reading)rr%r9r=ioUnsupportedOperation)r1r6r6r7_check_can_reads zBZ2File._check_can_readcCs/|jtkr+|jtjdndS)NzFile not open for writing)rr)r=rBrC)r1r6r6r7_check_can_writes zBZ2File._check_can_writecCsV|jttfkr1|jtjdn|jjsRtjdndS)Nz3Seeking is only supported on files open for readingz3The underlying file object does not support seeking)rr%r9r=rBrCrr@)r1r6r6r7_check_can_seeks  zBZ2File._check_can_seekc Cs|jtkrdSx|jt|jkr |jjpI|jjt }|s|jj rwt|_|j |_ dSt dn|jj rt|_y|jj||_Wqtk rt|_|j |_ dSYqXn|jj||_d|_qWdS)NFzACompressed file ended before the end-of-stream marker was reachedrT)rr9r(lenr'r& unused_datarr _BUFFER_SIZEeofrr EOFErrorrrOSError)r1Zrawblockr6r6r7 _fill_buffers,           zBZ2File._fill_bufferTcCs|j|jd|_d|_g}xJ|jrt|rP|j|jn|jt|j7_d|_q+W|rdj|SdS)Nrr)r'r(rMappendrrGjoin)r1 return_datablocksr6r6r7 _read_alls  zBZ2File._read_allcCsC|j|}|t|jkrd|j|j|}||_|jt|7_|r`|SdS|j|jd|_d|_g}x|dkr+|jr+|t|jkr|jd|}||_n|j}d|_|r|j|n|jt|7_|t|8}qW|r?dj|SdS)Nrr)r(rGr'rrMrNrO)r1nrPenddatarQr6r6r7 _read_blocks*      zBZ2File._read_blockrc CsB|j3|j|js$dS|j|jdSWdQXdS)zReturn buffered data without advancing the file position. Always returns at least one byte of data, unless at EOF. The exact number of bytes returned is unspecified. rN)rrDrMr'r()r1rSr6r6r7peek s    z BZ2File.peekr c CsQ|jB|j|dkr$dS|dkr:|jS|j|SWdQXdS)zRead up to size uncompressed bytes from the file. If size is negative or omitted, read until EOF is reached. Returns b'' if the file is already at EOF. rrN)rrDrRrV)r1sizer6r6r7rs     z BZ2File.readc Cs|j|j|dksE|jt|jkrI|j rIdS|dkr|j|j|j|}|jt|7_n(|j|jd}d|_d|_|jt|7_|SWdQXdS)zRead up to size uncompressed bytes, while trying to avoid making multiple reads from the underlying stream. Returns b'' if the file is at EOF. rrN)rrDr(rGr'rMr)r1rXrUr6r6r7read1&s   %    z BZ2File.read1c Cs'|jtjj||SWdQXdS)z_Read up to len(b) bytes into b. Returns the number of bytes read (0 for EOF). N)rrBBufferedIOBasereadinto)r1br6r6r7r[As zBZ2File.readintoc Cst|ts<t|ds-tdn|j}n|j|j|dkr|jjd|j d}|dkr|j|j |}||_ |j t |7_ |Snt j j||SWdQXdS)a Read a line of uncompressed bytes from the file. The terminating newline (if present) is retained. If size is non-negative, no more than size bytes will be read (in which case the line may be incomplete). Returns b'' if already at EOF. __index__zInteger argument expectedrs r N)r+intr/r0r]rrDr'findr(rrGrBrZreadline)r1rXrTliner6r6r7r`Is     zBZ2File.readlinec Csct|ts<t|ds-tdn|j}n|jtjj||SWdQXdS)zRead a list of lines of uncompressed bytes from the file. size can be specified to control the number of lines read: no further lines will be read once the total size of the lines read so far equals or exceeds size. r]zInteger argument expectedN) r+r^r/r0r]rrBrZ readlines)r1rXr6r6r7rb`s  zBZ2File.readlinesc Cs_|jP|j|jj|}|jj||jt|7_t|SWdQXdS)zWrite a byte string to the file. Returns the number of uncompressed bytes written, which is always len(data). Note that due to buffering, the file on disk may not reflect the data written until close() is called. N)rrEr*rrrrrG)r1rUZ compressedr6r6r7rns   z BZ2File.writec Cs'|jtjj||SWdQXdS)zWrite a sequence of byte strings to the file. Returns the number of uncompressed bytes written. seq can be any iterable yielding byte strings. Line separators are not added between the written byte strings. N)rrBrZ writelines)r1seqr6r6r7rc|s zBZ2File.writelinescCsG|jjddt|_d|_t|_d|_d|_dS)Nrr) rseekr%rrrr&r'r()r1r6r6r7_rewinds     zBZ2File._rewindc Cs|j|j|dkr#nm|dkr?|j|}nQ|dkr}|jdkrm|jddn|j|}ntd|f||jkr|jn ||j8}|j|dd|jSWdQXdS)aChange the file position. The new position is specified by offset, relative to the position indicated by whence. Values for whence are: 0: start of stream (default); offset must not be negative 1: current stream position 2: end of stream; offset must not be positive Returns the new file position. Note that seeking is emulated, so depending on the parameters, this operation may be extremely slow. rr r rPFzInvalid value for whence: %sN)rrFrr rRr$rfrV)r1offsetwhencer6r6r7res        z BZ2File.seekcCs%|j|j|jSWdQXdS)z!Return the current file position.N)rr=r)r1r6r6r7tells  z BZ2File.tellrrrr)__name__ __module__ __qualname____doc__r8r;propertyr<r>r@r?rAr=rDrErFrMrRrVrWrrYr[r`rbrrcrfrerir6r6r6r7r s4 C         %    *rr cCsd|kr1d|krtd|fqnQ|dk rLtdn|dk rgtdn|dk rtdn|jdd}t||d |}d|krtj||||S|SdS) a Open a bzip2-compressed file in binary or text mode. The filename argument can be an actual filename (a str or bytes object), or an existing file object to read from or write to. The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is "rb", and the default compresslevel is 9. For binary mode, this function is equivalent to the BZ2File constructor: BZ2File(filename, mode, compresslevel). In this case, the encoding, errors and newline arguments must not be provided. For text mode, a BZ2File object is created, and wrapped in an io.TextIOWrapper instance with the specified encoding, error handling behavior, and line ending(s). tr\zInvalid mode: %rNz0Argument 'encoding' not supported in binary modez.Argument 'errors' not supported in binary modez/Argument 'newline' not supported in binary moderr5)r$replacerrB TextIOWrapper)r2r3r5encodingerrorsnewlineZbz_modeZ binary_filer6r6r7rs      cCs#t|}|j||jS)zCompress a block of data. compresslevel, if given, must be a number between 1 and 9. For incremental compression, use a BZ2Compressor object instead. )rrr:)rUr5compr6r6r7rs c Csg}xv|r~t}y|j|}Wntk rL|rEPnYnX|j||jsrtdn|j}q Wdj|S)zjDecompress a block of data. For incremental decompression, use a BZ2Decompressor object instead. zACompressed data ended before the end-of-stream marker was reachedr)rrrLrNrJr$rHrO)rUZresultsZdecompresr6r6r7rs      )rm__all__ __author__builtinsrr.rBr!Z threadingr ImportErrorZdummy_threadingZ_bz2rrrr%r9r)rIrZrrrr6r6r6r7s,    ' lib64/python3.4/__pycache__/_compat_pickle.cpython-34.pyo000064400000016403152342604300017056 0ustar00 h f~ /@si*dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6d3dP6dQdR6Zi!dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6Zd0ZyeWnek r;Yn Xed17Zx$eD]Zdefedef6d?d@6dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUZ xe D]ZdVe defsrccs!|]\}}||fVqdS)Nr)rrrrrrrspickleZcPicklezxml.etree.ElementTreeZ _elementtree FileDialog SimpleDialogDocXMLRPCServerSimpleHTTPServer CGIHTTPServerbz2Z_bz2Z_dbm _functoolsZ_gdbm_pickle basestring StandardError SocketType _socketobjectLoadFileDialogSaveFileDialog ServerHTMLDocXMLRPCDocGeneratorDocXMLRPCRequestHandlerDocCGIXMLRPCRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerBrokenPipeErrorChildProcessErrorConnectionAbortedErrorConnectionErrorConnectionRefusedErrorConnectionResetErrorFileExistsErrorFileNotFoundErrorInterruptedErrorIsADirectoryErrorNotADirectoryErrorPermissionErrorProcessLookupErrorN)builtinszrange)rr)z functoolsreduce)rr)zsysintern)rr)rzchr)rr)rstr)rr)rzint)rr)rzzip) itertoolsr )rzmap)rr")rzfilter)rr$)rz filterfalse)rr&)rz zip_longest)rr() collectionsUserDict)rr+)rUserList)rr)r UserString)rr)r r.)r.r.)r/r0)r1r0)r2r3)r4r3)r5r6)r7r6)r8Popen)r:r)r;r<)r=r<)rr>)r=r>)rr?)r=r?)rr@)r=r@)rrA)r=rA)rrB)r=rB)rrC)r=rC)rrD)r=rD)rrE)r=rE)rrF)r=rF)rrG)r=rG)rrH)r=rH)r;rI)rrI)r;rJ)rrJ)/zArithmeticErrorzAssertionErrorzAttributeErrorz BaseExceptionz BufferErrorz BytesWarningzDeprecationWarningzEOFErrorzEnvironmentError ExceptionzFloatingPointErrorz FutureWarningz GeneratorExitzIOErrorz ImportErrorz ImportWarningzIndentationErrorz IndexErrorzKeyErrorzKeyboardInterruptz LookupErrorz MemoryErrorz NameErrorzNotImplementedErrorOSErrorz OverflowErrorzPendingDeprecationWarningzReferenceErrorz RuntimeErrorzRuntimeWarningz StopIterationz SyntaxErrorz SyntaxWarningz SystemErrorz SystemExitzTabErrorz TypeErrorzUnboundLocalErrorzUnicodeDecodeErrorzUnicodeEncodeErrorz UnicodeErrorzUnicodeTranslateErrorzUnicodeWarningz UserWarningz ValueErrorzWarningzZeroDivisionError)z WindowsError)r|r}r~ TimeoutError)rr)rr)rr) exceptionsr)rr)rr)r/r)r/r)rr)z _functoolsr)rr)rr)rr)rr)rr)rr)rr)rr)rr)r r)rr)r r)rr)r r)rr)r r)rr)r r)rr)r r)rr)r r)r/r)r1r/)zBrokenPipeErrorzChildProcessErrorzConnectionAbortedErrorzConnectionErrorzConnectionRefusedErrorzConnectionResetErrorzFileExistsErrorzFileNotFoundErrorzInterruptedErrorzIsADirectoryErrorzNotADirectoryErrorzPermissionErrorzProcessLookupErrorr)rr) ZIMPORT_MAPPINGZ NAME_MAPPINGZPYTHON2_EXCEPTIONSrzraZexcnameZMULTIPROCESSING_EXCEPTIONSdictitemsZREVERSE_IMPORT_MAPPINGZREVERSE_NAME_MAPPINGupdateZPYTHON3_OSERROR_EXCEPTIONSrrrrsv               lib64/python3.4/__pycache__/stat.cpython-34.pyo000064400000006772152342604300015070 0ustar00 h f0 @sdZdZdZdZdZdZdZdZdZd Z d Z d d Z d dZ dZ dZdZdZdZdZdZddZddZddZddZddZd d!Zd"d#Zd$Zd%ZeZd&Zd'Zd(Z d)Z!d*Z"d'Z#d(Z$d)Z%d+Z&d,Z'd-Z(d Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d-Z2d,Z3dZ4d.Z5d/Z6d0Z7d1Z8d2Z9ed3fed4fed5fe d6fed7fed8ffe#d9ffe$d:ffe%eBd;fed<fe%d=ffe'd9ffe(d:ffe)eBd;fed<fe)d=ffe+d9ffe,d:ffe-eBd>fed?fe-d=fff Z:d@dAZ;yddBl<TWne=k rYnXdCS)DzoConstants/functions for interpreting results of os.stat() and os.lstat(). Suggested usage: from stat import *  cCs|d@S)zMReturn the portion of the file's mode that can be set by os.chmod(). i)moder r )/opt/alt/python34/lib64/python3.4/stat.pyS_IMODEsrcCs|d@S)zLReturn the portion of the file's mode that describes the file type. ir )r r r r S_IFMTsri@i i`iiiicCst|tkS)z(Return True if mode is from a directory.)rS_IFDIR)r r r r S_ISDIR.srcCst|tkS)zsrcCst|tkS)z,Return True if mode is from a symbolic link.)rS_IFLNK)r r r r S_ISLNKBsrcCst|tkS)z%Return True if mode is from a socket.)rS_IFSOCK)r r r r S_ISSOCKFsriii@i8 iiiii l-bdcprwsSxtTcCsig}xStD]K}xB|D]-\}}||@|kr|j|PqqW|jdq Wdj|S)z;Convert a file's mode to a string of the form '-rwxrwxrwx'.r%)_filemode_tableappendjoin)r ZpermtableZbitcharr r r filemodes  r7)*N)>__doc__ST_MODEST_INOST_DEVST_NLINKST_UIDST_GIDST_SIZEST_ATIMEST_MTIMEST_CTIMErrrrrrrrrrrrrrrrS_ISUIDS_ISGIDS_ENFMTS_ISVTXS_IREADS_IWRITES_IEXECS_IRWXUS_IRUSRS_IWUSRS_IXUSRS_IRWXGS_IRGRPS_IWGRPS_IXGRPS_IRWXOS_IROTHS_IWOTHS_IXOTH UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE UF_NOUNLINK UF_COMPRESSED UF_HIDDEN SF_ARCHIVED SF_IMMUTABLE SF_APPEND SF_NOUNLINK SF_SNAPSHOTr2r7_stat ImportErrorr r r r s                               lib64/python3.4/__pycache__/this.cpython-34.pyo000064400000002444152342604300015054 0ustar00 f f@s~dZiZxKd D]CZx:edD],Zeeddeeeees r N)rr)srr rangeichrprintjoinrrrr s  .lib64/python3.4/__pycache__/sysconfig.cpython-34.pyc000064400000041607152342604300016101 0ustar00 i f8` @sdZddlZddlZddlmZmZdddddd d d d d dg Ziidd6dd6dd6dd6dd6dd6dd6dd6d6id d6d!d6d!d6d!d6d"d6d"d6dd6dd6d#6id$d6d%d6d&d6d&d6d'd6d'd6d(d6dd6d)6id*d6d*d6d+d6d+d6d,d6d-d6d.d6d/6id0d6d0d6d1d6d2d6d3d6d4d6d.d6d56id6d6d6d6d7d6d7d6d8d6d4d6d.d6d96ZdqZej j dZ ej dd:Z e de d;Z ejjejZejjejZejjejZejjejZdadZd<d=ZejrejjeejZneejZejd)krd>edrdj kreejj!eeZnejd)kr>d@edsdj kr>eejj!eeeZnejd)krdBedtdj kreejj!eeeZndDej"kreej"dDZndEdFZ#e$edGdZ%e%r0ejd)kr0e%j j&dur0ejje%Z%e%j&d>r0ejje%Z%q0ndIdJdKZ'e'dLZ(e(rx-dvD]"Z)dMee)ddndoZ?e@dpkre?ndS)wz-Access to Python's configuration information.N)pardirrealpathget_config_h_filenameget_config_varget_config_varsget_makefile_filenameget_pathget_path_names get_paths get_platformget_python_versionget_scheme_namesparse_config_hz/{installed_base}/lib64/python{py_version_short}stdlibz){platbase}/lib64/python{py_version_short} platstdlibz1{base}/lib/python{py_version_short}/site-packagespurelibz7{platbase}/lib64/python{py_version_short}/site-packagesplatlibz;{installed_base}/include/python{py_version_short}{abiflags}includez?{installed_platbase}/include/python{py_version_short}{abiflags} platincludez {base}/binscriptsz{base}data posix_prefixz{installed_base}/lib/pythonz{base}/lib/pythonz{installed_base}/include/python posix_homez{installed_base}/Libz {base}/Libz{base}/Lib/site-packagesz{installed_base}/Includez{base}/Scriptsntz#{userbase}/Python{py_version_nodot}z1{userbase}/Python{py_version_nodot}/site-packagesz+{userbase}/Python{py_version_nodot}/Includez{userbase}/Scriptsz {userbase}nt_userz){userbase}/lib64/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz7{userbase}/lib64/python{py_version_short}/site-packagesz+{userbase}/include/python{py_version_short}z{userbase}/bin posix_userz{userbase}/lib/pythonz#{userbase}/lib/python/site-packagesz{userbase}/includeosx_framework_userc Cs+yt|SWntk r&|SYnXdS)N)rOSError)pathr!./opt/alt/python34/lib64/python3.4/sysconfig.py_safe_realpathcs r#pcbuildz\pc\v z\pcbuild\amd64Z_PYTHON_PROJECT_BASEcCs=x6dD].}tjjtjj|d|rdSqWdS)N Setup.dist Setup.localModulesTF)r(r))osr isfilejoin)dfnr!r!r"_is_python_source_dir}s $r0_home pcbuild\amd64FcCs |rtrttSttS)N) _sys_homer0 _PROJECT_BASE) check_homer!r!r"is_python_builds  r6Tz{srcdir}/Includez{projectbase}/.cCsvy|j|SWn^tk rqy|jtjSWn5tk rl}ztd|WYdd}~XnXYnXdS)Nz{%s})formatKeyErrorr+environAttributeError)s local_varsvarr!r!r" _subst_varss r>cCsI|j}x6|jD](\}}||kr7qn|||)schemevarsresrDrEr!r!r" _expand_varss  #rOcCstjdkrdStjS)NrGr)r+rIr!r!r!r"_get_default_schemesrPcCstjjdd}dd}tjdkrbtjjdpEd}|rR|S||dSntjdkrtd }|r|r|S|dd |d tjdd Sqn|r|S|dd SdS)NPYTHONUSERBASEcWstjjtjj|S)N)r+r rJr-)argsr!r!r"joinusersz_getuserbase..joinuserrAPPDATA~PythondarwinPYTHONFRAMEWORKLibraryz%d.%drz.local)r+r9getrIsysplatformr version_info)env_baserSbase frameworkr!r!r" _getuserbases"  racCs?ddl}|jd}|jd}|jd}|dkrNi}ni}i}t|dd}|j} WdQXx| D]} | jds| jd krqn|j| } | r| jd d \} } | j} | jd d }d |kr| || d|}t|drn|d|j}nt|WYdd}~XnXt}y&t|}t||WdQXWn^tk r}z>d|}t|dr|d|j}nt|WYdd}~XnXt r4|d|d|dkr.ddl}|jdtdntj|S)zReturn the value of a single variable using the dictionary returned by 'get_config_vars()'. Equivalent to get_config_vars().get(name) rrNz SO is deprecated, use EXT_SUFFIXr)warningswarnDeprecationWarningrrZ)rIrr!r!r"rGs  cCstjdkrd}tjj|}|d*kr:tjStjjd|}tj|t||j}|dkrdS|dkrdStjStjd ksttd  rtjSd tj krtj d Stj \}}}}}|jj d d }|j dd}|j d d}|dddkrTd||fS|dddkr|ddkrd}dt |dd|ddf}idd6dd6} |d | tj 7}qn|dd!d"krd||fS|ddd#kr"d$|||fS|dd%d&krd&}ddl} | jd'} | j|} | r| j}qnI|dd%d(krddl} | jt|||\}}}nd)|||fS)+aReturn a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. for IRIX the architecture isn't particularly important (IRIX only runs on SGI hardware), but for Linux the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u irix-5.3 irix64-6.2 Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win-ia64 (64bit Windows on Itanium) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. rz bit (rf)amd64z win-amd64itaniumzwin-ia64rGuname_PYTHON_HOST_PLATFORM/re _-Nlinuxz%s-%ssunosr5solarisz%d.%srr32biti64bitlz.%sirixaixz%s-%s.%scygwinz[\d.]+rWz%s-%s-%s)r+rIr[rfindr\rxlowerrr9rrtrumaxsizerlrmrrrsrget_platform_osxr)rijlookosnamehostreleasermachinebitnessrlrel_rerrr!r!r"r SsZ #   (  cCstS)N)rr!r!r!r"r scCsdx]tt|jD]C\}\}}|dkrHtd|ntd||fqWdS)Nrz%s: z %s = "%s") enumeraterr@print)titlerindexrDrEr!r!r" _print_dicts+ r cCsdtjkrtdStdttdttdtttdtttdt dS)z*Display all information sysconfig detains.z--generate-posix-varsNzPlatform: "%s"zPython version: "%s"z!Current installation scheme: "%s"Paths Variables) r[argvrr r r rPr r rr!r!r!r"_mainsr__main__)zstdlibz platstdlibzpurelibzplatlibzincludezscriptszdataiii)r$r2)z posix_prefixz posix_home)A__doc__r+r[Zos.pathrr__all__rHrrsplitrrrr rKrr base_prefixrrrbase_exec_prefixrr _USER_BASEr#rrr4getcwdrIrr-r9r0getattrr3endswithr6rrLr>rFrOrPrarrrrrrrr r r rrrr r r r__name__r!r!r!r"s          ++!+!      z ?      M [    lib64/python3.4/__pycache__/nntplib.cpython-34.pyo000064400000106726152342604300015563 0ustar00 e fJ@sdZddlZddlZddlZddlZddlZyddlZWnek rldZYnXdZddl m Z ddlm Z ddd d d d d dgZ dZGdddeZGdd d eZGdd d eZGdd d eZGdd d eZGdd d eZdZdZddddddddd d!d"d#h Zd$d%d&d'd(d)d*gZid)d+6d*d,6Zd-Zejd.d/d0d1d2gZejd3d4d5d,gZd6dZ d7d8Zdd9d:Z dd;d<Z!dd=d>Z"er9d?d@Z#nGdAdBdBZ$GdCdde$Z%erGdDdEdEe$Z&e j'dEne(dFkrddl)Z)e)j*dGdHZ+e+j,dIdJdKdLdMdNe+j,dOdPdKdQdMdRe+j,dSdTdKdU dVe-dMdWeefe+j,dXdYdKdZdVe-dMd[e+j,d\d]d^d_dKddMd`e+j.Z/e/j0Z0e/j re0dU kreZ0ne%dae/j1dbe0Z2n.e0dU kreZ0ne&dae/j1dbe0Z2e2j3Z4dce4kre2j5ne2j6e/j6\Z7Z8Z9Z:Z;e<dde;dee8dfe9dge:dhdiZ=e>e-e:e/j?dUZ9e2j@e9e:\Z7ZAxeAD]z\ZBZCe eCd%jDdjdUdZEe eCd$ZFe-eCd*ZGe<dkjHeBe=eEdle=eFdmeGqWe2jIndS)naAn NNTP client class based on: - RFC 977: Network News Transfer Protocol - RFC 2980: Common NNTP Extensions - RFC 3977: Network News Transfer Protocol (version 2) Example: >>> from nntplib import NNTP >>> s = NNTP('news') >>> resp, count, first, last, name = s.group('comp.lang.python') >>> print('Group', name, 'has', count, 'articles, range', first, 'to', last) Group comp.lang.python has 51 articles, range 5770 to 5821 >>> resp, subs = s.xhdr('subject', '{0}-{1}'.format(first, last)) >>> resp = s.quit() >>> Here 'resp' is the server response line. Error responses are turned into exceptions. To post an article from a file: >>> f = open(filename, 'rb') # file containing article, including header >>> resp = s.post(f) >>> For descriptions of all methods, read the comments in the code below. Note that all arguments and return values representing article numbers are strings, not numbers, since they are rarely used for calculations. NFT) decode_header)_GLOBAL_DEFAULT_TIMEOUTNNTP NNTPErrorNNTPReplyErrorNNTPTemporaryErrorNNTPPermanentErrorNNTPProtocolError NNTPDataErrorric@s"eZdZdZddZdS)rz%Base class for all nntplib exceptionsc GsCtj||y|d|_Wntk r>d|_YnXdS)NrzNo response given) Exception__init__response IndexError)selfargsr,/opt/alt/python34/lib64/python3.4/nntplib.pyr bs  zNNTPError.__init__N)__name__ __module__ __qualname____doc__r rrrrr`s c@seZdZdZdS)rzUnexpected [123]xx replyN)rrrrrrrrris c@seZdZdZdS)rz 4xx errorsN)rrrrrrrrrms c@seZdZdZdS)rz 5xx errorsN)rrrrrrrrrqs c@seZdZdZdS)r z"Response does not begin with [1-5]N)rrrrrrrrr us c@seZdZdZdS)r zError in response dataN)rrrrrrrrr ys wi3Z100Z101211215Z220Z221Z222Z224Z225Z230Z231Z282subjectfromdatez message-idZ referencesz:bytesz:linesbytesliness GroupInfogrouplastfirstZflag ArticleInfoZnumber message_idcCskg}xUt|D]G\}}t|trM|j|j|pCdq|j|qWdj|S)zwTakes an unicode string representing a munged header value and decodes it as a (possibly non-ASCII) readable value.ascii)_email_decode_header isinstancerappenddecodejoin)Z header_strpartsvencrrrrs cCsg}x|D]}|ddkrR|ddjd\}}}d|}n|jd\}}}|j}tj||}|j|q Wt}t|t|krtdn|dt||krtdn|S)zParse a list of string representing the response to LIST OVERVIEW.FMT and return a list of header/metadata names. Raises NNTPDataError if the response is not compliant (cf. RFC 3977, section 8.4).r:Nz$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields) partitionlower_OVERVIEW_FMT_ALTERNATIVESgetr)_DEFAULT_OVERVIEW_FMTlenr )rfmtlinename_suffixZdefaultsrrr_parse_overview_fmts "  r<cCs6tt}g}x|D]}i}|jd^}}t|}xt|D]\} } | t|krwqSn|| } | jd} | |kr | r | d} | r| dt| j| krtdn| r| t| dnd} n| ||| d?Z#d@dAZ$ddBdCZ%dd'ddDdEZ&dd'ddFdGZ'dd'ddHdIZ(dJdKZ)d'ddLdMZ*d'ddNdOZ+d'ddPdQZ,d'ddRdSZ-dTdUZ.dVdWZ/dXdYZ0dZd[Z1d\d]Z2d^d_Z3d`daZ4ddddbdcZ5dddeZ6e7rddfdgZ8ndS)h _NNTPBasezutf-8surrogateescapeNcCs||_||_d|_|j|_d|_|jd|_|rd|jkr|j|jsd|_|jqnd|_ d|_ dS)aSInitialize an instance. Arguments: - file: file-like object (open for read/write in binary mode) - host: hostname of the server - readermode: if true, send 'mode reader' command after connecting. - timeout: timeout (in seconds) used for socket connections readermode is sometimes necessary if you are connecting to an NNTP server on the local machine and intend to call reader-specific commands, such as `group'. If you get unexpected NNTPPermanentErrors, you might need to set readermode. rNFREADER) hostfile debugging_getrespwelcome_capsgetcapabilitiesreadermode_afterauth_setreadermodetls_on authenticated)rr^r] readermodetimeoutrrrr 8s         z_NNTPBase.__init__cCs|S)Nr)rrrr __enter__gsz_NNTPBase.__enter__csifdd}|rez-yjWnttfk rFYnXWd|rajnXndS)Ncs tdS)Nr^)hasattrr)rrrksz$_NNTPBase.__exit__..)quitOSErrorEOFError_close)rrZ is_connectedr)rr__exit__js   z_NNTPBase.__exit__cCs)|jr"tdt|jn|jS)zGet the welcome message from the server (this is read and squirreled away by __init__()). If the response code is 200, posting is allowed; if it 201, posting is not allowed.z *welcome*)r_printreprra)rrrr getwelcomeus z_NNTPBase.getwelcomec Cs|jdkrd|_d|_y|j\}}Wn!ttfk rZi|_YqX||_d|krttt|d|_nd|krdj |d|_qn|jS)zGet the server capabilities, as read by __init__(). If the CAPABILITIES command is not supported, an empty dict is returned.Nr0VERSIONZIMPLEMENTATION ) rb nntp_versionZnntp_implementation capabilitiesrrmaxmapr?r+)rrespcapsrrrrc~s     z_NNTPBase.getcapabilitiescCs ||_dS)zSet the debugging level. Argument 'level' means: 0: no debugging output (default) 1: print commands and responses but not body text etc. 2: also print raw lines read and sent before stripping CR/LFN)r_)rlevelrrrset_debuglevelsz_NNTPBase.set_debuglevelcCsP|t}|jdkr/tdt|n|jj||jjdS)zfInternal: send one line to the server, appending CRLF. The `line` must be a bytes-like object.r0z*put*N)_CRLFr_rrrsr^writeflush)rr8rrr_putlines  z_NNTPBase._putlinecCsH|jrtdt|n|j|j|j}|j|dS)zlInternal: send one command to the server (through _putline()). The `line` must be an unicode string.z*cmd*N)r_rrrsencodeencodingerrorsr)rr8rrr_putcmds z_NNTPBase._putcmdTcCs|jjtd}t|tkr7tdn|jdkr\tdt|n|sktn|r|ddt kr|dd}q|ddt kr|dd }qn|S) zInternal: return one line from the server, stripping _CRLF. Raise EOFError if the connection is closed. Returns a bytes object.r0z line too longz*get*rHNrMrMr) r^readline_MAXLINEr6r r_rrrsror)rZ strip_crlfr8rrr_getlines z_NNTPBase._getlinecCs|j}|jr+tdt|n|j|j|j}|dd}|dkrnt|n|dkrt|n|dkrt |n|S)zInternal: get a response from the server. Raise various errors if the response indicates an error. Returns an unicode string.z*resp*Nr045Z123) rr_rrrsr*rrrrr )rr{crrrr`s     z_NNTPBase._getrespc CsYd}z2t|ttfr4t|d}}n|j}|ddtkret|ng}|dk rdtdf}x|jd}||krPn|j dr|dd}n|j |qWnXd}xO|j}||krPn|j dr&|dd}n|j |qWWd|rN|j nX||fS) aQInternal: get a response plus following text from the server. Raise various errors if the response indicates an error. Returns a (response, lines) tuple where `response` is an unicode string and `lines` is a list of bytes objects. If `file` is a file-like object, it must be open in binary mode. Nwb.s. Fs..r0) r(strropenr` _LONGRESPrrrrArr)close)rr^Z openedFiler{rZ terminatorsr8Z terminatorrrr _getlongresps8      z_NNTPBase._getlongrespcCs|j||jS)zWInternal: send a command and get the response. Same return value as _getresp().)rr`)rr8rrr _shortcmds z_NNTPBase._shortcmdcCs|j||j|S)zoInternal: send a command and get the response plus following text. Same return value as _getlongresp().)rr)rr8r^rrr_longcmds z_NNTPBase._longcmdcs?j|j|\}}|fdd|DfS)zInternal: send a command and get the response plus following text. Same as _longcmd() and _getlongresp(), except that the returned `lines` are unicode strings rather than bytes objects. cs(g|]}|jjjqSr)r*rr).0r8)rrr s z,_NNTPBase._longcmdstring..)rr)rr8r^r{listr)rr_longcmdstrings z_NNTPBase._longcmdstringcCswy |jSWntk rYnXy|jd\}}Wn"tk r]tdd}Yn Xt|}||_|S)zqInternal: get the overview format. Queries the server if not already done, else returns the cached value.zLIST OVERVIEW.FMTN)Z_cachedoverviewfmtAttributeErrorrrr5r<)rr{rr7rrr_getoverviewfmts     z_NNTPBase._getoverviewfmtcCsdd|DS)NcSs"g|]}t|jqSr)rr>)rr8rrrr$s z(_NNTPBase._grouplist..r)rrrrr _grouplist"sz_NNTPBase._grouplistcCsRi}|jd\}}x*|D]"}|j^}}|||)rr|r{rr8r9rBrrrrx&s  z_NNTPBase.capabilitiesr^cCst|tjtjfs9tdj|jjnt||jdk\}}dj||}|j ||\}}||j |fS)zProcess a NEWGROUPS command. Arguments: - date: a date or datetime object Return: - resp: server response if successful - list: list of newsgroup names zAthe date parameter must be a date or datetime object, not '{:40}'rHzNEWGROUPS {0} {1}) r(rNr TypeErrorrS __class__rrUrwrr)rrr^rOrPcmdr{rrrr newgroups4sz_NNTPBase.newgroupscCs|t|tjtjfs9tdj|jjnt||jdk\}}dj|||}|j ||S)zProcess a NEWNEWS command. Arguments: - group: group name or '*' - date: a date or datetime object Return: - resp: server response if successful - list: list of message ids zAthe date parameter must be a date or datetime object, not '{:40}'rHzNEWNEWS {0} {1} {2}) r(rNrrrSrrrUrwr)rr rr^rOrPrrrrnewnewsDsz_NNTPBase.newnewscCsJ|dk rd|}nd}|j||\}}||j|fS)a@Process a LIST or LIST ACTIVE command. Arguments: - group_pattern: a pattern indicating which groups to query - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of (group, last, first, flag) (strings) Nz LIST ACTIVE ZLIST)rr)r group_patternr^commandr{rrrrrTs   z_NNTPBase.listc Cstjd}|jd|\}}|jdsS|jd|\}}ni}xX|D]P}|j|j}|r`|jdd\} } |s| S| || [^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r0rHr&)recompilerrAsearchstripr ) rrZ return_allline_patr{rgroupsraw_linematchr9Zdescrrr_getdescriptionscs  z_NNTPBase._getdescriptionscCs|j|dS)aGet a description for a single group. If more than one group matches ('group' is a pattern), return the first. If no group matches, return an empty string. This elides the response code from the server, since it can only be '215' or '285' (for xgtitle) anyway. If the response code is needed, use the 'descriptions' method. NOTE: This neither checks for a wildcard in 'group' nor does it check whether the group actually exists.F)r)rr rrr descriptionzs z_NNTPBase.descriptioncCs|j|dS)z'Get descriptions for a range of groups.T)r)rrrrr descriptionssz_NNTPBase.descriptionscCs|jd|}|jds1t|n|j}d}}}t|}|dkr|d}|dkr|d}|dkr|d}|dkr|dj}qqqn|t|t|t||fS)aProcess a GROUP command. Argument: - group: the group name Returns: - resp: server response if successful - count: number of articles - first: first article number - last: last article number - name: the group name zGROUP rrr0rHrrI)rrArr>r6r2r?)rr9r{wordscountr"r!nrrrr s          z_NNTPBase.groupcCs|jd|S)aProcess a HELP command. Argument: - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of strings returned by the server in response to the HELP command ZHELP)r)rr^rrrhelpsz_NNTPBase.helpcCsQ|jdst|n|j}t|d}|d}|||fS)z_Internal: parse the response line of a STAT, NEXT, LAST, ARTICLE, HEAD or BODY command.Z22r0rH)rArr>r?)rr{rart_numr$rrr _statparses   z_NNTPBase._statparsecCs|j|}|j|S)z/Internal: process a STAT, NEXT or LAST command.)rr)rr8r{rrr_statcmdsz_NNTPBase._statcmdcCs-|r|jdj|S|jdSdS)a(Process a STAT command. Argument: - message_spec: article number or message id (if not specified, the current article is selected) Returns: - resp: server response if successful - art_num: the article number - message_id: the message id zSTAT {0}ZSTATN)rrS)r message_specrrrstats z_NNTPBase.statcCs |jdS)z;Process a NEXT command. No arguments. Return as for STAT.NEXT)r)rrrrnextsz_NNTPBase.nextcCs |jdS)z;Process a LAST command. No arguments. Return as for STAT.ZLAST)r)rrrrr!sz_NNTPBase.lastcCsF|j||\}}|j|\}}}|t|||fS)z2Internal: process a HEAD, BODY or ARTICLE command.)rrr#)rr8r^r{rrr$rrr_artcmdsz_NNTPBase._artcmdcCs4|dk rdj|}nd}|j||S)a0Process a HEAD command. Argument: - message_spec: article number or message id - file: filename string or file object to store the headers in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of header lines) NzHEAD {0}ZHEAD)rSr)rrr^rrrrheads z_NNTPBase.headcCs4|dk rdj|}nd}|j||S)a+Process a BODY command. Argument: - message_spec: article number or message id - file: filename string or file object to store the body in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of body lines) NzBODY {0}ZBODY)rSr)rrr^rrrrbodys z_NNTPBase.bodycCs4|dk rdj|}nd}|j||S)a5Process an ARTICLE command. Argument: - message_spec: article number or message id - file: filename string or file object to store the article in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of article lines) Nz ARTICLE {0}ZARTICLE)rSr)rrr^rrrrarticles z_NNTPBase.articlecCs |jdS)zYProcess a SLAVE command. Returns: - resp: server response if successful ZSLAVE)r)rrrrslavesz_NNTPBase.slavecsbtjd|jdj|||\}}fdd|fdd|DfS)aiProcess an XHDR command (optional server extension). Arguments: - hdr: the header type (e.g. 'subject') - str: an article nr, a message id, or a range nr1-nr2 - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of (nr, value) strings z^([0-9]+) ?(.*) ?z XHDR {0} {1}cs)j|}|r%|jddS|S)Nr0rH)rr )r8m)patrr remove_numbersz%_NNTPBase.xhdr..remove_numbercsg|]}|qSrr)rr8)rrrrs z"_NNTPBase.xhdr..)rrrrS)rZhdrrr^r{rr)rrrxhdr s $z_NNTPBase.xhdrcCsC|jdj|||\}}|j}|t||fS)aFProcess an XOVER command (optional server extension) Arguments: - start: start of range - end: end of range - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of dicts containing the response fields z XOVER {0}-{1})rrSrrF)rstartendr^r{rr7rrrxovers  z_NNTPBase.xoverc Csd|jkrdnd}t|ttfr[|\}}|dj||pQd7}n|dk rx|d|}n|j||\}}|j}|t||fS)aProcess an OVER command. If the command isn't supported, fall back to XOVER. Arguments: - message_spec: - either a message id, indicating the article to fetch information about - or a (start, end) tuple, indicating a range of article numbers; if end is None, information up to the newest message will be retrieved - or None, indicating the current article number must be used - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of dicts containing the response fields NOTE: the "message id" form isn't supported by XOVER ZOVERZXOVERz {0}-{1}r&Nrv)rbr(tuplerrSrrrF) rrr^rrrr{rr7rrrover(s   z_NNTPBase.overc Cstjdtdtjd}|jd||\}}g}xE|D]=}|j|j}|rK|j|j ddqKqKW||fS)zProcess an XGTITLE command (optional server extension) Arguments: - group: group name wildcard (i.e. news.*) Returns: - resp: server response if successful - list: list of (name,title) stringszFThe XGTITLE extension is not actively used, use descriptions() insteadrHz^([^ ]+)[ ]+(.*)$zXGTITLE r0) warningswarnDeprecationWarningrrrrrr)r ) rr r^rr{Z raw_linesrrrrrrxgtitleCs    z_NNTPBase.xgtitlec Cstjdtd|jdj|}|jdsIt|ny|j\}}Wntk rt|Yn X||fSdS)zProcess an XPATH command (optional server extension) Arguments: - id: Message id of article Returns: resp: server response if successful path: directory path to article z(The XPATH extension is not actively usedrHz XPATH {0}Z223N) rrrrrSrArr> ValueError)ridr{Zresp_numpathrrrxpathUs   z_NNTPBase.xpathcCs|jd}|jds-t|n|j}t|dkrZt|n|d}t|dkrt|n|t|dfS)zProcess the DATE command. Returns: - resp: server response if successful - date: datetime object ZDATEZ111rHr0N)rrArr>r6r rR)rr{elemrrrrris  z_NNTPBase.datecCs|j|}|jds-t|nt|ttfrQ|j}nx_|D]W}|jts|j dt}n|jdrd|}n|j j |qXW|j j d|j j |j S)N3s rs. )rrArr(r bytearray splitlinesendswithrrstripr^rrr`)rrfr{r8rrr_postzs   z_NNTPBase._postcCs|jd|S)zProcess a POST command. Arguments: - data: bytes object, iterable or file containing the article Returns: - resp: server response if successfulZPOST)r)rdatarrrpostsz_NNTPBase.postcCs|jdj||S)a Process an IHAVE command. Arguments: - message_id: message-id of the article - data: file containing the article Returns: - resp: server response if successful Note that if the server refuses the article an exception is raised.z IHAVE {0})rrS)rr$rrrrihavesz_NNTPBase.ihavecCs|jj|`dS)N)r^r)rrrrrps z_NNTPBase._closec Cs%z|jd}Wd|jX|S)zdProcess a QUIT command and close the socket. Returns: - resp: server response if successfulZQUITN)rrp)rr{rrrrms z_NNTPBase.quitc Csi|jrtdn| r5| r5tdny[|r| rddl}|j}|j|j}|r|d}|d}qnWntk rYnX|sdS|jd|}|jdr|st|q|jd|}|jdst |qnd|_ |j |j red |j kre|j d|_ |j ndS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrHzauthinfo user Z381zauthinfo pass Z281r\)rgrnetrcZauthenticatorsr]rnrrArrrbrcrdre)ruserpasswordusenetrcrZ credentialsZauthr{rrrlogins<           z_NNTPBase.logincCsty|jd|_WnWtk r*YnFtk ro}z&|jjdrZd|_nWYdd}~XnXdS)Nz mode readerZ480T)rrarrr rArd)rerrrres  z_NNTPBase._setreadermodecCs|jrtdn|jr0tdn|jd}|jdr|jjt|j||j |_|jj d|_d|_d|_ |j n t ddS) zzProcess a STARTTLS command. Arguments: - context: SSL context to use for the encrypted connection zTLS is already enabled.z+TLS cannot be started after authentication.STARTTLSZ382rwbTNzTLS failed to start.)rfrrgrrAr^rrYrWr]makefilerbrcr)rrXr{rrrstarttlss      z_NNTPBase.starttls)9rrrrrrr rjrqrtrcr~debugrrrr`rrrrrrrxrrrrrrr rrrrrr!rrrrrrrrrrrrrrrprmrre _have_sslrrrrrrZ(sj .      .                 ) rZc@s:eZdZeddddeddZddZdS)rNFc Cs||_||_tj||f||_d}yQ|jjd}tj||||||sm|r|j|||nWn+|r|j n|jj YnXdS)a,Initialize an instance. Arguments: - host: hostname to connect to - port: port to connect to (default the standard NNTP port) - user: username to authenticate with - password: password to use with username - readermode: if true, send 'mode reader' command after connecting. - usenetrc: allow loading username and password from ~/.netrc file if not specified explicitly - timeout: timeout (in seconds) used for socket connections readermode is sometimes necessary if you are connecting to an NNTP server on the local machine and intend to call reader-specific commands, such as `group'. If you get unexpected NNTPPermanentErrors, you might need to set readermode. Nr) r]portsocketcreate_connectionrWrrZr rr) rr]rrrrhrrir^rrrr s      z NNTP.__init__c Cs&ztj|Wd|jjXdS)N)rZrprWr)rrrrrp!sz NNTP._close)rrr NNTP_PORTrr rprrrrrs  "c @s=eZdZedddddeddZddZdS)NNTP_SSLNFc Cstj||f||_d} yot|j|||_|jjd} tj|| |d|d||sy|r|j|||nWn+| r| jn|jjYnXdS)zThis works identically to NNTP.__init__, except for the change in default port and the `ssl_context` argument for SSL connections. Nrrhri) rrrWrYrrZr rr) rr]rrrZ ssl_contextrhrrir^rrrr +s    zNNTP_SSL.__init__c Cs&ztj|Wd|jjXdS)N)rZrprWr)rrrrrpAszNNTP_SSL._close)rrr NNTP_SSL_PORTrr rprrrrr)s  r__main__rzJ nntplib built-in demo - display the latest articles in a newsgroupz-gz--groupdefaultzgmane.comp.python.generalrz3group to fetch messages from (default: %(default)s)z-sz--serverznews.gmane.orgz+NNTP server hostname (default: %(default)s)z-pz--portr0typez#NNTP port number (default: %s / %s)z-nz --nb-articles z2number of articles to fetch (default: %(default)s)z-Sz--sslaction store_truezuse NNTP over SSLr]rrZGroupZhaszarticles, rangeZtocCs1t||kr-|d|dd}n|S)NrIz...)r6)sZlimrrrcutlsrZauthorrrrSrmrrrrs&                -              !   )lib64/python3.4/__pycache__/mimetypes.cpython-34.pyc000064400000040647152342604300016114 0ustar00 h f-Q@sdZddlZddlZddlZddlZyddlZWnek r`dZYnXddddddgZ d d d d d ddddg Z da da GdddZ dddZdddZdddZdddZdddZddZddZeedkrddlZdZdd d!Zy5ejejd"dd#d$d%d&g\ZZWn5ejk rZzed"eWYddZ[XnXd"ZdZxWeD]O\Z Z!e d0kredqe d1kr dZqe d2krd"ZqqWxeD]|Z"erhee"eZ#e#s[e$d-e"qe$e#q*ee"e\Z#Z%e#se$d-e"q*e$d.e#d/e%q*WndS)3aGuess the MIME type of a file. This module defines two useful functions: guess_type(url, strict=True) -- guess the MIME type and encoding of a URL. guess_extension(type, strict=True) -- guess the extension for a given MIME type. It also contains the following, for tuning the behavior: Data: knownfiles -- list of files to parse inited -- flag set when init() has been called suffix_map -- dictionary mapping suffixes to suffixes encodings_map -- dictionary mapping suffixes to encodings types_map -- dictionary mapping suffixes to types Functions: init([files]) -- parse a list of files, default knownfiles (on Windows, the default values are taken from the registry) read_mime_types(file) -- parse one file, return a dictionary or None N guess_typeguess_extensionguess_all_extensionsadd_typeread_mime_typesinitz/etc/mime.typesz/etc/httpd/mime.typesz/etc/httpd/conf/mime.typesz/etc/apache/mime.typesz/etc/apache2/mime.typesz$/usr/local/etc/httpd/conf/mime.typesz"/usr/local/lib/netscape/mime.typesz/usr/local/etc/mime.typesFc@seZdZdZfdddZdddZdddZdd d Zdd d Zdd dZ dddZ dddZ dS) MimeTypeszMIME-types datastore. This datastore can handle information from mime.types-style files and supports basic determination of MIME type from a filename or URL, and can guess a reasonable extension given a MIME type. TcCststntj|_tj|_iif|_iif|_x-tjD]\}}|j||dqYWx-t jD]\}}|j||dqWx|D]}|j ||qWdS)NTF) initedr encodings_mapcopy suffix_map types_map types_map_invitemsr common_typesread)self filenamesstrictexttypenamer./opt/alt/python34/lib64/python3.4/mimetypes.py__init__@s  zMimeTypes.__init__cCsJ||j||<|j|j|g}||krF|j|ndS)aAdd a mapping between a type and an extension. When the extension is already known, the new type will replace the old one. When the type is already known the extension will be added to the list of known extensions. If strict is true, information will be added to list of standard types, else to the list of non-standard types. N)r r setdefaultappend)rrrrZextsrrrrNs  zMimeTypes.add_typec Cstjj|\}}|dkr|jd}|dkrCd S|jdd|}|dkrw|d|}n|d|}d|ksd|krd}n|dfStj|\}}x3||jkrtj||j|\}}qW||jkr1|j|} tj|\}}nd} |jd } || kr^| || fS|j | kr| |j | fS|rd| fS|jd } || kr| || fS|j | kr| |j | fSd| fSdS) a:Guess the type of a file based on its URL. Return value is a tuple (type, encoding) where type is None if the type can't be guessed (no or unknown suffix) or a string of the form type/subtype, usable for a MIME Content-type header; and encoding is None for no encoding or the name of the program used to encode (e.g. compress or gzip). The mappings are table driven. Encoding suffixes are case sensitive; type suffixes are first tried case sensitive, then case insensitive. The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped to '.tar.gz'. (This is table-driven too, using the dictionary suffix_map.) Optional `strict' argument when False adds a bunch of commonly found, but non-standard types. data,rN;=/z text/plainTF)NN) urllibparseZ splittypefind posixpathsplitextr r r lower) rurlrschemeZcommaZsemirbaserencodingr rrrr_s@     $      zMimeTypes.guess_typecCsr|j}|jdj|g}|snx@|jdj|gD]"}||krE|j|qEqEWn|S)aGuess the extensions for a file based on its MIME type. Return value is a list of strings giving the possible filename extensions, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. TF)r'rgetr)rrr extensionsrrrrrs   zMimeTypes.guess_all_extensionscCs$|j||}|sdS|dS)a Guess the extension for a file based on its MIME type. Return value is a string giving a filename extension, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. Nr)r)rrrr-rrrrs zMimeTypes.guess_extensionc Cs/t|dd}|j||WdQXdS)z Read a single mime.types-format file, specified by pathname. If strict is true, information will be added to list of standard types, else to the list of non-standard types. r+zutf-8N)openreadfp)rfilenamerfprrrrszMimeTypes.readc Csx|j}|sPn|j}x?tt|D]+}||ddkr8||d=Pq8q8W|ssqn|d|dd}}x%|D]}|j|d||qWqWdS)z Read a single mime.types-format file. If strict is true, information will be added to list of standard types, else to the list of non-standard types. r#N.)readlinesplitrangelenr) rr1rlineZwordsirsuffixesZsuffrrrr/s    zMimeTypes.readfpcCsts dSdd}tjtjd}x||D]}yttj||\}|jdsnw;ntj|d\}}|tjkrw;n|j|||WdQXWq;tk rw;Yq;Xq;WWdQXdS)z Load the MIME types database from Windows registry. If strict is true, information will be added to list of standard types, else to the list of non-standard types. Nc ss[d}xNytj||}Wntk r4PYnXd|krI|Vn|d7}q WdS)Nrr3)_winregZEnumKeyEnvironmentError)Zmimedbr:Zctyperrr enum_typess  z3MimeTypes.read_windows_registry..enum_typesr4z Content Type)r=OpenKeyZHKEY_CLASSES_ROOT startswithZ QueryValueExZREG_SZrr>)rrr?ZhkcrZ subkeynameZsubkeyZmimetypeZdatatyperrrread_windows_registrys   zMimeTypes.read_windows_registryN) __name__ __module__ __qualname____doc__rrrrrrr/rCrrrrr8s > rTcCs&tdkrtntj||S)aGuess the type of a file based on its URL. Return value is a tuple (type, encoding) where type is None if the type can't be guessed (no or unknown suffix) or a string of the form type/subtype, usable for a MIME Content-type header; and encoding is None for no encoding or the name of the program used to encode (e.g. compress or gzip). The mappings are table driven. Encoding suffixes are case sensitive; type suffixes are first tried case sensitive, then case insensitive. The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped to ".tar.gz". (This is table-driven too, using the dictionary suffix_map). Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)_dbrr)r(rrrrr s  cCs&tdkrtntj||S)aGuess the extensions for a file based on its MIME type. Return value is a list of strings giving the possible filename extensions, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)rHrr)rrrrrr$s  cCs&tdkrtntj||S)aGuess the extension for a file based on its MIME type. Return value is a string giving a filename extension, including the leading dot ('.'). The extension is not guaranteed to have been associated with any particular data stream, but would be mapped to the MIME type `type' by guess_type(). If no extension can be guessed for `type', None is returned. Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. N)rHrr)rrrrrr5s  cCs)tdkrtntj|||S)aiAdd a mapping between a type and an extension. When the extension is already known, the new type will replace the old one. When the type is already known the extension will be added to the list of known extensions. If strict is true, information will be added to list of standard types, else to the list of non-standard types. N)rHrr)rrrrrrrEs  cCsdat}|dkr7tr.|jnt}nx0|D](}tjj|r>|j|q>q>W|j a |j a |j da |j da |a dS)NTF)r rr=rC knownfilesospathisfilerr r r rrH)filesdbfilerrrrVs         cCs^yt|}Wntk r(dSYnX|)t}|j|d|jdSWdQXdS)NT)r.OSErrorrr/r )rOfrNrrrrjs   cCs idd6dd6dd6dd6dd6d d 6aid d 6d d6dd6dd6ai~dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6dd#6d$d%6dd&6d'd(6d)d(6d*d+6d,d-6d.d/6dd06d1d26d1d36d4d56d6d76dd86d9d:6dd;6d<d=6d>d?6dd@6dAdB6dCdD6dCdE6dFdG6dHdI6dJdK6dJdL6dJdM6dNdO6ddP6dQdR6dSdT6dUdV6dUdW6dXdY6dZd[6d6d\6d6d]6d^d_6d`da6dbdc6ddde6dddf6dgdh6dSdi6dSdj6dSdk6dSdl6dmdn6d)do6d6dp6ddq6ddr6dsdt6dudv6dwdx6dydz6d{d|6dud}6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d`d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6d1d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6aiddM6dd6dd6dd6dd6dd6dd6dd6adS)Nz.svg.gzz.svgzz.tar.gzz.tgzz.tazz.tzz.tar.bz2z.tbz2z.tar.xzz.txzZgzipz.gzcompressz.ZZbzip2z.bz2Zxzz.xzzapplication/octet-streamz.azapplication/postscriptz.aiz audio/x-aiffz.aifz.aifcz.aiffz audio/basicz.auzvideo/x-msvideoz.aviz text/plainz.batzapplication/x-bcpioz.bcpioz.binzimage/x-ms-bmpz.bmpz.czapplication/x-cdfz.cdfzapplication/x-netcdfzapplication/x-cpioz.cpiozapplication/x-cshz.cshztext/cssz.cssz.dllzapplication/mswordz.docz.dotzapplication/x-dviz.dvizmessage/rfc822z.emlz.epsz text/x-setextz.etxz.exez image/gifz.gifzapplication/x-gtarz.gtarz.hzapplication/x-hdfz.hdfz text/htmlz.htmz.htmlzimage/vnd.microsoft.iconz.icoz image/iefz.iefz image/jpegz.jpez.jpegz.jpgzapplication/javascriptz.jsz.kshzapplication/x-latexz.latexz video/mpegz.m1vzapplication/vnd.apple.mpegurlz.m3uz.m3u8zapplication/x-troff-manz.manzapplication/x-troff-mez.mez.mhtz.mhtmlzapplication/x-mifz.mifzvideo/quicktimez.movzvideo/x-sgi-moviez.moviez audio/mpegz.mp2z.mp3z video/mp4z.mp4z.mpaz.mpez.mpegz.mpgzapplication/x-troff-msz.msz.ncz.nwsz.oz.objzapplication/odaz.odazapplication/x-pkcs12z.p12zapplication/pkcs7-mimez.p7czimage/x-portable-bitmapz.pbmzapplication/pdfz.pdfz.pfxzimage/x-portable-graymapz.pgmz.plz image/pngz.pngzimage/x-portable-anymapz.pnmzapplication/vnd.ms-powerpointz.potz.ppazimage/x-portable-pixmapz.ppmz.ppsz.pptz.psz.pwzz text/x-pythonz.pyzapplication/x-python-codez.pycz.pyoz.qtzaudio/x-pn-realaudioz.razapplication/x-pn-realaudioz.ramzimage/x-cmu-rasterz.raszapplication/xmlz.rdfz image/x-rgbz.rgbzapplication/x-troffz.roffz text/richtextz.rtxz text/x-sgmlz.sgmz.sgmlzapplication/x-shz.shzapplication/x-sharz.sharz.sndz.sozapplication/x-wais-sourcez.srczapplication/x-sv4cpioz.sv4cpiozapplication/x-sv4crcz.sv4crcz image/svg+xmlz.svgzapplication/x-shockwave-flashz.swfz.tzapplication/x-tarz.tarzapplication/x-tclz.tclzapplication/x-texz.texzapplication/x-texinfoz.texiz.texinfoz image/tiffz.tifz.tiffz.trztext/tab-separated-valuesz.tsvz.txtzapplication/x-ustarz.ustarz text/x-vcardz.vcfz audio/x-wavz.wavz.wizz.wsdlzimage/x-xbitmapz.xbmzapplication/vnd.ms-excelz.xlbzapplication/excelz.xlsztext/xmlz.xmlz.xpdlzimage/x-xpixmapz.xpmz.xslzimage/x-xwindowdumpz.xwdzapplication/zipz.zipz image/jpgz audio/midiz.midz.midiz image/pictz.pctz.picz.pictzapplication/rtfz.rtfztext/xulz.xul)r r r rrrrr_default_mime_typesus(   rS__main__a4Usage: mimetypes.py [options] type Options: --help / -h -- print this message and exit --lenient / -l -- additionally search of some common, but non-standard types. --extension / -e -- guess extension instead of type More than one type argument may be given. r@cCs.tt|rt|ntj|dS)N)printUSAGEsysexit)codemsgrrrusage5s  r[r3ZhlehelpZlenient extension-h--help-l --lenient-e --extensionz I don't know anything about typeztype:z encoding:)r^r_)r`ra)rbrc)&rGrJrWr%Z urllib.parser"winregr= ImportError__all__rIr rHrrrrrrrrSrDZgetoptrVr[argvZoptsargserrorrZrr]ZoptargZgtypeZguessrUr+rrrrst                    lib64/python3.4/__pycache__/runpy.cpython-34.pyo000064400000017111152342604300015257 0ustar00 e f@*@smdZddlZddlZddlZddlZddlmZmZddgZ Gddde Z Gdd d e Z dddddd d Z dddddd d ZddZdddZdddddZddZddZddddZedkrieejdkrKeddejqiejd=eejdndS)aZrunpy.py - locating and running Python code using the module namespace Provides support for locating and running Python scripts using the Python module namespace instead of the native filesystem. This allows Python code to play nicely with non-filesystem based PEP 302 importers when locating support scripts as well as when importing modules. N) read_code get_importer run_modulerun_pathc@s:eZdZdZddZddZddZdS) _TempModulezCTemporarily replace a module in sys.modules with an empty namespacecCs(||_tj||_g|_dS)N)mod_nametypes ModuleTypemodule _saved_module)selfrr */opt/alt/python34/lib64/python3.4/runpy.py__init__s z_TempModule.__init__c CsM|j}y|jjtj|Wntk r8YnX|jtj|<|S)N)rr appendsysmodulesKeyErrorr )r rr r r __enter__s  z_TempModule.__enter__cGs=|jr#|jdtj|js(         r3c Csu|dkr|n|j}t|B}t|-|jj}t|||||||WdQXWdQX|jS)z5Helper to run code in new namespace with sys modifiedN)r)rrr __dict__r3copy) r-r.rr/r0r1r2 temp_module mod_globalsr r r_run_module_codeXs   r8cCsytjj|}Wn[ttttfk rs}z/d}t|j|t|||WYdd}~XnX|dkrtd|n|j dk r)|dks|j drtdny|d}t |SWq)tk r%}ztdd||fWYdd}~Xq)Xn|j }|dkrQtd|n|j |}|dkrtd |n|||fS) Nz*Error while finding spec for {!r} ({}: {})zNo module named %s__main__z .__main__z%Cannot use package as __main__ modulez%s; %r is a package and cannot zbe directly executedz0%r is a namespace package and cannot be executedzNo code object available for %s) importlibutil find_spec ImportErrorAttributeError TypeError ValueErrorformattypesubmodule_search_locationsendswith_get_module_detailsr(get_code)rspecZexmsgZ pkg_main_nameer(r-r r rrEfs07  *    rETcCsy@|s|dkr-t|\}}}nt\}}}Wnktk r}zK|rjt|}ndtjd}dtj|f}tj|WYdd}~XnXtjdj }|r|j tjd.rFZimpZ NullImporterTr0r1) rpartitionrrBrr isinstancerXr8rrRinsertrJrrr r4r3r5remover@) Z path_namer.rQr0ZimporterZis_NullImporterr-r2rr/r6r7r r rrs0        # r9z!No module specified for executionfile)rrimportlib.machineryr:importlib.utilrZpkgutilrr__all__rrrr3r8rErPrrJrXrrlenr!printstderrr r r rs4      !%  1  lib64/python3.4/__pycache__/pkgutil.cpython-34.pyo000064400000042300152342604300015557 0ustar00 e fR @sdZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl Z ddddd d d d d ddg Z ddZddZddddd Zdddd ZedddZdddZejejjeddZGdd d ZGdd d Zy?ddlZddlmZddd ZejeeWnek rYnXd!dZdd"dZd#dZ d$dZ!d%dZ"d&d Z#dS)'zUtilities to support packages.)singledispatchN) ModuleType get_importeriter_importers get_loader find_loader walk_packages iter_modulesget_data ImpImporter ImpLoader read_code extend_pathc Csby |j}WnDtk rS|j|}|dkr<dStjj||SYn X||SdS)z'Return the finder-specific module spec.N) find_specAttributeError find_module importlibutilspec_from_loader)findernamerloaderr,/opt/alt/python34/lib64/python3.4/pkgutil.py _get_specs   rcCsKddl}|jd}|tjjkr1dS|jd|j|S)Nr)marshalreadrr MAGIC_NUMBERload)streamrmagicrrrr "s   c #siddxt||D]\}}}|||fV|ryt|WnXtk r}|dk ry||nYqtk r|dk r||nYqXttj|ddpg}fdd|D}t||d|DdHqqWdS)aYields (module_loader, name, ispkg) for all modules recursively on path, or, if path is None, all accessible modules. 'path' should be either None or a list of paths to look for modules in. 'prefix' is a string to output on the front of every module name on output. Note that this function must import all *packages* (NOT all modules!) on the given path, in order to access the __path__ attribute to find submodules. 'onerror' is a function which gets called with one argument (the name of the package which was being imported) if any exception occurs while trying to import a package. If no onerror function is supplied, ImportErrors are caught and ignored, while all other exceptions are propagated, terminating the search. Examples: # list all modules python can access walk_packages() # list all submodules of ctypes walk_packages(ctypes.__path__, ctypes.__name__+'.') cSs||krdSd||.seenN__path__cs"g|]}|s|qSrr).0r$)r&rr cs z!walk_packages...)r __import__ ImportError Exceptiongetattrsysmodulesr)pathprefixonerrorimporterrispkgr)r&rr/s      ccs|dkrt}ntt|}i}xU|D]M}xDt||D]3\}}||krJd||<|||fVqJqJWq4WdS)a&Yields (module_loader, name, ispkg) for all submodules on path, or, if path is None, all top-level modules on sys.path. 'path' should be either None or a list of paths to look for modules in. 'prefix' is a string to output on the front of every module name on output. N)rmapriter_importer_modules)r1r2Z importersyieldedirr5rrrr hs     cCs t|dsgS|j|S)Nr )hasattrr )r4r2rrrr8sr8c cs|jdks%tjj|j r)dSi}ddl}ytj|j}Wntk rkg}YnX|jx|D]}|j|}|dks}||krq}ntjj|j|}d}| rctjj|rcd|krc|}ytj|} Wntk r&g} YnXx9| D]+}|j|} | dkr.d}Pq.q.Wq}n|r}d|kr}d||<|||fVq}q}WdS)Nr__init__Fr*Tr6) r1osisdirinspectlistdirOSErrorsort getmodulenamejoin) r4r2r9r? filenamesfnmodnamer1r5 dircontentssubnamerrr_iter_file_finder_moduless<%     %     rJc Cs6tj$tjdttjdaWdQXdS)Nignoreimp)warningscatch_warnings simplefilterPendingDeprecationWarningr import_modulerLrrrr _import_imps rRc@sCeZdZdZdddZdddZddd ZdS) r aPEP 302 Importer that wraps Python's "classic" import algorithm ImpImporter(dirname) produces a PEP 302 importer that searches that directory. ImpImporter(None) produces a PEP 302 importer that searches the current sys.path, plus any modules that are frozen or built-in. Note that ImpImporter does not currently support being used by placement on sys.meta_path. NcCs$tjdtt||_dS)Nz5This emulation is deprecated, use 'importlib' instead)rMwarnDeprecationWarningrRr1)selfr1rrrr<s zImpImporter.__init__c Cs|jdd}||kr2|jdkr2dS|jdkrJd}ntjj|jg}ytj||\}}}Wntk rdSYnXt||||S)Nr*r6)splitr1r=realpathrLrr,r )rUfullnamer1rIfilefilenameetcrrrrs   zImpImporter.find_moduler#c cs|jdks%tjj|j r)dSi}ddl}ytj|j}Wntk rkg}YnX|jx|D]}|j|}|dks}||krq}ntjj|j|}d}| rctjj|rcd|krc|}ytj|} Wntk r&g} YnXx9| D]+}|j|} | dkr.d}Pq.q.Wq}n|r}d|kr}d||<|||fVq}q}WdS)Nrr<Fr*Tr6) r1r=r>r?r@rArBrCrD) rUr2r9r?rErFrGr1r5rHrIrrrr s<%     %     zImpImporter.iter_modules)__name__ __module__ __qualname____doc__r<rr rrrrr s c@seZdZdZdZZddZddZddZd d Z d d Z d dZ dddZ dddZ ddZdddZdS)r zBPEP 302 Loader that wraps Python's "classic" import algorithm NcCs?tjdtt||_||_||_||_dS)Nz5This emulation is deprecated, use 'importlib' instead)rMrSrTrRrZr[rYr\)rUrYrZr[r\rrrr< s    zImpLoader.__init__c CsP|jz%tj||j|j|j}Wd|jrK|jjnX|S)N)_reopenrL load_modulerZr[r\close)rUrYmodrrrrbs  % zImpLoader.load_modulecCs&t|d}|jSWdQXdS)Nrb)openr)rUpathnamerZrrrr szImpLoader.get_datacCs|jr||jjr||jd}|tjkrIt|jd|_q||tjtjfkr|t|jd|_q|ndS)Nrre) rZclosedr\rL PY_SOURCErfr[ PY_COMPILED C_EXTENSION)rUmod_typerrrra!s  zImpLoader._reopencCsG|dkr|j}n+||jkrCtd|j|fn|S)Nz,Loader for module %s cannot handle module %s)rYr,)rUrYrrr _fix_name)s   zImpLoader._fix_namecCs#|j|}|jdtjkS)Nrh)ror\rL PKG_DIRECTORY)rUrYrrr is_package1szImpLoader.is_packagec Cs|j|}|jdkr|jd}|tjkrd|j|}t||jd|_q|tjkr|j zt |j |_Wd|j j Xq|tj kr|jj|_qn|jS)Nrhexec)rocoder\rLrk get_sourcecompiler[rlrar rZrcrp _get_delegateget_code)rUrYrnsourcerrrrw5s  zImpLoader.get_codec Cs|j|}|jdkr|jd}|tjkrn|jz|jj|_Wd|jjXq|tj krt j j |j ddrt|j ddd}|j|_WdQXqq|tjkr|jj|_qn|jS)Nrhr6rirVrV)rorxr\rLrkrarZrrcrlr=r1existsr[rfrprvrt)rUrYrnfrrrrtFs  zImpLoader.get_sourcecCs%t|j}t|d}|jS)Nr<)r r[rr)rUrspecrrrrvXszImpLoader._get_delegatecCsd|j|}|jd}|tjkr;|jjS|tjtjtjfkr`|j SdS)Nrh) ror\rLrprv get_filenamerkrlrmr[)rUrYrnrrrr|]s zImpLoader.get_filename)r]r^r_r`rsrxr<rbr rarorqrwrtrvr|rrrrr s       ) zipimporterc csRttj|j}|j}t|}i}ddl}x|D]}|j|s_qDn||djt j }t|dkr|djdr|d|krd||d<|ddfVqnt|dkrqDn|j |d}|dkrqDn|rDd|krD||krDd||<||dfVqDqDWdS) Nrrhr6z __init__.pyTr<r*F) sorted zipimport_zip_directory_cachearchiver2lenr? startswithrWr=seprC) r4r2ZdirlistZ_prefixZplenr9r?rFrGrrriter_zipimport_modulesks*    %  rcCs}ytj|}Wnetk rxxPtjD]?}y$||}tjj||PWq+tk riYq+Xq+Wd}YnX|S)a Retrieve a PEP 302 importer for the given path item The returned importer is cached in sys.path_importer_cache if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a rescan of sys.path_hooks is necessary. N)r/path_importer_cacheKeyError path_hooks setdefaultr,)Z path_itemr4 path_hookrrrrs      ccs|jdr-dj|}t|nd|kr|jdd}tj|}t|dd}|dkrdSntjDdHtj }x|D]}t |VqWdS)aYield PEP 302 importers for the given module name If fullname contains a '.', the importers will be for the package containing fullname, otherwise they will be all registered top level importers (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. If no module name is specified, all top level importers are produced. r*z'Relative module name {!r} not supportedrr'N) rformatr, rpartitionrrQr.r/ meta_pathr1r)rYmsgZpkg_nameZpkgr1itemrrrrs      cCs|tjkr/tj|}|dkr/dSnt|tr|}t|dd}|dk rf|St|dddkrdS|j}n|}t|S)aGet a PEP 302 "loader" object for module_or_name Returns None if the module cannot be found or imported. If the named module is not already imported, its containing package (if any) is imported, in order to establish the package __path__. N __loader____spec__)r/r0 isinstancerr.r]r)Zmodule_or_namemodulerrYrrrrs    cCs|jdr-dj|}t|nytjj|}Wn[ttttfk r}z/d}t|j|t |||WYdd}~XnX|dk r|j SdS)zFind a PEP 302 "loader" object for fullname This is a backwards compatibility wrapper around importlib.util.find_spec that converts most failures to ImportError and only returns the loader rather than the full spec r*z'Relative module name {!r} not supportedz,Error while finding loader for {!r} ({}: {})N) rrr,rrrr TypeError ValueErrortyper)rYrr{Zexrrrrs7cCs:t|ts|S|d}|dd}|jd\}}}|rytj|j}Wqttfk r}|SYqXn tj}x|D]}t|t sqnt |}|dk r`g} t |dr |j |} | dk r0| j pg} q0n't |dr0|j|\}} nx-| D]"} | |kr7|j| q7q7Wntjj||} tjj| ryt| } Wn?tk r}ztjjd| |fWYdd}~Xq2X| NxF| D]>}|jd}| s|jdrqn|j|qWWdQXqqW|S) aExtend a package's path. Intended use is to place the following code in a package's __init__.py: from pkgutil import extend_path __path__ = extend_path(__path__, __name__) This will add to the package's __path__ all subdirectories of directories on sys.path named after the package. This is useful if one wants to distribute different parts of a single logical package as multiple directories. It also looks for *.pkg files beginning where * matches the name argument. This feature is similar to *.pth files (see site.py), except that it doesn't special-case lines starting with 'import'. A *.pkg file is trusted at face value: apart from checking for duplicates, all entries found in a *.pkg file are added to the path, regardless of whether they are exist the filesystem. (This is a feature.) If the input path is not a list (as is the case for frozen packages) it is returned unchanged. The input path is not modified; an extended copy is returned. Items are only appended to the copy at the end. It is assumed that sys.path is a sequence. Items of sys.path that are not (unicode or 8-bit) strings referring to existing directories are ignored. Unicode items of sys.path that cause errors when used as filenames may cause this function to raise an exception (in line with os.path.isdir() behavior). z.pkgNr*rrzCan't open %s: %s  #)rlistrr/r0r'rrr1strrr;rsubmodule_search_locationsrappendr=rDisfilerfrAstderrwriterstripr)r1rZ sname_pkgZparent_package_Z final_nameZ search_pathdirrportionsr{ZportionZpkgfilerzrlinerrrrsP!          ! cCstjj|}|dkr"dS|j}|dksGt|d rKdStjj|prtjj |j }|dkst|d rdS|j d}|j dt jj|jt jj|}|j|S)afGet a resource from a package. This is a wrapper round the PEP 302 loader get_data API. The package argument should be the name of a package, in standard module format (foo.bar). The resource argument should be in the form of a relative filename, using '/' as the path separator. The parent directory name '..' is not allowed, and nor is a rooted name (starting with a '/'). The function returns a binary string, which is the contents of the specified resource. For packages located in the filesystem, which have already been imported, this is the rough equivalent of d = os.path.dirname(sys.modules[package].__file__) data = open(os.path.join(d, resource), 'rb').read() If the package cannot be located or loaded, or it uses a PEP 302 loader which does not support get_data(), then None is returned. Nr __file__/r)rrrrr;r/r0get _bootstrap _SpecMethodsr rWinsertr=r1dirnamerrDr )packageZresourcer{rrdpartsZ resource_namerrrr Ms  )$r` functoolsrZ simplegenericrimportlib.utilimportlib.machineryr=Zos.pathr/typesrrM__all__rr rr r8rJregister machinery FileFinderrRr r rr}rr,rrrrrr rrrrsJ           9( Jc      ^lib64/python3.4/__pycache__/tty.cpython-34.pyc000064400000002172152342604300014707 0ustar00 e fo@shdZddlTddgZdZdZdZdZdZd Zd Z e d dZ e d dZ d S)zTerminal utilities.)*setraw setcbreakcCst|}|tttBtBtBtB@|t<|tt@|t<|t t t B@|t <|t t B|t <|t ttBtBtB@|t s   lib64/python3.4/__pycache__/functools.cpython-34.pyc000064400000056076152342604300016117 0ustar00 j f_o&@sdZddddddddd d d g Zyd d lmZWnek rUYnXd dlmZd dlmZd dl m Z d dl m Z yd dl mZWnGdddZYnXdQZdRZeeddZeeddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5dZd6dZ yd d7lm Z Wnek rYnXd8d Z!yd d9lm!Z!Wnek rYnXGd:d d e"Z#ed;d<d=d>d?gZ$Gd@dAdAe%Z&e"fe'e(e)e*dBhe+e,e*e-dCdDZ.dEdFdGdZ/dHdIZ0dBdJdKZ1dLdMZ2dNdOZ3dPd Z4dBS)SzEfunctools.py - Tools for working with functions and callable objects update_wrapperwrapsWRAPPER_ASSIGNMENTSWRAPPER_UPDATEStotal_ordering cmp_to_key lru_cachereducepartial partialmethodsingledispatch)r)get_cache_token) namedtuple)MappingProxyType)WeakKeyDictionary)RLockc@s.eZdZdZddZddZdS)rz/Dummy reentrant lock for builds without threadscCsdS)N)selfrr./opt/alt/python34/lib64/python3.4/functools.py __enter__szRLock.__enter__cCsdS)Nr)rexctypeexcinstexctbrrr__exit__szRLock.__exit__N)__name__ __module__ __qualname____doc__rrrrrrrs  rrrrr__annotations____dict__c CsxF|D]>}yt||}Wntk r4YqXt|||qWx0|D](}t||jt||iqPW||_|S)aUpdate a wrapper function to look like the wrapped function wrapper is the function to be updated wrapped is the original function assigned is a tuple naming the attributes assigned directly from the wrapped function to the wrapper function (defaults to functools.WRAPPER_ASSIGNMENTS) updated is a tuple naming the attributes of the wrapper that are updated with the corresponding attribute from the wrapped function (defaults to functools.WRAPPER_UPDATES) )getattrAttributeErrorsetattrupdate __wrapped__)wrapperwrappedassignedupdatedattrvaluerrrr+s   & cCsttd|d|d|S)aDecorator factory to apply update_wrapper() to a wrapper function Returns a decorator that invokes update_wrapper() with the decorated function as the wrapper argument and the arguments to wraps() as the remaining arguments. Default arguments are as for update_wrapper(). This is a convenience function to simplify applying partial() to update_wrapper(). r&r'r()r r)r&r'r(rrrrIs cCs0|j|}|tkrtS| o/||kS)zIReturn a > b. Computed by @total_ordering from (not a < b) and (a != b).)__lt__NotImplemented)rother op_resultrrr _gt_from_ltas r/cCs|j|}|p||kS)zEReturn a <= b. Computed by @total_ordering from (a < b) or (a == b).)r+)rr-r.rrr _le_from_lthsr0cCs$|j|}|tkrtS| S)z=Return a >= b. Computed by @total_ordering from (not a < b).)r+r,)rr-r.rrr _ge_from_ltms r1cCs0|j|}|tkrtS| p/||kS)zJReturn a >= b. Computed by @total_ordering from (not a <= b) or (a == b).)__le__r,)rr-r.rrr _ge_from_lets r3cCs/|j|}|tkrtS|o.||kS)zFReturn a < b. Computed by @total_ordering from (a <= b) and (a != b).)r2r,)rr-r.rrr _lt_from_le{s r4cCs$|j|}|tkrtS| S)z=Return a > b. Computed by @total_ordering from (not a <= b).)r2r,)rr-r.rrr _gt_from_les r5cCs0|j|}|tkrtS| o/||kS)zIReturn a < b. Computed by @total_ordering from (not a > b) and (a != b).)__gt__r,)rr-r.rrr _lt_from_gts r7cCs|j|}|p||kS)zEReturn a >= b. Computed by @total_ordering from (a > b) or (a == b).)r6)rr-r.rrr _ge_from_gtsr8cCs$|j|}|tkrtS| S)z=Return a <= b. Computed by @total_ordering from (not a > b).)r6r,)rr-r.rrr _le_from_gts r9cCs0|j|}|tkrtS| p/||kS)zJReturn a <= b. Computed by @total_ordering from (not a >= b) or (a == b).)__ge__r,)rr-r.rrr _le_from_ges r;cCs/|j|}|tkrtS|o.||kS)zFReturn a > b. Computed by @total_ordering from (a >= b) and (a != b).)r:r,)rr-r.rrr _gt_from_ges r<cCs$|j|}|tkrtS| S)z=Return a < b. Computed by @total_ordering from (not a >= b).)r:r,)rr-r.rrr _lt_from_ges r=csidtfdtfdtfgd6dtfdtfdtfgd6dtfdtfdtfgd6dt fdt fdt fgd6}fdd|D}|st dnt |}x@||D]4\}}||kr||_t||qqWS)z6Class decorator that fills in missing ordering methodsr6r2r:r+cs:g|]0}t|dtt|dk r|qS)N)r object).0op)clsrr s z"total_ordering..z6must define at least one ordering operation: < > <= >=)r/r0r1r3r4r5r7r8r9r;r<r= ValueErrormaxrr")rAconvertrootsrootopnameopfuncr)rArrs,           cs Gfdddt}|S)z,Convert a cmp= function into a key= functioncseZdZdgZddZfddZfddZfdd Zfd d Zfd d Z fddZ dZ dS)zcmp_to_key..KobjcSs ||_dS)N)rJ)rrJrrr__init__szcmp_to_key..K.__init__cs|j|jdkS)Nr )rJ)rr-)mycmprrr+szcmp_to_key..K.__lt__cs|j|jdkS)Nr )rJ)rr-)rLrrr6szcmp_to_key..K.__gt__cs|j|jdkS)Nr )rJ)rr-)rLrr__eq__szcmp_to_key..K.__eq__cs|j|jdkS)Nr )rJ)rr-)rLrrr2szcmp_to_key..K.__le__cs|j|jdkS)Nr )rJ)rr-)rLrrr:szcmp_to_key..K.__ge__cs|j|jdkS)Nr )rJ)rr-)rLrr__ne__szcmp_to_key..K.__ne__N) rrr __slots__rKr+r6rMr2r:rN__hash__r)rLrrKs   rQ)r>)rLrQr)rLrrs)rcs7fdd}|_|_|_|S)zSNew function with partial application of the given arguments and keywords. cs*j}|j|||S)N)copyr#)ZfargsZ fkeywordsZ newkeywords)argsfunckeywordsrrnewfuncs  zpartial..newfunc)rTrSrU)rTrSrUrVr)rSrTrUrr s    )r c@sXeZdZdZddZddZddZdd Zed d Z d S) r zMethod descriptor with partial application of the given arguments and keywords. Supports wrapping existing descriptors and handles non-descriptor callables as instance methods. cOst| r5t|d r5tdj|nt|tr|j|_|j||_|jj |_|jj |n||_||_||_dS)N__get__z${!r} is not callable or a descriptor) callablehasattr TypeErrorformat isinstancer rTrSrUrRr#)rrTrSrUrrrrK s    zpartialmethod.__init__c Cs}djtt|j}djdd|jjD}d}|jd|jjd|jj d|j d|d |S) Nz, css'|]\}}dj||VqdS)z{}={!r}N)r[)r?kvrrr "sz)partialmethod.__repr__..z*{module}.{cls}({func}, {args}, {keywords})modulerArTrSrU) joinmapreprrSrUitemsr[ __class__rrrT)rrSrU format_stringrrr__repr__ s  zpartialmethod.__repr__cs+fdd}j|_|_|S)NcsRjj}|j||^}}|fjt|}j||S)N)rUrRr#rStuplerT)rSrU call_keywords cls_or_selfrest call_args)rrr_method,s   z3partialmethod._make_unbound_method.._method)__isabstractmethod___partialmethod)rrmr)rr_make_unbound_method+s  z"partialmethod._make_unbound_methodc Cst|jdd}d}|dk r|||}||jk rt||j|j}y|j|_Wqtk rYqXqn|dkr|jj||}n|S)NrW) r rTr rSrU__self__r!rprW)rrJrAgetresultnew_funcrrrrW6s    zpartialmethod.__get__cCst|jddS)NrnF)r rT)rrrrrnIsz"partialmethod.__isabstractmethod__N) rrrrrKrgrprWpropertyrnrrrrr s    CacheInfohitsmissesmaxsizecurrsizec@s7eZdZdZdZeddZddZdS) _HashedSeqz This class guarantees that hash() will be called no more than once per element. This is important because the lru_cache() will hash the key multiple times on a cache miss. hashvaluecCs#||dd<|||_dS)N)r|)rtuphashrrrrK]sz_HashedSeq.__init__cCs|jS)N)r|)rrrrrPasz_HashedSeq.__hash__N)rrrrrOr~rKrPrrrrr{Ts r{Nc s|} |rF||j} | |7} x| D]} | | 7} q/Wn|r| |fdd|D7} |r| |fdd| D7} qn0|| dkr| d|kr| dSt| S)aMake a cache key from optionally typed positional and keyword arguments The key is constructed in a way that is flat as possible rather than as a nested structure that would take more memory. If there is only a single argument and its data type is known to cache its hash value, then that argument is returned without a wrapper. This saves space and improves lookup speed. c3s|]}|VqdS)Nr)r?r^)typerrr_ysz_make_key..c3s!|]\}}|VqdS)Nr)r?r]r^)rrrr_{sr )rdr{) rSkwdstypedkwd_mark fasttypessortedrhrlenkey sorted_itemsitemr)rr _make_keyds  #)(rFcswdk r+tt r+tdnttd \fdd}|S) aLeast-recently-used cache decorator. If *maxsize* is set to None, the LRU features are disabled and the cache can grow without bound. If *typed* is True, arguments of different types will be cached separately. For example, f(3.0) and f(3) will be treated as distinct calls with distinct results. Arguments to the cached function must be hashable. View the cache statistics named tuple (hits, misses, maxsize, currsize) with f.cache_info(). Clear the cache and statistics with f.cache_clear(). Access the underlying function with f.__wrapped__. See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used Nz)Expected maxsize to be an integer or Noner rcs>iddjtgddgdd< dkrnfdd}nr dkr fdd}n<  fdd} fdd}fd d }||_||_t|S) Nr Fcs||}d7|S)Nrr)rSrrs)rx user_functionrrr%s z7lru_cache..decorating_function..wrappercsb||}|}|k r;d7|S||}||<d7|S)Nrr)rSrrrs)cache cache_getrwmake_keyrxsentinelrrrrr%s    c s || }|}|dk r|\}}}}||<||< }||< <||< |<d7|SWdQX||}|krnr$ } || <|| <|  } } d < <| =| |.decorating_function..cache_infoc sG;jddgdd.decorating_function..cache_clear)rrrrrr)rr%rr)rrrrrryrr)rrrrwrrxrGrrdecorating_functions"     *<7!  z&lru_cache..decorating_function)r rrr)r\intrZr>r)ryrrr)rrrrrryrrrrs 'lcCsg}xdd|D}|s&|SxJ|D]B}|d}x/|D]&}||ddkrDd}PqDqDWPq-W|dkrtdn|j|x(|D] }|d|kr|d=qqWq WdS)zMerges MROs in *sequences* to a single MRO using the C3 algorithm. Adapted from http://www.python.org/download/releases/2.3/mro/. cSsg|]}|r|qSrr)r?srrrrBs z_c3_merge..r rNzInconsistent hierarchy) RuntimeErrorappend) sequencesrss1 candidates2seqrrr _c3_merges$      rc sxOtt|jD]2\}tdrt|j|}PqqWd}rdtngt|jd|}g}t|j|d}xPD]Ht|rtfdd|jD r|jqqWx|D]j qWfdd|D}fdd|D}fd d|D} t |gg||| |g|g|gS) aComputes the method resolution order using extended C3 linearization. If no *abcs* are given, the algorithm works exactly like the built-in C3 linearization used for method resolution. If given, *abcs* is a list of abstract base classes that should be inserted into the resulting MRO. Unrelated ABCs are ignored and don't end up in the result. The algorithm inserts ABCs where their functionality is introduced, i.e. issubclass(cls, abc) returns True for the class itself but returns False for all its direct base classes. Implicit ABCs for a given class (either registered or inferred from the presence of a special method like __len__) are inserted directly after the last ABC explicitly listed in the MRO of said class. If two implicit ABCs end up next to each other in the resulting MRO, their ordering depends on the order of types in *abcs*. __abstractmethods__r Nc3s|]}t|VqdS)N) issubclass)r?b)baserrr_Osz_c3_mro..cs"g|]}t|dqS)abcs)_c3_mro)r?r)rrrrBVs z_c3_mro..cs"g|]}t|dqS)r)r)r?r)rrrrBWs cs"g|]}t|dqS)r)r)r?r)rrrrBXs ) enumeratereversed __bases__rYrlistranyrremover) rAriboundaryexplicit_basesabstract_bases other_basesexplicit_c3_mrosabstract_c3_mros other_c3_mrosr)rrrr2s("   rcsftjfddfddDfddfddDtg}xD]}g}xU|jD]G}|krt|r|jfdd|jDqqW|s|j|qn|jd td d x;|D]3}x*|D]"}||kr(|j|q(q(WqWqWtd |S) zCalculates the method resolution order for a given class *cls*. Includes relevant abstract base classes (with their respective bases) from the *types* iterable. Uses a modified C3 linearization algorithm. cs(|ko't|do't|S)N__mro__)rYr)typ)basesrArr is_relatedhsz _compose_mro..is_relatedcs"g|]}|r|qSrr)r?n)rrrrBks z _compose_mro..cs4x-D]%}||kr||jkrdSqWdS)NTF)r)rr-)typesrris_strict_basens z$_compose_mro..is_strict_basecs"g|]}|s|qSrr)r?r)rrrrBss cs"g|]}|kr|qSrr)r?r)type_setrrrB|s rreverseTr)setr__subclasses__rrsortrr)rArmrorfoundsubsubclsr)rrArrrrr _compose_mro_s*  *    rcCst||j}d}x|D]}|dk r||kr||jkr||jkrt|| rtdj||nPn||kr"|}q"q"W|j|S)a^Returns the best matching implementation from *registry* for type *cls*. Where there is no registered implementation for a specific type, its method resolution order is used to find a more generic implementation. Note: if *registry* does not contain an implementation for the base *object* type, this function may return None. NzAmbiguous dispatch: {} or {})rkeysrrrr[rr)rAregistryrmatchtrrr _find_impls      rcsitdfdddfddfdd}|t<|_|_t|_j|_t|||S)alSingle-dispatch generic function decorator. Transforms a function into a generic function, which can have different behaviours depending upon the type of its first argument. The decorated function acts as the default implementation, and additional implementations can be registered using the register() attribute of the generic function. Ncsdk r7t}|kr7j|q7ny|}WnNtk ry|}Wn!tk rt|}YnX|| Runs the dispatch algorithm to return the best available implementation for the given *cls* registered on *generic_func*. N)r rKeyErrorr)rA current_tokenimpl) cache_tokendispatch_cacherrrdispatchs       z singledispatch..dispatchcs^|dkrfddS|<dkrPtdrPtnj|S)zgeneric_func.register(cls, func) -> func Registers a new implementation for the given *cls* on a *generic_func*. Ncs |S)Nr)f)rAregisterrrsz2singledispatch..register..r)rYr r)rArT)rrrr)rArrs    z singledispatch..registercs|dj||S)Nr )re)rSkw)rrrr%szsingledispatch..wrapper) rr>rrrrr _clear_cacher)rTr%r)rrrrrrr s       )z __module__z__name__z __qualname__z__doc__z__annotations__)z__dict__)5r__all__ _functoolsr ImportErrorabcr collectionsrrrweakrefr_threadrrrrrr/r0r1r3r4r5r7r8r9r;r<r=rrr r>r rrr{rstr frozensetrrrhrrrrrrrr rrrrsr                    N  - ) lib64/python3.4/__pycache__/socketserver.cpython-34.pyo000064400000055327152342604300016634 0ustar00 j f4_@sJdZdZddlZddlZddlZddlZyddlZWnek rlddlZYnXdddddd d d d d ddg Z e edre j ddddgnddZ GdddZ Gddde ZGdddeZGdddZGdddZGdddeeZGdddeeZGdd d eeZGdd d eeZe edrGd ddeZGd!ddeZGd"ddeeZGd#ddeeZnGd$d d ZGd%d d eZGd&d d eZdS)'aGeneric socket server classes. This module tries to capture the various aspects of defining a server: For socket-based servers: - address family: - AF_INET{,6}: IP (Internet Protocol) sockets (default) - AF_UNIX: Unix domain sockets - others, e.g. AF_DECNET are conceivable (see - socket type: - SOCK_STREAM (reliable stream, e.g. TCP) - SOCK_DGRAM (datagrams, e.g. UDP) For request-based servers (including socket-based): - client address verification before further looking at the request (This is actually a hook for any processing that needs to look at the request before anything else, e.g. logging) - how to handle multiple requests: - synchronous (one request is handled at a time) - forking (each request is handled by a new process) - threading (each request is handled by a new thread) The classes in this module favor the server type that is simplest to write: a synchronous TCP/IP server. This is bad class design, but save some typing. (There's also the issue that a deep class hierarchy slows down method lookups.) There are five classes in an inheritance diagram, four of which represent synchronous servers of four types: +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+ Note that UnixDatagramServer derives from UDPServer, not from UnixStreamServer -- the only difference between an IP and a Unix stream server is the address family, which is simply repeated in both unix server classes. Forking and threading versions of each type of server can be created using the ForkingMixIn and ThreadingMixIn mix-in classes. For instance, a threading UDP server class is created as follows: class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass The Mix-in class must come first, since it overrides a method defined in UDPServer! Setting the various member variables also changes the behavior of the underlying server mechanism. To implement a service, you must derive a class from BaseRequestHandler and redefine its handle() method. You can then run various versions of the service by combining one of the server classes with your request handler class. The request handler class must be different for datagram or stream services. This can be hidden by using the request handler subclasses StreamRequestHandler or DatagramRequestHandler. Of course, you still have to use your head! For instance, it makes no sense to use a forking server if the service contains state in memory that can be modified by requests (since the modifications in the child process would never reach the initial state kept in the parent process and passed to each child). In this case, you can use a threading server, but you will probably have to use locks to avoid two requests that come in nearly simultaneous to apply conflicting changes to the server state. On the other hand, if you are building e.g. an HTTP server, where all data is stored externally (e.g. in the file system), a synchronous class will essentially render the service "deaf" while one request is being handled -- which may be for a very long time if a client is slow to read all the data it has requested. Here a threading or forking server is appropriate. In some cases, it may be appropriate to process part of a request synchronously, but to finish processing in a forked child depending on the request data. This can be implemented by using a synchronous server and doing an explicit fork in the request handler class handle() method. Another approach to handling multiple simultaneous requests in an environment that supports neither threads nor fork (or where these are too expensive or inappropriate for the service) is to maintain an explicit table of partially finished requests and to use select() to decide which request to work on next (or whether to handle a new incoming request). This is particularly important for stream services where each client can potentially be connected for a long time (if threads or subprocesses cannot be used). Future work: - Standard classes for Sun RPC (which uses either UDP or TCP) - Standard mix-in classes to implement various authentication and encryption schemes - Standard framework for select-based multiplexing XXX Open problems: - What to do with out-of-band data? BaseServer: - split generic "request" functionality out into BaseServer class. Copyright (C) 2000 Luke Kenneth Casson Leighton example: read entries from a SQL database (requires overriding get_request() to return a table entry from the database). entry is processed by a RequestHandlerClass. z0.4N BaseServer TCPServer UDPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerThreadingMixIn ForkingMixInAF_UNIXUnixStreamServerUnixDatagramServerThreadingUnixStreamServerThreadingUnixDatagramServercGsYxRy||SWqtk rP}z|jtjkr>nWYdd}~XqXqWdS)z*restart a system call interrupted by EINTRN)OSErrorerrnoZEINTR)funcargser1/opt/alt/python34/lib64/python3.4/socketserver.py _eintr_retrys rc@seZdZdZdZddZddZddd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!ZdS)"raBase class for server classes. Methods for the caller: - __init__(server_address, RequestHandlerClass) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you do not use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - server_close() - process_request(request, client_address) - shutdown_request(request) - close_request(request) - service_actions() - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - allow_reuse_address Instance variables: - RequestHandlerClass - socket NcCs.||_||_tj|_d|_dS)z/Constructor. May be extended, do not override.FN)server_addressRequestHandlerClass threadingZEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfrrrrr__init__s  zBaseServer.__init__cCsdS)zSCalled by constructor to activate the server. May be overridden. Nr)r rrrserver_activateszBaseServer.server_activateg?c Cs|jjz^xW|jsittj|ggg|\}}}||kr\|jn|jqWWdd|_|jjXdS)zHandle one request at a time until shutdown. Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread. NF)rclearrrselect_handle_request_noblockservice_actionsset)r Z poll_intervalrwrrrr serve_forevers     zBaseServer.serve_forevercCsd|_|jjdS)zStops the serve_forever loop. Blocks until the loop has finished. This must be called while serve_forever() is running in another thread, or it will deadlock. TN)rrwait)r rrrshutdowns zBaseServer.shutdowncCsdS)zCalled by the serve_forever() loop. May be overridden by a subclass / Mixin to implement any code that needs to be run during the loop. Nr)r rrrr&szBaseServer.service_actionscCs|jj}|dkr'|j}n$|jdk rKt||j}nttj|ggg|}|ds|jdS|jdS)zOHandle one request, possibly blocking. Respects self.timeout. Nr)socketZ gettimeouttimeoutminrr$handle_timeoutr%)r r.Zfd_setsrrrhandle_requests    zBaseServer.handle_requestcCsy|j\}}Wntk r.dSYnX|j||ry|j||Wq|j|||j|YqXndS)zHandle one request, without blocking. I assume that select.select has returned that the socket is readable before this function was called, so there should be no risk of blocking in get_request(). N) get_requestrverify_requestprocess_request handle_errorshutdown_request)r requestclient_addressrrrr%$s  z"BaseServer._handle_request_noblockcCsdS)zcCalled if no new request arrives within self.timeout. Overridden by ForkingMixIn. Nr)r rrrr06szBaseServer.handle_timeoutcCsdS)znVerify the request. May be overridden. Return True if we should proceed with this request. Tr)r r7r8rrrr3=szBaseServer.verify_requestcCs!|j|||j|dS)zVCall finish_request. Overridden by ForkingMixIn and ThreadingMixIn. N)finish_requestr6)r r7r8rrrr4EszBaseServer.process_requestcCsdS)zDCalled to clean-up the server. May be overridden. Nr)r rrr server_closeNszBaseServer.server_closecCs|j|||dS)z8Finish one request by instantiating RequestHandlerClass.N)r)r r7r8rrrr9VszBaseServer.finish_requestcCs|j|dS)z3Called to shutdown and close an individual request.N) close_request)r r7rrrr6ZszBaseServer.shutdown_requestcCsdS)z)Called to clean up an individual request.Nr)r r7rrrr;^szBaseServer.close_requestcCsPtddtdddt|ddl}|jtdddS)ztHandle an error gracefully. May be overridden. The default is to print a traceback and continue. -(z4Exception happened during processing of request fromend rN)print traceback print_exc)r r7r8rArrrr5bs    zBaseServer.handle_error)__name__ __module__ __qualname____doc__r.r!r"r*r,r&r1r%r0r3r4r:r9r6r;r5rrrrrs" +           c@seZdZdZejZejZdZ dZ dddZ ddZ d d Z d d Zd dZddZddZddZdS)ra3Base class for various socket-based server classes. Defaults to synchronous IP stream (i.e., TCP). Methods for the caller: - __init__(server_address, RequestHandlerClass, bind_and_activate=True) - serve_forever(poll_interval=0.5) - shutdown() - handle_request() # if you don't use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - handle_timeout() - verify_request(request, client_address) - process_request(request, client_address) - shutdown_request(request) - close_request(request) - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - timeout - address_family - socket_type - request_queue_size (only for stream sockets) - allow_reuse_address Instance variables: - server_address - RequestHandlerClass - socket FTc Csktj|||tj|j|j|_|rgy|j|jWqg|jYqgXndS)z/Constructor. May be extended, do not override.N)rr!r-address_family socket_type server_bindr"r:)r rrZbind_and_activaterrrr!s   zTCPServer.__init__cCsQ|jr(|jjtjtjdn|jj|j|jj|_dS)zOCalled by constructor to bind the socket. May be overridden. N)allow_reuse_addressr- setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsockname)r rrrrJs zTCPServer.server_bindcCs|jj|jdS)zSCalled by constructor to activate the server. May be overridden. N)r-Zlistenrequest_queue_size)r rrrr"szTCPServer.server_activatecCs|jjdS)zDCalled to clean-up the server. May be overridden. N)r-close)r rrrr:szTCPServer.server_closecCs |jjS)zMReturn socket file number. Interface required by select(). )r-fileno)r rrrrPszTCPServer.filenocCs |jjS)zYGet the request and client address from the socket. May be overridden. )r-Zaccept)r rrrr2szTCPServer.get_requestc Cs:y|jtjWntk r(YnX|j|dS)z3Called to shutdown and close an individual request.N)r,r-ZSHUT_WRrr;)r r7rrrr6s  zTCPServer.shutdown_requestcCs|jdS)z)Called to clean up an individual request.N)rO)r r7rrrr;szTCPServer.close_requestN)rCrDrErFr-ZAF_INETrHZ SOCK_STREAMrIrNrLr!rJr"r:rPr2r6r;rrrrrps -       c@s[eZdZdZdZejZdZddZ ddZ dd Z d d Z d S) rzUDP server class.Fi cCs.|jj|j\}}||jf|fS)N)r-Zrecvfrommax_packet_size)r dataZ client_addrrrrr2szUDPServer.get_requestcCsdS)Nr)r rrrr"szUDPServer.server_activatecCs|j|dS)N)r;)r r7rrrr6szUDPServer.shutdown_requestcCsdS)Nr)r r7rrrr;szUDPServer.close_requestN) rCrDrErFrLr-Z SOCK_DGRAMrIrQr2r"r6r;rrrrrs     c@sXeZdZdZdZdZdZddZddZd d Z d d Z dS) r z5Mix-in class to handle each request in a new process.i,Nr=c Cs&|jdkrdSxt|j|jkry,tjdd\}}|jj|Wqtk rnYqtk r|jjYqt k rPYqXqWx||jj D]k}y/tj|tj \}}|jj|Wqtk r |jj|Yqt k rYqXqWdS)z7Internal routine to wait for children that have exited.NrKr) active_childrenlen max_childrenoswaitpiddiscardInterruptedErrorChildProcessErrorr#rcopyWNOHANG)r pid_rrrcollect_childrens(      zForkingMixIn.collect_childrencCs|jdS)znWait for zombies after self.timeout seconds of inactivity. May be extended, do not override. N)r`)r rrrr04szForkingMixIn.handle_timeoutcCs|jdS)zCollect the zombie child processes regularly in the ForkingMixIn. service_actions is called in the BaseServer's serve_forver loop. N)r`)r rrrr&;szForkingMixIn.service_actionscCstj}|rQ|jdkr0t|_n|jj||j|dSy.|j|||j|tjdWn:z!|j |||j|WdtjdXYnXdS)z-Fork a new subprocess to process the request.NrrK) rWforkrTr'addr;r9r6_exitr5)r r7r8r^rrrr4Bs    zForkingMixIn.process_request) rCrDrErFr.rTrVr`r0r&r4rrrrr s  $  c@s4eZdZdZdZddZddZdS)r z4Mix-in class to handle each request in a new thread.Fc CsMy!|j|||j|Wn%|j|||j|YnXdS)zgSame as in BaseServer but as a thread. In addition, exception handling is done here. N)r9r6r5)r r7r8rrrprocess_request_threadbs z%ThreadingMixIn.process_request_threadcCs;tjd|jd||f}|j|_|jdS)z*Start a new thread to process the request.targetrN)rZThreadrddaemon_threadsZdaemonstart)r r7r8trrrr4os zThreadingMixIn.process_requestN)rCrDrErFrfrdr4rrrrr [s  c@seZdZdS)rN)rCrDrErrrrrws c@seZdZdS)rN)rCrDrErrrrrxs c@seZdZdS)rN)rCrDrErrrrrzs c@seZdZdS)rN)rCrDrErrrrr{s c@seZdZejZdS)rN)rCrDrEr-rrHrrrrrs c@seZdZejZdS)rN)rCrDrEr-rrHrrrrrs c@seZdZdS)rN)rCrDrErrrrrs c@seZdZdS)rN)rCrDrErrrrrs c@sFeZdZdZddZddZddZdd Zd S) r aBase class for request handler classes. This class is instantiated for each request to be handled. The constructor sets the instance variables request, client_address and server, and then calls the handle() method. To implement a specific service, all you need to do is to derive a class which defines a handle() method. The handle() method can find the request as self.request, the client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method can define arbitrary other instance variariables. c CsE||_||_||_|jz|jWd|jXdS)N)r7r8serversetuphandlefinish)r r7r8rirrrr!s    zBaseRequestHandler.__init__cCsdS)Nr)r rrrrjszBaseRequestHandler.setupcCsdS)Nr)r rrrrkszBaseRequestHandler.handlecCsdS)Nr)r rrrrlszBaseRequestHandler.finishN)rCrDrErFr!rjrkrlrrrrr s   c@sFeZdZdZd ZdZdZdZddZdd Z dS) r z4Define self.rfile and self.wfile for stream sockets.rKrNFcCs|j|_|jdk r1|jj|jn|jrY|jjtjtjdn|jj d|j |_ |jj d|j |_ dS)NTrbwb)r7Z connectionr.Z settimeoutdisable_nagle_algorithmrMr-Z IPPROTO_TCPZ TCP_NODELAYmakefilerbufsizerfilewbufsizewfile)r rrrrjs  zStreamRequestHandler.setupc CsV|jjs8y|jjWq8tjk r4Yq8Xn|jj|jjdS)N)rtclosedflushr-errorrOrr)r rrrrls  zStreamRequestHandler.finishrS) rCrDrErFrqrsr.rorjrlrrrrr s   c@s.eZdZdZddZddZdS)r z6Define self.rfile and self.wfile for datagram sockets.cCsGddlm}|j\|_|_||j|_||_dS)Nr)BytesIO)iorxr7Zpacketr-rrrt)r rxrrrrjszDatagramRequestHandler.setupcCs#|jj|jj|jdS)N)r-Zsendtortgetvaluer8)r rrrrlszDatagramRequestHandler.finishN)rCrDrErFrjrlrrrrr s  )rF __version__r-r$rWrr ImportErrorZdummy_threading__all__hasattrextendrrrrr r rrrrrrrrr r r rrrrxsF           ~S.+lib64/python3.4/__pycache__/pprint.cpython-34.pyc000064400000026304152342604300015406 0ustar00 e fG:@s&dZddlZddlZddlmZddlmZ ddddd d gZ dd d dd dddZ d d dd dddZ dd Z ddZddZGdddZddZGdd d ZddZddZdddZedkr"endS) a/Support to pretty-print lists, tuples, & dictionaries recursively. Very simple, but useful, especially in debugging data structures. Classes ------- PrettyPrinter() Handle pretty-printing operations onto a stream using a configured set of formatting parameters. Functions --------- pformat() Format a Python object into a pretty-printed representation. pprint() Pretty-print a Python object to a stream [default is sys.stdout]. saferepr() Generate a 'standard' repr()-like value, but protect against recursive data structures. N) OrderedDict)StringIOpprintpformat isreadable isrecursivesaferepr PrettyPrinterPcompactFc Cs8td|d|d|d|d|}|j|dS)zAPretty-print a Python object to a stream [default is sys.stdout].streamindentwidthdepthr N)r r)objectr rrrr Zprinterr+/opt/alt/python34/lib64/python3.4/pprint.pyr.s c Cs(td|d|d|d|j|S)z= 0Nzdepth must be > 0zwidth must be != 0) intAssertionError_depth_indent_per_level_width_stream_sysstdoutbool_compact)rrrrr r rrrrfs  $      zPrettyPrinter.__init__cCs3|j||jddid|jjddS)Nr )_formatr.write)rrrrrrszPrettyPrinter.pprintcCs/t}|j||ddid|jS)Nr) _StringIOr4getvalue)rrsiorrrrs zPrettyPrinter.pformatcCs|j|idddS)Nrr)format)rrrrrrszPrettyPrinter.isrecursivecCs,|j|idd\}}}|o+| S)Nr)r9)rrsreadable recursiverrrrs!zPrettyPrinter.isreadablecCsv|d}t|}||krK|jt|d|_d|_dS|j|||d}t|} |jd||} t|| k} |j} | rht | dd} t | t rt| d|j dkr| |j ddnt|}|rfd||<||j }t | t rEt|j}nt|jdt}|d\}}|j|||}| || d |j|||t|d |d|||dkrOx||ddD]g\}}|j|||}| d d||f|j|||t|d |d||qWn||j }||=n| d dSt | tr| tjkst | tr| tjkst | tr| tjkst | trS| tjkrSt|}t | tr| d d}nt | tr<| dd}ny|sP| |dS| tkro| dd }n4| | j| dd}|t| jd7}t|dt}|j dkr| |j ddn|rd||<|j||||j |d||||=nt | trE|dkrE| dn| |dSt | trht|dkrh| tjkrhg}|jd}|dkr|d7}| d 8} nx t|D]\}}t|}t|| kr|j|qtj d|dg}d}xt!dt|d D]i}||||d}||}tt|| kr|r|jt|n|}q:|}q:W|r|jt|qqWt|dkr| |dS|dkr| dnxEt|D]7\}}|dkr:| dd|n| |q W|dkra| dndSn| |dS)Nr TF__repr__{ keyrz: rz, %s%s: }[]()z({z}),z(\s+)r3)"rr5 _recursion _recursive _readable_reprrr-lengetattr issubclassdictr, _OrderedDictlistitemssortedr(r4r=tupleset frozensetr"r _format_itemsr splitlines enumeratereprappendresplitrange)rrr r allowancecontextlevelobjidreptyp max_widthZsepLinesr5rZlengthrRr@entZendcharZchunkslinesilinepartsZcurrentpart candidaterrrr4s                                  0             zPrettyPrinter._formatcCs|j}dd|}d} |j||d} } x|D]} |jr|j| ||} t| d}| |kr| } | r|} qn| |kr| |8} || d} || q=qn|| |} |j| |||||q=WdS)Nz, r?rGrz, )r5r-r2rKrLr4)rrRr rr_r`rar5ZdelimnlZdelimrrergrcwrrrrWs*           zPrettyPrinter._format_itemscCsR|j||j|j|\}}}|s<d|_n|rNd|_n|S)NFT)r9copyr+rJrI)rrr`rarZr;r<rrrrK+s  zPrettyPrinter._reprcCst||||S)zFormat object for a specific context, returning a string and flags indicating whether the representation is 'readable' and whether the object represents a recursive construct. )r)rrr` maxlevelsrarrrr94szPrettyPrinter.format) r"r#r$rrrrrr4rWrKr9rrrrr es #     z  c!Cs6t|}|tkrdtjkr:t|ddfSd|krhd|krhd}idd6}nd}idd6}|j}t}|j} xJ|D]B} | jr| | q| || t| ddqWd ||j |fddfSt |d d} t |t r| t j kr|s=dSt|} |rn||krnd d| |kfS| |krt|ddfSd|| s         '                    rcCsdt|jt|fS)Nz)rr"r)rrrrrHsrHcCsddl}|dkrHddddgidd6d d 6fgd }nt}|j}t|idd|j}|j||j}td ||td ||dS)Nrstringr riz _safe_repr:zpformat:)r r)timer rrprint)rrpZt1Zt2Zt3rrr _perfchecks  0     r__main__)r%r\sysr/ collectionsrrPiorr6__all__rrrrrrr(r rrHrr"rrrr#s(        U  lib64/python3.4/__pycache__/ntpath.cpython-34.pyo000064400000031771152342604300015410 0ustar00 e fO&@sNdZddlZddlZddlZddlZddlTdddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)g&Zd*Zd+Zd*Zd,Z d-Z d.Z d/Z d0ej krd1Z nd2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdZdBdZdCdZdDdZdEdZdFdZdGd Zejje_dHd ZdId ZdJdZ dKdZ!yddLl"m#Z#Wne$k rdZ#YnXdMdZ%dNdZ&dOdZ'dPdZ(yddQl"m)Z)Wne$k rzdRdZ*Yn XdSdZ*e*Z+e,edToej-dUdVkZ.edWd&Z/y9ej-ddVd]krddYl"m0Z0ne$Wn$e1e$fk r dZd[Z0YnXydd\l"m2Z3Wne$k rIYnXdS)^zCommon pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. N)*normcaseisabsjoin splitdrivesplitsplitextbasenamedirname commonprefixgetsizegetmtimegetatimegetctimeislinkexistslexistsisdirisfileismount expanduser expandvarsnormpathabspathsplitunccurdirpardirseppathsepdefpathaltsepextsepdevnullrealpathsupports_unicode_filenamesrelpathsamefile sameopenfilesamestat.z..\;/z.;C:\binZcez\WindowsZnulcCst|trdSdSdS)N) isinstancebytes)pathr2+/opt/alt/python34/lib64/python3.4/ntpath.py _get_empty#sr4cCst|trdSdSdS)Ns\r*)r/r0)r1r2r2r3_get_sep)sr5cCst|trdSdSdS)N/r,)r/r0)r1r2r2r3 _get_altsep/sr7cCst|trdSdSdS)Ns\/z\/)r/r0)r1r2r2r3 _get_bothseps5sr8cCst|trdSdSdS)N.r))r/r0)r1r2r2r3_get_dot;sr:cCst|trdSdSdS)N::)r/r0)r1r2r2r3 _get_colonAsr=cCst|trdSdSdS)N\\.\\\?\\\.\\\?\)r>r?)r@rA)r/r0)r1r2r2r3 _get_specialGsrBcCsUt|ttfs3tdj|jjn|jt|t |j S)zaNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes.z2normcase() argument must be str or bytes, not '{}') r/r0str TypeErrorformat __class____name__replacer7r5lower)sr2r2r3rQs cCs<t|d}t|dko;|ddt|kS)zTest whether a path is absoluterN)rlenr8)rJr2r2r3rasc GsIt|}t|}t|}t|\}}x|D]}t|\}} | r| d|kr|sx| r|}n| }q=nE|r||kr|j|jkr|}| }q=n|}n|r|d|kr||}n|| }q=W|rA|d|krA|rA|dd|krA|||S||S)NrrKrM)r5r8r=rrI) r1pathsrsepsZcolonZ result_driveZ result_pathpZp_driveZp_pathr2r2r3rhs0         cCsJt|}t|dkr@t|}|jt||}|dd|dkr|dd|kr|j|d}|dkr||fS|j||d}||dkr||fS|dkrt|}n|d|||dfS|ddt|kr@|dd|ddfSn||fS)aSplit a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. rKrNrMrM)r4rLr5rHr7findr=)rPemptyrZnormpindexZindex2r2r2r3rs"  0    !cCsaddl}|jdtdt|\}}t|dkrW|dd|fS||fS)aDeprecated since Python 3.1. Please use splitdrive() instead; it now handles UNC paths. Split a pathname into UNC mount point and relative path specifiers. Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. Paths containing drive letters never have an UNC part. rNzs0 %   "cCsyt|trtd|kr7td|kr7|Sddl}t|j|jdd}d}d}d }d }ttd d}n]d|krd|kr|Sddl}|j|jd}d }d}d }d}tj}|dd}d} t |} xf| | krt|| | d} | |kr|| dd}t |} y/|j | } || |d| d7}Wqgt k r|| |7}| d} YqgXn| |kr|| d| d|kr|| 7}| d7} qg|| dd}t |} y|j |} Wn*t k rZ|||7}| d} YqgX|d| } y<|dkrtj tjtj | } n || } Wn tk r|| |} YnX|| 7}n| |kr]|| d| d|kr|| 7}| d7} qg|| d| d|krs|| dd}t |} y4t|trz|j d} n|j d} WnJt k rt|tr|d|7}n|d|7}| d} YqZX|d| } y<|dkrtj tjtj | } n || } Wn@tk ret|trSd| d} nd| d} YnX|| 7}qg|dd} | d7} || | d} x>| r| |kr| | 7} | d7} || | d} qWy<|dkrtj tjtj | } n || } Wntk r<|| } YnX|| 7}| rg| d8} qgn || 7}| d7} qW|S)zfExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.$%rNz_-asciis'%{$environb'{rKrQ}}s${z${)r/r0ordstringZ ascii_lettersZdigitsgetattrr`rprLrU ValueErrorfsencodefsdecoderq)r1rZvarcharsZquoteZpercentZbraceZdollarrpresrUZpathlencvarvaluer2r2r3ros$              "        "      "   cCst|}t|d}t|}|j|r;|S|jt||}t|\}}|j|r||7}|j|}n|j|}d}x|t |kr||| s||t|kr||=q|||kro|dkr7||d|kr7||d|d=|d8}qy|dkrb|j t|rb||=qy|d7}q|d7}qW| r| r|j t|n||j |S)z0Normalize path, eliminating double slashes, etc.rQrrK) r5r:rBrorHr7rlstriprrLendswithappendr)r1rdotdotZspecial_prefixesprefixcompsr[r2r2r3rs4   !   !  )_getfullpathnamecCsRt|sHt|tr*tj}n tj}t||}nt|S)z&Return the absolute version of a path.)rr/r0r`getcwdbgetcwdrr)r1cwdr2r2r3rs   c Csb|r.yt|}WqXtk r*YqXXn*t|trLtj}n tj}t|S)z&Return the absolute version of a path.)rrbr/r0r`rrr)r1r2r2r3rs  getwindowsversionrRrQcCst|}|tkr't|}n|s<tdntt|}tt|}t|\}}t|\}}t|t|krdj||} t| ndd|j |D} dd|j |D} d} xCt | | D]2\} }t| t|kr3Pn| d7} q Wt |t rYd}nd }|gt | | | | d }|st|St|S) z#Return a relative version of a pathzno path specifiedz,path is on mount '{0}', start on mount '{1}'cSsg|]}|r|qSr2r2).0xr2r2r3 Es zrelpath..cSsg|]}|r|qSr2r2)rrr2r2r3rFs rrKs..z..N)r5rr:rrrrrrErzipr/r0rLr)r1startrZ start_absZpath_absZ start_driveZ start_restZ path_driveZ path_resterror start_list path_listr[Ze1Ze2rrel_listr2r2r3r%2s6    % )_getfinalpathnamecCstt|S)N)rr)fr2r2r3resr)_isdir)rr)4__doc__r`rsrdr^__all__rrr!rrr rbuiltin_module_namesr"r4r5r7r8r:r=rBrrrrrrrr_r r rrntrh ImportErrorrrrrrrr#hasattrrr$r%rrcrrr2r2r2r3s               # -          1 w )  '  lib64/python3.4/__pycache__/pickletools.cpython-34.pyc000064400000211156152342604300016423 0ustar00 e frfO@sdZddlZddlZddlZddlZddlZdddgZejZd Zd Z d Z d Z d Z Gd d d e Zdd lmZddZedddddeddZddZedddddeddZddZedddd deddZddZedd dd dedd!Zd"d#Zedd$dd%dedd&Zd'd'd(d)Zedd*dededd+Zd,d-Zedd.dededd/Zd0d1Z edd2dede dd3Z!d4d5Z"edd6de de"dd7Z#d8d9Z$edd:de de$dd;Z%d<d=Z&edd>de de&dd?Z'd@d=Z&edd>de de&ddAZ'dBdCZ(eddDde de(ddEZ)dFdGZ*eddHde de*ddIZ+dJdKZ,eddLdede,ddMZ-dNdOZ.eddPde de.ddQZ/dRdSZ0eddTde de0ddUZ1dVdWZ2eddXde de2ddYZ3dZd[Z4d\d]Z5edd^dede4dd_Z6edd`dede5ddaZ7dbdcZ8eddddede8ddeZ9dfdgZ:eddhdd%de:ddiZ;ddjlm<Z<dkdlZ=eddmde de=ddnZ>dodpZ?eddqde de?ddrZ@Gdsdtdte ZAeAddudveBddwZCZDeAddxdveBeEfddyZFeAddzdveEdd{ZGeAdd|dveHdd}ZIeAdd~dveJeKfddZLZMeAdddveJddZNeAdddveKddZOeAdddvePdddZQeAdddveRddZSeAdddveTddZUeAdddveVddZWeAdddveXddZYeAdddveXddZZeAdddve ddZ[eAdddveAddZ\eAdddveAddZ]Gddde Z^e^Z_e_ddddde6dgdeFgdddde_dddddedgdeCgdddde_dddddedgdeCgdddde_dddddedgdeCgdddde_ddddde7dgdeCgdddde_ddddde>dgdeCgdddde_ddddde@dgdeCgdddde_dddddedgdeLgdddde_ddddde%dgdeLgdddde_ddddde#dgdeLgdddde_ddddde)dgdeNgdddde_ddddde'dgdeNgdddde_ddddde+dgdeNgdd dde_dddddddgdeQgdddde_dddddddgdeGgdddde_dddddddgdeGgdddde_ddddde-dgdeOgdddde_ddddde/dgdeOgdd dde_ddddde1dgdeOgdddde_ddddde3dgdeOgdd dde_ddddde9dgdeIgdddde_ddddde;dgdeIgdddde_dddddddgdeUgdddde_dddddddeUe[gdeUgdddde_dddddddeUe\e]gdeUgdddde_ddddddde\e]gdeUgdddde_dddddddgdeSgdddde_ddddddde\e]gdeSgdddde_ddddddde[gdeSgdddde_ddddddde[e[gdeSgdddde_ddddddde[e[e[gdeSgdddde_dddddddgdeWgdddde_ddddddde\e]gdeWgdddde_dddddddeWe[e[gdeWgdddde_dddddddeWe\e]gdeWgdddde_dddddddgdeYgdd dde_dd dd dddeYe\e]gdeYgdd dd e_dd dd ddde\e]gdeZgdd dde_ddddddde[gdgdddde_ddddddde[gde[e[gdddde_dddddddgde\gdddde_ddddddde\e]gdgdddde_ddddde6dgde[gdddde_dddddedgde[gdddd e_dd!dd"dedgde[gdddd#e_dd$dd%de6dgdgdddd&e_dd'dd(dedgdgdddd)e_dd*dd+dedgdgdddd,e_dd-dd.ddde[gde[gdd dd/e_dd0dd1dedgde[gdddd2e_dd3dd4dedgde[gdddd5e_dd6dd7dedgde[gdddd8e_dd9dd:de!dgde[gdddd;e_dd<dd=dddeOeOgde[gdd dd>e_dd?dd@ddde[e[gde[gddddAe_ddBddCddde[e[gde[gddddDe_ddEddFde!de\e]gde[gddddGe_ddHddIddde\e[e]gde[gddddJe_ddKddLddde[e[gde[gddddMe_ddNddOddde[e[e[gde[gdd ddPe_ddQddRdedgdgddddSe_ddTddUddde[gdgddddVe_ddWddXdedgdgdd ddYe_ddZdd[dedgde[gdddd\e_dd]dd^ddde[gde[gdddd_gAZ`[_iZaiZbxece`D]\ZdZeeejfeakregd`eejfeaeejfedfneejhebkregdaeejhebeejhedfnedeaeejf>> import io >>> read_uint1(io.BytesIO(b'\xff')) 255 rrz'not enough data in stream to read uint1N)read ValueError)fdatarrr read_uint1sr%r uint1r r rzOne-byte unsigned integer.cCsB|jd}t|dkr2td|dStddS)z >>> import io >>> read_uint2(io.BytesIO(b'\xff\x00')) 255 >>> read_uint2(io.BytesIO(b'\xff\xff')) 65535 rz>> import io >>> read_int4(io.BytesIO(b'\xff\x00\x00\x00')) 255 >>> read_int4(io.BytesIO(b'\x00\x00\x00\x80')) == -(2**31) True rz>> import io >>> read_uint4(io.BytesIO(b'\xff\x00\x00\x00')) 255 >>> read_uint4(io.BytesIO(b'\x00\x00\x00\x80')) == 2**31 True rz>> import io >>> read_uint8(io.BytesIO(b'\xff\x00\x00\x00\x00\x00\x00\x00')) 255 >>> read_uint8(io.BytesIO(b'\xff' * 8)) == 2**64-1 True z>> import io >>> read_stringnl(io.BytesIO(b"'abcd'\nefg\n")) 'abcd' >>> read_stringnl(io.BytesIO(b"\n")) Traceback (most recent call last): ... ValueError: no string quotes around b'' >>> read_stringnl(io.BytesIO(b"\n"), stripquotes=False) '' >>> read_stringnl(io.BytesIO(b"''\n")) '' >>> read_stringnl(io.BytesIO(b'"abcd"')) Traceback (most recent call last): ... ValueError: no newline found when trying to read stringnl Embedded escapes are undone in the result. >>> read_stringnl(io.BytesIO(br"'a\n\\b\x00c\td'" + b"\n'e'")) 'a\n\\b\x00c\td' s z-no newline found when trying to read stringnlNr"'z,strinq quote %r not found at both ends of %rzno string quotes around %rrascii)r2r3r5)readlineendswithr" startswithcodecs escape_decodedecode)r#r; stripquotesr$qrrr read_stringnl;s   r>stringnlzA newline-terminated string. This is a repr-style string, with embedded escapes, and bracketing quotes. cCst|ddS)Nr<F)r>)r#rrrread_stringnl_noescapetsr@stringnl_noescapeaA newline-terminated string. This is a str-style string, without embedded escapes, or bracketing quotes. It should consist solely of printable ASCII characters. cCsdt|t|fS)zp >>> import io >>> read_stringnl_noescape_pair(io.BytesIO(b"Queue\nEmpty\njunk")) 'Queue Empty' z%s %s)r@)r#rrrread_stringnl_noescape_pairsrBstringnl_noescape_pairaA pair of newline-terminated strings. These are str-style strings, without embedded escapes, or bracketing quotes. They should consist solely of printable ASCII characters. The pair is returned as a single string, with a single blank separating the two strings. cCslt|}|dkst|j|}t||krL|jdStd|t|fdS)z >>> import io >>> read_string1(io.BytesIO(b"\x00")) '' >>> read_string1(io.BytesIO(b"\x03abcdef")) 'abc' rzlatin-1z2expected %d bytes in a string1, but only %d remainN)r%rr!r'r;r")r#r r$rrr read_string1s  rDstring1zA counted string. The first argument is a 1-byte unsigned int giving the number of bytes in the string, and the second argument is that many bytes. cCsyt|}|dkr+td|n|j|}t||krY|jdStd|t|fdS)aP >>> import io >>> read_string4(io.BytesIO(b"\x00\x00\x00\x00abc")) '' >>> read_string4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) 'abc' >>> read_string4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) Traceback (most recent call last): ... ValueError: expected 50331648 bytes in a string4, but only 6 remain rzstring4 byte count < 0: %dzlatin-1z2expected %d bytes in a string4, but only %d remainN)r+r"r!r'r;)r#r r$rrr read_string4s   rFstring4zA counted string. The first argument is a 4-byte little-endian signed int giving the number of bytes in the string, and the second argument is that many bytes. cCsct|}|dkst|j|}t||krC|Std|t|fdS)z >>> import io >>> read_bytes1(io.BytesIO(b"\x00")) b'' >>> read_bytes1(io.BytesIO(b"\x03abcdef")) b'abc' rz1expected %d bytes in a bytes1, but only %d remainN)r%rr!r'r")r#r r$rrr read_bytes1s rHbytes1zA counted bytes string. The first argument is a 1-byte unsigned int giving the number of bytes in the string, and the second argument is that many bytes. cCsct|}|dkst|j|}t||krC|Std|t|fdS)z >>> import io >>> read_bytes1(io.BytesIO(b"\x00")) b'' >>> read_bytes1(io.BytesIO(b"\x03abcdef")) b'abc' rz1expected %d bytes in a bytes1, but only %d remainN)r%rr!r'r")r#r r$rrrrHs zA counted bytes string. The first argument is a 1-byte unsigned int giving the number of bytes, and the second argument is that many bytes. cCst|}|dkst|tjkr@td|n|j|}t||kre|Std|t|fdS)aN >>> import io >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x00abc")) b'' >>> read_bytes4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) b'abc' >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) Traceback (most recent call last): ... ValueError: expected 50331648 bytes in a bytes4, but only 6 remain rz#bytes4 byte count > sys.maxsize: %dz1expected %d bytes in a bytes4, but only %d remainN)r-rsysmaxsizer"r!r')r#r r$rrr read_bytes4s rLbytes4zA counted bytes string. The first argument is a 4-byte little-endian unsigned int giving the number of bytes, and the second argument is that many bytes. cCst|}|dkst|tjkr@td|n|j|}t||kre|Std|t|fdS)a >>> import io, struct, sys >>> read_bytes8(io.BytesIO(b"\x00\x00\x00\x00\x00\x00\x00\x00abc")) b'' >>> read_bytes8(io.BytesIO(b"\x03\x00\x00\x00\x00\x00\x00\x00abcdef")) b'abc' >>> bigsize8 = struct.pack(">> read_bytes8(io.BytesIO(bigsize8 + b"abcdef")) #doctest: +ELLIPSIS Traceback (most recent call last): ... ValueError: expected ... bytes in a bytes8, but only 6 remain rz#bytes8 byte count > sys.maxsize: %dz1expected %d bytes in a bytes8, but only %d remainN)r0rrJrKr"r!r')r#r r$rrr read_bytes83s rNbytes8zA counted bytes string. The first argument is a 8-byte little-endian unsigned int giving the number of bytes, and the second argument is that many bytes. cCsG|j}|jds*tdn|dd}t|dS)zm >>> import io >>> read_unicodestringnl(io.BytesIO(b"abc\\uabcd\njunk")) == 'abc\uabcd' True s z4no newline found when trying to read unicodestringnlNrzraw-unicode-escaper5)r6r7r"r)r#r$rrrread_unicodestringnlUs  rPunicodestringnlzA newline-terminated Unicode string. This is raw-unicode-escape encoded, so consists of printable ASCII characters, and may contain embedded escape sequences. cCsot|}|dkst|j|}t||krOt|ddStd|t|fdS)a >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc)]) # little-endian 1-byte length >>> t = read_unicodestring1(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring1(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring1, but only 6 remain rzutf-8 surrogatepassz9expected %d bytes in a unicodestring1, but only %d remainN)r%rr!r'rr")r#r r$rrrread_unicodestring1os rSunicodestring1aAA counted Unicode string. The first argument is a 1-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. cCst|}|dkst|tjkr@td|n|j|}t||krqt|ddStd|t|fdS)a >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc), 0, 0, 0]) # little-endian 4-byte length >>> t = read_unicodestring4(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring4(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring4, but only 6 remain rz+unicodestring4 byte count > sys.maxsize: %dzutf-8rRz9expected %d bytes in a unicodestring4, but only %d remainN)r-rrJrKr"r!r'r)r#r r$rrrread_unicodestring4s rUunicodestring4aAA counted Unicode string. The first argument is a 4-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. cCst|}|dkst|tjkr@td|n|j|}t||krqt|ddStd|t|fdS)a >>> import io >>> s = 'abcd\uabcd' >>> enc = s.encode('utf-8') >>> enc b'abcd\xea\xaf\x8d' >>> n = bytes([len(enc)]) + bytes(7) # little-endian 8-byte length >>> t = read_unicodestring8(io.BytesIO(n + enc + b'junk')) >>> s == t True >>> read_unicodestring8(io.BytesIO(n + enc[:-1])) Traceback (most recent call last): ... ValueError: expected 7 bytes in a unicodestring8, but only 6 remain rz+unicodestring8 byte count > sys.maxsize: %dzutf-8rRz9expected %d bytes in a unicodestring8, but only %d remainN)r0rrJrKr"r!r'r)r#r r$rrrread_unicodestring8s rWunicodestring8aAA counted Unicode string. The first argument is a 8-byte little-endian signed int giving the number of bytes in the string, and the second argument-- the UTF-8 encoding of the Unicode string -- contains that many bytes. cCsBt|dddd}|dkr(dS|dkr8dSt|S)z >>> import io >>> read_decimalnl_short(io.BytesIO(b"1234\n56")) 1234 >>> read_decimalnl_short(io.BytesIO(b"1234L\n56")) Traceback (most recent call last): ... ValueError: invalid literal for int() with base 10: b'1234L' r;Fr<s00s01T)r>r)r#srrrread_decimalnl_shorts   rZcCsKt|dddd}|dddkrA|dd}nt|S) z >>> import io >>> read_decimalnl_long(io.BytesIO(b"1234L\n56")) 1234 >>> read_decimalnl_long(io.BytesIO(b"123456789012345678901234L\n6")) 123456789012345678901234 r;Fr<rNLr5r5)r>r)r#rYrrrread_decimalnl_longs r\decimalnl_shortaA newline-terminated decimal integer literal. This never has a trailing 'L', and the integer fit in a short Python int on the box where the pickle was written -- but there's no guarantee it will fit in a short Python int on the box where the pickle is read. decimalnl_longzA newline-terminated decimal integer literal. This has a trailing 'L', and can represent integers of any size. cCs"t|dddd}t|S)zO >>> import io >>> read_floatnl(io.BytesIO(b"-1.25\n6")) -1.25 r;Fr<)r>float)r#rYrrr read_floatnl'sr`floatnlaA newline-terminated decimal floating literal. In general this requires 17 significant digits for roundtrip identity, and pickling then unpickling infinities, NaNs, and minus zero doesn't work across boxes, or on some boxes even on itself (e.g., Windows can't read the strings it produces for infinities or NaNs). cCsB|jd}t|dkr2td|dStddS)z >>> import io, struct >>> raw = struct.pack(">d", -1.25) >>> raw b'\xbf\xf4\x00\x00\x00\x00\x00\x00' >>> read_float8(io.BytesIO(raw + b"\n")) -1.25 r/z>drz(not enough data in stream to read float8N)r!r'r(r")r#r$rrr read_float8=s rbfloat8aAn 8-byte binary representation of a float, big-endian. The format is unique to Python, and shared with the struct module (format string '>d') "in theory" (the struct and pickle implementations don't share the code -- they should). It's strongly related to the IEEE-754 double format, and, in normal cases, is in fact identical to the big-endian 754 double format. On other boxes the dynamic range is limited to that of a 754 double, and "add a half and chop" rounding is used to reduce the precision to 53 bits. However, even on a 754 box, infinities, NaNs, and minus zero may not be handled correctly (may not survive roundtrip pickling intact). ) decode_longcCsFt|}|j|}t||kr<tdnt|S)a+ >>> import io >>> read_long1(io.BytesIO(b"\x00")) 0 >>> read_long1(io.BytesIO(b"\x02\xff\x00")) 255 >>> read_long1(io.BytesIO(b"\x02\xff\x7f")) 32767 >>> read_long1(io.BytesIO(b"\x02\x00\xff")) -256 >>> read_long1(io.BytesIO(b"\x02\x00\x80")) -32768 z'not enough data in stream to read long1)r%r!r'r"rd)r#r r$rrr read_long1cs  relong1aA binary long, little-endian, using 1-byte size. This first reads one byte as an unsigned size, then reads that many bytes and interprets them as a little-endian 2's-complement long. If the size is 0, that's taken as a shortcut for the long 0L. cCset|}|dkr+td|n|j|}t||kr[tdnt|S)ag >>> import io >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x00")) 255 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x7f")) 32767 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\xff")) -256 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\x80")) -32768 >>> read_long1(io.BytesIO(b"\x00\x00\x00\x00")) 0 rzlong4 byte count < 0: %dz'not enough data in stream to read long4)r+r"r!r'rd)r#r r$rrr read_long4s  rglong4aA binary representation of a long, little-endian. This first reads four bytes as a signed size (but requires the size to be >= 0), then reads that many bytes and interprets them as a little-endian 2's-complement long. If the size is 0, that's taken as a shortcut for the int 0, although LONG1 should really be used then instead (and in any case where # of bytes < 256). c@s.eZdZd ZddZddZdS) StackObjectr obtypercCst|tst||_t|tsBt|tsBtt|trzx&|D]}t|tsXtqXWn||_t|tst||_dS)N)rrrr typetuplerjr)rr rjrZ containedrrrrs $  zStackObject.__init__cCs|jS)N)r )rrrr__repr__szStackObject.__repr__N)znamezobtypezdoc)rrrrrrmrrrrris  rirrjzA Python integer object.Z int_or_boolz#A Python integer or boolean object.boolzA Python boolean object.r_zA Python float object.Z bytes_or_strz*A Python bytes or (Unicode) string object.byteszA Python bytes object.rz!A Python (Unicode) string object.NonezThe Python None object.rlzA Python tuple object.listzA Python list object.dictzA Python dict object.setzA Python set object. frozensetzA Python frozenset object.anyzAny kind of object whatsoever.markaz'The mark' is a unique object. Opcodes that operate on a variable number of objects generally don't embed the count of objects in the opcode, or pull it off the stack. Instead the MARK opcode is used to push a special marker object on the stack, and then some other opcodes grab all the objects from the top of the stack down to (but not including) the topmost marker object. stacksliceaAn object representing a contiguous slice of the stack. This is used in conjunction with markobject, to represent all of the stack following the topmost markobject. For example, the POP_MARK opcode changes the stack from [..., markobject, stackslice] to [...] No matter how many object are on the stack after the topmost markobject, POP_MARK gets rid of all of them (including the topmost markobject too). c@s"eZdZd Zdd Zd S) OpcodeInfor codearg stack_before stack_afterprotorc Cset|tst||_t|ts3tt|dksKt||_|dksut|tsut||_t|tstx#|D]}t|t stqW||_ t|tstx#|D]}t|t stqW||_ t|t r4d|ko/t jkns:t||_t|tsXt||_dS)Nrr)rrrr r'ryr rzrqrir{r|rpickleZHIGHEST_PROTOCOLr}r) rr ryrzr{r|r}rxrrrrTs&  !     4 zOpcodeInfo.__init__N)znamezcodezargz stack_beforez stack_afterzprotozdoc)rrrrrrrrrrx5s rxZINTryIrzr{r|r}aPush an integer or bool. The argument is a newline-terminated decimal literal string. The intent may have been that this always fit in a short Python int, but INT can be generated in pickles written on a 64-bit box that require a Python long on a 32-bit box. The difference between this and LONG then is that INT skips a trailing 'L', and produces a short int whenever possible. Another difference is due to that, when bool was introduced as a distinct type in 2.3, builtin names True and False were also added to 2.2.2, mapping to ints 1 and 0. For compatibility in both directions, True gets pickled as INT + "I01\n", and False as INT + "I00\n". Leading zeroes are never produced for a genuine integer. The 2.3 (and later) unpicklers special-case these and return bool instead; earlier unpicklers ignore the leading "0" and return the int. ZBININTJa1Push a four-byte signed integer. This handles the full range of Python (short) integers on a 32-bit box, directly as binary bytes (1 for the opcode and 4 for the integer). If the integer is non-negative and fits in 1 or 2 bytes, pickling via BININT1 or BININT2 saves space. ZBININT1KzPush a one-byte unsigned integer. This is a space optimization for pickling very small non-negative ints, in range(256). ZBININT2MzPush a two-byte unsigned integer. This is a space optimization for pickling small positive ints, in range(256, 2**16). Integers in range(256) can also be pickled via BININT2, but BININT1 instead saves a byte. ZLONGLaPush a long integer. The same as INT, except that the literal ends with 'L', and always unpickles to a Python long. There doesn't seem a real purpose to the trailing 'L'. Note that LONG takes time quadratic in the number of digits when unpickling (this is simply due to the nature of decimal->binary conversion). Proto 2 added linear-time (in C; still quadratic-time in Python) LONG1 and LONG4 opcodes. ZLONG1Šz|Long integer using one-byte length. A more efficient encoding of a Python long; the long1 encoding says it all.ZLONG4‹z~Long integer using found-byte length. A more efficient encoding of a Python long; the long4 encoding says it all.STRINGSaPush a Python string object. The argument is a repr-style string, with bracketing quote characters, and perhaps embedded escapes. The argument extends until the next newline character. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. Z BINSTRINGTaPush a Python string object. There are two arguments: the first is a 4-byte little-endian signed int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. ZSHORT_BINSTRINGUaPush a Python string object. There are two arguments: the first is a 1-byte unsigned int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. These are usually decoded into a str instance using the encoding given to the Unpickler constructor. or the default, 'ASCII'. If the encoding given was 'bytes' however, they will be decoded as bytes object instead. ZBINBYTESBzPush a Python bytes object. There are two arguments: the first is a 4-byte little-endian unsigned int giving the number of bytes, and the second is that many bytes, which are taken literally as the bytes content. ZSHORT_BINBYTESCzPush a Python bytes object. There are two arguments: the first is a 1-byte unsigned int giving the number of bytes, and the second is that many bytes, which are taken literally as the string content. Z BINBYTES8ŽzPush a Python bytes object. There are two arguments: the first is a 8-byte unsigned int giving the number of bytes in the string, and the second is that many bytes, which are taken literally as the string content. ZNONENzPush None on the stack.ZNEWTRUEˆz&True. Push True onto the stack.ZNEWFALSE‰z'True. Push False onto the stack.UNICODEVzPush a Python Unicode string object. The argument is a raw-unicode-escape encoding of a Unicode string, and so may contain embedded escape sequences. The argument extends until the next newline character. ZSHORT_BINUNICODEŒaPush a Python Unicode string object. There are two arguments: the first is a 1-byte little-endian signed int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. Z BINUNICODEXaPush a Python Unicode string object. There are two arguments: the first is a 4-byte little-endian unsigned int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. Z BINUNICODE8aPush a Python Unicode string object. There are two arguments: the first is a 8-byte little-endian signed int giving the number of bytes in the string. The second is that many bytes, and is the UTF-8 encoding of the Unicode string. ZFLOATFaNewline-terminated decimal float literal. The argument is repr(a_float), and in general requires 17 significant digits for roundtrip conversion to be an identity (this is so for IEEE-754 double precision values, which is what Python float maps to on most boxes). In general, FLOAT cannot be used to transport infinities, NaNs, or minus zero across boxes (or even on a single box, if the platform C library can't read the strings it produces for such things -- Windows is like that), but may do less damage than BINFLOAT on boxes with greater precision or dynamic range than IEEE-754 double. ZBINFLOATGaFloat stored in binary form, with 8 bytes of data. This generally requires less than half the space of FLOAT encoding. In general, BINFLOAT cannot be used to transport infinities, NaNs, or minus zero, raises an exception if the exponent exceeds the range of an IEEE-754 double, and retains no more than 53 bits of precision (if there are more than that, "add a half and chop" rounding is used to cut it back to 53 significant bits). Z EMPTY_LIST]zPush an empty list.ZAPPENDazAppend an object to a list. Stack before: ... pylist anyobject Stack after: ... pylist+[anyobject] although pylist is really extended in-place. ZAPPENDSezExtend a list by a slice of stack objects. Stack before: ... pylist markobject stackslice Stack after: ... pylist+stackslice although pylist is really extended in-place. ZLISTlasBuild a list out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python list, which single list object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... [1, 2, 3, 'abc'] Z EMPTY_TUPLE)zPush an empty tuple.ZTUPLEtavBuild a tuple out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python tuple, which single tuple object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... (1, 2, 3, 'abc') ZTUPLE1…zBuild a one-tuple out of the topmost item on the stack. This code pops one value off the stack and pushes a tuple of length 1 whose one item is that value back onto it. In other words: stack[-1] = tuple(stack[-1:]) ZTUPLE2†aBuild a two-tuple out of the top two items on the stack. This code pops two values off the stack and pushes a tuple of length 2 whose items are those values back onto it. In other words: stack[-2:] = [tuple(stack[-2:])] ZTUPLE3‡aBuild a three-tuple out of the top three items on the stack. This code pops three values off the stack and pushes a tuple of length 3 whose items are those values back onto it. In other words: stack[-3:] = [tuple(stack[-3:])] Z EMPTY_DICT}zPush an empty dict.ZDICTdaBuild a dict out of the topmost stack slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python dict, which single dict object replaces all of the stack from the topmost markobject onward. The stack slice alternates key, value, key, value, .... For example, Stack before: ... markobject 1 2 3 'abc' Stack after: ... {1: 2, 3: 'abc'} ZSETITEMrYzAdd a key+value pair to an existing dict. Stack before: ... pydict key value Stack after: ... pydict where pydict has been modified via pydict[key] = value. ZSETITEMSua\Add an arbitrary number of key+value pairs to an existing dict. The slice of the stack following the topmost markobject is taken as an alternating sequence of keys and values, added to the dict immediately under the topmost markobject. Everything at and after the topmost markobject is popped, leaving the mutated dict at the top of the stack. Stack before: ... pydict markobject key_1 value_1 ... key_n value_n Stack after: ... pydict where pydict has been modified via pydict[key_i] = value_i for i in 1, 2, ..., n, and in that order. Z EMPTY_SETzPush an empty set.ZADDITEMSa$Add an arbitrary number of items to an existing set. The slice of the stack following the topmost markobject is taken as a sequence of items, added to the set immediately under the topmost markobject. Everything at and after the topmost markobject is popped, leaving the mutated set at the top of the stack. Stack before: ... pyset markobject item_1 ... item_n Stack after: ... pyset where pyset has been modified via pyset.add(item_i) = item_i for i in 1, 2, ..., n, and in that order. Z FROZENSET‘azBuild a frozenset out of the topmost slice, after markobject. All the stack entries following the topmost markobject are placed into a single Python frozenset, which single frozenset object replaces all of the stack from the topmost markobject onward. For example, Stack before: ... markobject 1 2 3 Stack after: ... frozenset({1, 2, 3}) POP0z. ZBUILDbaFinish building an object, via __setstate__ or dict update. Stack before: ... anyobject argument Stack after: ... anyobject where anyobject may have been mutated, as follows: If the object has a __setstate__ method, anyobject.__setstate__(argument) is called. Else the argument must be a dict, the object must have a __dict__, and the object is updated via anyobject.__dict__.update(argument) ZINSTiaqBuild a class instance. This is the protocol 0 version of protocol 1's OBJ opcode. INST is followed by two newline-terminated strings, giving a module and class name, just as for the GLOBAL opcode (and see GLOBAL for more details about that). self.find_class(module, name) is used to get a class object. In addition, all the objects on the stack following the topmost markobject are gathered into a tuple and popped (along with the topmost markobject), just as for the TUPLE opcode. Now it gets complicated. If all of these are true: + The argtuple is empty (markobject was at the top of the stack at the start). + The class object does not have a __getinitargs__ attribute. then we want to create an old-style class instance without invoking its __init__() method (pickle has waffled on this over the years; not calling __init__() is current wisdom). In this case, an instance of an old-style dummy class is created, and then we try to rebind its __class__ attribute to the desired class object. If this succeeds, the new instance object is pushed on the stack, and we're done. Else (the argtuple is not empty, it's not an old-style class object, or the class object does have a __getinitargs__ attribute), the code first insists that the class object have a __safe_for_unpickling__ attribute. Unlike as for the __safe_for_unpickling__ check in REDUCE, it doesn't matter whether this attribute has a true or false value, it only matters whether it exists (XXX this is a bug). If __safe_for_unpickling__ doesn't exist, UnpicklingError is raised. Else (the class object does have a __safe_for_unpickling__ attr), the class object obtained from INST's arguments is applied to the argtuple obtained from the stack, and the resulting instance object is pushed on the stack. NOTE: checks for __safe_for_unpickling__ went away in Python 2.3. NOTE: the distinction between old-style and new-style classes does not make sense in Python 3. ZOBJoaBuild a class instance. This is the protocol 1 version of protocol 0's INST opcode, and is very much like it. The major difference is that the class object is taken off the stack, allowing it to be retrieved from the memo repeatedly if several instances of the same class are created. This can be much more efficient (in both time and space) than repeatedly embedding the module and class names in INST opcodes. Unlike INST, OBJ takes no arguments from the opcode stream. Instead the class object is taken off the stack, immediately above the topmost markobject: Stack before: ... markobject classobject stackslice Stack after: ... new_instance_object As for INST, the remainder of the stack above the markobject is gathered into an argument tuple, and then the logic seems identical, except that no __safe_for_unpickling__ check is done (XXX this is a bug). See INST for the gory details. NOTE: In Python 2.3, INST and OBJ are identical except for how they get the class object. That was always the intent; the implementations had diverged for accidental reasons. ZNEWOBJaLBuild an object instance. The stack before should be thought of as containing a class object followed by an argument tuple (the tuple being the stack top). Call these cls and args. They are popped off the stack, and the value returned by cls.__new__(cls, *args) is pushed back onto the stack. Z NEWOBJ_EX’auBuild an object instance. The stack before should be thought of as containing a class object followed by an argument tuple and by a keyword argument dict (the dict being the stack top). Call these cls and args. They are popped off the stack, and the value returned by cls.__new__(cls, *args, *kwargs) is pushed back onto the stack. PROTO€zProtocol version indicator. For protocol 2 and above, a pickle must start with this opcode. The argument is the protocol version, an int in range(2, 256). STOP.zStop the unpickling machine. Every pickle ends with this opcode. The object at the top of the stack is popped, and that's the result of unpickling. The stack should be empty then. FRAME•zIndicate the beginning of a new frame. The unpickler may use this opcode to safely prefetch data from its underlying stream. ZPERSIDPaPush an object identified by a persistent ID. The pickle module doesn't define what a persistent ID means. PERSID's argument is a newline-terminated str-style (no embedded escapes, no bracketing quote characters) string, which *is* "the persistent ID". The unpickler passes this string to self.persistent_load(). Whatever object that returns is pushed on the stack. There is no implementation of persistent_load() in Python's unpickler: it must be supplied by an unpickler subclass. Z BINPERSIDQaXPush an object identified by a persistent ID. Like PERSID, except the persistent ID is popped off the stack (instead of being a string embedded in the opcode bytestream). The persistent ID is passed to self.persistent_load(), and whatever object that returns is pushed on the stack. See PERSID for more detail. z%repeated name %r at indices %d and %dz%repeated code %r at indices %d and %dFcCstj}x$tjD]}tjd|sK|rtd|qqntt|}t|t  s|t |dkr|rtd||fqqn|j d}||kr|rtd||fn||}|j |krt d|||j fn||=qt d||fqW|rd g}x4|jD]&\}}|jd |j |fqOWt d j|ndS) Nz[A-Z][A-Z0-9_]+$z0skipping %r: it doesn't look like an opcode namerz5skipping %r: value %r doesn't look like a pickle codezlatin-1z+checking name %r w/ code %r for consistencyzBfor pickle code %r, pickle.py uses name %r but we're using name %rzPpickle.py appears to have a pickle opcode with name %r and code %r, but we don'tz=we appear to have pickle opcodes that pickle.py doesn't have:z name %r with code %r )code2opcopyr~__all__rematchprintgetattrrror'r;r r"itemsappendjoin)verboserr Z picklecodermsgryrrrassure_pickle_consistencys> "    rccsOt|tr!tj|}nt|dr<|j}n dd}x|}|jd}tj|j d}|dkr|dkrt dqt d|dkrd n||fn|j dkrd}n|j j |}|r||||fVn|||fV|d krK|j d ksCtPqKqKWdS) NtellcSsdS)Nrrrrrsz_genops..rzlatin-1z#pickle exhausted before seeing STOPz!at position %s, opcode %r unknownz .r)r bytes_typesioBytesIOhasattrrr!rgetr;r"rzr r r)r$ yield_end_posZgetposposryopcoderzrrr_genopss0       rcCs t|S)axGenerate all the opcodes in a pickle. 'pickle' is a file-like object, or string, containing the pickle. Each opcode in the pickle is generated, from the current pickle position, stopping after a STOP opcode is delivered. A triple is generated for each opcode: opcode, arg, pos opcode is an OpcodeInfo record, describing the current opcode. If the opcode has an argument embedded in the pickle, arg is its decoded value, as a Python object. If the opcode doesn't have an argument, arg is None. If the pickle has a tell() method, pos was the value of pickle.tell() before reading the current opcode. If the pickle is a bytes object, it's wrapped in a BytesIO object, and the latter's tell() result is used. Else (the pickle doesn't have a tell(), and it's not obvious how to query its current position) pos is None. )r)r~rrrrscCsd}d}t}i}g}d}d}x^t|ddD]J\}} } } d|jkr|j| |j|| fq@|jdkrt|} |j| |j|| fq@d|jkrq@d|jkr|j|kr|j}nd || <|j|| fq@|jd krw| |krB| }n| dkra|| | }q|j| | fq@|j| | fq@W~tj} | j |t j | |}|d kr|j j nd} x|D]\}} ||kr5| |krqn|j| }| || <| d 7} n2||krW|j|| }n||| }|j j|j |qW|j j| jS) z7Optimize a pickle string by removing unused PUT opcodesrrrrrTrrNrrr)rsrr addrr'r}rrwriter~Z_PicklerZframerZ start_framingputrZ commit_frameZ end_framinggetvalue)rrrZoldidsZnewidsopcodesr}Z protoheaderrrzrZend_posidxoutZpickleropr$rrrrsd %                  cCsg}|dkri}nd}g}d|}d} |} x"t|D]\} } } | dk rtd| ddd|ndt| jdd|t|| jf}t|| j}| j}| j }t|}d}t |ks| jdkr|r|d t krt |ks.t t |krS|d!t ksSt n|r|j }|dkrzd }n d |}x|d"t k r|j qW|j y|jt }Wqtk r| jdkst d }YqXqd } }n| jd#kr| jdkr/t|}n| dk sAt | }||kr`d| } q|sod} q|d$t krd} q|d%||>> import pickle >>> x = [1, 2, (3, 4), {b'abc': "def"}] >>> pkl0 = pickle.dumps(x, 0) >>> dis(pkl0) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: L LONG 1 9: a APPEND 10: L LONG 2 14: a APPEND 15: ( MARK 16: L LONG 3 20: L LONG 4 24: t TUPLE (MARK at 15) 25: p PUT 1 28: a APPEND 29: ( MARK 30: d DICT (MARK at 29) 31: p PUT 2 34: c GLOBAL '_codecs encode' 50: p PUT 3 53: ( MARK 54: V UNICODE 'abc' 59: p PUT 4 62: V UNICODE 'latin1' 70: p PUT 5 73: t TUPLE (MARK at 53) 74: p PUT 6 77: R REDUCE 78: p PUT 7 81: V UNICODE 'def' 86: p PUT 8 89: s SETITEM 90: a APPEND 91: . STOP highest protocol among opcodes = 0 Try again with a "binary" pickle. >>> pkl1 = pickle.dumps(x, 1) >>> dis(pkl1) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: K BININT1 1 6: K BININT1 2 8: ( MARK 9: K BININT1 3 11: K BININT1 4 13: t TUPLE (MARK at 8) 14: q BINPUT 1 16: } EMPTY_DICT 17: q BINPUT 2 19: c GLOBAL '_codecs encode' 35: q BINPUT 3 37: ( MARK 38: X BINUNICODE 'abc' 46: q BINPUT 4 48: X BINUNICODE 'latin1' 59: q BINPUT 5 61: t TUPLE (MARK at 37) 62: q BINPUT 6 64: R REDUCE 65: q BINPUT 7 67: X BINUNICODE 'def' 75: q BINPUT 8 77: s SETITEM 78: e APPENDS (MARK at 3) 79: . STOP highest protocol among opcodes = 1 Exercise the INST/OBJ/BUILD family. >>> import pickletools >>> dis(pickle.dumps(pickletools.dis, 0)) 0: c GLOBAL 'pickletools dis' 17: p PUT 0 20: . STOP highest protocol among opcodes = 0 >>> from pickletools import _Example >>> x = [_Example(42)] * 2 >>> dis(pickle.dumps(x, 0)) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: c GLOBAL 'copy_reg _reconstructor' 30: p PUT 1 33: ( MARK 34: c GLOBAL 'pickletools _Example' 56: p PUT 2 59: c GLOBAL '__builtin__ object' 79: p PUT 3 82: N NONE 83: t TUPLE (MARK at 33) 84: p PUT 4 87: R REDUCE 88: p PUT 5 91: ( MARK 92: d DICT (MARK at 91) 93: p PUT 6 96: V UNICODE 'value' 103: p PUT 7 106: L LONG 42 111: s SETITEM 112: b BUILD 113: a APPEND 114: g GET 5 117: a APPEND 118: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(x, 1)) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: c GLOBAL 'copy_reg _reconstructor' 29: q BINPUT 1 31: ( MARK 32: c GLOBAL 'pickletools _Example' 54: q BINPUT 2 56: c GLOBAL '__builtin__ object' 76: q BINPUT 3 78: N NONE 79: t TUPLE (MARK at 31) 80: q BINPUT 4 82: R REDUCE 83: q BINPUT 5 85: } EMPTY_DICT 86: q BINPUT 6 88: X BINUNICODE 'value' 98: q BINPUT 7 100: K BININT1 42 102: s SETITEM 103: b BUILD 104: h BINGET 5 106: e APPENDS (MARK at 3) 107: . STOP highest protocol among opcodes = 1 Try "the canonical" recursive-object test. >>> L = [] >>> T = L, >>> L.append(T) >>> L[0] is T True >>> T[0] is L True >>> L[0][0] is L True >>> T[0][0] is T True >>> dis(pickle.dumps(L, 0)) 0: ( MARK 1: l LIST (MARK at 0) 2: p PUT 0 5: ( MARK 6: g GET 0 9: t TUPLE (MARK at 5) 10: p PUT 1 13: a APPEND 14: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(L, 1)) 0: ] EMPTY_LIST 1: q BINPUT 0 3: ( MARK 4: h BINGET 0 6: t TUPLE (MARK at 3) 7: q BINPUT 1 9: a APPEND 10: . STOP highest protocol among opcodes = 1 Note that, in the protocol 0 pickle of the recursive tuple, the disassembler has to emulate the stack in order to realize that the POP opcode at 16 gets rid of the MARK at 0. >>> dis(pickle.dumps(T, 0)) 0: ( MARK 1: ( MARK 2: l LIST (MARK at 1) 3: p PUT 0 6: ( MARK 7: g GET 0 10: t TUPLE (MARK at 6) 11: p PUT 1 14: a APPEND 15: 0 POP 16: 0 POP (MARK at 0) 17: g GET 1 20: . STOP highest protocol among opcodes = 0 >>> dis(pickle.dumps(T, 1)) 0: ( MARK 1: ] EMPTY_LIST 2: q BINPUT 0 4: ( MARK 5: h BINGET 0 7: t TUPLE (MARK at 4) 8: q BINPUT 1 10: a APPEND 11: 1 POP_MARK (MARK at 0) 12: h BINGET 1 14: . STOP highest protocol among opcodes = 1 Try protocol 2. >>> dis(pickle.dumps(L, 2)) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: h BINGET 0 7: \x85 TUPLE1 8: q BINPUT 1 10: a APPEND 11: . STOP highest protocol among opcodes = 2 >>> dis(pickle.dumps(T, 2)) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: h BINGET 0 7: \x85 TUPLE1 8: q BINPUT 1 10: a APPEND 11: 0 POP 12: h BINGET 1 14: . STOP highest protocol among opcodes = 2 Try protocol 3 with annotations: >>> dis(pickle.dumps(T, 3), annotate=1) 0: \x80 PROTO 3 Protocol version indicator. 2: ] EMPTY_LIST Push an empty list. 3: q BINPUT 0 Store the stack top into the memo. The stack is not popped. 5: h BINGET 0 Read an object from the memo and push it on the stack. 7: \x85 TUPLE1 Build a one-tuple out of the topmost item on the stack. 8: q BINPUT 1 Store the stack top into the memo. The stack is not popped. 10: a APPEND Append an object to a list. 11: 0 POP Discard the top stack item, shrinking the stack by one item. 12: h BINGET 1 Read an object from the memo and push it on the stack. 14: . STOP Stop the unpickling machine. highest protocol among opcodes = 2 a= >>> import pickle >>> import io >>> f = io.BytesIO() >>> p = pickle.Pickler(f, 2) >>> x = [1, 2, 3] >>> p.dump(x) >>> p.dump(x) >>> f.seek(0) 0 >>> memo = {} >>> dis(f, memo=memo) 0: \x80 PROTO 2 2: ] EMPTY_LIST 3: q BINPUT 0 5: ( MARK 6: K BININT1 1 8: K BININT1 2 10: K BININT1 3 12: e APPENDS (MARK at 5) 13: . STOP highest protocol among opcodes = 2 >>> dis(f, memo=memo) 14: \x80 PROTO 2 16: h BINGET 0 18: . STOP highest protocol among opcodes = 2 Zdisassembler_testZdisassembler_memo_testcCsddl}|jS)Nr)doctestZtestmod)rrrr_test s r__main__Z descriptionz$disassemble one or more pickle files pickle_filerkZbrnargs*helpzthe pickle filez-oz--outputdefaultwz+the file where the output should be writtenz-mz--memoaction store_truez#preserve memo between disassembliesz-lz --indentlevelz8the number of blanks by which to indent a new MARK levelz-az --annotatez2annotate each line with a short opcode descriptionz-pz --preamblez==> {name} <==zMif more than one pickle file is specified, print this before each disassemblyz-tz--testzrun self-test suitez-vz)run verbosely; only affects self-test runr)__doc__r9rr~rrJrrrrrrrobjectr Zstructr r(r%r&r)r*r+r,r-r.r0r1r>r?r@rArBrCrDrErFrGrHrIrLrMrNrOrPrQrSrTrUrVrWrXrZr\r]r^r`rarbrcrdrerfrgrhrirZpyintZpylongrnZpyinteger_or_boolZpyboolr_ZpyfloatrorZpybytes_or_strZpystringZpybytesZ pyunicoderkZpynonerlZpytuplerqZpylistrrZpydictrsZpysetZ pyfrozensetZ anyobjectrrwrxrrZname2iZcode2i enumeraterrr r"ryrrrrrrrZ _dis_testZ _memo_testZ__test__rrargparseArgumentParserparser add_argumentZFileTypestdout parse_argsargsZtestrrZ print_helpr'outputrrr#Zpreambleformatrrrrr s      $          /                                                        ;                                                                                                                                       +                       &  >       !      lib64/python3.4/__pycache__/aifc.cpython-34.pyo000064400000066410152342604300015012 0ustar00 j fZ{@sdZddlZddlZddlZdddgZGdddeZdZdd Zd d Z d d Z ddZ ddZ dZ ddZddZddZddZddZddZdd Zdd!lmZdd"lmZed#d$ZGd%d&d&ZGd'd(d(Zdd)dZeZed*krddlZej d+d rej j!d,nej d+Z"ee"d-Z#e$d.e"e$d/e#j%e$d0e#j&e$d1e#j'e$d2e#j(e$d3e#j)e$d4e#j*ej d5drej d5Z+e$d6e+ee+d7HZ,e,j-e#j.x+e#j/d8Z0e0 rPne,j1e0qWWdQXe$d9nWdQXndS):aJStuff to parse AIFF-C and AIFF files. Unless explicitly stated otherwise, the description below is true both for AIFF-C files and AIFF files. An AIFF-C file has the following structure. +-----------------+ | FORM | +-----------------+ | | +----+------------+ | | AIFC | | +------------+ | | | | | . | | | . | | | . | +----+------------+ An AIFF file has the string "AIFF" instead of "AIFC". A chunk consists of an identifier (4 bytes) followed by a size (4 bytes, big endian order), followed by the data. The size field does not include the size of the 8 byte header. The following chunk types are recognized. FVER (AIFF-C only). MARK <# of markers> (2 bytes) list of markers: (2 bytes, must be > 0) (4 bytes) ("pstring") COMM <# of channels> (2 bytes) <# of sound frames> (4 bytes) (2 bytes) (10 bytes, IEEE 80-bit extended floating point) in AIFF-C files only: (4 bytes) ("pstring") SSND (4 bytes, not used by this program) (4 bytes, not used by this program) A pstring consists of 1 byte length, a string of characters, and 0 or 1 byte pad to make the total length even. Usage. Reading AIFF files: f = aifc.open(file, 'r') where file is either the name of a file or an open file pointer. The open file pointer must have methods read(), seek(), and close(). In some types of audio files, if the setpos() method is not used, the seek() method is not necessary. This returns an instance of a class with the following public methods: getnchannels() -- returns number of audio channels (1 for mono, 2 for stereo) getsampwidth() -- returns sample width in bytes getframerate() -- returns sampling frequency getnframes() -- returns number of audio frames getcomptype() -- returns compression type ('NONE' for AIFF files) getcompname() -- returns human-readable version of compression type ('not compressed' for AIFF files) getparams() -- returns a namedtuple consisting of all of the above in the above order getmarkers() -- get the list of marks in the audio file or None if there are no marks getmark(id) -- get mark with the specified id (raises an error if the mark does not exist) readframes(n) -- returns at most n frames of audio rewind() -- rewind to the beginning of the audio stream setpos(pos) -- seek to the specified position tell() -- return the current position close() -- close the instance (make it unusable) The position returned by tell(), the position given to setpos() and the position of marks are all compatible and have nothing to do with the actual position in the file. The close() method is called automatically when the class instance is destroyed. Writing AIFF files: f = aifc.open(file, 'w') where file is either the name of a file or an open file pointer. The open file pointer must have methods write(), tell(), seek(), and close(). This returns an instance of a class with the following public methods: aiff() -- create an AIFF file (AIFF-C default) aifc() -- create an AIFF-C file setnchannels(n) -- set the number of channels setsampwidth(n) -- set the sample width setframerate(n) -- set the frame rate setnframes(n) -- set the number of frames setcomptype(type, name) -- set the compression type and the human-readable compression type setparams(tuple) -- set all parameters at once setmark(id, pos, name) -- add specified mark to the list of marks tell() -- return current position in output file (useful in combination with setmark()) writeframesraw(data) -- write audio frames without pathing up the file header writeframes(data) -- write audio frames and patch up the file header close() -- patch up the file header and close the output file You should set the parameters before the first writeframesraw or writeframes. The total number of frames does not need to be set, but when it is set to the correct value, the header does not have to be patched up. It is best to first set all parameters, perhaps possibly the compression type, and then write audio frames using writeframesraw. When all frames have been written, either call writeframes(b'') or close() to patch up the sizes in the header. Marks can be added anytime. If there are any marks, you must call close() after all frames have been written. The close() method is called automatically when the class instance is destroyed. When a file is opened with the extension '.aiff', an AIFF file is written, otherwise an AIFF-C file is written. This default can be changed by calling aiff() or aifc() before the first writeframes or writeframesraw. NErroropenopenfpc@seZdZdS)rN)__name__ __module__ __qualname__rr)/opt/alt/python34/lib64/python3.4/aifc.pyrs l@QEc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>lr)structunpackreaderrorEOFError)filerrr _read_longs!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>Lr r)r r r rr)rrrr _read_ulongs!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>hr)r r r rr)rrrr _read_shorts!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>Hrr)r r r rr)rrrr _read_ushorts!rcCs_t|jd}|dkr*d}n|j|}|d@dkr[|jd}n|S)Nr)ordr )rlengthdatadummyrrr _read_strings  rgcCst|}d}|dkr1d }|d}nt|}t|}||kok|kokdknryd}n>|dkrt}n)|d}|d|td|d }||S) Nrrigii?lg@?)rr _HUGE_VALpow)fexponsignhimantlomantrrr _read_floats     '    r&cCs|jtjd|dS)Nz>h)writer pack)r!xrrr _write_shortsr*cCs|jtjd|dS)Nz>H)r'r r()r!r)rrr _write_ushortsr+cCs|jtjd|dS)Nz>l)r'r r()r!r)rrr _write_longsr,cCs|jtjd|dS)Nz>L)r'r r()r!r)rrr _write_ulongsr-cCswt|dkr!tdn|jtjdt||j|t|d@dkrs|jdndS)Nz%string exceeds maximum pstring lengthBrrs)len ValueErrorr'r r()r!srrr _write_strings  r3c Cshddl}|dkr+d}|d}nd}|dkrRd}d}d}n|j|\}}|dks|dks||kr|dB}d}d}n|d}|dkr|j||}d}n||B}|j|d}|j|}t|}|j||d}|j|}t|}t||t||t||dS) Nriri@ii? r)mathZfrexpZldexpZfloorintr+r-) r!r)r5r#r"r$r%ZfmantZfsmantrrr _write_floats8     $          r7)Chunk) namedtuple _aifc_paramsz7nchannels sampwidth framerate nframes comptype compnamec@s0eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1S)2 Aifc_readc Csd|_d|_g|_d|_||_t|}|jdkrZtdn|jd}|dkrd|_ n$|dkrd|_ n tdd|_ xd|_ yt|j}Wnt k rPYnX|j}|d kr|j |d|_ nj|d krD||_|jd }d|_ n:|d krbt||_n|d kr~|j|n|jqW|j s|j rtdndS)NrsFORMz file does not start with FORM idr sAIFFsAIFCrznot an AIFF or AIFF-C filesCOMMsSSNDsFVERsMARKz$COMM chunk and/or SSND chunk missing)_version_convert_markers _soundpos_filer8Zgetnamerr _aifcZ_comm_chunk_read_ssnd_seek_neededr_read_comm_chunk _ssnd_chunkr _readmarkskip)selfrchunkZformdataZ chunknamerrrr initfp)sH                       zAifc_read.initfpcCs5t|tr$tj|d}n|j|dS)Nrb) isinstancestrbuiltinsrrJ)rHr!rrr __init__PszAifc_read.__init__cCs|S)Nr)rHrrr __enter__VszAifc_read.__enter__cGs|jdS)N)close)rHargsrrr __exit__YszAifc_read.__exit__cCs|jS)N)rA)rHrrr getfp_szAifc_read.getfpcCsd|_d|_dS)Nrr)rCr@)rHrrr rewindbs zAifc_read.rewindcCs/|j}|dk r+d|_|jndS)N)rArQ)rHrrrr rQfs   zAifc_read.closecCs|jS)N)r@)rHrrr telllszAifc_read.tellcCs|jS)N) _nchannels)rHrrr getnchannelsoszAifc_read.getnchannelscCs|jS)N)_nframes)rHrrr getnframesrszAifc_read.getnframescCs|jS)N) _sampwidth)rHrrr getsampwidthuszAifc_read.getsampwidthcCs|jS)N) _framerate)rHrrr getframeratexszAifc_read.getframeratecCs|jS)N) _comptype)rHrrr getcomptype{szAifc_read.getcomptypecCs|jS)N) _compname)rHrrr getcompname~szAifc_read.getcompnamecCs=t|j|j|j|j|j|jS)N)r:rXr\r^rZr`rb)rHrrr getparamsszAifc_read.getparamscCs t|jdkrdS|jS)Nr)r0r?)rHrrr getmarkersszAifc_read.getmarkerscCsAx%|jD]}||dkr |Sq Wtdj|dS)Nrzmarker {0!r} does not exist)r?rformat)rHidmarkerrrr getmarkszAifc_read.getmarkcCs@|dks||jkr*tdn||_d|_dS)Nrzposition not in ranger)rYrr@rC)rHposrrr setposs zAifc_read.setposcCs|jrd|jjd|jjd}|j|j}|rX|jj|dnd|_n|dkrtdS|jj||j}|jr|r|j|}n|jt||j|j |_|S)Nrr<r) rCrEseekr r@ _framesizer>r0rWr[)rHnframesrrirrrr readframess   zAifc_read.readframescCsddl}|j|dS)Nrr)audioopZalaw2lin)rHrrorrr _alaw2lins zAifc_read._alaw2lincCsddl}|j|dS)Nrr)roZulaw2lin)rHrrorrr _ulaw2lins zAifc_read._ulaw2lincCsLddl}t|ds'd|_n|j|d|j\}|_|S)Nr _adpcmstater)rohasattrrrZ adpcm2lin)rHrrorrr _adpcm2lins   !zAifc_read._adpcm2lincCst||_t||_t|dd|_tt||_|j|j|_|j rd}|j dkrd}t j dd|_ n|j d|_|r t|jj d}|d@dkr|d}n|j ||_ |jjddnt||_|jd kr|jd krI|j|_nH|jdkrg|j|_n*|jdkr|j|_n tdd|_qnd |_d|_dS)Nr<rrzWarning: bad COMM chunk sizer sNONEsG722ulawULAWalawALAWzunsupported compression typersnot compressedr)rxry)rzr{)rrWrrYr[r6r&r]rlrBZ chunksizewarningswarnr r_rrrkrrartr>rqrpr)rHrIZkludgerrrr rDs<      zAifc_read._read_comm_chunkc Cst|}ygx`t|D]R}t|}t|}t|}|sR|r|jj|||fqqWWnVtk rdt|jt|jdkrdnd|f}tj |YnXdS)Nz;Warning: MARK chunk contains only %s marker%s instead of %srr2) rrangerrr?appendrr0r|r})rHrIZnmarkersirfrinamewrrr rFs     $ * zAifc_read._readmarkN)rrrrJrOrPrSrTrUrQrVrXrZr\r^r`rbrcrdrhrjrnrprqrtrDrFrrrr r;s0 $ '                      &r;c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIS)J Aifc_writecCslt|tr*|}tj|d}nd}|j||dddkr_d|_n d|_dS)Nwbz???z.aiffrr)rLrMrNrrJrB)rHr!filenamerrr rOs  zAifc_write.__init__cCs||_t|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ g|_ d|_d|_dS)NsNONEsnot compressedrr)rA _AIFC_versionr=r_rar>rWr[r]rY_nframeswritten _datawritten _datalengthr? _marklengthrB)rHrrrr rJ$s              zAifc_write.initfpcCs|jdS)N)rQ)rHrrr __del__5szAifc_write.__del__cCs|S)Nr)rHrrr rP8szAifc_write.__enter__cGs|jdS)N)rQ)rHrRrrr rS;szAifc_write.__exit__cCs%|jrtdnd|_dS)Nz0cannot change parameters after starting to writer)rrrB)rHrrr aiffAs zAifc_write.aiffcCs%|jrtdnd|_dS)Nz0cannot change parameters after starting to writer)rrrB)rHrrr aifcFs zAifc_write.aifccCs@|jrtdn|dkr3tdn||_dS)Nz0cannot change parameters after starting to writerzbad # of channels)rrrW)rH nchannelsrrr setnchannelsKs   zAifc_write.setnchannelscCs|jstdn|jS)Nznumber of channels not set)rWr)rHrrr rXRs zAifc_write.getnchannelscCsL|jrtdn|dks0|dkr?tdn||_dS)Nz0cannot change parameters after starting to writerr zbad sample width)rrr[)rH sampwidthrrr setsampwidthWs  zAifc_write.setsampwidthcCs|jstdn|jS)Nzsample width not set)r[r)rHrrr r\^s zAifc_write.getsampwidthcCs@|jrtdn|dkr3tdn||_dS)Nz0cannot change parameters after starting to writerzbad frame rate)rrr])rH frameraterrr setframeratecs   zAifc_write.setframeratecCs|jstdn|jS)Nzframe rate not set)r]r)rHrrr r^js zAifc_write.getframeratecCs%|jrtdn||_dS)Nz0cannot change parameters after starting to write)rrrY)rHrmrrr setnframesos zAifc_write.setnframescCs|jS)N)r)rHrrr rZtszAifc_write.getnframescCsI|jrtdn|d kr3tdn||_||_dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrr_ra)rHcomptypecompnamerrr setcomptypews   zAifc_write.setcomptypecCs|jS)N)r_)rHrrr r`szAifc_write.getcomptypecCs|jS)N)ra)rHrrr rbszAifc_write.getcompnamecCs|\}}}}}}|jr0tdn|d krKtdn|j||j||j||j||j||dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrrrrrr)rHZparamsrrrrmrrrrr setparamss      zAifc_write.setparamscCsX|j s|j s|j r-tdnt|j|j|j|j|j|jS)Nznot all parameters set)rWr[r]rr:rYr_ra)rHrrr rcszAifc_write.getparamscCs|dkrtdn|dkr6tdnt|tsTtdnxNtt|jD]7}||j|dkrj|||f|j| 0zmarker position must be >= 0zmarker name must be bytes)rrLbytesrr0r?r)rHrfrirrrrr setmarks  zAifc_write.setmarkcCsAx%|jD]}||dkr |Sq Wtdj|dS)Nrzmarker {0!r} does not exist)r?rre)rHrfrgrrr rhszAifc_write.getmarkcCs t|jdkrdS|jS)Nr)r0r?)rHrrr rdszAifc_write.getmarkerscCs|jS)N)r)rHrrr rVszAifc_write.tellcCst|ttfs-t|jd}n|jt|t||j|j}|j ru|j |}n|j j ||j ||_ |j t||_ dS)Nr/)rLr bytearray memoryviewcast_ensure_header_writtenr0r[rWr>rAr'rr)rHrrmrrr writeframesraws zAifc_write.writeframesrawcCsB|j||j|jks1|j|jkr>|jndS)N)rrrYrr _patchheader)rHrrrr writeframess zAifc_write.writeframesc Cs|jdkrdSz|jd|jd@rS|jjd|jd|_n|j|j|jks|j|jks|jr|j nWdd|_ |j}d|_|j XdS)Nrrs) rArrr' _writemarkersrrYrrrr>rQ)rHr!rrr rQs        zAifc_write.closecCsddl}|j|dS)Nrr)roZlin2alaw)rHrrorrr _lin2alaws zAifc_write._lin2alawcCsddl}|j|dS)Nrr)roZlin2ulaw)rHrrorrr _lin2ulaws zAifc_write._lin2ulawcCsLddl}t|ds'd|_n|j|d|j\}|_|S)Nrrrr)rorsrrZ lin2adpcm)rHrrorrr _lin2adpcms   !zAifc_write._lin2adpcmcCs|js|jd krN|js-d|_n|jdkrNtdqNn|jsftdn|js~td n|jstd n|j|ndS) NULAWulawALAWalawG722rzRsample width must be 2 when compressing with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)z# channels not specifiedzsample width not specifiedzsampling rate not specified)rrrrr)rr_r[rrWr] _write_header)rHZdatasizerrr rs      z!Aifc_write._ensure_header_writtencCs^|jdkr|j|_n<|jdkr<|j|_n|jdkrZ|j|_ndS)NsG722ulawULAWalawALAW)rr)rr)r_rr>rr)rHrrr _init_compressions zAifc_write._init_compressioncCs(|jr%|jdkr%|jn|jjd|jsX||j|j|_n|j|j|j|_|jd@r|jd|_n|jr&|jdkr|jd|_|jd@r#|jd|_q#q&|jd kr&|jd d |_|jd@r#|jd|_q#q&ny|jj |_ Wn!t t fk r_d|_ YnX|j |j}|jr|jjd |jjd t|jd t|j|jn|jjd|jjdt|j|t|j|j|j dk r(|jj |_nt|j|j|jdkr]t|jdnt|j|jdt|j|j|jr|jj|jt|j|jn|jjd|j dk r|jj |_nt|j|jdt|jdt|jddS)NsNONEsFORMrulawULAWalawALAWrG722r sAIFCsFVERsAIFFsCOMMr<sSSNDr)rrrr)rrrrr)rBr_rrAr'rYrWr[rrV_form_length_posAttributeErrorOSError_write_form_lengthr-r=r* _nframes_posr7r]r3ra_ssnd_length_pos)rHZ initlength commlengthrrr r s^        zAifc_write._write_headercCsw|jr<d t|j}|d@r3|d}nd}n d}d}t|jd||jd|d||S) Nrvrr rr r<rw)rBr0rar-rAr)rH datalengthrZ verslengthrrr r=s     "zAifc_write._write_form_lengthcCs0|jj}|jd@r<|jd}|jjdn |j}||jkr|j|jkr|jdkr|jj|ddS|jj|j d|j |}|jj|j dt |j|j|jj|j dt |j|d|jj|d|j|_||_dS)Nrsrr<)rArVrr'rrYrrrkrrrr-r)rHZcurposrrrrr rJs&    zAifc_write._patchheadercCst|jdkrdS|jjdd}x[|jD]P}|\}}}|t|dd}t|d@dkr9|d}q9q9Wt|j||d|_t|jt|jxP|jD]E}|\}}}t|j|t|j|t|j|qWdS)NrsMARKrrr<)r0r?rAr'r-rr*r3)rHrrgrfrirrrr r`s" zAifc_write._writemarkersN)'rrrrOrJrrPrSrrrrXrr\rr^rrZrr`rbrrcrrhrdrVrrrQrrrrrrrrrrrrr rsH                             3 rcCsl|dkr0t|dr'|j}q0d}n|dkrFt|S|dkr\t|StddS) NmoderKrrrz$mode must be 'r', 'rb', 'w', or 'wb')rzrb)rzwb)rsrr;rr)r!rrrr rss       __main__rz/usr/demos/data/audio/bach.aiffrZReadingz nchannels =z nframes =z sampwidth =z framerate =z comptype =z compname =rZWritingrizDone.)2__doc__r rNr|__all__ Exceptionrrrrrrrrr&r*r+r,r-r3r7rIr8 collectionsr9r:r;rrrrsysargvrfnr!printrXrZr\r^r`rbZgngrrcrnrrrrrr sh               ! {       lib64/python3.4/__pycache__/nntplib.cpython-34.pyc000064400000106726152342604300015547 0ustar00 e fJ@sdZddlZddlZddlZddlZddlZyddlZWnek rldZYnXdZddl m Z ddlm Z ddd d d d d dgZ dZGdddeZGdd d eZGdd d eZGdd d eZGdd d eZGdd d eZdZdZddddddddd d!d"d#h Zd$d%d&d'd(d)d*gZid)d+6d*d,6Zd-Zejd.d/d0d1d2gZejd3d4d5d,gZd6dZ d7d8Zdd9d:Z dd;d<Z!dd=d>Z"er9d?d@Z#nGdAdBdBZ$GdCdde$Z%erGdDdEdEe$Z&e j'dEne(dFkrddl)Z)e)j*dGdHZ+e+j,dIdJdKdLdMdNe+j,dOdPdKdQdMdRe+j,dSdTdKdU dVe-dMdWeefe+j,dXdYdKdZdVe-dMd[e+j,d\d]d^d_dKddMd`e+j.Z/e/j0Z0e/j re0dU kreZ0ne%dae/j1dbe0Z2n.e0dU kreZ0ne&dae/j1dbe0Z2e2j3Z4dce4kre2j5ne2j6e/j6\Z7Z8Z9Z:Z;e<dde;dee8dfe9dge:dhdiZ=e>e-e:e/j?dUZ9e2j@e9e:\Z7ZAxeAD]z\ZBZCe eCd%jDdjdUdZEe eCd$ZFe-eCd*ZGe<dkjHeBe=eEdle=eFdmeGqWe2jIndS)naAn NNTP client class based on: - RFC 977: Network News Transfer Protocol - RFC 2980: Common NNTP Extensions - RFC 3977: Network News Transfer Protocol (version 2) Example: >>> from nntplib import NNTP >>> s = NNTP('news') >>> resp, count, first, last, name = s.group('comp.lang.python') >>> print('Group', name, 'has', count, 'articles, range', first, 'to', last) Group comp.lang.python has 51 articles, range 5770 to 5821 >>> resp, subs = s.xhdr('subject', '{0}-{1}'.format(first, last)) >>> resp = s.quit() >>> Here 'resp' is the server response line. Error responses are turned into exceptions. To post an article from a file: >>> f = open(filename, 'rb') # file containing article, including header >>> resp = s.post(f) >>> For descriptions of all methods, read the comments in the code below. Note that all arguments and return values representing article numbers are strings, not numbers, since they are rarely used for calculations. NFT) decode_header)_GLOBAL_DEFAULT_TIMEOUTNNTP NNTPErrorNNTPReplyErrorNNTPTemporaryErrorNNTPPermanentErrorNNTPProtocolError NNTPDataErrorric@s"eZdZdZddZdS)rz%Base class for all nntplib exceptionsc GsCtj||y|d|_Wntk r>d|_YnXdS)NrzNo response given) Exception__init__response IndexError)selfargsr,/opt/alt/python34/lib64/python3.4/nntplib.pyr bs  zNNTPError.__init__N)__name__ __module__ __qualname____doc__r rrrrr`s c@seZdZdZdS)rzUnexpected [123]xx replyN)rrrrrrrrris c@seZdZdZdS)rz 4xx errorsN)rrrrrrrrrms c@seZdZdZdS)rz 5xx errorsN)rrrrrrrrrqs c@seZdZdZdS)r z"Response does not begin with [1-5]N)rrrrrrrrr us c@seZdZdZdS)r zError in response dataN)rrrrrrrrr ys wi3Z100Z101211215Z220Z221Z222Z224Z225Z230Z231Z282subjectfromdatez message-idZ referencesz:bytesz:linesbytesliness GroupInfogrouplastfirstZflag ArticleInfoZnumber message_idcCskg}xUt|D]G\}}t|trM|j|j|pCdq|j|qWdj|S)zwTakes an unicode string representing a munged header value and decodes it as a (possibly non-ASCII) readable value.ascii)_email_decode_header isinstancerappenddecodejoin)Z header_strpartsvencrrrrs cCsg}x|D]}|ddkrR|ddjd\}}}d|}n|jd\}}}|j}tj||}|j|q Wt}t|t|krtdn|dt||krtdn|S)zParse a list of string representing the response to LIST OVERVIEW.FMT and return a list of header/metadata names. Raises NNTPDataError if the response is not compliant (cf. RFC 3977, section 8.4).r:Nz$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields) partitionlower_OVERVIEW_FMT_ALTERNATIVESgetr)_DEFAULT_OVERVIEW_FMTlenr )rfmtlinename_suffixZdefaultsrrr_parse_overview_fmts "  r<cCs6tt}g}x|D]}i}|jd^}}t|}xt|D]\} } | t|krwqSn|| } | jd} | |kr | r | d} | r| dt| j| krtdn| r| t| dnd} n| ||| d?Z#d@dAZ$ddBdCZ%dd'ddDdEZ&dd'ddFdGZ'dd'ddHdIZ(dJdKZ)d'ddLdMZ*d'ddNdOZ+d'ddPdQZ,d'ddRdSZ-dTdUZ.dVdWZ/dXdYZ0dZd[Z1d\d]Z2d^d_Z3d`daZ4ddddbdcZ5dddeZ6e7rddfdgZ8ndS)h _NNTPBasezutf-8surrogateescapeNcCs||_||_d|_|j|_d|_|jd|_|rd|jkr|j|jsd|_|jqnd|_ d|_ dS)aSInitialize an instance. Arguments: - file: file-like object (open for read/write in binary mode) - host: hostname of the server - readermode: if true, send 'mode reader' command after connecting. - timeout: timeout (in seconds) used for socket connections readermode is sometimes necessary if you are connecting to an NNTP server on the local machine and intend to call reader-specific commands, such as `group'. If you get unexpected NNTPPermanentErrors, you might need to set readermode. rNFREADER) hostfile debugging_getrespwelcome_capsgetcapabilitiesreadermode_afterauth_setreadermodetls_on authenticated)rr^r] readermodetimeoutrrrr 8s         z_NNTPBase.__init__cCs|S)Nr)rrrr __enter__gsz_NNTPBase.__enter__csifdd}|rez-yjWnttfk rFYnXWd|rajnXndS)Ncs tdS)Nr^)hasattrr)rrrksz$_NNTPBase.__exit__..)quitOSErrorEOFError_close)rrZ is_connectedr)rr__exit__js   z_NNTPBase.__exit__cCs)|jr"tdt|jn|jS)zGet the welcome message from the server (this is read and squirreled away by __init__()). If the response code is 200, posting is allowed; if it 201, posting is not allowed.z *welcome*)r_printreprra)rrrr getwelcomeus z_NNTPBase.getwelcomec Cs|jdkrd|_d|_y|j\}}Wn!ttfk rZi|_YqX||_d|krttt|d|_nd|krdj |d|_qn|jS)zGet the server capabilities, as read by __init__(). If the CAPABILITIES command is not supported, an empty dict is returned.Nr0VERSIONZIMPLEMENTATION ) rb nntp_versionZnntp_implementation capabilitiesrrmaxmapr?r+)rrespcapsrrrrc~s     z_NNTPBase.getcapabilitiescCs ||_dS)zSet the debugging level. Argument 'level' means: 0: no debugging output (default) 1: print commands and responses but not body text etc. 2: also print raw lines read and sent before stripping CR/LFN)r_)rlevelrrrset_debuglevelsz_NNTPBase.set_debuglevelcCsP|t}|jdkr/tdt|n|jj||jjdS)zfInternal: send one line to the server, appending CRLF. The `line` must be a bytes-like object.r0z*put*N)_CRLFr_rrrsr^writeflush)rr8rrr_putlines  z_NNTPBase._putlinecCsH|jrtdt|n|j|j|j}|j|dS)zlInternal: send one command to the server (through _putline()). The `line` must be an unicode string.z*cmd*N)r_rrrsencodeencodingerrorsr)rr8rrr_putcmds z_NNTPBase._putcmdTcCs|jjtd}t|tkr7tdn|jdkr\tdt|n|sktn|r|ddt kr|dd}q|ddt kr|dd }qn|S) zInternal: return one line from the server, stripping _CRLF. Raise EOFError if the connection is closed. Returns a bytes object.r0z line too longz*get*rHNrMrMr) r^readline_MAXLINEr6r r_rrrsror)rZ strip_crlfr8rrr_getlines z_NNTPBase._getlinecCs|j}|jr+tdt|n|j|j|j}|dd}|dkrnt|n|dkrt|n|dkrt |n|S)zInternal: get a response from the server. Raise various errors if the response indicates an error. Returns an unicode string.z*resp*Nr045Z123) rr_rrrsr*rrrrr )rr{crrrr`s     z_NNTPBase._getrespc CsYd}z2t|ttfr4t|d}}n|j}|ddtkret|ng}|dk rdtdf}x|jd}||krPn|j dr|dd}n|j |qWnXd}xO|j}||krPn|j dr&|dd}n|j |qWWd|rN|j nX||fS) aQInternal: get a response plus following text from the server. Raise various errors if the response indicates an error. Returns a (response, lines) tuple where `response` is an unicode string and `lines` is a list of bytes objects. If `file` is a file-like object, it must be open in binary mode. Nwb.s. Fs..r0) r(strropenr` _LONGRESPrrrrArr)close)rr^Z openedFiler{rZ terminatorsr8Z terminatorrrr _getlongresps8      z_NNTPBase._getlongrespcCs|j||jS)zWInternal: send a command and get the response. Same return value as _getresp().)rr`)rr8rrr _shortcmds z_NNTPBase._shortcmdcCs|j||j|S)zoInternal: send a command and get the response plus following text. Same return value as _getlongresp().)rr)rr8r^rrr_longcmds z_NNTPBase._longcmdcs?j|j|\}}|fdd|DfS)zInternal: send a command and get the response plus following text. Same as _longcmd() and _getlongresp(), except that the returned `lines` are unicode strings rather than bytes objects. cs(g|]}|jjjqSr)r*rr).0r8)rrr s z,_NNTPBase._longcmdstring..)rr)rr8r^r{listr)rr_longcmdstrings z_NNTPBase._longcmdstringcCswy |jSWntk rYnXy|jd\}}Wn"tk r]tdd}Yn Xt|}||_|S)zqInternal: get the overview format. Queries the server if not already done, else returns the cached value.zLIST OVERVIEW.FMTN)Z_cachedoverviewfmtAttributeErrorrrr5r<)rr{rr7rrr_getoverviewfmts     z_NNTPBase._getoverviewfmtcCsdd|DS)NcSs"g|]}t|jqSr)rr>)rr8rrrr$s z(_NNTPBase._grouplist..r)rrrrr _grouplist"sz_NNTPBase._grouplistcCsRi}|jd\}}x*|D]"}|j^}}|||)rr|r{rr8r9rBrrrrx&s  z_NNTPBase.capabilitiesr^cCst|tjtjfs9tdj|jjnt||jdk\}}dj||}|j ||\}}||j |fS)zProcess a NEWGROUPS command. Arguments: - date: a date or datetime object Return: - resp: server response if successful - list: list of newsgroup names zAthe date parameter must be a date or datetime object, not '{:40}'rHzNEWGROUPS {0} {1}) r(rNr TypeErrorrS __class__rrUrwrr)rrr^rOrPcmdr{rrrr newgroups4sz_NNTPBase.newgroupscCs|t|tjtjfs9tdj|jjnt||jdk\}}dj|||}|j ||S)zProcess a NEWNEWS command. Arguments: - group: group name or '*' - date: a date or datetime object Return: - resp: server response if successful - list: list of message ids zAthe date parameter must be a date or datetime object, not '{:40}'rHzNEWNEWS {0} {1} {2}) r(rNrrrSrrrUrwr)rr rr^rOrPrrrrnewnewsDsz_NNTPBase.newnewscCsJ|dk rd|}nd}|j||\}}||j|fS)a@Process a LIST or LIST ACTIVE command. Arguments: - group_pattern: a pattern indicating which groups to query - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of (group, last, first, flag) (strings) Nz LIST ACTIVE ZLIST)rr)r group_patternr^commandr{rrrrrTs   z_NNTPBase.listc Cstjd}|jd|\}}|jdsS|jd|\}}ni}xX|D]P}|j|j}|r`|jdd\} } |s| S| || [^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r0rHr&)recompilerrAsearchstripr ) rrZ return_allline_patr{rgroupsraw_linematchr9Zdescrrr_getdescriptionscs  z_NNTPBase._getdescriptionscCs|j|dS)aGet a description for a single group. If more than one group matches ('group' is a pattern), return the first. If no group matches, return an empty string. This elides the response code from the server, since it can only be '215' or '285' (for xgtitle) anyway. If the response code is needed, use the 'descriptions' method. NOTE: This neither checks for a wildcard in 'group' nor does it check whether the group actually exists.F)r)rr rrr descriptionzs z_NNTPBase.descriptioncCs|j|dS)z'Get descriptions for a range of groups.T)r)rrrrr descriptionssz_NNTPBase.descriptionscCs|jd|}|jds1t|n|j}d}}}t|}|dkr|d}|dkr|d}|dkr|d}|dkr|dj}qqqn|t|t|t||fS)aProcess a GROUP command. Argument: - group: the group name Returns: - resp: server response if successful - count: number of articles - first: first article number - last: last article number - name: the group name zGROUP rrr0rHrrI)rrArr>r6r2r?)rr9r{wordscountr"r!nrrrr s          z_NNTPBase.groupcCs|jd|S)aProcess a HELP command. Argument: - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of strings returned by the server in response to the HELP command ZHELP)r)rr^rrrhelpsz_NNTPBase.helpcCsQ|jdst|n|j}t|d}|d}|||fS)z_Internal: parse the response line of a STAT, NEXT, LAST, ARTICLE, HEAD or BODY command.Z22r0rH)rArr>r?)rr{rart_numr$rrr _statparses   z_NNTPBase._statparsecCs|j|}|j|S)z/Internal: process a STAT, NEXT or LAST command.)rr)rr8r{rrr_statcmdsz_NNTPBase._statcmdcCs-|r|jdj|S|jdSdS)a(Process a STAT command. Argument: - message_spec: article number or message id (if not specified, the current article is selected) Returns: - resp: server response if successful - art_num: the article number - message_id: the message id zSTAT {0}ZSTATN)rrS)r message_specrrrstats z_NNTPBase.statcCs |jdS)z;Process a NEXT command. No arguments. Return as for STAT.NEXT)r)rrrrnextsz_NNTPBase.nextcCs |jdS)z;Process a LAST command. No arguments. Return as for STAT.ZLAST)r)rrrrr!sz_NNTPBase.lastcCsF|j||\}}|j|\}}}|t|||fS)z2Internal: process a HEAD, BODY or ARTICLE command.)rrr#)rr8r^r{rrr$rrr_artcmdsz_NNTPBase._artcmdcCs4|dk rdj|}nd}|j||S)a0Process a HEAD command. Argument: - message_spec: article number or message id - file: filename string or file object to store the headers in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of header lines) NzHEAD {0}ZHEAD)rSr)rrr^rrrrheads z_NNTPBase.headcCs4|dk rdj|}nd}|j||S)a+Process a BODY command. Argument: - message_spec: article number or message id - file: filename string or file object to store the body in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of body lines) NzBODY {0}ZBODY)rSr)rrr^rrrrbodys z_NNTPBase.bodycCs4|dk rdj|}nd}|j||S)a5Process an ARTICLE command. Argument: - message_spec: article number or message id - file: filename string or file object to store the article in Returns: - resp: server response if successful - ArticleInfo: (article number, message id, list of article lines) Nz ARTICLE {0}ZARTICLE)rSr)rrr^rrrrarticles z_NNTPBase.articlecCs |jdS)zYProcess a SLAVE command. Returns: - resp: server response if successful ZSLAVE)r)rrrrslavesz_NNTPBase.slavecsbtjd|jdj|||\}}fdd|fdd|DfS)aiProcess an XHDR command (optional server extension). Arguments: - hdr: the header type (e.g. 'subject') - str: an article nr, a message id, or a range nr1-nr2 - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of (nr, value) strings z^([0-9]+) ?(.*) ?z XHDR {0} {1}cs)j|}|r%|jddS|S)Nr0rH)rr )r8m)patrr remove_numbersz%_NNTPBase.xhdr..remove_numbercsg|]}|qSrr)rr8)rrrrs z"_NNTPBase.xhdr..)rrrrS)rZhdrrr^r{rr)rrrxhdr s $z_NNTPBase.xhdrcCsC|jdj|||\}}|j}|t||fS)aFProcess an XOVER command (optional server extension) Arguments: - start: start of range - end: end of range - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of dicts containing the response fields z XOVER {0}-{1})rrSrrF)rstartendr^r{rr7rrrxovers  z_NNTPBase.xoverc Csd|jkrdnd}t|ttfr[|\}}|dj||pQd7}n|dk rx|d|}n|j||\}}|j}|t||fS)aProcess an OVER command. If the command isn't supported, fall back to XOVER. Arguments: - message_spec: - either a message id, indicating the article to fetch information about - or a (start, end) tuple, indicating a range of article numbers; if end is None, information up to the newest message will be retrieved - or None, indicating the current article number must be used - file: Filename string or file object to store the result in Returns: - resp: server response if successful - list: list of dicts containing the response fields NOTE: the "message id" form isn't supported by XOVER ZOVERZXOVERz {0}-{1}r&Nrv)rbr(tuplerrSrrrF) rrr^rrrr{rr7rrrover(s   z_NNTPBase.overc Cstjdtdtjd}|jd||\}}g}xE|D]=}|j|j}|rK|j|j ddqKqKW||fS)zProcess an XGTITLE command (optional server extension) Arguments: - group: group name wildcard (i.e. news.*) Returns: - resp: server response if successful - list: list of (name,title) stringszFThe XGTITLE extension is not actively used, use descriptions() insteadrHz^([^ ]+)[ ]+(.*)$zXGTITLE r0) warningswarnDeprecationWarningrrrrrr)r ) rr r^rr{Z raw_linesrrrrrrxgtitleCs    z_NNTPBase.xgtitlec Cstjdtd|jdj|}|jdsIt|ny|j\}}Wntk rt|Yn X||fSdS)zProcess an XPATH command (optional server extension) Arguments: - id: Message id of article Returns: resp: server response if successful path: directory path to article z(The XPATH extension is not actively usedrHz XPATH {0}Z223N) rrrrrSrArr> ValueError)ridr{Zresp_numpathrrrxpathUs   z_NNTPBase.xpathcCs|jd}|jds-t|n|j}t|dkrZt|n|d}t|dkrt|n|t|dfS)zProcess the DATE command. Returns: - resp: server response if successful - date: datetime object ZDATEZ111rHr0N)rrArr>r6r rR)rr{elemrrrrris  z_NNTPBase.datecCs|j|}|jds-t|nt|ttfrQ|j}nx_|D]W}|jts|j dt}n|jdrd|}n|j j |qXW|j j d|j j |j S)N3s rs. )rrArr(r bytearray splitlinesendswithrrstripr^rrr`)rrfr{r8rrr_postzs   z_NNTPBase._postcCs|jd|S)zProcess a POST command. Arguments: - data: bytes object, iterable or file containing the article Returns: - resp: server response if successfulZPOST)r)rdatarrrpostsz_NNTPBase.postcCs|jdj||S)a Process an IHAVE command. Arguments: - message_id: message-id of the article - data: file containing the article Returns: - resp: server response if successful Note that if the server refuses the article an exception is raised.z IHAVE {0})rrS)rr$rrrrihavesz_NNTPBase.ihavecCs|jj|`dS)N)r^r)rrrrrps z_NNTPBase._closec Cs%z|jd}Wd|jX|S)zdProcess a QUIT command and close the socket. Returns: - resp: server response if successfulZQUITN)rrp)rr{rrrrms z_NNTPBase.quitc Csi|jrtdn| r5| r5tdny[|r| rddl}|j}|j|j}|r|d}|d}qnWntk rYnX|sdS|jd|}|jdr|st|q|jd|}|jdst |qnd|_ |j |j red |j kre|j d|_ |j ndS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrHzauthinfo user Z381zauthinfo pass Z281r\)rgrnetrcZauthenticatorsr]rnrrArrrbrcrdre)ruserpasswordusenetrcrZ credentialsZauthr{rrrlogins<           z_NNTPBase.logincCsty|jd|_WnWtk r*YnFtk ro}z&|jjdrZd|_nWYdd}~XnXdS)Nz mode readerZ480T)rrarrr rArd)rerrrres  z_NNTPBase._setreadermodecCs|jrtdn|jr0tdn|jd}|jdr|jjt|j||j |_|jj d|_d|_d|_ |j n t ddS) zzProcess a STARTTLS command. Arguments: - context: SSL context to use for the encrypted connection zTLS is already enabled.z+TLS cannot be started after authentication.STARTTLSZ382rwbTNzTLS failed to start.)rfrrgrrAr^rrYrWr]makefilerbrcr)rrXr{rrrstarttlss      z_NNTPBase.starttls)9rrrrrrr rjrqrtrcr~debugrrrr`rrrrrrrxrrrrrrr rrrrrr!rrrrrrrrrrrrrrrprmrre _have_sslrrrrrrZ(sj .      .                 ) rZc@s:eZdZeddddeddZddZdS)rNFc Cs||_||_tj||f||_d}yQ|jjd}tj||||||sm|r|j|||nWn+|r|j n|jj YnXdS)a,Initialize an instance. Arguments: - host: hostname to connect to - port: port to connect to (default the standard NNTP port) - user: username to authenticate with - password: password to use with username - readermode: if true, send 'mode reader' command after connecting. - usenetrc: allow loading username and password from ~/.netrc file if not specified explicitly - timeout: timeout (in seconds) used for socket connections readermode is sometimes necessary if you are connecting to an NNTP server on the local machine and intend to call reader-specific commands, such as `group'. If you get unexpected NNTPPermanentErrors, you might need to set readermode. Nr) r]portsocketcreate_connectionrWrrZr rr) rr]rrrrhrrir^rrrr s      z NNTP.__init__c Cs&ztj|Wd|jjXdS)N)rZrprWr)rrrrrp!sz NNTP._close)rrr NNTP_PORTrr rprrrrrs  "c @s=eZdZedddddeddZddZdS)NNTP_SSLNFc Cstj||f||_d} yot|j|||_|jjd} tj|| |d|d||sy|r|j|||nWn+| r| jn|jjYnXdS)zThis works identically to NNTP.__init__, except for the change in default port and the `ssl_context` argument for SSL connections. Nrrhri) rrrWrYrrZr rr) rr]rrrZ ssl_contextrhrrir^rrrr +s    zNNTP_SSL.__init__c Cs&ztj|Wd|jjXdS)N)rZrprWr)rrrrrpAszNNTP_SSL._close)rrr NNTP_SSL_PORTrr rprrrrr)s  r__main__rzJ nntplib built-in demo - display the latest articles in a newsgroupz-gz--groupdefaultzgmane.comp.python.generalrz3group to fetch messages from (default: %(default)s)z-sz--serverznews.gmane.orgz+NNTP server hostname (default: %(default)s)z-pz--portr0typez#NNTP port number (default: %s / %s)z-nz --nb-articles z2number of articles to fetch (default: %(default)s)z-Sz--sslaction store_truezuse NNTP over SSLr]rrZGroupZhaszarticles, rangeZtocCs1t||kr-|d|dd}n|S)NrIz...)r6)sZlimrrrcutlsrZauthorrrrSrmrrrrs&                -              !   )lib64/python3.4/__pycache__/colorsys.cpython-34.pyo000064400000007113152342604300015760 0ustar00 e f@sdZddddddgZdZdZdZd dZd dZd dZddZddZ ddZ ddZ dS)aJConversion functions between RGB and other color systems. This modules provides two functions for each color system ABC: rgb_to_abc(r, g, b) --> a, b, c abc_to_rgb(a, b, c) --> r, g, b All inputs and outputs are triples of floats in the range [0.0...1.0] (with the exception of I and Q, which covers a slightly larger range). Inputs outside the valid range may cause exceptions or invalid outputs. Supported color systems: RGB: Red, Green, Blue components YIQ: Luminance, Chrominance (used by composite video signals) HLS: Hue, Luminance, Saturation HSV: Hue, Saturation, Value rgb_to_yiq yiq_to_rgb rgb_to_hls hls_to_rgb rgb_to_hsv hsv_to_rgbg?g@g@g@cCs[d|d|d|}d||d||}d||d||}|||fS)Ng333333?gzG?g)\(?gGz?gHzG?gQ?g= ףp=?)rgbyiqrr-/opt/alt/python34/lib64/python3.4/colorsys.pyr(scCs|d|d|}|d|d|}|d|d|}|dkrWd}n|dkrld}n|dkrd}n|dkrd}n|dkrd}n|dkrd}n|||fS) Ng2rL?g,?g:?gnєW?g6޷?gJ"X?gg?r)r r r rr r rrrr.s             c Cst|||}t|||}||d}||krKd|dfS|dkrl||||}n||d||}||||}||||}||||} ||kr| |} n+||krd|| } nd||} | dd} | ||fS)Ng@gg?g@g@g?)maxmin) rr r maxcminclsrcgcbchrrrrKs$      cCs|dkr|||fS|dkr6|d|}n||||}d||}t|||tt|||t|||tfS)Ngg?g?g@)_v ONE_THIRD)rrrm2m1rrrrbs   cCsb|d}|tkr*||||dS|dkr:|S|tkr^|||t|dS|S)Ng?g@g?) ONE_SIXTH TWO_THIRD)rrZhuerrrrls    rc Cst|||}t|||}|}||krCdd|fS|||}||||}||||}||||} ||kr| |} n+||krd|| } nd||} | dd} | ||fS)Ngg@g@g@g?)rr) rr r rrvrrrrrrrrr|s      cCs|dkr|||fSt|d}|d|}|d|}|d||}|d|d|}|d}|dkr|||fS|dkr|||fS|dkr|||fS|dkr|||fS|d kr|||fS|d kr |||fSdS) Ngg@g?)int)rrrr fpr trrrrs(              NgUUUUUU?gUUUUUU?gUUUUUU?) __doc____all__rrrrrrrrrrrrrrs       lib64/python3.4/__pycache__/sre_parse.cpython-34.pyc000064400000047416152342604300016064 0ustar00 e fz@sdZddlTddlmZdZdZedZedZedZ ed Z ie e d fd 6e e d fd 6e e dfd6e e dfd6e e dfd6e e dfd6e e dfd6e e dfd6Z i eefd6eefd 6eefd6eeefgfd6eeefgfd6eeefgfd6eeefgfd6eeefgfd 6eeefgfd!6eefd"6Zied#6ed$6ed%6ed&6e d'6e!d(6e"d)6e#d*6Z$Gd+d,d,Z%Gd-d.d.Z&Gd/d0d0Z'd1d2Z(d3d4Z)d5d6Z*d7d8Z+d9d:Z,d;d<d=Z-d>d?Z.ed@Z/edAZ0edBZ1ee2e3gZ4dCdDZ5dEdFZ6ddGdHdIZ7dJdKZ8dLdMZ9dGS)NzInternal support module for sre)*) MAXREPEATz .\[{()*+?^$|z*+?{ 0123456789Z01234567Z0123456789abcdefABCDEFz z\az\b z\f z\n z\r z\t z\v\z\\z\Az\Bz\dz\Dz\sz\Sz\wz\Wz\ZiLmsxatuc@sCeZdZddZdddZddZdd ZdS) PatterncCs1d|_g|_d|_i|_d|_dS)Nr)flagsopengroups groupdict lookbehind)selfr./opt/alt/python34/lib64/python3.4/sre_parse.py__init__Cs     zPattern.__init__NcCs|j}|d|_|dk ru|jj|d}|dk retdt|||fn||j|)rrrErFrGrrrr_parse_sub_conds rz|)z=!zmissing group namezbad character in group name %r=rz&bad character in backref group name %rzunknown group name: {0!r}z;group references in lookbehind assertions are not supportedzunexpected end of patternzunknown specifier: ?P%s:zunbalanced parenthesisz syntax errorzbad character in group namezunknown extension$z parser error)Nr)rrrrr)5r.r#r rsrI_PATTERNENDERS _ASSERTCHARS_LOOKBEHINDASSERTCHARS _REPEATCODESrlrSRE_FLAG_VERBOSE WHITESPACE SPECIAL_CHARSrUrNEGATErr!r:rTrV REPEAT_CHARSrr{rr|r OverflowErrorATrXrYrS isidentifierrformatrrrrrrASSERT ASSERT_NOTrFLAGSr'rr)r^ AT_BEGINNINGAT_ENDr)"rrrr sourcegetr_len PATTERNENDERS ASSERTCHARSLOOKBEHINDASSERTCHARSrcrtrrstartcode1code2r`rar[r\hererrr$rEror%msgrdirpcondnamerOrrrrs                         &:                -                                                       rcCs_t|trB|t@s&|tO}q[|t@r[tdq[n|t@r[tdn|S)Nz(ASCII and UNICODE flags are incompatiblez+can't use UNICODE flag with a bytes pattern)r?rhSRE_FLAG_ASCIISRE_FLAG_UNICODEr)srcrrrr fix_flagss    rNcCst|}|dkr$t}n||_||_t||d}t||jj|j_|j}|dkrtdn|rtdn|t @r|j n|t @ r|jjt @rt ||jjS|S)Nrrzunbalanced parenthesisz-bogus characters at end of regular expression) rgrrrhrrr/r r!SRE_FLAG_DEBUGr=rparse)rhrr/rrtailrrrrs"         rc snt|}|j}gggj}fdd}x|}|dkrdPn|ddkr|d}|dkrd}|jdrxE|} | dkrtd n| d krPn|| 7}qWn|std ny+t|} | dkr&td nWnntk r|jsRtd ny|j|} Wn-t k rdj |} t | YnXYnX|| q|dkr|j t kr||7}|j t kr||7}qn|tt|dddd@q|tkrd} |j tkr||7}|t kr|dt kr|j t kr||7}d} |tt|dddd@qn| s|t|ddqqytt|d}Wnt k rYnX||qK||qKWr?jdjnt|tsdddDnfS)NcsVr,jdjdd=njt|fjddS)Nr3)r#joinrI)rK)rliteralliteralsrraddgroup(s z parse_template..addgrouprr rgr3rzunterminated group namerzmissing group nameznegative group numberzbad character in group namezunknown group name: {0!r}rrrFrRTcSs1g|]'}|dkrdn |jdqS)Nzlatin-1)encode).0rrrr ls z"parse_template..)rgr r#rsr!rrr groupindexKeyErrorrrnrlrrmrrrr?rh) rr/rsgetlappendrrtrpr$rorKrisoctalr)rrrrparse_templates                  *   -   rc Cs|j}|jdd}|\}}|dd}yJxC|D];\}}||||<}|dkrBtdqBqBWWntk rtdYnX|j|S)Nrzunmatched groupzinvalid group reference)rrjr!rnr) templatersrseprrrKrrrrrexpand_templateos    r):__doc__ sre_constants_srerrrrrrrrrUrrrAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYr:rWCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORD AT_END_STRINGrSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLrrSRE_FLAG_TEMPLATErrrr.rgrrrrrrrrrrrXrYrrrrrrrrrr sr         e4   * =;     7  Plib64/python3.4/__pycache__/_bootlocale.cpython-34.pyo000064400000001770152342604300016370 0ustar00 e f @sdZddlZddlZejjdrBdddZn>y ejWn!ek rpdddZYnXdddZdS) zA minimal subset of the locale module used at interpreter startup (imported by the _io module), in order to reduce startup time. Don't import directly from third-party code; use the `locale` module instead! NwinTcCstjdS)N)_localeZ_getdefaultlocale) do_setlocaler0/opt/alt/python34/lib64/python3.4/_bootlocale.pygetpreferredencoding srcCsddl}|j|S)Nr)localer)rr rrrrs cCs5tjtj}| r1tjdkr1d}n|S)NdarwinzUTF-8)r nl_langinfoCODESETsysplatform)rresultrrrrs )__doc__r rr startswithrr AttributeErrorrrrrs    lib64/python3.4/__pycache__/_collections_abc.cpython-34.pyo000064400000056615152342604300017400 0ustar00 e fM@sdZddlmZmZddlZdddddd d d d d dddddddgZdZeedZ eee Z eeij Z eeijZeeijZeegZeeegZeeedZeeeZeedZeefZeeeZeij ZeijZeijZeej Z!GddddeZ"GddddeZ#Gddde#Z$e$j%e e$j%e e$j%e e$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%eGddddeZ&GddddeZ'Gdd d deZ(Gdd d e&e#e'Z)e)j%e*Gd d d e)Z+e+j%eGd!d d e&e#e'Z,e,j%e!Gd"dde&Z-Gd#dde-e)Z.e.j%eGd$dde-e)Z/e/j%eGd%dde-Z0e0j%eGd&d d e,Z1e1j%e2Gd'dde&e#e'Z3e3j%e4e3j%e5e3j%ee3j%e6Gd(dde3Z7e7j%e8e7j%e Gd)dde3Z9e9j%e:e9j%e dS)*zjAbstract Base Classes (ABCs) for collections, according to PEP 3119. Unit tests are in test_collections. )ABCMetaabstractmethodNHashableIterableIteratorSized ContainerCallableSet MutableSetMappingMutableMapping MappingViewKeysView ItemsView ValuesViewSequenceMutableSequence ByteStringzcollections.abcc@s:eZdZfZeddZeddZdS)rcCsdS)Nr)selfrr5/opt/alt/python34/lib64/python3.4/_collections_abc.py__hash__=szHashable.__hash__cCsK|tkrGx8|jD]*}d|jkr|jdr<dSPqqWntS)NrT)r__mro____dict__NotImplemented)clsCBrrr__subclasshook__As   zHashable.__subclasshook__N)__name__ __module__ __qualname__ __slots__rr classmethodr!rrrrr9s  metaclassc@s:eZdZfZeddZeddZdS)rccsdS)Nr)rrrr__iter__PszIterable.__iter__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r(N)r).0r rrr Xsz,Iterable.__subclasshook__..T)ranyrr)rrrrrr!Us zIterable.__subclasshook__N)r"r#r$r%rr(r&r!rrrrrLs c@sFeZdZfZeddZddZeddZdS)rcCs tdS)zKReturn the next item from the iterator. When exhausted, raise StopIterationN) StopIteration)rrrr__next__aszIterator.__next__cCs|S)Nr)rrrrr(fszIterator.__iter__cCsO|tkrKtdd|jDrKtdd|jDrKdSntS)Ncss|]}d|jkVqdS)r-N)r)r)r rrrr*lsz,Iterator.__subclasshook__..css|]}d|jkVqdS)r(N)r)r)r rrrr*msT)rr+rr)rrrrrr!is  zIterator.__subclasshook__N) r"r#r$r%rr-r(r&r!rrrrr]s  c@s:eZdZfZeddZeddZdS)rcCsdS)Nrr)rrrr__len__sz Sized.__len__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r.N)r)r)r rrrr*sz)Sized.__subclasshook__..T)rr+rr)rrrrrr!s zSized.__subclasshook__N)r"r#r$r%rr.r&r!rrrrrs c@s:eZdZfZeddZeddZdS)rcCsdS)NFr)rxrrr __contains__szContainer.__contains__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r0N)r)r)r rrrr*sz-Container.__subclasshook__..T)rr+rr)rrrrrr!s zContainer.__subclasshook__N)r"r#r$r%rr0r&r!rrrrrs c@s:eZdZfZeddZeddZdS)r cOsdS)NFr)rargskwdsrrr__call__szCallable.__call__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r3N)r)r)r rrrr*sz,Callable.__subclasshook__..T)r r+rr)rrrrrr!s zCallable.__subclasshook__N)r"r#r$r%rr3r&r!rrrrr s c@seZdZdZfZddZddZddZdd Zd d Z e d d Z ddZ e Z ddZddZeZddZddZddZeZddZdS)r aZA set is a finite, iterable container. This class provides concrete generic implementations of all methods except for __contains__, __iter__ and __len__. To override the comparisons (presumably for speed, as the semantics are fixed), redefine __le__ and __ge__, then the other operations will automatically follow suit. cCsTt|tstSt|t|kr/dSx|D]}||kr6dSq6WdS)NFT) isinstancer rlen)rotherelemrrr__le__s  z Set.__le__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5r8)rr6rrr__lt__sz Set.__lt__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5__ge__)rr6rrr__gt__sz Set.__gt__cCsTt|tstSt|t|kr/dSx|D]}||kr6dSq6WdS)NFT)r4r rr5)rr6r7rrrr:s  z Set.__ge__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5r8)rr6rrr__eq__sz Set.__eq__cCs ||S)zConstruct an instance of the class from any iterable input. Must override this method if the class constructor signature does not accept an iterable for an input. r)ritrrr_from_iterableszSet._from_iterablecs3t|tstSjfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)value)rrrr*szSet.__and__..)r4rrr>)rr6r)rr__and__sz Set.__and__cCs%x|D]}||krdSqWdS)z1Return True if two sets have a null intersection.FTr)rr6r?rrr isdisjoints  zSet.isdisjointcCs9t|tstSdd||fD}|j|S)Ncss"|]}|D] }|Vq qdS)Nr)r)serrrr*szSet.__or__..)r4rrr>)rr6chainrrr__or__sz Set.__or__csTtts4tts"tS|jn|jfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)r?)r6rrr*szSet.__sub__..)r4r rrr>)rr6r)r6r__sub__s z Set.__sub__csTt|ts4t|ts"tSj|}njfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)r?)rrrr*szSet.__rsub__..)r4r rrr>)rr6r)rr__rsub__ s z Set.__rsub__cCsDt|ts4t|ts"tS|j|}n||||BS)N)r4r rrr>)rr6rrr__xor__s z Set.__xor__cCstj}d|d}t|}d|d}||M}x>|D]6}t|}|||d>AdAdN}||M}qBW|dd}||M}||kr||d8}n|d krd }n|S) a+Compute the hash value of a set. Note that we don't define __hash__: not all sets are hashable. But if you define a hashable set type, its __hash__ should call this function. This must be compatible __eq__. All sets ought to compare equal if they contain the same elements, regardless of how they are implemented, and regardless of the order of the elements; so there's not much freedom for __eq__ or __hash__. We match the algorithm used by the built-in frozenset type. iMriM[l4~2i i6i8#)sysmaxsizer5hash)rMAXMASKnhr/hxrrr_hashs          z Set._hashN)r"r#r$__doc__r%r8r9r;r:r<r&r>r@__rand__rArE__ror__rFrGrH__rxor__rUrrrrr s$          c@seZdZdZfZeddZeddZddZdd Z d d Z d d Z ddZ ddZ ddZdS)r aA mutable set is a finite, iterable container. This class provides concrete generic implementations of all methods except for __contains__, __iter__, __len__, add(), and discard(). To override the comparisons (presumably for speed, as the semantics are fixed), all you have to do is redefine __le__ and then the other operations will automatically follow suit. cCs tdS)zAdd an element.N)NotImplementedError)rr?rrraddLszMutableSet.addcCs tdS)z8Remove an element. Do not raise an exception if absent.N)rZ)rr?rrrdiscardQszMutableSet.discardcCs,||krt|n|j|dS)z5Remove an element. If not a member, raise a KeyError.N)KeyErrorr\)rr?rrrremoveVs zMutableSet.removec CsHt|}yt|}Wntk r6tYnX|j||S)z2Return the popped value. Raise KeyError if empty.)iternextr,r]r\)rr=r?rrrpop\s    zMutableSet.popc Cs.yx|jqWWntk r)YnXdS)z6This is slow (creates N new iterators!) but effective.N)rar])rrrrclearfs  zMutableSet.clearcCs"x|D]}|j|qW|S)N)r[)rr=r?rrr__ior__ns zMutableSet.__ior__cCs&x||D]}|j|q W|S)N)r\)rr=r?rrr__iand__sszMutableSet.__iand__cCsx||kr|jn[t|ts:|j|}nx7|D]/}||krc|j|qA|j|qAW|S)N)rbr4r r>r\r[)rr=r?rrr__ixor__xs    zMutableSet.__ixor__cCs;||kr|jnx|D]}|j|q W|S)N)rbr\)rr=r?rrr__isub__s    zMutableSet.__isub__N)r"r#r$rVr%rr[r\r^rarbrcrdrerfrrrrr >s      c@sseZdZfZeddZdddZddZdd Zd d Z d d Z ddZ dS)r cCs tdS)N)r])rkeyrrr __getitem__szMapping.__getitem__Nc Cs)y ||SWntk r$|SYnXdS)z D[k] if k in D, else d. d defaults to None.N)r])rrgdefaultrrrgets  z Mapping.getc Cs-y ||Wntk r$dSYnXdSdS)NFT)r])rrgrrrr0s    zMapping.__contains__cCs t|S)z:D.keys() -> a set-like object providing a view on D's keys)r)rrrrkeyssz Mapping.keyscCs t|S)z a set-like object providing a view on D's items)r)rrrritemssz Mapping.itemscCs t|S)z6D.values() -> an object providing a view on D's values)r)rrrrvaluesszMapping.valuescCs5t|tstSt|jt|jkS)N)r4r rdictrl)rr6rrrr<szMapping.__eq__) r"r#r$r%rrhrjr0rkrlrmr<rrrrr s      c@s4eZdZddZddZddZdS)rcCs ||_dS)N)_mapping)rmappingrrr__init__szMappingView.__init__cCs t|jS)N)r5ro)rrrrr.szMappingView.__len__cCs dj|S)Nz&{0.__class__.__name__}({0._mapping!r}))format)rrrr__repr__szMappingView.__repr__N)r"r#r$rqr.rsrrrrrs   c@s:eZdZeddZddZddZdS)rcCs t|S)N)set)rr=rrrr>szKeysView._from_iterablecCs ||jkS)N)ro)rrgrrrr0szKeysView.__contains__ccs|jDdHdS)N)ro)rrrrr(szKeysView.__iter__N)r"r#r$r&r>r0r(rrrrrs  c@s:eZdZeddZddZddZdS)rcCs t|S)N)rt)rr=rrrr>szItemsView._from_iterablec CsD|\}}y|j|}Wntk r5dSYn X||kSdS)NF)ror])ritemrgr?vrrrr0s    zItemsView.__contains__ccs*x#|jD]}||j|fVq WdS)N)ro)rrgrrrr(szItemsView.__iter__N)r"r#r$r&r>r0r(rrrrrs  c@s(eZdZddZddZdS)rcCs/x(|jD]}||j|kr dSq WdS)NTF)ro)rr?rgrrrr0szValuesView.__contains__ccs$x|jD]}|j|Vq WdS)N)ro)rrgrrrr(szValuesView.__iter__N)r"r#r$r0r(rrrrrs  c@seZdZfZeddZeddZeZeddZ ddZ d d Z d d Z d ddZ d S)r cCs tdS)N)r])rrgr?rrr __setitem__szMutableMapping.__setitem__cCs tdS)N)r])rrgrrr __delitem__szMutableMapping.__delitem__c CsKy||}Wn+tk r;||jkr3n|SYn X||=|SdS)zD.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised. N)r]_MutableMapping__marker)rrgrir?rrrras  zMutableMapping.popc CsLytt|}Wntk r0tYnX||}||=||fS)zD.popitem() -> (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty. )r`r_r,r])rrgr?rrrpopitem+s   zMutableMapping.popitemc Cs.yx|jqWWntk r)YnXdS)z,D.clear() -> None. Remove all items from D.N)rzr])rrrrrb7s  zMutableMapping.clearcOs|stdn|^}}t|dkrLtdt|n|r|d}t|trxw|D]}|||| None. Update D from mapping/iterable E and F. If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v z@descriptor 'update' of 'MutableMapping' object needs an argumentrJz+update expected at most 1 arguments, got %drrkN) TypeErrorr5r4r hasattrrkrl)r1r2rr6rgr?rrrupdate?s$   zMutableMapping.updateNc Cs/y ||SWntk r*||| D.get(k,d), also set D[k]=d if k not in D)r])rrgrirrr setdefaultZs   zMutableMapping.setdefault)r"r#r$r%rrwrxobjectryrarzrbr}r~rrrrr s     c@sjeZdZdZfZeddZddZddZdd Z d d Z d d Z dS)rzAll the operations on a read-only sequence. Concrete subclasses must override __new__ or __init__, __getitem__, and __len__. cCs tdS)N) IndexError)rindexrrrrhrszSequence.__getitem__c csGd}y$x||}|V|d7}q WWntk rBdSYnXdS)NrrJ)r)rirvrrrr(vs  zSequence.__iter__cCs%x|D]}||krdSqWdS)NTFr)rr?rvrrrr0s  zSequence.__contains__ccs0x)ttt|D]}||VqWdS)N)reversedranger5)rrrrr __reversed__szSequence.__reversed__cCs7x*t|D]\}}||kr |Sq WtdS)z|S.index(value) -> integer -- return first index of value. Raises ValueError if the value is not present. N) enumerate ValueError)rr?rrvrrrrs zSequence.indexcstfdd|DS)zBS.count(value) -> integer -- return number of occurrences of valuec3s!|]}|krdVqdS)rJNr)r)rv)r?rrr*sz!Sequence.count..)sum)rr?r)r?rcountszSequence.countN) r"r#r$rVr%rrhr(r0rrrrrrrrhs    c@seZdZdZfZdS)rzMThis unifies bytes and bytearray. XXX Should add all their methods. N)r"r#r$rVr%rrrrrs c@seZdZfZeddZeddZeddZddZd d Z d d Z d dZ dddZ ddZ ddZdS)rcCs tdS)N)r)rrr?rrrrwszMutableSequence.__setitem__cCs tdS)N)r)rrrrrrxszMutableSequence.__delitem__cCs tdS)z3S.insert(index, value) -- insert value before indexN)r)rrr?rrrinsertszMutableSequence.insertcCs|jt||dS)z:S.append(value) -- append value to the end of the sequenceN)rr5)rr?rrrappendszMutableSequence.appendc Cs.yx|jqWWntk r)YnXdS)z,S.clear() -> None -- remove all items from SN)rar)rrrrrbs  zMutableSequence.clearcCsXt|}xEt|dD]3}|||d||||<|||d item -- remove and return item at index (default last). Raise IndexError if list is empty or index is out of range. r)rrrvrrrras zMutableSequence.popcCs||j|=dS)zvS.remove(value) -- remove first occurrence of value. Raise ValueError if the value is not present. N)r)rr?rrrr^szMutableSequence.removecCs|j||S)N)r)rrmrrr__iadd__s zMutableSequence.__iadd__NrL)r"r#r$r%rrwrxrrrbrrrar^rrrrrrs       );rVabcrrrM__all__r"typer_bytes_iterator bytearraybytearray_iteratorrkdict_keyiteratorrmdict_valueiteratorrldict_itemiterator list_iteratorrlist_reverseiteratorrrange_iteratorrt set_iterator str_iteratortuple_iteratorzip zip_iterator dict_keys dict_values dict_itemsr mappingproxyrrrregisterrrr r frozensetr r rrrrr rnrtuplestr memoryviewrbytesrlistrrrrs                   O 0     \ /      A lib64/python3.4/__pycache__/macpath.cpython-34.pyo000064400000013566152342604300015531 0ustar00 e f @sdZddlZddlTddlZddlTdddddd d d d d ddddddddddddddddddd d!d"d#g Zd$Zd%Zd&Zd$Zd'Z d$Z dZ d(Z d)d*Z d+dZd,dZd-dZd.dZd/d Zejje_d0dZd1d Zd2d Zd3d4Zd5dZd6dZd7dZd8dZGd9d:d:eZd;dZd<dZd=d"Z d>Z!dS)?z7Pathname and path-related operations for the Macintosh.N)*normcaseisabsjoin splitdrivesplitsplitextbasenamedirname commonprefixgetsizegetmtimegetatimegetctimeislinkexistslexistsisdirisfile expanduser expandvarsnormpathabspathcurdirpardirseppathsepdefpathaltsepextsepdevnullrealpathsupports_unicode_filenames:z::. zDev:NullcCst|trdSdSdS)N:r#) isinstancebytes)pathr*,/opt/alt/python34/lib64/python3.4/macpath.py _get_colonsr,cCs=t|ttfs3tdj|jjn|jS)Nz2normcase() argument must be str or bytes, not '{}')r'r(str TypeErrorformat __class____name__lower)r)r*r*r+r"s cCs,t|}||ko+|dd|kS)zReturn true if a path is absolute. On the Mac, relative paths begin with a colon, but as a special case, paths with no colons at all are also relative. Anything else is absolute (the string up to the first colon is the volume name).N)r,)scolonr*r*r+r)s cGst|}|}x|D]}| s2t|r>|}qn|dd|krg|dd}n||kr||}n|dd|kr||}n||}qW|S)Nr3)r,r)r4pr5r)tr*r*r+r4s     cCst|}||kr,|dd|fSd}xAtt|D]-}|||d|krE|d}qEqEW|d|d||d}}|r||kr||}n||fS)zSplit a pathname into two parts: the directory leading up to the final bit, and the basename (the filename, without colons, in that directory). The result (s, t) is such that join(s, t) yields the original argument.Nrr3)r,rangelen)r4r5colir)filer*r*r+rEs  % cCs?t|tr%tj|dtdStj|tttSdS)Nr&.)r'r( genericpath _splitextrrr)r7r*r*r+rUscCs|dd|fS)a@Split a pathname into a drive specification and the rest of the path. Useful on DOS/Windows/NT; on the Mac, the drive is always empty (don't use the volume name -- it doesn't have the same syntactic and semantic oddities as DOS drive letters, such as there being a separate current directory per drive).Nrr*)r7r*r*r+r\scCst|dS)Nr)r)r4r*r*r+r hscCst|dS)Nr3)r)r4r*r*r+r iscCs7t|sdSt|}t|dko6|d S)NFr3)rrr:)r4 componentsr*r*r+ismountks  rCc Cs:y'ddl}|jj|ddSWn dSYnXdS)z6Return true if the pathname refers to a symbolic link.rNrAF) Carbon.FileFileZResolveAliasFile)r4Carbonr*r*r+rqs  c Cs0ytj|}Wntk r+dSYnXdS)zCTest whether a path exists. Returns True for broken symbolic linksFT)oslstatOSError)r)str*r*r+r}s   cCs|S)zEDummy to retain interface-compatibility with other operating systems.r*)r)r*r*r+rscCs|S)zEDummy to retain interface-compatibility with other operating systems.r*)r)r*r*r+rsc@seZdZdZdS) norm_errorzPath cannot be normalizedN)r1 __module__ __qualname____doc__r*r*r*r+rKs rKcCst|}||kr ||S|j|}d}xz|t|dkr|| r||dr|dkr||d|d=|d}qtdq8|d}q8W|j|}|dd|krt|dkr||t|kr|dd}n|S)zLNormalize a pathname. Will return the same result for equivalent paths.r3z+Cannot use :: immediately after volume nameNrAr6r6)r,rr:rKr)r4r5compsr<r*r*r+rs     >cCsRt|sHt|tr*tj}n tj}t||}nt|S)zReturn an absolute path.)rr'r(rGgetcwdbgetcwdrr)r)cwdr*r*r+rs   cCst|}yddl}Wntk r4|SYnX|s?|St|}|j|}|d|}xe|ddD]S}t||}y#|jj|ddj}Wqy|jj k rYqyXqyW|S)Nrr3) rrD ImportErrorr,rrrEZFSResolveAliasFileZ as_pathnameError)r)rFr5rBcr*r*r+r!s"    # T)"rNrGstatr?__all__rrrrrrrr r,rrrrrr@rr r rCrrrr ExceptionrKrrr!r"r*r*r*r+sL                 lib64/python3.4/__pycache__/dis.cpython-34.pyc000064400000034373152342604300014656 0ustar00 e fC @s`dZddlZddlZddlZddlZddlTddlmZddddd d d d d ddg eZ[ejej ej e fZ ddZ dddddZdddddZidd6dd6dd6dd6dd6dd 6d!d"6Zd#d$Zd%d&Zd'dZd(d)Zddd*d Zejd+d,ZGd-ddeZd.dd/d Zd0d1Zd2d3Zddddddd4d5ZdBddd6dZdCdddddddd7dd8d9Zddd:d;ZeZ d<d Z!d=d Z"Gd>ddZ#d?d@Z$e%dAkr\e$ndS)Dz0Disassembler of Python byte code into mnemonics.N)*)__all__ code_infodis disassembledistbdiscofindlinestarts findlabels show_codeget_instructions InstructionBytecodec CsAyt||d}Wn$tk r<t||d}YnX|S)zAttempts to compile the given source, first as an expression and then as a statement if the first approach fails. Utility function to accept strings in functions that otherwise expect code objects evalexec)compile SyntaxError)sourcenamecr(/opt/alt/python34/lib64/python3.4/dis.py _try_compiles  rfilecCs|dkrtd|dSt|dr8|j}nt|drS|j}nt|drt|jj}x|D]\}}t|tr~t d|d|yt |d|Wn8t k r}zt d|d|WYdd}~XnXt d|q~q~Wnt|dr5t |d|nct|t tfr]t|d|n;t|trt|d|nt d t|jdS) znDisassemble classes, methods, functions, or code. With no argument, disassemble the last traceback. Nr__func____code____dict__zDisassembly of %s:zSorry:co_codez(don't know how to disassemble %s objects)rhasattrrrsortedritems isinstance _have_codeprintr TypeErrorrbytes bytearray_disassemble_bytesstr_disassemble_strtype__name__)xrr rZx1msgrrrrs2    &c Csv|dkrVy tj}Wntk r9tdYnXx|jrR|j}q=Wnt|jj|jd|dS)z2Disassemble a traceback (default: last traceback).Nz no last traceback to disassembler) syslast_tracebackAttributeError RuntimeErrortb_nextrtb_framef_codetb_lasti)tbrrrrr@s    Z OPTIMIZEDZ NEWLOCALSZVARARGSZ VARKEYWORDSZNESTEDZ GENERATOR ZNOFREE@cCsg}xqtdD]P}d|>}||@r|jtj|t|||N}|scPqcqqW|jt|dj|S)z+Return pretty representation of code flags.r<r7z, )rangeappendCOMPILER_FLAG_NAMESgethexjoin)flagsnamesiZflagrrr pretty_flagsWs    rGcCst|dr|j}nt|dr6|j}nt|trWt|d}nt|drj|Stdt|jdS)zAHelper to handle methods, functions, strings and raw code objectsrrz rz(don't know how to disassemble %s objectsN) rrrr!r(rr$r*r+)r,rrr_get_code_objectes  rHcCstt|S)z1Formatted details of methods, functions, or code.)_format_code_inforH)r,rrrrrscCsg}|jd|j|jd|j|jd|j|jd|j|jd|j|jd|j|jdt|j|j r|jdx+t |j D]}|jd |qWn|j r |jd x+t |j D]}|jd |qWn|j rd|jd x+t |j D]}|jd |qFWn|j r|jd x+t |j D]}|jd |qWn|jr|jdx+t |jD]}|jd |qWndj|S)NzName: %szFilename: %szArgument count: %szKw-only arguments: %szNumber of locals: %szStack size: %szFlags: %sz Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables: )r?co_name co_filename co_argcountco_kwonlyargcount co_nlocals co_stacksizerGco_flags co_consts enumerateco_names co_varnames co_freevars co_cellvarsrC)colinesZi_cZi_nrrrrIvs:          rIcCstt|d|dS)z}Print details of methods, functions, or code to *file*. If *file* is not provided, the output is printed on stdout. rN)r#r)rXrrrrr s _InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetc@s(eZdZdZddddZdS)r aKDetails for a bytecode operation Defined fields: opname - human readable name for operation opcode - numeric code for operation arg - numeric argument to operation (if any), otherwise None argval - resolved arg value (if known), otherwise same as arg argrepr - human readable description of operation argument offset - start index of operation within bytecode sequence starts_line - line started by this opcode (if any), otherwise None is_jump_target - True if other code jumps to here, otherwise False FcCs9g}|rP|jdk r<d|}|j||jqP|jd|n|rf|jdn |jd|jr|jdn |jd|jt|jjd|j|jjd |jdk r&|jt|jjd |j r&|jd |j d q&ndj |j S) zFormat instruction details for inclusion in disassembly output *lineno_width* sets the width of the line number field (0 omits it) *mark_as_current* inserts a '-->' marker arrow as part of the line Nz%%%dd z-->z z>>z r9()) starts_liner?is_jump_targetreproffsetrjustopnameljustargargreprrCrstrip)self lineno_widthZmark_as_currentZfieldsZ lineno_fmtrrr _disassembles&     zInstruction._disassembleN)r+ __module__ __qualname____doc__rmrrrrr s  first_linecCsxt|}|j|j}tt|}|dk rJ||j}nd}t|j|j|j |j |||S)aIterator for the opcodes in methods, functions or code Generates a series of Instruction named tuples giving the details of each operations in the supplied code. If *first_line* is not None, it indicates the line number that should be reported for the first source line in the disassembled code. Otherwise, the source line information (if any) is taken directly from the disassembled code object. Nr) rHrWrVdictr co_firstlineno_get_instructions_bytesrrUrTrR)r,rqrX cell_names linestarts line_offsetrrrr s   cCs/|}|dk r||}n|t|fS)zHelper to get optional details about const references Returns the dereferenced constant and its repr if the constant list is defined. Otherwise returns the constant index and its repr(). N)rc)Z const_indexZ const_listargvalrrr_get_const_infos  rycCs;|}|dk r%||}|}n t|}||fS)zHelper to get optional details about named references Returns the dereferenced name as both value and repr if the name list is defined. Otherwise returns the name index and its repr(). N)rc)Z name_indexZ name_listrxrirrr_get_name_infos     rzc cs@t|}d}d} d} t|} d} x | | kr;|| } | }|dk r|j| d} | dk r| |7} qn| |k}| d} d}d}d}| tkr|| || dd|}d}| d} | tkr|d}n|}| tkr.t||\}}q| tkrRt||\}}q| t kr{| |}dt |}q| t krt||\}}q| t krt |}|}q| tkrt||\}}q| tkrd || d|| df}qntt| | ||||| |Vq3WdS) a&Iterate over the instructions in a bytecode string. Generates a sequence of Instruction namedtuples giving the details of each opcode. Additional information about the code's runtime environment (e.g. variable names, constants) can be specified using optional arguments. rNr7r8izto z%d positional, %d keyword pair)r lenrA HAVE_ARGUMENTZ EXTENDED_ARGZhasconstryZhasnamerzhasjrelrcZhaslocalZ hascompareZcmp_opZhasfreeZhasnargsr rf)codevarnamesrE constantscellsrvrwlabelsZ extended_argraZfreenrFoprdrbrhrxrirrrrtsX                     &  rtc CsT|j|j}tt|}t|j||j|j|j||d|dS)zDisassemble a code object.rN) rWrVrrr r'rrUrTrR)rXlastirrurvrrrrAsrwc Cs|dk } | rdnd} xt||||||d|D]k} | og| jdk og| jdk} | rtd|n| j|k} t| j| | d|q@WdS)Nr[rrwr)rtrardr#rm)rrrrErrrvrrwZ show_linenorlZinstrZnew_source_lineZis_current_instrrrrr'Hs   r'cCstt|dd|dS)zrN)rr)rrrrrr)Zsr)cCsg}t|}d}x||kr||}|d}|tkr||||dd}|d}d}|tkr||}n|tkr|}n|dkr||kr|j|qqqqW|S)z`Detect all offsets in a byte code which are jump targets. Return the list of offsets. rr7r|r8)r}r~rZhasjabsr?)rrrrFrrhZlabelrrrr `s$           ccst|jddd}t|jddd}d}|j}d}xZt||D]I\}}|r||kr||fV|}n||7}n||7}q]W||kr||fVndS)zFind the offsets in a byte code which are start of lines in the source. Generate pairs (offset, lineno) as described in Python/compile.c. rNr8r7)list co_lnotabrszip)rZbyte_incrementsZline_incrementsZ lastlinenolinenoZaddrZ byte_incrZ line_incrrrrr {s      c@speZdZdZddddddZddZd d Zed d Zd dZ ddZ dS)rzThe bytecode operations of a piece of code Instantiate this with a function, method, string of code, or a code object (as returned by compile()). Iterating over this yields the bytecode operations as Instruction instances. rqNcurrent_offsetcCst||_}|dkr7|j|_d|_n||_||j|_|j|j|_tt ||_ ||_ ||_ dS)Nr) rHcodeobjrsrq _line_offsetrWrV _cell_namesrrr _linestarts_original_objectr)rkr,rqrrXrrr__init__s     zBytecode.__init__c Cs=|j}t|j|j|j|j|j|jd|jS)Nrw) rrtrrUrTrRrrr)rkrXrrr__iter__s    zBytecode.__iter__cCsdj|jj|jS)Nz{}({!r}))format __class__r+r)rkrrr__repr__szBytecode.__repr__cCs2x|jr|j}qW||jjd|jS)z/ Construct a Bytecode from the given traceback r)r2r3r4r5)clsr6rrrfrom_tracebacks  zBytecode.from_tracebackcCs t|jS)z3Return formatted information about the code object.)rIr)rkrrrinfosz Bytecode.infocCs|j}|jdk r$|j}nd }tj`}t|jd|jd|jd|jd|j d|j d|j d |d ||j SWdQXdS) z3Return a formatted view of the bytecode operations.Nr7rrErrrvrwrrr) rrioStringIOr'rrUrTrRrrrgetvalue)rkrXrdoutputrrrrs     z Bytecode.dis) r+rnrorprrr classmethodrrrrrrrrs    c Csddl}|j}|jdd|jdddd|j}|j}|j}WdQXt||jjd }t |dS) z*Simple test program to disassemble a file.rNinfiler*nargs?default-r) argparseArgumentParser add_argumentZFileType parse_argsrreadrrr)rparserargsrrrrrr_tests  %  r__main__rr)&rpr.types collectionsrZopcoderZ _opcodes_all MethodType FunctionTypeCodeTyper*r"rrrr@rGrHrrIr namedtuplerZr r ryrzrtrr'r)rr r rrr+rrrrs^       !       3  <    = lib64/python3.4/__pycache__/pipes.cpython-34.pyo000064400000020357152342604300015230 0ustar00 i f"@sdZddlZddlZddlZddlmZdgZdZdZdZ dZ d Z d Z eee e e e gZ Gd ddZd d ZdS)aConversion pipeline templates. The problem: ------------ Suppose you have some data that you want to convert to another format, such as from GIF image format to PPM image format. Maybe the conversion involves several steps (e.g. piping it through compress or uuencode). Some of the conversion steps may require that their input is a disk file, others may be able to read standard input; similar for their output. The input to the entire conversion may also be read from a disk file or from an open file, and similar for its output. The module lets you construct a pipeline template by sticking one or more conversion steps together. It will take care of creating and removing temporary files if they are necessary to hold intermediate data. You can then use the template to do conversions from many different sources to many different destinations. The temporary file names used are different each time the template is used. The templates are objects so you can create templates for many different conversion steps and store them in a dictionary, for instance. Directions: ----------- To create a template: t = Template() To add a conversion step to a template: t.append(command, kind) where kind is a string of two characters: the first is '-' if the command reads its standard input or 'f' if it requires a file; the second likewise for the output. The command must be valid /bin/sh syntax. If input or output files are required, they are passed as $IN and $OUT; otherwise, it must be possible to use the command in a pipeline. To add a conversion step at the beginning: t.prepend(command, kind) To convert a file to another file using a template: sts = t.copy(infile, outfile) If infile or outfile are the empty string, standard input is read or standard output is written, respectively. The return value is the exit status of the conversion pipeline. To open a file for reading or writing through a conversion pipeline: fp = t.open(file, mode) where mode is 'r' to read the file, or 'w' to write it -- just like for the built-in function open() or for os.popen(). To create a new template object initialized to a given one: t2 = t.clone() N)quoteTemplateZffz-fzf-z--z.-z-.c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZdS)rz'Class representing a pipeline template.cCsd|_|jdS)z-Template() returns a fresh pipeline template.rN) debuggingreset)selfr*/opt/alt/python34/lib64/python3.4/pipes.py__init__Us zTemplate.__init__cCsd|jfS)z t.__repr__() implements repr(t).z