ÿØÿà JFIF ÿþ >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
ÿÛ C
Server IP : 104.21.29.46 / Your IP : 216.73.216.123 Web Server : Apache System : Linux server1.morocco-tours.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 User : zagoradraa ( 1005) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib64/python2.7/ |
Upload File : |
| Current File : /lib64/python2.7/pydoc.py |
#! /usr/bin/env python
# -*- coding: latin-1 -*-
"""Generate Python documentation in HTML or text for interactive use.
In the Python interpreter, do "from pydoc import help" to provide online
help. Calling help(thing) on a Python object documents the object.
Or, at the shell command line outside of Python:
Run "pydoc <name>" to show documentation on something. <name> may be
the name of a function, module, package, or a dotted reference to a
class or function within a module or module in a package. If the
argument contains a path segment delimiter (e.g. slash on Unix,
backslash on Windows) it is treated as the path to a Python source file.
Run "pydoc -k <keyword>" to search for a keyword in the synopsis lines
of all available modules.
Run "pydoc -p <port>" to start an HTTP server on a given port on the
local machine to generate documentation web pages.
Run "pydoc -w <name>" to write out the HTML documentation for a module
to a file named "<name>.html".
Module docs for core modules are assumed to be in
http://docs.python.org/library/
This can be overridden by setting the PYTHONDOCS environment variable
to a different URL or to a local directory containing the Library
Reference Manual pages.
"""
__author__ = "Ka-Ping Yee <ping@lfw.org>"
__date__ = "26 February 2001"
__version__ = "$Revision: 88564 $"
__credits__ = """Guido van Rossum, for an excellent programming language.
Tommy Burnette, the original creator of manpy.
Paul Prescod, for all his work on onlinehelp.
Richard Chamberlain, for the first implementation of textdoc.
"""
# Known bugs that can't be fixed here:
# - imp.load_module() cannot be prevented from clobbering existing
# loaded modules, so calling synopsis() on a binary module file
# changes the contents of any existing module with the same name.
# - If the __file__ attribute on a module is a relative path and
# the current directory is changed with os.chdir(), an incorrect
# path will be displayed.
import sys, imp, os, re, types, inspect, __builtin__, pkgutil, warnings
from repr import Repr
from string import expandtabs, find, join, lower, split, strip, rfind, rstrip
from traceback import extract_tb
try:
from collections import deque
except ImportError:
# Python 2.3 compatibility
class deque(list):
def popleft(self):
return self.pop(0)
# --------------------------------------------------------- common routines
def pathdirs():
"""Convert sys.path into a list of absolute, existing, unique paths."""
dirs = []
normdirs = []
for dir in sys.path:
dir = os.path.abspath(dir or '.')
normdir = os.path.normcase(dir)
if normdir not in normdirs and os.path.isdir(dir):
dirs.append(dir)
normdirs.append(normdir)
return dirs
def getdoc(object):
"""Get the doc string or comments for an object."""
result = inspect.getdoc(object) or inspect.getcomments(object)
return result and re.sub('^ *\n', '', rstrip(result)) or ''
def splitdoc(doc):
"""Split a doc string into a synopsis line (if any) and the rest."""
lines = split(strip(doc), '\n')
if len(lines) == 1:
return lines[0], ''
elif len(lines) >= 2 and not rstrip(lines[1]):
return lines[0], join(lines[2:], '\n')
return '', join(lines, '\n')
def classname(object, modname):
"""Get a class name and qualify it with a module name if necessary."""
name = object.__name__
if object.__module__ != modname:
name = object.__module__ + '.' + name
return name
def isdata(object):
"""Check if an object is of a type that probably means it's data."""
return not (inspect.ismodule(object) or inspect.isclass(object) or
inspect.isroutine(object) or inspect.isframe(object) or
inspect.istraceback(object) or inspect.iscode(object))
def replace(text, *pairs):
"""Do a series of global replacements on a string."""
while pairs:
text = join(split(text, pairs[0]), pairs[1])
pairs = pairs[2:]
return text
def cram(text, maxlen):
"""Omit part of a string if needed to make it fit in a maximum length."""
if len(text) > maxlen:
pre = max(0, (maxlen-3)//2)
post = max(0, maxlen-3-pre)
return text[:pre] + '...' + text[len(text)-post:]
return text
_re_stripid = re.compile(r' at 0x[0-9a-f]{6,16}(>+)$', re.IGNORECASE)
def stripid(text):
"""Remove the hexadecimal id from a Python object representation."""
# The behaviour of %p is implementation-dependent in terms of case.
return _re_stripid.sub(r'\1', text)
def _is_some_method(obj):
return inspect.ismethod(obj) or inspect.ismethoddescriptor(obj)
def allmethods(cl):
methods = {}
for key, value in inspect.getmembers(cl, _is_some_method):
methods[key] = 1
for base in cl.__bases__:
methods.update(allmethods(base)) # all your base are belong to us
for key in methods.keys():
methods[key] = getattr(cl, key)
return methods
def _split_list(s, predicate):
"""Split sequence s via predicate, and return pair ([true], [false]).
The return value is a 2-tuple of lists,
([x for x in s if predicate(x)],
[x for x in s if not predicate(x)])
"""
yes = []
no = []
for x in s:
if predicate(x):
yes.append(x)
else:
no.append(x)
return yes, no
def visiblename(name, all=None, obj=None):
"""Decide whether to show documentation on a variable."""
# Certain special names are redundant.
_hidden_names = ('__builtins__', '__doc__', '__file__', '__path__',
'__module__', '__name__', '__slots__', '__package__')
if name in _hidden_names: return 0
# Private names are hidden, but special names are displayed.
if name.startswith('__') and name.endswith('__'): return 1
# Namedtuples have public fields and methods with a single leading underscore
if name.startswith('_') and hasattr(obj, '_fields'):
return 1
if all is not None:
# only document that which the programmer exported in __all__
return name in all
else:
return not name.startswith('_')
def classify_class_attrs(object):
"""Wrap inspect.classify_class_attrs, with fixup for data descriptors."""
def fixup(data):
name, kind, cls, value = data
if inspect.isdatadescriptor(value):
kind = 'data descriptor'
return name, kind, cls, value
return map(fixup, inspect.classify_class_attrs(object))
# ----------------------------------------------------- module manipulation
def ispackage(path):
"""Guess whether a path refers to a package directory."""
if os.path.isdir(path):
for ext in ('.py', '.pyc', '.pyo'):
if os.path.isfile(os.path.join(path, '__init__' + ext)):
return True
return False
def source_synopsis(file):
line = file.readline()
while line[:1] == '#' or not strip(line):
line = file.readline()
if not line: break
line = strip(line)
if line[:4] == 'r"""': line = line[1:]
if line[:3] == '"""':
line = line[3:]
if line[-1:] == '\\': line = line[:-1]
while not strip(line):
line = file.readline()
if not line: break
result = strip(split(line, '"""')[0])
else: result = None
return result
def synopsis(filename, cache={}):
"""Get the one-line summary out of a module file."""
mtime = os.stat(filename).st_mtime
lastupdate, result = cache.get(filename, (None, None))
if lastupdate is None or lastupdate < mtime:
info = inspect.getmoduleinfo(filename)
try:
file = open(filename)
except IOError:
# module can't be opened, so skip it
return None
if info and 'b' in info[2]: # binary modules have to be imported
try: module = imp.load_module('__temp__', file, filename, info[1:])
except: return None
result = (module.__doc__ or '').splitlines()[0]
del sys.modules['__temp__']
else: # text modules can be directly examined
result = source_synopsis(file)
file.close()
cache[filename] = (mtime, result)
return result
class ErrorDuringImport(Exception):
"""Errors that occurred while trying to import something to document it."""
def __init__(self, filename, exc_info):
exc, value, tb = exc_info
self.filename = filename
self.exc = exc
self.value = value
self.tb = tb
def __str__(self):
exc = self.exc
if type(exc) is types.ClassType:
exc = exc.__name__
return 'problem in %s - %s: %s' % (self.filename, exc, self.value)
def importfile(path):
"""Import a Python source file or compiled file given its path."""
magic = imp.get_magic()
file = open(path, 'r')
if file.read(len(magic)) == magic:
kind = imp.PY_COMPILED
else:
kind = imp.PY_SOURCE
file.close()
filename = os.path.basename(path)
name, ext = os.path.splitext(filename)
file = open(path, 'r')
try:
module = imp.load_module(name, file, path, (ext, 'r', kind))
except:
raise ErrorDuringImport(path, sys.exc_info())
file.close()
return module
def safeimport(path, forceload=0, cache={}):
"""Import a module; handle errors; return None if the module isn't found.
If the module *is* found but an exception occurs, it's wrapped in an
ErrorDuringImport exception and reraised. Unlike __import__, if a
package path is specified, the module at the end of the path is returned,
not the package at the beginning. If the optional 'forceload' argument
is 1, we reload the module from disk (unless it's a dynamic extension)."""
try:
# If forceload is 1 and the module has been previously loaded from
# disk, we always have to reload the module. Checking the file's
# mtime isn't good enough (e.g. the module could contain a class
# that inherits from another module that has changed).
if forceload and path in sys.modules:
if path not in sys.builtin_module_names:
# Avoid simply calling reload() because it leaves names in
# the currently loaded module lying around if they're not
# defined in the new source file. Instead, remove the
# module from sys.modules and re-import. Also remove any
# submodules because they won't appear in the newly loaded
# module's namespace if they're already in sys.modules.
subs = [m for m in sys.modules if m.startswith(path + '.')]
for key in [path] + subs:
# Prevent garbage collection.
cache[key] = sys.modules[key]
del sys.modules[key]
module = __import__(path)
except:
# Did the error occur before or after the module was found?
(exc, value, tb) = info = sys.exc_info()
if path in sys.modules:
# An error occurred while executing the imported module.
raise ErrorDuringImport(sys.modules[path].__file__, info)
elif exc is SyntaxError:
# A SyntaxError occurred before we could execute the module.
raise ErrorDuringImport(value.filename, info)
elif exc is ImportError and extract_tb(tb)[-1][2]=='safeimport':
# The import error occurred directly in this function,
# which means there is no such module in the path.
return None
else:
# Some other error occurred during the importing process.
raise ErrorDuringImport(path, sys.exc_info())
for part in split(path, '.')[1:]:
try: module = getattr(module, part)
except AttributeError: return None
return module
# ---------------------------------------------------- formatter base class
class Doc:
def document(self, object, name=None, *args):
"""Generate documentation for an object."""
args = (object, name) + args
# 'try' clause is to attempt to handle the possibility that inspect
# identifies something in a way that pydoc itself has issues handling;
# think 'super' and how it is a descriptor (which raises the exception
# by lacking a __name__ attribute) and an instance.
if inspect.isgetsetdescriptor(object): return self.docdata(*args)
if inspect.ismemberdescriptor(object): return self.docdata(*args)
try:
if inspect.ismodule(object): return self.docmodule(*args)
if inspect.isclass(object): return self.docclass(*args)
if inspect.isroutine(object): return self.docroutine(*args)
except AttributeError:
pass
if isinstance(object, property): return self.docproperty(*args)
return self.docother(*args)
def fail(self, object, name=None, *args):
"""Raise an exception for unimplemented types."""
message = "don't know how to document object%s of type %s" % (
name and ' ' + repr(name), type(object).__name__)
raise TypeError, message
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
def getdocloc(self, object):
"""Return the location of module docs or None"""
try:
file = inspect.getabsfile(object)
except TypeError:
file = '(built-in)'
docloc = os.environ.get("PYTHONDOCS",
"http://docs.python.org/library")
basedir = os.path.join(sys.exec_prefix, "lib",
"python"+sys.version[0:3])
if (isinstance(object, type(os)) and
(object.__name__ in ('errno', 'exceptions', 'gc', 'imp',
'marshal', 'posix', 'signal', 'sys',
'thread', 'zipimport') or
(file.startswith(basedir) and
not file.startswith(os.path.join(basedir, 'site-packages')))) and
object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
if docloc.startswith("http://"):
docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__)
else:
docloc = os.path.join(docloc, object.__name__ + ".html")
else:
docloc = None
return docloc
# -------------------------------------------- HTML documentation generator
class HTMLRepr(Repr):
"""Class for safely making an HTML representation of a Python object."""
def __init__(self):
Repr.__init__(self)
self.maxlist = self.maxtuple = 20
self.maxdict = 10
self.maxstring = self.maxother = 100
def escape(self, text):
return replace(text, '&', '&', '<', '<', '>', '>')
def repr(self, object):
return Repr.repr(self, object)
def repr1(self, x, level):
if hasattr(type(x), '__name__'):
methodname = 'repr_' + join(split(type(x).__name__), '_')
if hasattr(self, methodname):
return getattr(self, methodname)(x, level)
return self.escape(cram(stripid(repr(x)), self.maxother))
def repr_string(self, x, level):
test = cram(x, self.maxstring)
testrepr = repr(test)
if '\\' in test and '\\' not in replace(testrepr, r'\\', ''):
# Backslashes are only literal in the string and are never
# needed to make any special characters, so show a raw string.
return 'r' + testrepr[0] + self.escape(test) + testrepr[0]
return re.sub(r'((\\[\\abfnrtv\'"]|\\[0-9]..|\\x..|\\u....)+)',
r'<font color="#c040c0">\1</font>',
self.escape(testrepr))
repr_str = repr_string
def repr_instance(self, x, level):
try:
return self.escape(cram(stripid(repr(x)), self.maxstring))
except:
return self.escape('<%s instance>' % x.__class__.__name__)
repr_unicode = repr_string
class HTMLDoc(Doc):
"""Formatter class for HTML documentation."""
# ------------------------------------------- HTML formatting utilities
_repr_instance = HTMLRepr()
repr = _repr_instance.repr
escape = _repr_instance.escape
def page(self, title, contents):
"""Format an HTML page."""
return '''
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: %s</title>
</head><body bgcolor="#f0f0f8">
%s
</body></html>''' % (title, contents)
def heading(self, title, fgcol, bgcol, extras=''):
"""Format a page heading."""
return '''
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="%s">
<td valign=bottom> <br>
<font color="%s" face="helvetica, arial"> <br>%s</font></td
><td align=right valign=bottom
><font color="%s" face="helvetica, arial">%s</font></td></tr></table>
''' % (bgcol, fgcol, title, fgcol, extras or ' ')
def section(self, title, fgcol, bgcol, contents, width=6,
prelude='', marginalia=None, gap=' '):
"""Format a section with a heading."""
if marginalia is None:
marginalia = '<tt>' + ' ' * width + '</tt>'
result = '''<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="%s">
<td colspan=3 valign=bottom> <br>
<font color="%s" face="helvetica, arial">%s</font></td></tr>
''' % (bgcol, fgcol, title)
if prelude:
result = result + '''
<tr bgcolor="%s"><td rowspan=2>%s</td>
<td colspan=2>%s</td></tr>
<tr><td>%s</td>''' % (bgcol, marginalia, prelude, gap)
else:
result = result + '''
<tr><td bgcolor="%s">%s</td><td>%s</td>''' % (bgcol, marginalia, gap)
return result + '\n<td width="100%%">%s</td></tr></table>' % contents
def bigsection(self, title, *args):
"""Format a section with a big heading."""
title = '<big><strong>%s</strong></big>' % title
return self.section(title, *args)
def preformat(self, text):
"""Format literal preformatted text."""
text = self.escape(expandtabs(text))
return replace(text, '\n\n', '\n \n', '\n\n', '\n \n',
' ', ' ', '\n', '<br>\n')
def multicolumn(self, list, format, cols=4):
"""Format a list of items into a multi-column list."""
result = ''
rows = (len(list)+cols-1)//cols
for col in range(cols):
result = result + '<td width="%d%%" valign=top>' % (100//cols)
for i in range(rows*col, rows*col+rows):
if i < len(list):
result = result + format(list[i]) + '<br>\n'
result = result + '</td>'
return '<table width="100%%" summary="list"><tr>%s</tr></table>' % result
def grey(self, text): return '<font color="#909090">%s</font>' % text
def namelink(self, name, *dicts):
"""Make a link for an identifier, given name-to-URL mappings."""
for dict in dicts:
if name in dict:
return '<a href="%s">%s</a>' % (dict[name], name)
return name
def classlink(self, object, modname):
"""Make a link for a class."""
name, module = object.__name__, sys.modules.get(object.__module__)
if hasattr(module, name) and getattr(module, name) is object:
return '<a href="%s.html#%s">%s</a>' % (
module.__name__, name, classname(object, modname))
return classname(object, modname)
def modulelink(self, object):
"""Make a link for a module."""
return '<a href="%s.html">%s</a>' % (object.__name__, object.__name__)
def modpkglink(self, data):
"""Make a link for a module or package to display in an index."""
name, path, ispackage, shadowed = data
if shadowed:
return self.grey(name)
if path:
url = '%s.%s.html' % (path, name)
else:
url = '%s.html' % name
if ispackage:
text = '<strong>%s</strong> (package)' % name
else:
text = name
return '<a href="%s">%s</a>' % (url, text)
def markup(self, text, escape=None, funcs={}, classes={}, methods={}):
"""Mark up some plain text, given a context of symbols to look for.
Each context dictionary maps object names to anchor names."""
escape = escape or self.escape
results = []
here = 0
pattern = re.compile(r'\b((http|ftp)://\S+[\w/]|'
r'RFC[- ]?(\d+)|'
r'PEP[- ]?(\d+)|'
r'(self\.)?(\w+))')
while True:
match = pattern.search(text, here)
if not match: break
start, end = match.span()
results.append(escape(text[here:start]))
all, scheme, rfc, pep, selfdot, name = match.groups()
if scheme:
url = escape(all).replace('"', '"')
results.append('<a href="%s">%s</a>' % (url, url))
elif rfc:
url = 'http://www.rfc-editor.org/rfc/rfc%d.txt' % int(rfc)
results.append('<a href="%s">%s</a>' % (url, escape(all)))
elif pep:
url = 'http://www.python.org/dev/peps/pep-%04d/' % int(pep)
results.append('<a href="%s">%s</a>' % (url, escape(all)))
elif text[end:end+1] == '(':
results.append(self.namelink(name, methods, funcs, classes))
elif selfdot:
results.append('self.<strong>%s</strong>' % name)
else:
results.append(self.namelink(name, classes))
here = end
results.append(escape(text[here:]))
return join(results, '')
# ---------------------------------------------- type-specific routines
def formattree(self, tree, modname, parent=None):
"""Produce HTML for a class tree as given by inspect.getclasstree()."""
result = ''
for entry in tree:
if type(entry) is type(()):
c, bases = entry
result = result + '<dt><font face="helvetica, arial">'
result = result + self.classlink(c, modname)
if bases and bases != (parent,):
parents = []
for base in bases:
parents.append(self.classlink(base, modname))
result = result + '(' + join(parents, ', ') + ')'
result = result + '\n</font></dt>'
elif type(entry) is type([]):
result = result + '<dd>\n%s</dd>\n' % self.formattree(
entry, modname, c)
return '<dl>\n%s</dl>\n' % result
def docmodule(self, object, name=None, mod=None, *ignored):
"""Produce HTML documentation for a module object."""
name = object.__name__ # ignore the passed-in name
try:
all = object.__all__
except AttributeError:
all = None
parts = split(name, '.')
links = []
for i in range(len(parts)-1):
links.append(
'<a href="%s.html"><font color="#ffffff">%s</font></a>' %
(join(parts[:i+1], '.'), parts[i]))
linkedname = join(links + parts[-1:], '.')
head = '<big><big><strong>%s</strong></big></big>' % linkedname
try:
path = inspect.getabsfile(object)
url = path
if sys.platform == 'win32':
import nturl2path
url = nturl2path.pathname2url(path)
filelink = '<a href="file:%s">%s</a>' % (url, path)
except TypeError:
filelink = '(built-in)'
info = []
if hasattr(object, '__version__'):
version = str(object.__version__)
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
version = strip(version[11:-1])
info.append('version %s' % self.escape(version))
if hasattr(object, '__date__'):
info.append(self.escape(str(object.__date__)))
if info:
head = head + ' (%s)' % join(info, ', ')
docloc = self.getdocloc(object)
if docloc is not None:
docloc = '<br><a href="%(docloc)s">Module Docs</a>' % locals()
else:
docloc = ''
result = self.heading(
head, '#ffffff', '#7799ee',
'<a href=".">index</a><br>' + filelink + docloc)
modules = inspect.getmembers(object, inspect.ismodule)
classes, cdict = [], {}
for key, value in inspect.getmembers(object, inspect.isclass):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
(inspect.getmodule(value) or object) is object):
if visiblename(key, all, object):
classes.append((key, value))
cdict[key] = cdict[value] = '#' + key
for key, value in classes:
for base in value.__bases__:
key, modname = base.__name__, base.__module__
module = sys.modules.get(modname)
if modname != name and module and hasattr(module, key):
if getattr(module, key) is base:
if not key in cdict:
cdict[key] = cdict[base] = modname + '.html#' + key
funcs, fdict = [], {}
for key, value in inspect.getmembers(object, inspect.isroutine):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
if visiblename(key, all, object):
funcs.append((key, value))
fdict[key] = '#-' + key
if inspect.isfunction(value): fdict[value] = fdict[key]
data = []
for key, value in inspect.getmembers(object, isdata):
if visiblename(key, all, object):
data.append((key, value))
doc = self.markup(getdoc(object), self.preformat, fdict, cdict)
doc = doc and '<tt>%s</tt>' % doc
result = result + '<p>%s</p>\n' % doc
if hasattr(object, '__path__'):
modpkgs = []
for importer, modname, ispkg in pkgutil.iter_modules(object.__path__):
modpkgs.append((modname, name, ispkg, 0))
modpkgs.sort()
contents = self.multicolumn(modpkgs, self.modpkglink)
result = result + self.bigsection(
'Package Contents', '#ffffff', '#aa55cc', contents)
elif modules:
contents = self.multicolumn(
modules, lambda key_value, s=self: s.modulelink(key_value[1]))
result = result + self.bigsection(
'Modules', '#ffffff', '#aa55cc', contents)
if classes:
classlist = map(lambda key_value: key_value[1], classes)
contents = [
self.formattree(inspect.getclasstree(classlist, 1), name)]
for key, value in classes:
contents.append(self.document(value, key, name, fdict, cdict))
result = result + self.bigsection(
'Classes', '#ffffff', '#ee77aa', join(contents))
if funcs:
contents = []
for key, value in funcs:
contents.append(self.document(value, key, name, fdict, cdict))
result = result + self.bigsection(
'Functions', '#ffffff', '#eeaa77', join(contents))
if data:
contents = []
for key, value in data:
contents.append(self.document(value, key))
result = result + self.bigsection(
'Data', '#ffffff', '#55aa55', join(contents, '<br>\n'))
if hasattr(object, '__author__'):
contents = self.markup(str(object.__author__), self.preformat)
result = result + self.bigsection(
'Author', '#ffffff', '#7799ee', contents)
if hasattr(object, '__credits__'):
contents = self.markup(str(object.__credits__), self.preformat)
result = result + self.bigsection(
'Credits', '#ffffff', '#7799ee', contents)
return result
def docclass(self, object, name=None, mod=None, funcs={}, classes={},
*ignored):
"""Produce HTML documentation for a class object."""
realname = object.__name__
name = name or realname
bases = object.__bases__
contents = []
push = contents.append
# Cute little class to pump out a horizontal rule between sections.
class HorizontalRule:
def __init__(self):
self.needone = 0
def maybe(self):
if self.needone:
push('<hr>\n')
self.needone = 1
hr = HorizontalRule()
# List the mro, if non-trivial.
mro = deque(inspect.getmro(object))
if len(mro) > 2:
hr.maybe()
push('<dl><dt>Method resolution order:</dt>\n')
for base in mro:
push('<dd>%s</dd>\n' % self.classlink(base,
object.__module__))
push('</dl>\n')
def spill(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
try:
value = getattr(object, name)
except Exception:
# Some descriptors may meet a failure in their __get__.
# (bug #1785)
push(self._docdescriptor(name, value, mod))
else:
push(self.document(value, name, mod,
funcs, classes, mdict, object))
push('\n')
return attrs
def spilldescriptors(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
push(self._docdescriptor(name, value, mod))
return attrs
def spilldata(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
base = self.docother(getattr(object, name), name, mod)
if (hasattr(value, '__call__') or
inspect.isdatadescriptor(value)):
doc = getattr(value, "__doc__", None)
else:
doc = None
if doc is None:
push('<dl><dt>%s</dl>\n' % base)
else:
doc = self.markup(getdoc(value), self.preformat,
funcs, classes, mdict)
doc = '<dd><tt>%s</tt>' % doc
push('<dl><dt>%s%s</dl>\n' % (base, doc))
push('\n')
return attrs
attrs = filter(lambda data: visiblename(data[0], obj=object),
classify_class_attrs(object))
mdict = {}
for key, kind, homecls, value in attrs:
mdict[key] = anchor = '#' + name + '-' + key
try:
value = getattr(object, name)
except Exception:
# Some descriptors may meet a failure in their __get__.
# (bug #1785)
pass
try:
# The value may not be hashable (e.g., a data attr with
# a dict or list value).
mdict[value] = anchor
except TypeError:
pass
while attrs:
if mro:
thisclass = mro.popleft()
else:
thisclass = attrs[0][2]
attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
if thisclass is __builtin__.object:
attrs = inherited
continue
elif thisclass is object:
tag = 'defined here'
else:
tag = 'inherited from %s' % self.classlink(thisclass,
object.__module__)
tag += ':<br>\n'
# Sort attrs by name.
try:
attrs.sort(key=lambda t: t[0])
except TypeError:
attrs.sort(lambda t1, t2: cmp(t1[0], t2[0])) # 2.3 compat
# Pump out the attrs, segregated by kind.
attrs = spill('Methods %s' % tag, attrs,
lambda t: t[1] == 'method')
attrs = spill('Class methods %s' % tag, attrs,
lambda t: t[1] == 'class method')
attrs = spill('Static methods %s' % tag, attrs,
lambda t: t[1] == 'static method')
attrs = spilldescriptors('Data descriptors %s' % tag, attrs,
lambda t: t[1] == 'data descriptor')
attrs = spilldata('Data and other attributes %s' % tag, attrs,
lambda t: t[1] == 'data')
assert attrs == []
attrs = inherited
contents = ''.join(contents)
if name == realname:
title = '<a name="%s">class <strong>%s</strong></a>' % (
name, realname)
else:
title = '<strong>%s</strong> = <a name="%s">class %s</a>' % (
name, name, realname)
if bases:
parents = []
for base in bases:
parents.append(self.classlink(base, object.__module__))
title = title + '(%s)' % join(parents, ', ')
doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict)
doc = doc and '<tt>%s<br> </tt>' % doc
return self.section(title, '#000000', '#ffc8d8', contents, 3, doc)
def formatvalue(self, object):
"""Format an argument default value as text."""
return self.grey('=' + self.repr(object))
def docroutine(self, object, name=None, mod=None,
funcs={}, classes={}, methods={}, cl=None):
"""Produce HTML documentation for a function or method object."""
realname = object.__name__
name = name or realname
anchor = (cl and cl.__name__ or '') + '-' + name
note = ''
skipdocs = 0
if inspect.ismethod(object):
imclass = object.im_class
if cl:
if imclass is not cl:
note = ' from ' + self.classlink(imclass, mod)
else:
if object.im_self is not None:
note = ' method of %s instance' % self.classlink(
object.im_self.__class__, mod)
else:
note = ' unbound %s method' % self.classlink(imclass,mod)
object = object.im_func
if name == realname:
title = '<a name="%s"><strong>%s</strong></a>' % (anchor, realname)
else:
if (cl and realname in cl.__dict__ and
cl.__dict__[realname] is object):
reallink = '<a href="#%s">%s</a>' % (
cl.__name__ + '-' + realname, realname)
skipdocs = 1
else:
reallink = realname
title = '<a name="%s"><strong>%s</strong></a> = %s' % (
anchor, name, reallink)
if inspect.isfunction(object):
args, varargs, varkw, defaults = inspect.getargspec(object)
argspec = inspect.formatargspec(
args, varargs, varkw, defaults, formatvalue=self.formatvalue)
if realname == '<lambda>':
title = '<strong>%s</strong> <em>lambda</em> ' % name
argspec = argspec[1:-1] # remove parentheses
else:
argspec = '(...)'
decl = title + argspec + (note and self.grey(
'<font face="helvetica, arial">%s</font>' % note))
if skipdocs:
return '<dl><dt>%s</dt></dl>\n' % decl
else:
doc = self.markup(
getdoc(object), self.preformat, funcs, classes, methods)
doc = doc and '<dd><tt>%s</tt></dd>' % doc
return '<dl><dt>%s</dt>%s</dl>\n' % (decl, doc)
def _docdescriptor(self, name, value, mod):
results = []
push = results.append
if name:
push('<dl><dt><strong>%s</strong></dt>\n' % name)
if value.__doc__ is not None:
doc = self.markup(getdoc(value), self.preformat)
push('<dd><tt>%s</tt></dd>\n' % doc)
push('</dl>\n')
return ''.join(results)
def docproperty(self, object, name=None, mod=None, cl=None):
"""Produce html documentation for a property."""
return self._docdescriptor(name, object, mod)
def docother(self, object, name=None, mod=None, *ignored):
"""Produce HTML documentation for a data object."""
lhs = name and '<strong>%s</strong> = ' % name or ''
return lhs + self.repr(object)
def docdata(self, object, name=None, mod=None, cl=None):
"""Produce html documentation for a data descriptor."""
return self._docdescriptor(name, object, mod)
def index(self, dir, shadowed=None):
"""Generate an HTML index for a directory of modules."""
modpkgs = []
if shadowed is None: shadowed = {}
for importer, name, ispkg in pkgutil.iter_modules([dir]):
modpkgs.append((name, '', ispkg, name in shadowed))
shadowed[name] = 1
modpkgs.sort()
contents = self.multicolumn(modpkgs, self.modpkglink)
return self.bigsection(dir, '#ffffff', '#ee77aa', contents)
# -------------------------------------------- text documentation generator
class TextRepr(Repr):
"""Class for safely making a text representation of a Python object."""
def __init__(self):
Repr.__init__(self)
self.maxlist = self.maxtuple = 20
self.maxdict = 10
self.maxstring = self.maxother = 100
def repr1(self, x, level):
if hasattr(type(x), '__name__'):
methodname = 'repr_' + join(split(type(x).__name__), '_')
if hasattr(self, methodname):
return getattr(self, methodname)(x, level)
return cram(stripid(repr(x)), self.maxother)
def repr_string(self, x, level):
test = cram(x, self.maxstring)
testrepr = repr(test)
if '\\' in test and '\\' not in replace(testrepr, r'\\', ''):
# Backslashes are only literal in the string and are never
# needed to make any special characters, so show a raw string.
return 'r' + testrepr[0] + test + testrepr[0]
return testrepr
repr_str = repr_string
def repr_instance(self, x, level):
try:
return cram(stripid(repr(x)), self.maxstring)
except:
return '<%s instance>' % x.__class__.__name__
class TextDoc(Doc):
"""Formatter class for text documentation."""
# ------------------------------------------- text formatting utilities
_repr_instance = TextRepr()
repr = _repr_instance.repr
def bold(self, text):
"""Format a string in bold by overstriking."""
return join(map(lambda ch: ch + '\b' + ch, text), '')
def indent(self, text, prefix=' '):
"""Indent text by prepending a given prefix to each line."""
if not text: return ''
lines = split(text, '\n')
lines = map(lambda line, prefix=prefix: prefix + line, lines)
if lines: lines[-1] = rstrip(lines[-1])
return join(lines, '\n')
def section(self, title, contents):
"""Format a section with a given heading."""
return self.bold(title) + '\n' + rstrip(self.indent(contents)) + '\n\n'
# ---------------------------------------------- type-specific routines
def formattree(self, tree, modname, parent=None, prefix=''):
"""Render in text a class tree as returned by inspect.getclasstree()."""
result = ''
for entry in tree:
if type(entry) is type(()):
c, bases = entry
result = result + prefix + classname(c, modname)
if bases and bases != (parent,):
parents = map(lambda c, m=modname: classname(c, m), bases)
result = result + '(%s)' % join(parents, ', ')
result = result + '\n'
elif type(entry) is type([]):
result = result + self.formattree(
entry, modname, c, prefix + ' ')
return result
def docmodule(self, object, name=None, mod=None):
"""Produce text documentation for a given module object."""
name = object.__name__ # ignore the passed-in name
synop, desc = splitdoc(getdoc(object))
result = self.section('NAME', name + (synop and ' - ' + synop))
try:
all = object.__all__
except AttributeError:
all = None
try:
file = inspect.getabsfile(object)
except TypeError:
file = '(built-in)'
result = result + self.section('FILE', file)
docloc = self.getdocloc(object)
if docloc is not None:
result = result + self.section('MODULE DOCS', docloc)
if desc:
result = result + self.section('DESCRIPTION', desc)
classes = []
for key, value in inspect.getmembers(object, inspect.isclass):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None
or (inspect.getmodule(value) or object) is object):
if visiblename(key, all, object):
classes.append((key, value))
funcs = []
for key, value in inspect.getmembers(object, inspect.isroutine):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
if visiblename(key, all, object):
funcs.append((key, value))
data = []
for key, value in inspect.getmembers(object, isdata):
if visiblename(key, all, object):
data.append((key, value))
modpkgs = []
modpkgs_names = set()
if hasattr(object, '__path__'):
for importer, modname, ispkg in pkgutil.iter_modules(object.__path__):
modpkgs_names.add(modname)
if ispkg:
modpkgs.append(modname + ' (package)')
else:
modpkgs.append(modname)
modpkgs.sort()
result = result + self.section(
'PACKAGE CONTENTS', join(modpkgs, '\n'))
# Detect submodules as sometimes created by C extensions
submodules = []
for key, value in inspect.getmembers(object, inspect.ismodule):
if value.__name__.startswith(name + '.') and key not in modpkgs_names:
submodules.append(key)
if submodules:
submodules.sort()
result = result + self.section(
'SUBMODULES', join(submodules, '\n'))
if classes:
classlist = map(lambda key_value: key_value[1], classes)
contents = [self.formattree(
inspect.getclasstree(classlist, 1), name)]
for key, value in classes:
contents.append(self.document(value, key, name))
result = result + self.section('CLASSES', join(contents, '\n'))
if funcs:
contents = []
for key, value in funcs:
contents.append(self.document(value, key, name))
result = result + self.section('FUNCTIONS', join(contents, '\n'))
if data:
contents = []
for key, value in data:
contents.append(self.docother(value, key, name, maxlen=70))
result = result + self.section('DATA', join(contents, '\n'))
if hasattr(object, '__version__'):
version = str(object.__version__)
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
version = strip(version[11:-1])
result = result + self.section('VERSION', version)
if hasattr(object, '__date__'):
result = result + self.section('DATE', str(object.__date__))
if hasattr(object, '__author__'):
result = result + self.section('AUTHOR', str(object.__author__))
if hasattr(object, '__credits__'):
result = result + self.section('CREDITS', str(object.__credits__))
return result
def docclass(self, object, name=None, mod=None, *ignored):
"""Produce text documentation for a given class object."""
realname = object.__name__
name = name or realname
bases = object.__bases__
def makename(c, m=object.__module__):
return classname(c, m)
if name == realname:
title = 'class ' + self.bold(realname)
else:
title = self.bold(name) + ' = class ' + realname
if bases:
parents = map(makename, bases)
title = title + '(%s)' % join(parents, ', ')
doc = getdoc(object)
contents = doc and [doc + '\n'] or []
push = contents.append
# List the mro, if non-trivial.
mro = deque(inspect.getmro(object))
if len(mro) > 2:
push("Method resolution order:")
for base in mro:
push(' ' + makename(base))
push('')
# Cute little class to pump out a horizontal rule between sections.
class HorizontalRule:
def __init__(self):
self.needone = 0
def maybe(self):
if self.needone:
push('-' * 70)
self.needone = 1
hr = HorizontalRule()
def spill(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
try:
value = getattr(object, name)
except Exception:
# Some descriptors may meet a failure in their __get__.
# (bug #1785)
push(self._docdescriptor(name, value, mod))
else:
push(self.document(value,
name, mod, object))
return attrs
def spilldescriptors(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
push(self._docdescriptor(name, value, mod))
return attrs
def spilldata(msg, attrs, predicate):
ok, attrs = _split_list(attrs, predicate)
if ok:
hr.maybe()
push(msg)
for name, kind, homecls, value in ok:
if (hasattr(value, '__call__') or
inspect.isdatadescriptor(value)):
doc = getdoc(value)
else:
doc = None
push(self.docother(getattr(object, name),
name, mod, maxlen=70, doc=doc) + '\n')
return attrs
attrs = filter(lambda data: visiblename(data[0], obj=object),
classify_class_attrs(object))
while attrs:
if mro:
thisclass = mro.popleft()
else:
thisclass = attrs[0][2]
attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
if thisclass is __builtin__.object:
attrs = inherited
continue
elif thisclass is object:
tag = "defined here"
else:
tag = "inherited from %s" % classname(thisclass,
object.__module__)
# Sort attrs by name.
attrs.sort()
# Pump out the attrs, segregated by kind.
attrs = spill("Methods %s:\n" % tag, attrs,
lambda t: t[1] == 'method')
attrs = spill("Class methods %s:\n" % tag, attrs,
lambda t: t[1] == 'class method')
attrs = spill("Static methods %s:\n" % tag, attrs,
lambda t: t[1] == 'static method')
attrs = spilldescriptors("Data descriptors %s:\n" % tag, attrs,
lambda t: t[1] == 'data descriptor')
attrs = spilldata("Data and other attributes %s:\n" % tag, attrs,
lambda t: t[1] == 'data')
assert attrs == []
attrs = inherited
contents = '\n'.join(contents)
if not contents:
return title + '\n'
return title + '\n' + self.indent(rstrip(contents), ' | ') + '\n'
def formatvalue(self, object):
"""Format an argument default value as text."""
return '=' + self.repr(object)
def docroutine(self, object, name=None, mod=None, cl=None):
"""Produce text documentation for a function or method object."""
realname = object.__name__
name = name or realname
note = ''
skipdocs = 0
if inspect.ismethod(object):
imclass = object.im_class
if cl:
if imclass is not cl:
note = ' from ' + classname(imclass, mod)
else:
if object.im_self is not None:
note = ' method of %s instance' % classname(
object.im_self.__class__, mod)
else:
note = ' unbound %s method' % classname(imclass,mod)
object = object.im_func
if name == realname:
title = self.bold(realname)
else:
if (cl and realname in cl.__dict__ and
cl.__dict__[realname] is object):
skipdocs = 1
title = self.bold(name) + ' = ' + realname
if inspect.isfunction(object):
args, varargs, varkw, defaults = inspect.getargspec(object)
argspec = inspect.formatargspec(
args, varargs, varkw, defaults, formatvalue=self.formatvalue)
if realname == '<lambda>':
title = self.bold(name) + ' lambda '
argspec = argspec[1:-1] # remove parentheses
else:
argspec = '(...)'
decl = title + argspec + note
if skipdocs:
return decl + '\n'
else:
doc = getdoc(object) or ''
return decl + '\n' + (doc and rstrip(self.indent(doc)) + '\n')
def _docdescriptor(self, name, value, mod):
results = []
push = results.append
if name:
push(self.bold(name))
push('\n')
doc = getdoc(value) or ''
if doc:
push(self.indent(doc))
push('\n')
return ''.join(results)
def docproperty(self, object, name=None, mod=None, cl=None):
"""Produce text documentation for a property."""
return self._docdescriptor(name, object, mod)
def docdata(self, object, name=None, mod=None, cl=None):
"""Produce text documentation for a data descriptor."""
return self._docdescriptor(name, object, mod)
def docother(self, object, name=None, mod=None, parent=None, maxlen=None, doc=None):
"""Produce text documentation for a data object."""
repr = self.repr(object)
if maxlen:
line = (name and name + ' = ' or '') + repr
chop = maxlen - len(line)
if chop < 0: repr = repr[:chop] + '...'
line = (name and self.bold(name) + ' = ' or '') + repr
if doc is not None:
line += '\n' + self.indent(str(doc))
return line
# --------------------------------------------------------- user interfaces
def pager(text):
"""The first time this is called, determine what kind of pager to use."""
global pager
pager = getpager()
pager(text)
def getpager():
"""Decide what method to use for paging through text."""
if type(sys.stdout) is not types.FileType:
return plainpager
if not sys.stdin.isatty() or not sys.stdout.isatty():
return plainpager
if 'PAGER' in os.environ:
if sys.platform == 'win32': # pipes completely broken in Windows
return lambda text: tempfilepager(plain(text), os.environ['PAGER'])
elif os.environ.get('TERM') in ('dumb', 'emacs'):
return lambda text: pipepager(plain(text), os.environ['PAGER'])
else:
return lambda text: pipepager(text, os.environ['PAGER'])
if os.environ.get('TERM') in ('dumb', 'emacs'):
return plainpager
if sys.platform == 'win32' or sys.platform.startswith('os2'):
return lambda text: tempfilepager(plain(text), 'more <')
if hasattr(os, 'system') and os.system('(less) 2>/dev/null') == 0:
return lambda text: pipepager(text, 'less')
import tempfile
(fd, filename) = tempfile.mkstemp()
os.close(fd)
try:
if hasattr(os, 'system') and os.system('more "%s"' % filename) == 0:
return lambda text: pipepager(text, 'more')
else:
return ttypager
finally:
os.unlink(filename)
def plain(text):
"""Remove boldface formatting from text."""
return re.sub('.\b', '', text)
def pipepager(text, cmd):
"""Page through text by feeding it to another program."""
pipe = os.popen(cmd, 'w')
try:
pipe.write(text)
pipe.close()
except IOError:
pass # Ignore broken pipes caused by quitting the pager program.
def tempfilepager(text, cmd):
"""Page through text by invoking a program on a temporary file."""
import tempfile
filename = tempfile.mktemp()
file = open(filename, 'w')
file.write(text)
file.close()
try:
os.system(cmd + ' "' + filename + '"')
finally:
os.unlink(filename)
def ttypager(text):
"""Page through text on a text terminal."""
lines = split(plain(text), '\n')
try:
import tty
fd = sys.stdin.fileno()
old = tty.tcgetattr(fd)
tty.setcbreak(fd)
getchar = lambda: sys.stdin.read(1)
except (ImportError, AttributeError):
tty = None
getchar = lambda: sys.stdin.readline()[:-1][:1]
try:
r = inc = os.environ.get('LINES', 25) - 1
sys.stdout.write(join(lines[:inc], '\n') + '\n')
while lines[r:]:
sys.stdout.write('-- more --')
sys.stdout.flush()
c = getchar()
if c in ('q', 'Q'):
sys.stdout.write('\r \r')
break
elif c in ('\r', '\n'):
sys.stdout.write('\r \r' + lines[r] + '\n')
r = r + 1
continue
if c in ('b', 'B', '\x1b'):
r = r - inc - inc
if r < 0: r = 0
sys.stdout.write('\n' + join(lines[r:r+inc], '\n') + '\n')
r = r + inc
finally:
if tty:
tty.tcsetattr(fd, tty.TCSAFLUSH, old)
def plainpager(text):
"""Simply print unformatted text. This is the ultimate fallback."""
sys.stdout.write(plain(text))
def describe(thing):
"""Produce a short description of the given thing."""
if inspect.ismodule(thing):
if thing.__name__ in sys.builtin_module_names:
return 'built-in module ' + thing.__name__
if hasattr(thing, '__path__'):
return 'package ' + thing.__name__
else:
return 'module ' + thing.__name__
if inspect.isbuiltin(thing):
return 'built-in function ' + thing.__name__
if inspect.isgetsetdescriptor(thing):
return 'getset descriptor %s.%s.%s' % (
thing.__objclass__.__module__, thing.__objclass__.__name__,
thing.__name__)
if inspect.ismemberdescriptor(thing):
return 'member descriptor %s.%s.%s' % (
thing.__objclass__.__module__, thing.__objclass__.__name__,
thing.__name__)
if inspect.isclass(thing):
return 'class ' + thing.__name__
if inspect.isfunction(thing):
return 'function ' + thing.__name__
if inspect.ismethod(thing):
return 'method ' + thing.__name__
if type(thing) is types.InstanceType:
return 'instance of ' + thing.__class__.__name__
return type(thing).__name__
def locate(path, forceload=0):
"""Locate an object by name or dotted path, importing as necessary."""
parts = [part for part in split(path, '.') if part]
module, n = None, 0
while n < len(parts):
nextmodule = safeimport(join(parts[:n+1], '.'), forceload)
if nextmodule: module, n = nextmodule, n + 1
else: break
if module:
object = module
else:
object = __builtin__
for part in parts[n:]:
try:
object = getattr(object, part)
except AttributeError:
return None
return object
# --------------------------------------- interactive interpreter interface
text = TextDoc()
html = HTMLDoc()
class _OldStyleClass: pass
_OLD_INSTANCE_TYPE = type(_OldStyleClass())
def resolve(thing, forceload=0):
"""Given an object or a path to an object, get the object and its name."""
if isinstance(thing, str):
object = locate(thing, forceload)
if not object:
raise ImportError, 'no Python documentation found for %r' % thing
return object, thing
else:
name = getattr(thing, '__name__', None)
return thing, name if isinstance(name, str) else None
def render_doc(thing, title='Python Library Documentation: %s', forceload=0):
"""Render text documentation, given an object or a path to an object."""
object, name = resolve(thing, forceload)
desc = describe(object)
module = inspect.getmodule(object)
if name and '.' in name:
desc += ' in ' + name[:name.rfind('.')]
elif module and module is not object:
desc += ' in module ' + module.__name__
if type(object) is _OLD_INSTANCE_TYPE:
# If the passed object is an instance of an old-style class,
# document its available methods instead of its value.
object = object.__class__
elif not (inspect.ismodule(object) or
inspect.isclass(object) or
inspect.isroutine(object) or
inspect.isgetsetdescriptor(object) or
inspect.ismemberdescriptor(object) or
isinstance(object, property)):
# If the passed object is a piece of data or an instance,
# document its available methods instead of its value.
object = type(object)
desc += ' object'
return title % desc + '\n\n' + text.document(object, name)
def doc(thing, title='Python Library Documentation: %s', forceload=0):
"""Display text documentation, given an object or a path to an object."""
try:
pager(render_doc(thing, title, forceload))
except (ImportError, ErrorDuringImport), value:
print value
def writedoc(thing, forceload=0):
"""Write HTML documentation to a file in the current directory."""
try:
object, name = resolve(thing, forceload)
page = html.page(describe(object), html.document(object, name))
file = open(name + '.html', 'w')
file.write(page)
file.close()
print 'wrote', name + '.html'
except (ImportError, ErrorDuringImport), value:
print value
def writedocs(dir, pkgpath='', done=None):
"""Write out HTML documentation for all modules in a directory tree."""
if done is None: done = {}
for importer, modname, ispkg in pkgutil.walk_packages([dir], pkgpath):
writedoc(modname)
return
class Helper:
# These dictionaries map a topic name to either an alias, or a tuple
# (label, seealso-items). The "label" is the label of the corresponding
# section in the .rst file under Doc/ and an index into the dictionary
# in pydoc_data/topics.py.
#
# CAUTION: if you change one of these dictionaries, be sure to adapt the
# list of needed labels in Doc/tools/sphinxext/pyspecific.py and
# regenerate the pydoc_data/topics.py file by running
# make pydoc-topics
# in Doc/ and copying the output file into the Lib/ directory.
keywords = {
'and': 'BOOLEAN',
'as': 'with',
'assert': ('assert', ''),
'break': ('break', 'while for'),
'class': ('class', 'CLASSES SPECIALMETHODS'),
'continue': ('continue', 'while for'),
'def': ('function', ''),
'del': ('del', 'BASICMETHODS'),
'elif': 'if',
'else': ('else', 'while for'),
'except': 'try',
'exec': ('exec', ''),
'finally': 'try',
'for': ('for', 'break continue while'),
'from': 'import',
'global': ('global', 'NAMESPACES'),
'if': ('if', 'TRUTHVALUE'),
'import': ('import', 'MODULES'),
'in': ('in', 'SEQUENCEMETHODS2'),
'is': 'COMPARISON',
'lambda': ('lambda', 'FUNCTIONS'),
'not': 'BOOLEAN',
'or': 'BOOLEAN',
'pass': ('pass', ''),
'print': ('print', ''),
'raise': ('raise', 'EXCEPTIONS'),
'return': ('return', 'FUNCTIONS'),
'try': ('try', 'EXCEPTIONS'),
'while': ('while', 'break continue if TRUTHVALUE'),
'with': ('with', 'CONTEXTMANAGERS EXCEPTIONS yield'),
'yield': ('yield', ''),
}
# Either add symbols to this dictionary or to the symbols dictionary
# directly: Whichever is easier. They are merged later.
_symbols_inverse = {
'STRINGS' : ("'", "'''", "r'", "u'", '"""', '"', 'r"', 'u"'),
'OPERATORS' : ('+', '-', '*', '**', '/', '//', '%', '<<', '>>', '&',
'|', '^', '~', '<', '>', '<=', '>=', '==', '!=', '<>'),
'COMPARISON' : ('<', '>', '<=', '>=', '==', '!=', '<>'),
'UNARY' : ('-', '~'),
'AUGMENTEDASSIGNMENT' : ('+=', '-=', '*=', '/=', '%=', '&=', '|=',
'^=', '<<=', '>>=', '**=', '//='),
'BITWISE' : ('<<', '>>', '&', '|', '^', '~'),
'COMPLEX' : ('j', 'J')
}
symbols = {
'%': 'OPERATORS FORMATTING',
'**': 'POWER',
',': 'TUPLES LISTS FUNCTIONS',
'.': 'ATTRIBUTES FLOAT MODULES OBJECTS',
'...': 'ELLIPSIS',
':': 'SLICINGS DICTIONARYLITERALS',
'@': 'def class',
'\\': 'STRINGS',
'_': 'PRIVATENAMES',
'__': 'PRIVATENAMES SPECIALMETHODS',
'`': 'BACKQUOTES',
'(': 'TUPLES FUNCTIONS CALLS',
')': 'TUPLES FUNCTIONS CALLS',
'[': 'LISTS SUBSCRIPTS SLICINGS',
']': 'LISTS SUBSCRIPTS SLICINGS'
}
for topic, symbols_ in _symbols_inverse.iteritems():
for symbol in symbols_:
topics = symbols.get(symbol, topic)
if topic not in topics:
topics = topics + ' ' + topic
symbols[symbol] = topics
topics = {
'TYPES': ('types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS '
'FUNCTIONS CLASSES MODULES FILES inspect'),
'STRINGS': ('strings', 'str UNICODE SEQUENCES STRINGMETHODS FORMATTING '
'TYPES'),
'STRINGMETHODS': ('string-methods', 'STRINGS FORMATTING'),
'FORMATTING': ('formatstrings', 'OPERATORS'),
'UNICODE': ('strings', 'encodings unicode SEQUENCES STRINGMETHODS '
'FORMATTING TYPES'),
'NUMBERS': ('numbers', 'INTEGER FLOAT COMPLEX TYPES'),
'INTEGER': ('integers', 'int range'),
'FLOAT': ('floating', 'float math'),
'COMPLEX': ('imaginary', 'complex cmath'),
'SEQUENCES': ('typesseq', 'STRINGMETHODS FORMATTING xrange LISTS'),
'MAPPINGS': 'DICTIONARIES',
'FUNCTIONS': ('typesfunctions', 'def TYPES'),
'METHODS': ('typesmethods', 'class def CLASSES TYPES'),
'CODEOBJECTS': ('bltin-code-objects', 'compile FUNCTIONS TYPES'),
'TYPEOBJECTS': ('bltin-type-objects', 'types TYPES'),
'FRAMEOBJECTS': 'TYPES',
'TRACEBACKS': 'TYPES',
'NONE': ('bltin-null-object', ''),
'ELLIPSIS': ('bltin-ellipsis-object', 'SLICINGS'),
'FILES': ('bltin-file-objects', ''),
'SPECIALATTRIBUTES': ('specialattrs', ''),
'CLASSES': ('types', 'class SPECIALMETHODS PRIVATENAMES'),
'MODULES': ('typesmodules', 'import'),
'PACKAGES': 'import',
'EXPRESSIONS': ('operator-summary', 'lambda or and not in is BOOLEAN '
'COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER '
'UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES '
'LISTS DICTIONARIES BACKQUOTES'),
'OPERATORS': 'EXPRESSIONS',
'PRECEDENCE': 'EXPRESSIONS',
'OBJECTS': ('objects', 'TYPES'),
'SPECIALMETHODS': ('specialnames', 'BASICMETHODS ATTRIBUTEMETHODS '
'CALLABLEMETHODS SEQUENCEMETHODS1 MAPPINGMETHODS '
'SEQUENCEMETHODS2 NUMBERMETHODS CLASSES'),
'BASICMETHODS': ('customization', 'cmp hash repr str SPECIALMETHODS'),
'ATTRIBUTEMETHODS': ('attribute-access', 'ATTRIBUTES SPECIALMETHODS'),
'CALLABLEMETHODS': ('callable-types', 'CALLS SPECIALMETHODS'),
'SEQUENCEMETHODS1': ('sequence-types', 'SEQUENCES SEQUENCEMETHODS2 '
'SPECIALMETHODS'),
'SEQUENCEMETHODS2': ('sequence-methods', 'SEQUENCES SEQUENCEMETHODS1 '
'SPECIALMETHODS'),
'MAPPINGMETHODS': ('sequence-types', 'MAPPINGS SPECIALMETHODS'),
'NUMBERMETHODS': ('numeric-types', 'NUMBERS AUGMENTEDASSIGNMENT '
'SPECIALMETHODS'),
'EXECUTION': ('execmodel', 'NAMESPACES DYNAMICFEATURES EXCEPTIONS'),
'NAMESPACES': ('naming', 'global ASSIGNMENT DELETION DYNAMICFEATURES'),
'DYNAMICFEATURES': ('dynamic-features', ''),
'SCOPING': 'NAMESPACES',
'FRAMES': 'NAMESPACES',
'EXCEPTIONS': ('exceptions', 'try except finally raise'),
'COERCIONS': ('coercion-rules','CONVERSIONS'),
'CONVERSIONS': ('conversions', 'COERCIONS'),
'IDENTIFIERS': ('identifiers', 'keywords SPECIALIDENTIFIERS'),
'SPECIALIDENTIFIERS': ('id-classes', ''),
'PRIVATENAMES': ('atom-identifiers', ''),
'LITERALS': ('atom-literals', 'STRINGS BACKQUOTES NUMBERS '
'TUPLELITERALS LISTLITERALS DICTIONARYLITERALS'),
'TUPLES': 'SEQUENCES',
'TUPLELITERALS': ('exprlists', 'TUPLES LITERALS'),
'LISTS': ('typesseq-mutable', 'LISTLITERALS'),
'LISTLITERALS': ('lists', 'LISTS LITERALS'),
'DICTIONARIES': ('typesmapping', 'DICTIONARYLITERALS'),
'DICTIONARYLITERALS': ('dict', 'DICTIONARIES LITERALS'),
'BACKQUOTES': ('string-conversions', 'repr str STRINGS LITERALS'),
'ATTRIBUTES': ('attribute-references', 'getattr hasattr setattr '
'ATTRIBUTEMETHODS'),
'SUBSCRIPTS': ('subscriptions', 'SEQUENCEMETHODS1'),
'SLICINGS': ('slicings', 'SEQUENCEMETHODS2'),
'CALLS': ('calls', 'EXPRESSIONS'),
'POWER': ('power', 'EXPRESSIONS'),
'UNARY': ('unary', 'EXPRESSIONS'),
'BINARY': ('binary', 'EXPRESSIONS'),
'SHIFTING': ('shifting', 'EXPRESSIONS'),
'BITWISE': ('bitwise', 'EXPRESSIONS'),
'COMPARISON': ('comparisons', 'EXPRESSIONS BASICMETHODS'),
'BOOLEAN': ('booleans', 'EXPRESSIONS TRUTHVALUE'),
'ASSERTION': 'assert',
'ASSIGNMENT': ('assignment', 'AUGMENTEDASSIGNMENT'),
'AUGMENTEDASSIGNMENT': ('augassign', 'NUMBERMETHODS'),
'DELETION': 'del',
'PRINTING': 'print',
'RETURNING': 'return',
'IMPORTING': 'import',
'CONDITIONAL': 'if',
'LOOPING': ('compound', 'for while break continue'),
'TRUTHVALUE': ('truth', 'if while and or not BASICMETHODS'),
'DEBUGGING': ('debugger', 'pdb'),
'CONTEXTMANAGERS': ('context-managers', 'with'),
}
def __init__(self, input=None, output=None):
self._input = input
self._output = output
input = property(lambda self: self._input or sys.stdin)
output = property(lambda self: self._output or sys.stdout)
def __repr__(self):
if inspect.stack()[1][3] == '?':
self()
return ''
return '<pydoc.Helper instance>'
_GoInteractive = object()
def __call__(self, request=_GoInteractive):
if request is not self._GoInteractive:
self.help(request)
else:
self.intro()
self.interact()
self.output.write('''
You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)". Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
''')
def interact(self):
self.output.write('\n')
while True:
try:
request = self.getline('help> ')
if not request: break
except (KeyboardInterrupt, EOFError):
break
request = strip(replace(request, '"', '', "'", ''))
if lower(request) in ('q', 'quit'): break
self.help(request)
def getline(self, prompt):
"""Read one line, using raw_input when available."""
if self.input is sys.stdin:
return raw_input(prompt)
else:
self.output.write(prompt)
self.output.flush()
return self.input.readline()
def help(self, request):
if type(request) is type(''):
request = request.strip()
if request == 'help': self.intro()
elif request == 'keywords': self.listkeywords()
elif request == 'symbols': self.listsymbols()
elif request == 'topics': self.listtopics()
elif request == 'modules': self.listmodules()
elif request[:8] == 'modules ':
self.listmodules(split(request)[1])
elif request in self.symbols: self.showsymbol(request)
elif request in self.keywords: self.showtopic(request)
elif request in self.topics: self.showtopic(request)
elif request: doc(request, 'Help on %s:')
elif isinstance(request, Helper): self()
else: doc(request, 'Help on %s:')
self.output.write('\n')
def intro(self):
self.output.write('''
Welcome to Python %s! This is the online help utility.
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/%s/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics". Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".
''' % tuple([sys.version[:3]]*2))
def list(self, items, columns=4, width=80):
items = items[:]
items.sort()
colw = width / columns
rows = (len(items) + columns - 1) / columns
for row in range(rows):
for col in range(columns):
i = col * rows + row
if i < len(items):
self.output.write(items[i])
if col < columns - 1:
self.output.write(' ' + ' ' * (colw-1 - len(items[i])))
self.output.write('\n')
def listkeywords(self):
self.output.write('''
Here is a list of the Python keywords. Enter any keyword to get more help.
''')
self.list(self.keywords.keys())
def listsymbols(self):
self.output.write('''
Here is a list of the punctuation symbols which Python assigns special meaning
to. Enter any symbol to get more help.
''')
self.list(self.symbols.keys())
def listtopics(self):
self.output.write('''
Here is a list of available topics. Enter any topic name to get more help.
''')
self.list(self.topics.keys())
def showtopic(self, topic, more_xrefs=''):
try:
import pydoc_data.topics
except ImportError:
self.output.write('''
Sorry, topic and keyword documentation is not available because the
module "pydoc_data.topics" could not be found.
''')
return
target = self.topics.get(topic, self.keywords.get(topic))
if not target:
self.output.write('no documentation found for %s\n' % repr(topic))
return
if type(target) is type(''):
return self.showtopic(target, more_xrefs)
label, xrefs = target
try:
doc = pydoc_data.topics.topics[label]
except KeyError:
self.output.write('no documentation found for %s\n' % repr(topic))
return
pager(strip(doc) + '\n')
if more_xrefs:
xrefs = (xrefs or '') + ' ' + more_xrefs
if xrefs:
import StringIO, formatter
buffer = StringIO.StringIO()
formatter.DumbWriter(buffer).send_flowing_data(
'Related help topics: ' + join(split(xrefs), ', ') + '\n')
self.output.write('\n%s\n' % buffer.getvalue())
def showsymbol(self, symbol):
target = self.symbols[symbol]
topic, _, xrefs = target.partition(' ')
self.showtopic(topic, xrefs)
def listmodules(self, key=''):
if key:
self.output.write('''
Here is a list of matching modules. Enter any module name to get more help.
''')
apropos(key)
else:
self.output.write('''
Please wait a moment while I gather a list of all available modules...
''')
modules = {}
def callback(path, modname, desc, modules=modules):
if modname and modname[-9:] == '.__init__':
modname = modname[:-9] + ' (package)'
if find(modname, '.') < 0:
modules[modname] = 1
def onerror(modname):
callback(None, modname, None)
ModuleScanner().run(callback, onerror=onerror)
self.list(modules.keys())
self.output.write('''
Enter any module name to get more help. Or, type "modules spam" to search
for modules whose descriptions contain the word "spam".
''')
help = Helper()
class Scanner:
"""A generic tree iterator."""
def __init__(self, roots, children, descendp):
self.roots = roots[:]
self.state = []
self.children = children
self.descendp = descendp
def next(self):
if not self.state:
if not self.roots:
return None
root = self.roots.pop(0)
self.state = [(root, self.children(root))]
node, children = self.state[-1]
if not children:
self.state.pop()
return self.next()
child = children.pop(0)
if self.descendp(child):
self.state.append((child, self.children(child)))
return child
class ModuleScanner:
"""An interruptible scanner that searches module synopses."""
def run(self, callback, key=None, completer=None, onerror=None):
if key: key = lower(key)
self.quit = False
seen = {}
for modname in sys.builtin_module_names:
if modname != '__main__':
seen[modname] = 1
if key is None:
callback(None, modname, '')
else:
desc = split(__import__(modname).__doc__ or '', '\n')[0]
if find(lower(modname + ' - ' + desc), key) >= 0:
callback(None, modname, desc)
for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror):
if self.quit:
break
if key is None:
callback(None, modname, '')
else:
loader = importer.find_module(modname)
if hasattr(loader,'get_source'):
import StringIO
desc = source_synopsis(
StringIO.StringIO(loader.get_source(modname))
) or ''
if hasattr(loader,'get_filename'):
path = loader.get_filename(modname)
else:
path = None
else:
module = loader.load_module(modname)
desc = (module.__doc__ or '').splitlines()[0]
path = getattr(module,'__file__',None)
if find(lower(modname + ' - ' + desc), key) >= 0:
callback(path, modname, desc)
if completer:
completer()
def apropos(key):
"""Print all the one-line module summaries that contain a substring."""
def callback(path, modname, desc):
if modname[-9:] == '.__init__':
modname = modname[:-9] + ' (package)'
print modname, desc and '- ' + desc
def onerror(modname):
pass
with warnings.catch_warnings():
warnings.filterwarnings('ignore') # ignore problems during import
ModuleScanner().run(callback, key, onerror=onerror)
# --------------------------------------------------- web browser interface
def serve(port, callback=None, completer=None):
import BaseHTTPServer, mimetools, select
# Patch up mimetools.Message so it doesn't break if rfc822 is reloaded.
class Message(mimetools.Message):
def __init__(self, fp, seekable=1):
Message = self.__class__
Message.__bases__[0].__bases__[0].__init__(self, fp, seekable)
self.encodingheader = self.getheader('content-transfer-encoding')
self.typeheader = self.getheader('content-type')
self.parsetype()
self.parseplist()
class DocHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def send_document(self, title, contents):
try:
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(html.page(title, contents))
except IOError: pass
def do_GET(self):
path = self.path
if path[-5:] == '.html': path = path[:-5]
if path[:1] == '/': path = path[1:]
if path and path != '.':
try:
obj = locate(path, forceload=1)
except ErrorDuringImport, value:
self.send_document(path, html.escape(str(value)))
return
if obj:
self.send_document(describe(obj), html.document(obj, path))
else:
self.send_document(path,
'no Python documentation found for %s' % repr(path))
else:
heading = html.heading(
'<big><big><strong>Python: Index of Modules</strong></big></big>',
'#ffffff', '#7799ee')
def bltinlink(name):
return '<a href="%s.html">%s</a>' % (name, name)
names = filter(lambda x: x != '__main__',
sys.builtin_module_names)
contents = html.multicolumn(names, bltinlink)
indices = ['<p>' + html.bigsection(
'Built-in Modules', '#ffffff', '#ee77aa', contents)]
seen = {}
for dir in sys.path:
indices.append(html.index(dir, seen))
contents = heading + join(indices) + '''<p align=right>
<font color="#909090" face="helvetica, arial"><strong>
pydoc</strong> by Ka-Ping Yee <ping@lfw.org></font>'''
self.send_document('Index of Modules', contents)
def log_message(self, *args): pass
class DocServer(BaseHTTPServer.HTTPServer):
def __init__(self, port, callback):
host = 'localhost'
self.address = (host, port)
self.url = 'http://%s:%d/' % (host, port)
self.callback = callback
self.base.__init__(self, self.address, self.handler)
def serve_until_quit(self):
import select
self.quit = False
while not self.quit:
rd, wr, ex = select.select([self.socket.fileno()], [], [], 1)
if rd: self.handle_request()
def server_activate(self):
self.base.server_activate(self)
if self.callback: self.callback(self)
DocServer.base = BaseHTTPServer.HTTPServer
DocServer.handler = DocHandler
DocHandler.MessageClass = Message
try:
try:
DocServer(port, callback).serve_until_quit()
except (KeyboardInterrupt, select.error):
pass
finally:
if completer: completer()
# ----------------------------------------------------- graphical interface
def gui():
"""Graphical interface (starts web server and pops up a control window)."""
class GUI:
def __init__(self, window, port=7464):
self.window = window
self.server = None
self.scanner = None
import Tkinter
self.server_frm = Tkinter.Frame(window)
self.title_lbl = Tkinter.Label(self.server_frm,
text='Starting server...\n ')
self.open_btn = Tkinter.Button(self.server_frm,
text='open browser', command=self.open, state='disabled')
self.quit_btn = Tkinter.Button(self.server_frm,
text='quit serving', command=self.quit, state='disabled')
self.search_frm = Tkinter.Frame(window)
self.search_lbl = Tkinter.Label(self.search_frm, text='Search for')
self.search_ent = Tkinter.Entry(self.search_frm)
self.search_ent.bind('<Return>', self.search)
self.stop_btn = Tkinter.Button(self.search_frm,
text='stop', pady=0, command=self.stop, state='disabled')
if sys.platform == 'win32':
# Trying to hide and show this button crashes under Windows.
self.stop_btn.pack(side='right')
self.window.title('pydoc')
self.window.protocol('WM_DELETE_WINDOW', self.quit)
self.title_lbl.pack(side='top', fill='x')
self.open_btn.pack(side='left', fill='x', expand=1)
self.quit_btn.pack(side='right', fill='x', expand=1)
self.server_frm.pack(side='top', fill='x')
self.search_lbl.pack(side='left')
self.search_ent.pack(side='right', fill='x', expand=1)
self.search_frm.pack(side='top', fill='x')
self.search_ent.focus_set()
font = ('helvetica', sys.platform == 'win32' and 8 or 10)
self.result_lst = Tkinter.Listbox(window, font=font, height=6)
self.result_lst.bind('<Button-1>', self.select)
self.result_lst.bind('<Double-Button-1>', self.goto)
self.result_scr = Tkinter.Scrollbar(window,
orient='vertical', command=self.result_lst.yview)
self.result_lst.config(yscrollcommand=self.result_scr.set)
self.result_frm = Tkinter.Frame(window)
self.goto_btn = Tkinter.Button(self.result_frm,
text='go to selected', command=self.goto)
self.hide_btn = Tkinter.Button(self.result_frm,
text='hide results', command=self.hide)
self.goto_btn.pack(side='left', fill='x', expand=1)
self.hide_btn.pack(side='right', fill='x', expand=1)
self.window.update()
self.minwidth = self.window.winfo_width()
self.minheight = self.window.winfo_height()
self.bigminheight = (self.server_frm.winfo_reqheight() +
self.search_frm.winfo_reqheight() +
self.result_lst.winfo_reqheight() +
self.result_frm.winfo_reqheight())
self.bigwidth, self.bigheight = self.minwidth, self.bigminheight
self.expanded = 0
self.window.wm_geometry('%dx%d' % (self.minwidth, self.minheight))
self.window.wm_minsize(self.minwidth, self.minheight)
self.window.tk.willdispatch()
import threading
threading.Thread(
target=serve, args=(port, self.ready, self.quit)).start()
def ready(self, server):
self.server = server
self.title_lbl.config(
text='Python documentation server at\n' + server.url)
self.open_btn.config(state='normal')
self.quit_btn.config(state='normal')
def open(self, event=None, url=None):
url = url or self.server.url
try:
import webbrowser
webbrowser.open(url)
except ImportError: # pre-webbrowser.py compatibility
if sys.platform == 'win32':
os.system('start "%s"' % url)
else:
rc = os.system('netscape -remote "openURL(%s)" &' % url)
if rc: os.system('netscape "%s" &' % url)
def quit(self, event=None):
if self.server:
self.server.quit = 1
self.window.quit()
def search(self, event=None):
key = self.search_ent.get()
self.stop_btn.pack(side='right')
self.stop_btn.config(state='normal')
self.search_lbl.config(text='Searching for "%s"...' % key)
self.search_ent.forget()
self.search_lbl.pack(side='left')
self.result_lst.delete(0, 'end')
self.goto_btn.config(state='disabled')
self.expand()
import threading
if self.scanner:
self.scanner.quit = 1
self.scanner = ModuleScanner()
threading.Thread(target=self.scanner.run,
args=(self.update, key, self.done)).start()
def update(self, path, modname, desc):
if modname[-9:] == '.__init__':
modname = modname[:-9] + ' (package)'
self.result_lst.insert('end',
modname + ' - ' + (desc or '(no description)'))
def stop(self, event=None):
if self.scanner:
self.scanner.quit = 1
self.scanner = None
def done(self):
self.scanner = None
self.search_lbl.config(text='Search for')
self.search_lbl.pack(side='left')
self.search_ent.pack(side='right', fill='x', expand=1)
if sys.platform != 'win32': self.stop_btn.forget()
self.stop_btn.config(state='disabled')
def select(self, event=None):
self.goto_btn.config(state='normal')
def goto(self, event=None):
selection = self.result_lst.curselection()
if selection:
modname = split(self.result_lst.get(selection[0]))[0]
self.open(url=self.server.url + modname + '.html')
def collapse(self):
if not self.expanded: return
self.result_frm.forget()
self.result_scr.forget()
self.result_lst.forget()
self.bigwidth = self.window.winfo_width()
self.bigheight = self.window.winfo_height()
self.window.wm_geometry('%dx%d' % (self.minwidth, self.minheight))
self.window.wm_minsize(self.minwidth, self.minheight)
self.expanded = 0
def expand(self):
if self.expanded: return
self.result_frm.pack(side='bottom', fill='x')
self.result_scr.pack(side='right', fill='y')
self.result_lst.pack(side='top', fill='both', expand=1)
self.window.wm_geometry('%dx%d' % (self.bigwidth, self.bigheight))
self.window.wm_minsize(self.minwidth, self.bigminheight)
self.expanded = 1
def hide(self, event=None):
self.stop()
self.collapse()
import Tkinter
try:
root = Tkinter.Tk()
# Tk will crash if pythonw.exe has an XP .manifest
# file and the root has is not destroyed explicitly.
# If the problem is ever fixed in Tk, the explicit
# destroy can go.
try:
gui = GUI(root)
root.mainloop()
finally:
root.destroy()
except KeyboardInterrupt:
pass
# -------------------------------------------------- command-line interface
def ispath(x):
return isinstance(x, str) and find(x, os.sep) >= 0
def cli():
"""Command-line interface (looks at sys.argv to decide what to do)."""
import getopt
class BadUsage: pass
# Scripts don't get the current directory in their path by default
# unless they are run with the '-m' switch
if '' not in sys.path:
scriptdir = os.path.dirname(sys.argv[0])
if scriptdir in sys.path:
sys.path.remove(scriptdir)
sys.path.insert(0, '.')
try:
opts, args = getopt.getopt(sys.argv[1:], 'gk:p:w')
writing = 0
for opt, val in opts:
if opt == '-k':
apropos(val)
return
if opt == '-p':
try:
port = int(val)
except ValueError:
raise BadUsage
def ready(server):
print 'pydoc server ready at %s' % server.url
def stopped():
print 'pydoc server stopped'
serve(port, ready, stopped)
return
if opt == '-w':
writing = 1
if not args: raise BadUsage
for arg in args:
if ispath(arg) and not os.path.exists(arg):
print 'file %r does not exist' % arg
break
try:
if ispath(arg) and os.path.isfile(arg):
arg = importfile(arg)
if writing:
if ispath(arg) and os.path.isdir(arg):
writedocs(arg)
else:
writedoc(arg)
else:
help.help(arg)
except ErrorDuringImport, value:
print value
except (getopt.error, BadUsage):
cmd = os.path.basename(sys.argv[0])
print """pydoc - the Python documentation tool
%s <name> ...
Show text documentation on something. <name> may be the name of a
Python keyword, topic, function, module, or package, or a dotted
reference to a class or function within a module or module in a
package. If <name> contains a '%s', it is used as the path to a
Python source file to document. If name is 'keywords', 'topics',
or 'modules', a listing of these things is displayed.
%s -k <keyword>
Search for a keyword in the synopsis lines of all available modules.
%s -p <port>
Start an HTTP server on the given port on the local machine.
%s -w <name> ...
Write out the HTML documentation for a module to a file in the current
directory. If <name> contains a '%s', it is treated as a filename; if
it names a directory, documentation is written for all the contents.
""" % (cmd, os.sep, cmd, cmd, cmd, os.sep)
if __name__ == '__main__': cli()
| N4m3 |
5!z3 |
L45t M0d!f!3d |
0wn3r / Gr0up |
P3Rm!55!0n5 |
0pt!0n5 |
| .. |
-- |
August 27 2025 03:05:25 |
root / root |
0555 |
|
| Demo |
-- |
October 16 2024 04:08:49 |
root / root |
0755 |
|
| Doc |
-- |
October 03 2024 12:56:24 |
root / root |
0755 |
|
| Tools |
-- |
October 16 2024 04:08:49 |
root / root |
0755 |
|
| bsddb |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| compiler |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| config |
-- |
October 16 2024 04:08:49 |
root / root |
0755 |
|
| ctypes |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| curses |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| distutils |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| email |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| encodings |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| hotshot |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| idlelib |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| importlib |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| json |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| lib-dynload |
-- |
October 16 2024 04:08:49 |
root / root |
0755 |
|
| lib-tk |
-- |
October 16 2024 04:08:49 |
root / root |
0755 |
|
| lib2to3 |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| logging |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| multiprocessing |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| plat-linux2 |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| pydoc_data |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| site-packages |
-- |
June 11 2025 04:10:26 |
root / root |
0755 |
|
| sqlite3 |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| test |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| unittest |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| wsgiref |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| xml |
-- |
October 16 2024 04:08:48 |
root / root |
0755 |
|
| | | | | |
| BaseHTTPServer.py |
21.935 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| BaseHTTPServer.pyc |
21.181 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| BaseHTTPServer.pyo |
21.181 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| Bastion.py |
5.609 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| Bastion.pyc |
6.504 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| Bastion.pyo |
6.504 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| CGIHTTPServer.py |
12.844 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| CGIHTTPServer.pyc |
10.845 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| CGIHTTPServer.pyo |
10.845 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| ConfigParser.py |
27.096 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| ConfigParser.pyc |
24.622 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| ConfigParser.pyo |
24.622 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| Cookie.py |
24.661 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| Cookie.pyc |
21.638 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| Cookie.pyo |
21.638 KB |
October 03 2024 12:56:52 |
root / root |
0644 |
|
| DocXMLRPCServer.py |
10.516 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| DocXMLRPCServer.pyc |
9.955 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| DocXMLRPCServer.pyo |
9.849 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| HTMLParser.py |
16.584 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| HTMLParser.pyc |
13.395 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| HTMLParser.pyo |
13.097 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| MimeWriter.py |
6.33 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| MimeWriter.pyc |
7.191 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| MimeWriter.pyo |
7.191 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| Queue.py |
8.36 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| Queue.pyc |
9.188 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| Queue.pyo |
9.188 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SimpleHTTPServer.py |
7.248 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| SimpleHTTPServer.pyc |
7.55 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SimpleHTTPServer.pyo |
7.55 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SimpleXMLRPCServer.py |
25.165 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| SimpleXMLRPCServer.pyc |
22.31 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SimpleXMLRPCServer.pyo |
22.31 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SocketServer.py |
23.29 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| SocketServer.pyc |
23.488 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| SocketServer.pyo |
23.488 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| StringIO.py |
10.412 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| StringIO.pyc |
11.211 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| StringIO.pyo |
11.211 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserDict.py |
5.675 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| UserDict.pyc |
8.613 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserDict.pyo |
8.613 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserList.py |
3.559 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| UserList.pyc |
6.423 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserList.pyo |
6.423 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserString.py |
9.461 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| UserString.pyc |
14.516 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| UserString.pyo |
14.516 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _LWPCookieJar.py |
6.401 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _LWPCookieJar.pyc |
5.404 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _LWPCookieJar.pyo |
5.404 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _MozillaCookieJar.py |
5.673 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _MozillaCookieJar.pyc |
4.367 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _MozillaCookieJar.pyo |
4.329 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| __future__.py |
4.277 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| __future__.pyc |
4.129 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| __future__.pyo |
4.129 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| __phello__.foo.py |
0.063 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| __phello__.foo.pyc |
0.122 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| __phello__.foo.pyo |
0.122 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _abcoll.py |
17.446 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _abcoll.pyc |
24.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _abcoll.pyo |
24.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _osx_support.py |
18.027 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _osx_support.pyc |
11.28 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _osx_support.pyo |
11.28 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _pyio.py |
67.243 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _pyio.pyc |
62.712 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _pyio.pyo |
62.712 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _strptime.py |
19.746 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _strptime.pyc |
14.525 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _strptime.pyo |
14.525 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _sysconfigdata.py |
17.563 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| _sysconfigdata.pyc |
20.721 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _sysconfigdata.pyo |
20.721 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _threading_local.py |
7.281 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _threading_local.pyc |
6.449 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _threading_local.pyo |
6.449 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _weakrefset.py |
5.476 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| _weakrefset.pyc |
9.255 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| _weakrefset.pyo |
9.255 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| abc.py |
6.978 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| abc.pyc |
5.999 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| abc.pyo |
5.944 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| aifc.py |
32.943 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| aifc.pyc |
29.306 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| aifc.pyo |
29.306 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| antigravity.py |
0.059 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| antigravity.pyc |
0.198 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| antigravity.pyo |
0.198 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| anydbm.py |
2.601 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| anydbm.pyc |
2.734 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| anydbm.pyo |
2.734 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| argparse.py |
86.455 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| argparse.pyc |
62.569 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| argparse.pyo |
62.408 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| ast.py |
11.528 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| ast.pyc |
12.65 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| ast.pyo |
12.65 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| asynchat.py |
11.135 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| asynchat.pyc |
8.438 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| asynchat.pyo |
8.438 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| asyncore.py |
20.358 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| asyncore.pyc |
18.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| asyncore.pyo |
18.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| atexit.py |
1.665 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| atexit.pyc |
2.151 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| atexit.pyo |
2.151 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| audiodev.py |
7.419 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| audiodev.pyc |
8.27 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| audiodev.pyo |
8.27 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| base64.py |
11.091 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| base64.pyc |
10.633 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| base64.pyo |
10.633 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| bdb.py |
21.205 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| bdb.pyc |
18.653 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| bdb.pyo |
18.653 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| binhex.py |
14.137 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| binhex.pyc |
15.039 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| binhex.pyo |
15.039 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| bisect.py |
2.534 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| bisect.pyc |
2.999 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| bisect.pyo |
2.999 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cProfile.py |
6.428 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| cProfile.pyc |
6.252 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cProfile.pyo |
6.252 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| calendar.py |
22.758 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| calendar.pyc |
27.133 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| calendar.pyo |
27.133 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cgi.py |
33.681 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| cgi.pyc |
31.706 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cgi.pyo |
31.706 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cgitb.py |
11.895 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| cgitb.pyc |
11.898 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cgitb.pyo |
11.898 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| chunk.py |
5.246 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| chunk.pyc |
5.46 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| chunk.pyo |
5.46 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cmd.py |
14.674 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| cmd.pyc |
13.71 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cmd.pyo |
13.71 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| code.py |
9.95 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| code.pyc |
10.091 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| code.pyo |
10.091 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| codecs.py |
34.439 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| codecs.pyc |
35.744 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| codecs.pyo |
35.744 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| codeop.py |
5.858 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| codeop.pyc |
6.442 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| codeop.pyo |
6.442 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| collections.py |
25.276 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| collections.pyc |
23.994 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| collections.pyo |
23.944 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| colorsys.py |
3.604 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| colorsys.pyc |
3.897 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| colorsys.pyo |
3.897 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| commands.py |
2.485 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| commands.pyc |
2.411 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| commands.pyo |
2.411 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| compileall.py |
7.581 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| compileall.pyc |
6.852 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| compileall.pyo |
6.852 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| contextlib.py |
4.32 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| contextlib.pyc |
4.35 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| contextlib.pyo |
4.35 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cookielib.py |
63.206 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| cookielib.pyc |
53.549 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| cookielib.pyo |
53.365 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| copy.py |
11.249 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| copy.pyc |
11.908 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| copy.pyo |
11.818 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| copy_reg.py |
6.641 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| copy_reg.pyc |
4.993 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| copy_reg.pyo |
4.95 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| crypt.py |
2.238 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| crypt.pyc |
2.891 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| crypt.pyo |
2.891 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| csv.py |
15.961 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| csv.pyc |
13.138 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| csv.pyo |
13.138 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dbhash.py |
0.486 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dbhash.pyc |
0.701 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dbhash.pyo |
0.701 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| decimal.py |
215.843 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| decimal.pyc |
167.326 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| decimal.pyo |
167.326 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| difflib.py |
80.419 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| difflib.pyc |
60.501 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| difflib.pyo |
60.451 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| dircache.py |
1.1 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dircache.pyc |
1.539 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dircache.pyo |
1.539 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dis.py |
6.347 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dis.pyc |
6.082 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dis.pyo |
6.082 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| doctest.py |
102.011 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| doctest.pyc |
81.45 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| doctest.pyo |
81.17 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| dumbdbm.py |
8.613 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dumbdbm.pyc |
6.406 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dumbdbm.pyo |
6.406 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dummy_thread.py |
4.314 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dummy_thread.pyc |
5.268 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dummy_thread.pyo |
5.268 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dummy_threading.py |
2.738 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| dummy_threading.pyc |
1.255 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| dummy_threading.pyo |
1.255 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| filecmp.py |
9.363 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| filecmp.pyc |
9.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| filecmp.pyo |
9.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fileinput.py |
13.812 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| fileinput.pyc |
14.479 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fileinput.pyo |
14.479 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fnmatch.py |
3.163 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| fnmatch.pyc |
3.451 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fnmatch.pyo |
3.451 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| formatter.py |
14.562 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| formatter.pyc |
18.729 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| formatter.pyo |
18.729 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fpformat.py |
4.589 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| fpformat.pyc |
4.562 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fpformat.pyo |
4.562 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fractions.py |
21.865 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| fractions.pyc |
19.271 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| fractions.pyo |
19.271 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| ftplib.py |
36.1 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| ftplib.pyc |
33.381 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| ftplib.pyo |
33.381 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| functools.py |
4.373 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| functools.pyc |
5.946 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| functools.pyo |
5.946 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| genericpath.py |
2.944 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| genericpath.pyc |
3.187 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| genericpath.pyo |
3.187 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| getopt.py |
7.146 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| getopt.pyc |
6.498 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| getopt.pyo |
6.454 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| getpass.py |
5.433 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| getpass.pyc |
4.632 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| getpass.pyo |
4.632 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| gettext.py |
19.47 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| gettext.pyc |
15.188 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| gettext.pyo |
15.188 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| glob.py |
2.859 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| glob.pyc |
2.829 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| glob.pyo |
2.829 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| gzip.py |
18.256 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| gzip.pyc |
14.718 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| gzip.pyo |
14.718 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| hashlib.py |
7.479 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| hashlib.pyc |
6.744 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| hashlib.pyo |
6.744 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| heapq.py |
17.765 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| heapq.pyc |
14.134 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| heapq.pyo |
14.134 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| hmac.py |
4.48 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| hmac.pyc |
4.436 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| hmac.pyo |
4.436 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| htmlentitydefs.py |
17.631 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| htmlentitydefs.pyc |
6.218 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| htmlentitydefs.pyo |
6.218 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| htmllib.py |
12.567 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| htmllib.pyc |
19.833 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| htmllib.pyo |
19.833 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| httplib.py |
51.369 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| httplib.pyc |
37.545 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| httplib.pyo |
37.365 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| ihooks.py |
18.541 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| ihooks.pyc |
20.871 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| ihooks.pyo |
20.871 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| imaplib.py |
47.143 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| imaplib.pyc |
44.276 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| imaplib.pyo |
41.631 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| imghdr.py |
3.461 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| imghdr.pyc |
4.732 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| imghdr.pyo |
4.732 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| imputil.py |
25.16 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| imputil.pyc |
15.257 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| imputil.pyo |
15.083 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| inspect.py |
41.469 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| inspect.pyc |
39.04 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| inspect.pyo |
39.04 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| io.py |
3.122 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| io.pyc |
3.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| io.pyo |
3.396 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| keyword.py |
1.949 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| keyword.pyc |
2.056 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| keyword.pyo |
2.056 KB |
October 03 2024 12:56:53 |
root / root |
0644 |
|
| linecache.py |
3.871 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| linecache.pyc |
3.136 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| linecache.pyo |
3.136 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| locale.py |
87.332 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| locale.pyc |
48.771 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| locale.pyo |
48.771 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| macpath.py |
6.105 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| macpath.pyc |
7.468 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| macpath.pyo |
7.468 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| macurl2path.py |
3.198 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| macurl2path.pyc |
2.714 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| macurl2path.pyo |
2.714 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mailbox.py |
78.858 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mailbox.pyc |
74.867 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mailbox.pyo |
74.821 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| mailcap.py |
7.253 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mailcap.pyc |
6.918 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mailcap.pyo |
6.918 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| markupbase.py |
14.3 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| markupbase.pyc |
9.083 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| markupbase.pyo |
8.892 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| md5.py |
0.35 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| md5.pyc |
0.369 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| md5.pyo |
0.369 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mhlib.py |
32.65 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mhlib.pyc |
33.011 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mhlib.pyo |
33.011 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimetools.py |
7 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mimetools.pyc |
8.029 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimetools.pyo |
8.029 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimetypes.py |
20.218 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mimetypes.pyc |
17.856 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimetypes.pyo |
17.856 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimify.py |
14.669 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| mimify.pyc |
11.709 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mimify.pyo |
11.709 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| modulefinder.py |
23.714 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| modulefinder.pyc |
18.272 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| modulefinder.pyo |
18.192 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| multifile.py |
4.707 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| multifile.pyc |
5.292 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| multifile.pyo |
5.251 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| mutex.py |
1.833 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| mutex.pyc |
2.456 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| mutex.pyo |
2.456 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| netrc.py |
4.469 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| netrc.pyc |
3.832 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| netrc.pyo |
3.832 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| new.py |
0.596 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| new.pyc |
0.842 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| new.pyo |
0.842 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| nntplib.py |
20.967 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| nntplib.pyc |
20.548 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| nntplib.pyo |
20.548 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| ntpath.py |
18.024 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| ntpath.pyc |
11.603 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| ntpath.pyo |
11.559 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| nturl2path.py |
2.315 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| nturl2path.pyc |
1.772 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| nturl2path.pyo |
1.772 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| numbers.py |
10.077 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| numbers.pyc |
13.684 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| numbers.pyo |
13.684 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| opcode.py |
5.346 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| opcode.pyc |
6.003 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| opcode.pyo |
6.003 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| optparse.py |
59.691 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| optparse.pyc |
52.782 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| optparse.pyo |
52.701 KB |
October 03 2024 12:56:56 |
root / root |
0644 |
|
| os.py |
25.165 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| os.pyc |
24.958 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| os.pyo |
24.958 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| os2emxpath.py |
4.495 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| os2emxpath.pyc |
4.387 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| os2emxpath.pyo |
4.387 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pdb.doc |
7.728 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| pdb.py |
44.938 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| pdb.pyc |
42.591 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pdb.pyo |
42.591 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pickle.py |
44.093 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pickle.pyc |
37.562 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pickle.pyo |
37.37 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| pickletools.py |
72.792 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pickletools.pyc |
55.771 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pickletools.pyo |
54.951 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| pipes.py |
9.357 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pipes.pyc |
9.09 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pipes.pyo |
9.09 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pkgutil.py |
19.869 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pkgutil.pyc |
18.489 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pkgutil.pyo |
18.489 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| platform.py |
51.966 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| platform.pyc |
36.042 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| platform.pyo |
36.042 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| plistlib.py |
15.436 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| plistlib.pyc |
19.521 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| plistlib.pyo |
19.437 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| popen2.py |
8.219 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| popen2.pyc |
8.813 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| popen2.pyo |
8.772 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| poplib.py |
12.524 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| poplib.pyc |
13.033 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| poplib.pyo |
13.033 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| posixfile.py |
7.815 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| posixfile.pyc |
7.473 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| posixfile.pyo |
7.473 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| posixpath.py |
13.272 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| posixpath.pyc |
11.032 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| posixpath.pyo |
11.032 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pprint.py |
11.727 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pprint.pyc |
10.062 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pprint.pyo |
9.889 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| profile.py |
22.248 KB |
October 03 2024 12:56:13 |
root / root |
0755 |
|
| profile.pyc |
16.072 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| profile.pyo |
15.831 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| pstats.py |
26.085 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pstats.pyc |
24.427 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pstats.pyo |
24.427 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pty.py |
4.939 KB |
October 03 2024 12:56:13 |
root / root |
0644 |
|
| pty.pyc |
4.85 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pty.pyo |
4.85 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| py_compile.py |
5.788 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| py_compile.pyc |
6.273 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| py_compile.pyo |
6.273 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pyclbr.py |
13.074 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| pyclbr.pyc |
9.425 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pyclbr.pyo |
9.425 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pydoc.py |
91.121 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| pydoc.pyc |
88.349 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| pydoc.pyo |
88.286 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| quopri.py |
6.806 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| quopri.pyc |
6.418 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| quopri.pyo |
6.418 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| random.py |
31.45 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| random.pyc |
24.985 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| random.pyo |
24.985 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| re.py |
12.655 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| re.pyc |
12.787 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| re.pyo |
12.787 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| repr.py |
4.195 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| repr.pyc |
5.259 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| repr.pyo |
5.259 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rexec.py |
19.676 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| rexec.pyc |
23.579 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rexec.pyo |
23.579 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rfc822.py |
32.515 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| rfc822.pyc |
31.046 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rfc822.pyo |
31.046 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rlcompleter.py |
5.682 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| rlcompleter.pyc |
5.84 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| rlcompleter.pyo |
5.84 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| robotparser.py |
7.033 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| robotparser.pyc |
7.702 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| robotparser.pyo |
7.702 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| runpy.py |
10.447 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| runpy.pyc |
8.206 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| runpy.pyo |
8.206 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sched.py |
4.969 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sched.pyc |
4.877 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sched.pyo |
4.877 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sets.py |
18.604 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sets.pyc |
16.499 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sets.pyo |
16.499 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sgmllib.py |
17.465 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sgmllib.pyc |
15.074 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sgmllib.pyo |
15.074 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sha.py |
0.384 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sha.pyc |
0.411 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sha.pyo |
0.411 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shelve.py |
7.889 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| shelve.pyc |
10.026 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shelve.pyo |
10.026 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shlex.py |
10.876 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| shlex.pyc |
7.365 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shlex.pyo |
7.365 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shutil.py |
18.458 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| shutil.pyc |
18.104 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| shutil.pyo |
18.104 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| site.py |
19.607 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| site.pyc |
19.109 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| site.pyo |
19.109 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| smtpd.py |
18.108 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| smtpd.pyc |
15.519 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| smtpd.pyo |
15.519 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| smtplib.py |
30.903 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| smtplib.pyc |
29.291 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| smtplib.pyo |
29.291 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sndhdr.py |
5.833 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sndhdr.pyc |
7.185 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sndhdr.pyo |
7.185 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| socket.py |
20.031 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| socket.pyc |
15.729 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| socket.pyo |
15.645 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| sre.py |
0.375 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sre.pyc |
0.507 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre.pyo |
0.507 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre_compile.py |
15.993 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sre_compile.pyc |
10.758 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre_compile.pyo |
10.648 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| sre_constants.py |
6.946 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sre_constants.pyc |
5.974 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre_constants.pyo |
5.974 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre_parse.py |
26.844 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sre_parse.pyc |
18.982 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sre_parse.pyo |
18.982 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| ssl.py |
38.7 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| ssl.pyc |
32.048 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| ssl.pyo |
32.048 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stat.py |
1.799 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| stat.pyc |
2.687 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stat.pyo |
2.687 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| statvfs.py |
0.877 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| statvfs.pyc |
0.605 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| statvfs.pyo |
0.605 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| string.py |
20.27 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| string.pyc |
19.539 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| string.pyo |
19.539 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stringold.py |
12.157 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| stringold.pyc |
12.255 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stringold.pyo |
12.255 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stringprep.py |
13.205 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| stringprep.pyc |
14.147 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| stringprep.pyo |
14.077 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| struct.py |
0.08 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| struct.pyc |
0.233 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| struct.pyo |
0.233 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| subprocess.py |
57.684 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| subprocess.pyc |
40.933 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| subprocess.pyo |
40.933 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sunau.py |
16.149 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sunau.pyc |
17.526 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sunau.pyo |
17.526 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sunaudio.py |
1.366 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| sunaudio.pyc |
1.94 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sunaudio.pyo |
1.94 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| symbol.py |
2.01 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| symbol.pyc |
2.955 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| symbol.pyo |
2.955 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| symtable.py |
7.342 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| symtable.pyc |
11.589 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| symtable.pyo |
11.461 KB |
October 03 2024 12:56:57 |
root / root |
0644 |
|
| sysconfig.py |
21.88 KB |
October 03 2024 12:56:24 |
root / root |
0644 |
|
| sysconfig.pyc |
17.231 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| sysconfig.pyo |
17.231 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tabnanny.py |
11.07 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| tabnanny.pyc |
8.05 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tabnanny.pyo |
8.05 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tarfile.py |
87.999 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| tarfile.pyc |
73.78 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tarfile.pyo |
73.78 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| telnetlib.py |
26.185 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| telnetlib.pyc |
22.534 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| telnetlib.pyo |
22.534 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tempfile.py |
17.905 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| tempfile.pyc |
19.35 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| tempfile.pyo |
19.35 KB |
October 03 2024 12:56:54 |
root / root |
0644 |
|
| textwrap.py |
16.638 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| textwrap.pyc |
11.62 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| textwrap.pyo |
11.53 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| this.py |
0.979 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| this.pyc |
1.191 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| this.pyo |
1.191 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| threading.py |
46.281 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| threading.pyc |
41.7 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| threading.pyo |
39.582 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| timeit.py |
11.817 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| timeit.pyc |
11.497 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| timeit.pyo |
11.497 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| toaiff.py |
3.068 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| toaiff.pyc |
3.033 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| toaiff.pyo |
3.033 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| token.py |
2.877 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| token.pyc |
3.727 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| token.pyo |
3.727 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| tokenize.py |
16.154 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| tokenize.pyc |
13.607 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| tokenize.pyo |
13.521 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| trace.py |
29.19 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| trace.pyc |
22.258 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| trace.pyo |
22.196 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| traceback.py |
10.991 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| traceback.pyc |
11.351 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| traceback.pyo |
11.351 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| tty.py |
0.858 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| tty.pyc |
1.286 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| tty.pyo |
1.286 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| types.py |
1.992 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| types.pyc |
2.447 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| types.pyo |
2.447 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| urllib.py |
57.139 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| urllib.pyc |
49.097 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| urllib.pyo |
49.004 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| urllib2.py |
51.865 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| urllib2.pyc |
46.611 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| urllib2.pyo |
46.519 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| urlparse.py |
16.441 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| urlparse.pyc |
15.379 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| urlparse.pyo |
15.379 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| user.py |
1.589 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| user.pyc |
1.684 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| user.pyo |
1.684 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| uu.py |
6.401 KB |
October 03 2024 12:56:14 |
root / root |
0755 |
|
| uu.pyc |
4.211 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| uu.pyo |
4.211 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| uuid.py |
20.601 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| uuid.pyc |
20.685 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| uuid.pyo |
20.685 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| warnings.py |
13.715 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| warnings.pyc |
12.842 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| warnings.pyo |
12.021 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| wave.py |
17.675 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| wave.pyc |
18.999 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| wave.pyo |
18.937 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| weakref.py |
10.442 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| weakref.pyc |
13.719 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| weakref.pyo |
13.719 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| webbrowser.py |
22.191 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| webbrowser.pyc |
19.315 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| webbrowser.pyo |
19.271 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| whichdb.py |
3.3 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| whichdb.pyc |
2.188 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| whichdb.pyo |
2.188 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| wsgiref.egg-info |
0.183 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| xdrlib.py |
5.433 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| xdrlib.pyc |
9.07 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| xdrlib.pyo |
9.07 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| xmllib.py |
34.048 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| xmllib.pyc |
26.218 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| xmllib.pyo |
26.218 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| xmlrpclib.py |
50.781 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| xmlrpclib.pyc |
42.893 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| xmlrpclib.pyo |
42.713 KB |
October 03 2024 12:56:58 |
root / root |
0644 |
|
| zipfile.py |
56.45 KB |
October 03 2024 12:56:14 |
root / root |
0644 |
|
| zipfile.pyc |
40.333 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
| zipfile.pyo |
40.333 KB |
October 03 2024 12:56:55 |
root / root |
0644 |
|
$.' ",#(7),01444'9=82<.342ÿÛ C
2!!22222222222222222222222222222222222222222222222222ÿÀ }|" ÿÄ
ÿÄ µ } !1AQa "q2‘¡#B±ÁRÑð$3br‚
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
ÿÄ µ w !1AQ aq"2B‘¡±Á #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ? ÷HR÷j¹ûA <̃.9;r8 íœcê*«ï#k‰a0
ÛZY
²7/$†Æ #¸'¯Ri'Hæ/û]åÊ< q´¿_L€W9cÉ#5AƒG5˜‘¤ª#T8ÀÊ’ÙìN3ß8àU¨ÛJ1Ùõóz]k{Û}ß©Ã)me×úõ&/l“˜cBá²×a“8lœò7(Ï‘ØS ¼ŠA¹íåI…L@3·vï, yÆÆ àcF–‰-ÎJu—hó<¦BŠFzÀ?tãúguR‹u#
‡{~?Ú•£=n¾qo~öôüô¸¾³$õüÑ»jò]Mä¦
>ÎÈ[¢à–?) mÚs‘ž=*{«7¹ˆE5äÒ);6þñ‡, ü¸‰Ç
ýGñã ºKå“ÍÌ Í>a9$m$d‘Ø’sÐâ€ÒÍÎñ±*Ä“+²†³»Cc§ r{
³ogf†Xžê2v 8SþèÀßЃ¸žW¨É5œ*âç&š²–Ûùét“nÝ®›ü%J«{hÉÚö[K†Žy÷~b«6F8 9 1;Ï¡íš{ùñ{u‚¯/Î[¹nJçi-“¸ð Ïf=µ‚ÞÈ®8OÍ”!c H%N@<ŽqÈlu"š…xHm®ä<*ó7•…Á
Á#‡|‘Ó¦õq“êífÛüŸ•oNÚ{ËFý;– ŠÙ–!½Òq–‹væRqŒ®?„ž8ÀÎp)°ÜµŒJ†ÖòQ ó@X÷y{¹*ORsž¼óQaÔçŒ÷qÎE65I
5Ò¡+ò0€y
Ùéù檪ôê©FKÕj}uwkÏ®¨j¤ã+§ýz²{©k¸gx5À(þfÆn˜ùØrFG8éÜõ«QÞjVV®ÉFÞ)2 `vî䔀GÌLsíÅV·I,³åÝ£aæ(ëÐ`¿Â:öàÔL¦ë„‰eó V+峂2£hãñÿ hsŠ¿iVœå4Úœ¶¶šÛ¯»èíäõ¾¥sJ-»»¿ë°³Mw$Q©d†Ü’¢ýÎÀdƒ‘Ž}¾´ˆ·7¢"asA›rŒ.v@ ÞÇj”Y´%Š–·–5\ܲõåË2Hã×°*¾d_(˜»#'<ŒîØ1œuþ!ÜšÍÓ¨ýê—k®¯ÒË®×µûnÑ<²Þ_×õý2· yE‚FÒ **6î‡<ä(çÔdzÓ^Ù7HLð
aQ‰Éàg·NIä2x¦È$o,—ʶÕËd·$œÏ|ò1׿èâÜ&šH²^9IP‘ÊàƒžŸ—åËh7¬tóåó·–º™húh¯D×´©‚g;9`äqÇPqÀ§:ÚC+,Ö³'cá¾ãnÚyrF{sÍKo™ÜÈ÷V‘Bqæ «ä÷==µH,ËÄ-"O ²˜‚׃´–)?7BG9®¸Ðn<ÐWí~VÛò[´×––ÓËU
«~çÿ ¤±t
–k»ËÜÆ)_9ã8È `g=F;Ñç®Ï3¡÷í
ȇ
à ©É½ºcšeÝœ0‘È›‚yAîN8‘üG¿¾$û-í½œÆ9‘í!ˆ9F9çxëøž*o_žIÆÖZò¥ÓºVùöõ¿w¦Ýˆæ•´ÓYÄ®³ËV£êƒæõç?áNòîn.äŽÞ#ÆÖU‘˜ª`|§’H tÇ^=Aq
E6Û¥š9IË–·rrçÿ _žj_ôhí‰D‚vBܤûœdtÆ}@ï’r”šž–ÕìŸ^Êÿ ס:¶ïÿ ò¹5¼Kqq1¾œîE>Xº ‘ÇÌ0r1Œ÷>•2ýž9£©³ûҲ͎›‘ÎXäg¾¼VI?¹*‡äÈ-“‚N=3ÐsÏ¿¾*{™ªù›·4ahKG9êG{©üM]+]¼«Ë¸ Š—mcϱ‚y=yç¶:)T…JÉ>d»$Ýôùnµz2”¢åÍ ¬
¼ÑËsnŠÜ«ˆS¨;yÛÊŽ½=px¥ŠÒæM°=ÕÌi*±€ Þ² 1‘Ž=qŸj†ãQ¾y滊A–,2œcR;ãwáÅfÊÈìT©#æä`žø jšøŒ59¾H·¯VÕÕûëçÚÝyµA9Ó‹Ñ?Çúþºš—QÇ
ÔvòßNqù«¼!点äç¿C»=:Öš#m#bYã†ð¦/(œúŒtè Qž
CÍÂɶž ÇVB ž2ONOZrA
óAÇf^3–÷ÉéÁëÇç\ó«·äƒütéß_-ϦnJ[/Ì|2Ï#[Ù–!’,Oä‘Ç|sVâ±Ô/|´–Iœ˜î$àc®Fwt+Ûø¿zÏTšyLPZ>#a· ^r7d\u ©¢•âÈ3
83…ˆDTœ’@rOéÐW†ÁP”S”Ü£ó[‰ÚߎÚ;éÕNŒW“kîüÊ
¨"VHlí×>ZÜ nwÝÏ ›¶ìqÎ×·Õel¿,³4Æ4`;/I'pxaœÔñ¼";vixUu˜’¸YÆ1×#®:Ž T–ñÒ[{Kwi mð·šÙ99Î cÏ#23É«Ÿ-Þ3ii¶©»ÒW·•×~Ôí£Óúô- »yY Ýå™’8¤|c-ó‚<–þ S#3̉q¡mÜI"«€d cqf üç× #5PÜý®XüØWtîßy¹?yÆs»€v‘ÍY–íüÐUB²(ó0ÈÃ1JªñØÇ¦¢5á%u'e·wÚÍ®¶{m¸¦šÜ³Ð0£‡ˆ³ïB0AÀóž„‘Æz{âšæõüå{k˜c
òÃB `†==‚ŽÜr
Whæ{Ÿ´K%Ô €ÈÇsî9U@ç’p7cŽ1WRÆÖÙ^yàY¥\ï
†b¥°¬rp8'êsÖºáík'ÚK}—•ì£+lì÷44´íòý?«Ö÷0¤I"Ú³.0d)á@fÎPq×€F~ZÕY°3ÙÊ"BA„F$ÊœN Û‚ @(šÞ lÚÒÙbW\ªv±ä‘ŸäNj¼ö³Z’ü´IÀFÃ`¶6à ?!
NxÇÒ©Ò†Oª²½’·ŸM¶{êºjÚqŒ©®èþ
‰ ’&yL%?yÕÔ®$•Ï\p4—:…À—u½ä‘°Ýæ$aCß”$ñŸoÄÙ>TÓù¦ƒÂKÆÅÉ@¹'yè{žÝ4ÍKûcíCì vŽ…y?]Ol©Ê|Íê¾Þ_;üÿ Ï¡Rçånÿ rÔ’[m²»˜¡Ž4ùDŽ›Ë) $’XxËëšY8¹i•†Á!‘þpJ•V^0
Œ±õèi²Å²en%·„†8eeù²Yˆ,S†=?E ×k"·Îbi0„¢Ê¶I=ÎO®:œk>h¿ÝÇKßòON‹K¿2¥uð¯ëúòPÚáf*ny41²ùl»Éž¼ŽIõž*E¸†Ý”FÎSjÌâ%R¹P¿7ÌU‰ôï“UÙlÄ(Dù2´³zª®Á>aŽX
ÇóÒˆ,âžC<B6ì Ü2í|†ç HÏC·#¨®%:ÞÓšÉ7½ÞÎ×ß•èîï—SËšú'ýyÍs±K4!Ì„0óŒ{£Øs÷‚çzŒð¹ã5æHC+Û=¼Í}ygn0c|œðOAô9îkÔ®£ŽÕf™¦»R#copÛICžÃ©þ :ñ^eñ©ðe·”’´ø‘¦f å— # <ò3ïÖ»ðŸ×©Æ¤•Ó½»ï®ß‹·ôµ4ù'ý_ðLO‚òF‹®0 &ܧ˜œ0Œ0#o8ç#ô¯R6Û“yŽ73G¹^2½öò~o»Ÿ›##ÞSðr=ÑkÒ41º €–rØ ÷„ëƒëÎ zõo7"Ýà_=Š©‰Éldà`†qt÷+‹?æxù©%m,ö{.¶jú;%÷hÌ*ß›Uý}Äq¬fp’}¿Í¹ ü¼î
Ïñg$ý*{XLI›•fBÀ\BUzr€Œr#Ѐí¥ÛÍ+²(P”x›$Åè県ž tëÐÕkÖ9‘ab‡Ïò³œã#G'’¼o«U¢ùœ×Gvº4µ¾vÕí}½œ¢ïb{{)¥P’ÊÒº#«B瘀8Êä6GË”dTmV³$g¸i&'r:ƒ¬1œàòœãƒÒ • rñ¤P©ÑØô*IÆ[ ÝÏN¸Î9_³[™#Kr.Fí¤í*IÁ?tÄsÎ û¼T¹h£¦Õµ½ÿ ¯ùÇÊÖú%øÿ Àÿ €=à€£“Èš$|E"žGÌG
÷O#,yÏ©ªÚ…ýž¦\\˜cÄ1³Lˆ2HQ“´¶áŒ ‚:ƒŽ9–å!Š–Í‚É¾F''‘÷yÇNüûãëpÆ|=~¢D•䵕vn2„sÓžGLë
IUP´Uíw®Ú-/mm£²×Ì–ìíeý]? øÑüa¨ÞZÏeki,q‰c10PTpAÜÀg%zSß°2Ĥ¡U]®ØŠÜçžI;€èpx?_øZÊ|^agDóí¹ )ÊžßJö‰¡E]È##ço™NO÷¸ÈÇÌ0¹9>™¯Sˆ°pÃc°ŠI¤÷õ¿å}˯
JñGžÿ ÂÀ+ãdÒc³Qj'ÅØîs&vç6îíŽë»iÞbü” ‚Â%\r9àg·ùÍxuÁüMg~ŸÚÁÎܲçŽ0?*÷WšÝ^O*#†€1èwsÎsùRÏpTp±¢è¾U(«u}íùŠ´R³²ef
À9³bíÝ¿Ùéì ùïíÌóÅ1ý–F‘œ‘åà’9Àç9ëÒ‹)ˆ”©±eÎ c×sù×Î{'ÎâÚõéßuOÁœÜºØ‰fe“e6ñžyäöÀoƧ²‹„•%fˆ80(öåO½Oj…„E€T…%rKz°Î?.;{šXÙ‡ŸeUÚd!üx9þtã%wO_øoòcM-
j–ÒHX_iK#*) ž@Ž{ôǽBd¹‰RÝn–ê0«7ˆìyÀ÷Í@¬Ì¢³³’ 9é÷½?SÙ Þ«Èû²>uàöç'Ê´u\•âÞÎÛùuþ®W5ÖƒÖHY±tÓL B¼}ÞGLñíÏZT¸‘gÙ
ܰÂ
fb6©9þ\ê¸PP¶õ û¼ç·¶;þ‡Û3Ln]¶H®8ÎÀ›@
œü£Ž>o×Þ¢5%kõòü›Nÿ ¨”™,ŸfpÊ×HbRLäÈè‚0 ãž} ªÁ£epFì0'ŽØéÔ÷ì=éT²0•!…Îzt9ç¾?”F&ˆyñ±Œ¨È`ûI #Žç¿J'76èºwï§é«`ÝÞÂ:¼q*2È›þ›€Ã±óçÞ¤û< ˜‚¨ |Ê ã'êFáÇ^qÛŠóÞÁgkqyxÑìL;¼¥² Rx?‡¯Y7PŽwnù¶†û¾Ü·.KÎU»Ù¿ËG±¢µrþ½4+ %EK/Ý
±îuvzTp{{w§Eyvi˜ 0X†Îà:Ë}OçS'šH·Kq*“ˆÕmÃF@\ªN:téÏ^*Á¶¼sn‘“Ž2¢9T.½„\ýò@>˜7NFïNRÓ·wèôßEÕua'¬[þ¾cö¡ÌOæ¦âÅŠ². Ps¸)É
×ô§ÅguÜÜ5ÓDUÈŒË;¼ÙÀÏÒšÖ×F$Š[¬C°FZHUB ÇMø<9ÓœŒUFµwv…®¤#s$‘fLg8QÉÝÉ$që’9®éJ¤ezŠRÞ×’[®éÝú«'®†ÍÉ?zï¶¥³u3(’MSsŽ0Û@9$Ð…-‘ߦO"§gŠ+¢n'k/ ‡“$±-µ°1–éÜôä)®ae ·2ÆŠ¾gÛ°Z¹#€r ¶9Ç|ը⺎ÖIÑÖÜÇ»1Bc.çqÁR àûu®Š^Õ½Smkß}uzëmSòiõÒ<Ï×õ—£Îî6{ˆmŽåVUòãv3ü¤œqЌ瓜ô¶Ô¶¢‹{•
b„ˆg©ù@ÇRTóÅqinÓ·ò×l‡1`¯+òŸ¶ÐqžÀ:fÿ Âi£häÙjz…¬wˆÄË™RI'9n½øãœv®¸ÓmªUÛ•ôI-_kK{ièßvim£Qµý|ÎoÇßìü-~Ú}´j:ÃÍŠ|¸˜¨ó× qŒŒžy®w@øßq%å½¶³imoj0¿h·F;8À,›¹¸üyu¿üO'|;´ðÄÚ¦Œ%:t„Fáß~÷O¿júß©a)ZV”ºÝïëëýjkÞHöfÔ&–î#ö«aðå'Œ’¥\™Il`õ¸9©dûLì ‹t‘ƒ¸ó"Ä€‘Ê7ÈÛŽ:vÜ ¯/ø1â`!»Ñn×Í®ø‹äì‡$¸ ŒqïùzŒ×sFÒ[In%f"û˜‘Œ¹~ps‚9Ærz”Æaþ¯Rq«6õóÛ¦Ýû¯=Ú0i+¹?ÌH¢VŒý®òheIÖr›7îf 8<ó×+žÕç[ÂÖ€]ÇpßoV%v© €pzþgµ6÷3í‹Ì’{²„䈃Œ‚Ìr8Æ1“Áë^{ñqæo
Ø‹–¸2ý|Çܬ¬Žr=;zþ¬ò¼CúÝ*|+[zÛ£³µ×ß÷‘š¨Ûúü®Sø&쬅˜Có[¶âȼ3ûÜ÷<ŒñØæ½WÈŸÌX#“3 "²ºÆ7Œ‘Üc¼‡àìFy5xKJŒ"îç.r@ï×Þ½Ä-ÿ þ“}ª}’*Þ!,Fm¸Î@†9b?1W{Yæ3„`Ú¼VõŠÚÛ_kùöG.mhÎñ ôíhí§Ô$.ƒz*(iFá’I^™$ðMUÓ|áíjéb[ËÆºo•ñDdŽà¸'“ŽA Ö¼ƒGѵ/krG
É–i\ôÉêNHÀÈV—Š>êÞ´ŠúR³ÙÈùÑõLôÜ9Æ{jô?°°Kýš¥WíZ¿V—m6·E}{X~Æ?
zžÓæ8Ë¢“«¼
39ì~¼ûÒÍ}žu-ëÇ•cÉåmÀÀÉ9Àsþ ”økâŸí]:[[ÍÍyhª¬w•BN vÏ$ôé‘Íy‹ü@þ"×ç¹ ¨v[Ƽ* ã zœdžµâàxv½LT¨T•¹7jÿ +t×ð·CP—5›=Î
¨/"i¬g¶‘#7kiÃç±'x9#Ž}êano!òKD‘ílï”('¿SÔð?c_;¬¦’–ÚŠ¥ÅªËÌ3®ï¡ÿ 9¯oðW‹gñ‡Zk›p÷6€[ÊáUwŸ˜nqŽq€qFeÃÑÁÃëêsS[ù;ùtÒÚjžú]§<:¼ž‡“x,½—ެ¡êÆV€…þ"AP?ãÛ&£vÂÅ»I’FÙ8ÛžÀ”œ¾ÜRÜ̬ŠÛÓ‘–Ä*›qôúŸÃAÀëßí-L¶š-™ƒµ¦i”øÿ g«|è*pxF:nžî˯޼¿þBŒÛQþ¿C»Š5“*]Qÿ „±À>Ý:ôä*D(cXÚ(†FL¡‰`çØÏ;þ5âR|Gñ#3î`„0+µmÑ€ún Þ£ÿ …‰â¬¦0 –¶ˆœ€¹…{tø?ʯ(_çþ_Š5XY[¡Ù|Q¿ú
µŠ2︛sO* Бÿ ×â°<+à›MkÂ÷š…ij
·Ü–ˆ«ò‚?ˆœúäc½øåunû]¹Iïåè› ç ¯[ð&©¥Ýxn;6>}²’'`IË0ÁèN}zö5éâ©âr\¢0¥ñs^Ml¿«%®ýM$¥F•–ç‘Øj÷Ze¦£k
2¥ô"FqÀ`„~5Ùü+Ò¤—QºÕ†GÙ—Ë‹ çqä°=¶ÏûÔÍcá¶¡/ˆ¤[ý†iK ™°"ó•Æp;`t¯MÑt}+@²¶Óí·Ídy’3mÕË‘’zc€0 íyÎq„ž ¬4×5[_]Rë{]ì¬UZ±p÷^åØÞÈ[©&OúÝÛ‚‚s÷zžIïßó btÎΪ\ya¾U;C¤t*IÎFF3Џ™c
1žYD…U° êÄàõë\oŒ¼a ‡c[[GŽãP‘7 â znÈ>Ãü3ñ˜,=lUENŒäô¾ÚÀÓ[_ð9 œ´JçMy©E¢Àí}x,bpAó¦üdcûŒW9?Å[Há$¿¹pÄ™#^9O88©zO=«Ë!µÖüY¨³ªÍy9ûÒ1 úôÚ»M?àô÷«ÞëÖ–ÙMÌ#C&ßnJ“Üp#Ђ~²†G–àíekϵío»_žŸuΨQ„t“ÔÛ²øáû›´W6»Øoy FQÎr $Óõìk¬„‹ïÞÚ¼sÆíòÉ67\míÎyF¯ð¯TÓã’K;ë[ð·ld«7üyíšÉ𯊵 êáeYžÏq[«&vMÀðßFà}p3ÅgW‡°8ØßVín›þšõ³¹/ ü,÷ií|’‘´R,®ŠÉ‡W“Ž1ØöëÓ¾xžÖÞ¹xÞݬXZGù\’vŒž˜ÆsØúÓïí&ÒÒ{]Qž9£Ê¡ù·ÄÀ»¶áHäž™5—ìö« -&ù¤U<±ÉÆA>½ý+æg
jžö륢þNÛ=÷JÖÛfdÔ õýËúû‹ÓØB²¬fInZ8wÌÉЮ~aƒÎ=3ìx‚+/¶äÁlŠ‚?™Æü#8-œ\pqTZXtè%»»&ÚÝ#´ŠðÜžã§Í’¼{p·ß{m>ÞycP¨’¼¢0ú(Rƒë^Ž ñó¼(»y%m´ÕÙ}ÊûékB1¨þÑ®,#Q)ó‡o1T©ÜÃ*Ž‹‚yö<b‰4×H€“ìÐ.
¤²9ÌŠ>„Žãøgšñ
¯Š~)¸ßå\ÛÛoBŒa·L²œg$‚Iã¯ZÈ—Æ~%”äë—È8â)Œcƒ‘Âàu9¯b%)ÞS²¿Ïïÿ 4Öºù}Z/[H%¤vÉ#Ì’x§†b
© ³´tÜ{gn=iï%õªÇç]ܧ—!åw„SÓp ·VÈÏ¡?5Âcâb¥_ĤŠz¬—nàþÖΟñKÄöJé=ÌWèêT‹¸÷qÎჟ•q’zWUN«N/ØO^Ÿe|í¾©k{üõ4öV^ïù~G¹êzÂèº|·÷×[’Þ31†rpjg·n
Æ0Ý}kåË‹‰nîe¹ËÍ+™ÏVbrOç]'‰¼o®xÎh`¹Ç*±ÙÚ!T$d/$žN>¼WqᯅZ9ÑÒO\ÜÛê1o&,-z ~^NCgNÕéá)ÒÊ©7‰¨¯'Õþ¯þ_¿Ehîþóâ €ï¬uÛûý*ÎK9ä.â-öv<²‘×h$àãúW%ö¯~«g-ÕõÀàG~>Zú¾Iš+(šM³ Û#9äl%ðc¬ ûÝ xÖKG´x®|¸¤Ï™O:Ê8Ã’qÉcÔä‚yÇNJyËŒTj¥&µOmztjÿ ?KëaµÔù¯áýóXøãLeb¾tžAÇû`¨êGBAõ¾•:g˜’ù·,þhÀ`¬qÜ` e·~+å[±ý“âYÄjWì—µHé±ø?Nõô>½âX<5 Ç©ÏѼM¶8cܪXŽÉ^r?¼IróÈS•ZmÇ›™5»òÚÚ7ïu«&|·÷•Ά
>[©ÞXHeS$Œyà€ ÷ù²:ò2|óãDf? Z¼PD¶ÓßC(xÆ0|©ßR;ôMsÿ µ´ÔVi¬,͹›Ìxâi˜`¹,GAéÇlV§ÄýF×Yø§ê–‘:Ã=ò2³9n±ÉžØÏ@yÎWžæ±Ãàe„ÄÒN ]ïòêìú_Go'¦ŽÑ’_×õЯðR66þ!›ÑÄ gFMÙ— äžäqôÈ;ÿ eX<#%»Aö‰ãR¤ Í”Ž¹È G&¹Ÿƒ&á?¶Zˆ±keRè Kãnz·ãŠÕøÄÒÂ9j%@®×q±ÜŒý[õ-É$uíè&¤¶9zÇï·Oøï®ÄJKšÖìdü"µˆ[jײÎc;ã…B(g<9nàȯG½µŸPÓ.´Éfâ¼FŽP
31 ‘ÏR}<3šä~
Ã2xVöî Dr
Ç\›}Ý#S÷ÈÀëŽHÆI®à\OçKuäI¹†ó(”—GWî ñ³¹¸æ2¨›‹ºÚû%¾ýÖ_3ºNú¯ëúì|ÕÅÖ‰}ylM’ZËîTÿ á[ðÐñ/ˆ9Àû
¸ón3 Mòd‘÷ döª^.Êñް›BâîNp>cëÏçÍzïÃôÏ
YÍ%ª¬·ãÏ-*9ÜÂãhéŒc¾dÈêú¼Ë,. VŠ÷çeÿ n/¡¼äãõâ=‹xGQKx”|¹bÌŠD@2Œ 8'Ž àúƒŽ+áDÒ&¡¨"Œ§–Žr22 Ç·s]ŸÄ‹«ð%ÚÄ<¹ä’(×{e›HÀqÁç©Ç½`üŽÚõK饚9ƒÄ±€<–úƒú~ çðñO#Í%iKKlµ¦¾F)'Iê¬Î+Ç(`ñ¾£œdÈ’`™ºcßéé^ÿ i¸”Û\ý¡æhÔB«aq¸}ãÀÆ:ÜWƒ|FÛÿ BŒÇÀeaŸ-sÊ€:úW½ÜÝÜ<%$µ†%CóDªÀí%IÈÏʤ…ôäñÞŒ÷‘a0“ôŽÚë¤nŸoW÷0«e¶y'Å»aΗ2r’# Û°A^ý9ÉQÔõ=ù5¬£Öü.(Þ’M$~V«=éSÄFN½®©ÔWô»ÿ þHžkR‹ìÏ+µµžöê;khÚI¤m¨‹Ôš–âÖçJ¾_Z•’6a”Èô> ÕÉaÕ<%®£2n bQŠå\tÈõUÿ ø»þ‹k15‚ÃuCL$ݹp P1=Oøýs¯^u éEJ”–éêŸê½5ýzy›jÛ³á›Ûkÿ ÚOcn±ÛÏîW;boºz{ãžüVÆ¡a£a5½äÎÂks¸J@?1è¿{$ä‘=k”øsÖ^nŒ¦)ÝåXÃíùN1ØõÚOJë–xF÷h¸ Œ"Ž?x䜚ü³ì¨c*Fœ¯i;7~ñí׫Ðó¥Ë»3Ãü púw ‰°<Á%»ñž ÿ P+Û^ ¾Ye£ŽCÄŒ„/>˜>•á¶Ìm~&&À>M[hÈÈÿ [Ž•íd…RO@3^Ç(ʽ*¶ÖQZyßþ
1Vº}Ñç?¼O4Rh6R€ª£í¡ûÙ
a‚3ß·Õ
ü=mRÍ/µ9¤‚0ÑC¼Iè:cŽsÛ¾™x£ÆÐ¬ªÍöˢ샒W$•€Å{¨ÀPG
ÀÀàŸZìÍ1RÉ0´ðxEË9+Éÿ ^rEÕ—±Š„70l¼áË@û.' ¼¹Žz€N3úUÉ<3á×*?²¬‚ä†"Ùc=p íÛ'¡ª1ñ"økJ†HÒ'»Ÿ+
oÏN¬Ã9 dÙãÜדÏâÍ~æc+j·Jzâ7(£ðW]•æ™?nê´º6åwéåç÷N•ZŠíž›¬|?Ðõ?Ñ-E…®³ÇV$~X¯/…õ x‘LˆÑÜÚÈ7¦pzãÜüë½ðÄ^õtÝYËÍ7ÉÖÕ8ÏUe# #€r=sU¾/é’E§jRC4mxNÝ´9†íuá»›V‘
ZI€×cr1Ÿpzsøf»¨åV‹ìû`qËLÊIã?\~¼³áËC©êhªOîO»‘ÃmçÛçút×¢x“Z}?Üê#b-¤X7õÄò gž zzbº3œm*qvs·M=íúéw}¿&Úª°^Ö×µÏ(ø‡â†Öµƒenñý†×åQáYûœ÷ÇLœôÎNk¡ð‡¼/µ¸n0æÉ0¬ƒ‚üîÉÆvŒw®Sáö”š¯‹-üÕVŠØÙ[$`(9cqƒÔ_@BëqûÙ`Ýæ0;79È?w<ó |ÙÜkßÌ1±Ëã¿ìÒ»ðlìï«ÓnªèèrP´NÏš&ŽéöÙ¸÷æ°~-_O'‰`°!RÚÚÝ%]Ø%þbß1'¿ÿ XÕáOöÎŒ·‹¬+Åæ*ÛÛ™0¤ƒOÍÔ`u¯¦ÂaèÐÃÓ«‹¨Ô¥µœ¿¯ÉyÅÙ.oÔôŸ Úx&(STðݽ¦õ] ’ÒNóÁäÈùr3í·žÚ[™ƒ¼veÈ÷ÞIõÎGlqÎ=M|«gsªxÅI6
]Z·Îªä,¨zŒŽÄ~#ØŠúFñiÉqc©éÐD>S딑 GñŽ1éÐ^+
Ëi;Ô„µVÕú»i¯ÈÒ-ZÍ]òܘ®ì`bÛÙ¥_/y(@÷qÐúg Ô÷W0.Ø›
6Ò© r>QƒŒ0+Èîzb¨É+I0TbNñ"$~)ÕÒ6Þ‹{0VÆ27œWWñcÄcX×íôûyKZéðªc'iQ¿¯LaWŠŸS\·Š“źʸ…ôÙÂí|öÀÇåV|!¤ÂGâÛ[[’ï
3OrÙËPY¹=Î1õ5öåTžÑè Ú64/üö?Zëžk}¬¶éàoá¾á}3“ü]8Éæ¿´n²Žš_6¾pœ)2?úWÓÚ¥¾¨iWúdŽq{*ª1rXŒd…m»‰äcô¯–dâ•ã‘Jº¬§¨#¨®§,df«8ÉÅßN¾hˆ;îÓ=7áùpën®É 6ûJžO2^œÐò JÖø¥²ã›Ò6Ü·‰!wbÍ‚¬O©»õ¬ÿ ƒP=Ä:â¤-&ÙŽ
`È9 r9íϧzë> XÅ7ƒ5X–krÑ¢L7€ìw}ÑŸNHëŒüþ:2†á¼+u·á÷N/Û'Ðç~ߘô«ëh!ónRéeQ´6QÛÿ èEwëÅÒ|¸Yqó1uêyùzð8 ƒŠù¦Ò;¹ä6öi<'ü³„[ÃZhu½ ùÍ¡g‚>r¯×ŠîÌx}bñ2“k꣧oø~›hTèóËWò4|ki"xßQ˜Ï6øÀLnß‚0 ¹Æ{±–¶Öe#¨27È@^Ìß.1N¾œyç€õ†ñeé·Õã†çQ°€=Ì©ºB€Ø8<‚ÃSõ®ùcc>×Ú .Fr:žÝGæ=kÁâ,^!Fž
¬,àµ}%¶«îõ¹†"r²ƒGœüYÕd?aÑÃY®49PyU ÷þ!žxÅm|/‚ãNð˜¼PcûTÒ,¹/Ý=FkÏ|u¨¶«âë…{¤m¢]Û¾ïP>®XãÞ½iÓÁ¾
‰'¬–6ß¼(„ï— í!úÙäzôë^–:œ¨å|,_¿&š×]uÓѵÛô4’j”bž§x‘Æ©ã›á,‚[Ô
ÎÞ= ŒËæ ÀùYÁ?ŽïÚ¼?ÁªxºÕÛ,°1¸‘¿ÝäãØ¯v…@¤åq½ºã œàûââ·z8Xýˆþz~—û»™âµj=Ž
â~ãáh@'h¼F#·Üp?ŸëQü-løvépx»cŸø…lxâÃûG·‰¶ø”L£©%y?¦úõÆü-Õ¶¥y`Òl7>q’2üA?•F}c‡jB:¸Jÿ +§¹¿¸Q÷°ív=VÑìu[Qml%R7a×IèTõéŽx¬
?†š7
1†îã-ˆã’L¡lŽ0OÓ=ÅuˆpÇ•¼3ÛùÒ¶W/!|’wŽw^qÔ×ÏaóM8Q¨ãÑ?ëï0IEhÄa¸X•`a
?!ÐñùQ!Rä žqŽžÝO`I0ÿ J“y|ñ!Îã@99>þ8–+éáu…!ù—ä
ʰ<÷6’I®z
ÅS„¾)Zþ_Öýµ×ËPåOwø÷þ*üïænÖùmØÝûþ¹=>¦½öî×Jh]¼ç&@§nTŒ6ITÀõ^Fxð7Å3!Ö·aÛ$þÿ ¹ã5îIo:ȪmËY[’8ÇӾlj*òû¢¥xõ¾¼ú•åk+\ð¯ HÚoŽl•Ûk,¯ ç²²cõÅ{²Z\
´ìQ åpzŽ3Ôð}ÿ Jð¯XO¡øÎé€hÙ¥ûLdŒ`““ù6Gá^ÃáÝ^Ë[Ñb¾YåŒÊ»dŽ4†2§,;ÿ CQÄ´¾°¨c–±”mºV{«ßÕýÄW\ÖŸ‘çŸ,çMRÆí“l-ƒn~ë©ÉÈê Ü?#Ž•¹ðãSÒ¥ÐWNíà½;ãž)™ÎSÈ9cóLj뵿ūiÍk¨ió¶X‚7÷ƒ€yãnyÏŽëÞ Öt`×À×V's$È9Ú:ä{wÆEk€«†Çàc—â$éÎ.éí~Ýëk}ÅAÆpörÑ¢‡Šl¡ÑüSs‹¨‰IÄóÀ×wñ&eºðf™pŒÆ9gŽTø£lñëÀçŽ NkÊUK0U’p ï^¡ãÈ¥´ø{£ÙHp`’ØåbqÏ©äó^Æ:
Ž' ÊóM«õz+ß×ó5Ÿ»('¹ð¦C„$˜Å¢_ºÈI?»^äã'ñêzž+ë€ñ-½»´}¡Ë*õ?.xÇ^1ŽMyǸ&“—L–îëöâ7…' bqéÎGé]˪â1$o²¸R8Ã`.q€}sÖ¾C98cêÆÞíïóòvÓòùœÕfÔÚéýuèÖ·Ú
Å‚_¤³ÜۺƑß”àרý:׃xPþÅÕî-/üØmnQìïGΊÙRqê=>¢½õnæ·r!—h`+’;ò3È<“Û©éšóŸx*÷V¹¸×tÈiˆßwiÔÿ |cŒñÏ®3ֽ̰‰Ë Qr©ö½®¼ÛoÑÙZÅÑ«O൯ýw8;k›ÿ x†;ˆJa;‘º9÷÷R+¡ñgŽí|Iáë{ôáo2ʲ9 029ÉÏLí\‰¿¸Ÿb˜ "Bv$£ßiê>=ªª©f
’N ëí>¡NXW~5×úíø\‰»½Ï^ø(—wÖú¥¤2íŽÞXæÁ$°eÈ888^nÝë²ñÝÔ^ ÖÚ9Q~Ëå7ï
DC¶ÑµƒsËÇè9®Wáþƒ6‡£´·°2\Ý:ÈÑ?(#¨'$õèGJ¥ñW\ÿ ‰E¶—¸™g˜ÌÀ¹;Pv ú±ÎNs·ëŸ’–"Ž/:té+ûË]öJöÓM»ëø˜*‘•^Uý—êd|‰åñMæÔÝ‹23å™6æHùÛ‚ëüñ^…ñ1¢oêûÑEØ.õ7*ÅHtÎp{g<·Á«+¸c¿¿pÓ¾Æby=8É_ÄsÆk¬ñB\jÞÔì••Ë[9Píb‹Bヅ =93§ð§LšÛáÖšÆæXÌÞdÛP.0\ãïÛ0?™úJ¸™Ë
”•œº+=<µI£¦í¯õêt¬d‹T¬P=ËFêT>ÍØØ@Ï9<÷AQÌ×»Õ¡xùk",JÎæù±Éç$œŽŸZWH®¯"·UÌQ ’ÙÈ]ÅXg<ã
ߨg3-Üqe€0¢¨*Œ$܃
’Sû 8㎼_/e'+Ï–-èÓ¶¶Õíß[·ÙÙ½îì—¼sk%§µxä‰â-pÒeÆCrú
ôσžû=”šÅô(QW‚Õd\ƒæ. \àö¹¯F½°³½0M>‘gr÷q+œ¶NïºHO— ¤ ܥݔn·J|ÆP6Kµc=Isó}Ò çGš)a=—#vK›åoK§ßóÙ¤¶¿õú…ÄRÚ[ËsöÙ¼Ë•Ë ópw®qœŒ·Ø
ùÇâ‹ý‡ãKèS&ÞvûDAù‘É9ŒîqÅ}
$SnIV[]Ñ´Ó}ØÜ¾A Ü|½kÅþÓ|EMuR¼.I¼¶däò‚ÃkÆ}ðy¹vciUœZ…Õõ»z¾÷¿n¦*j-É/àœHã\y5 Û ß™ó0—äŸnzôã#Ô¯,†¥ÚeÔ÷ÜÅ´„“'c…<íÝ€<·SŠ¥k§Ã¢éÆÆÙna‚8–=«Êª[Ÿ™°pNî02z“ÔÙ–K8.È’Þî(vƒ2®@ äÈûãçžxäÇf¯ˆu¹yUÕîýWšÙ|›ëÒ%Q^í[æ|éo5ZY•^{96ˆY‚§v*x>âº_|U¹Ö´©tûMÒÂ9PÇ#«£#€ éÉñ‘ƒÍz/‰´-į¹°dd,Б›p03ƒœ{ç9=+
Ûᧇ¬¦[‡‚ê婺¸#±ß=³ý¿•Õµjñ½HÙh›Û[§ÚýÊöô÷{˜?ô÷·Ô.u©–_%còcAÀ˜’
}0x9Î>žñÇáÍ9,ahï¦Ì2òÓ ñÛAäry$V²Nð
]=$Ž
‚#Ù‚1ƒƒødõMax‡ÂÖ^!±KkÛ‘
«“Çó²FN8+ëÎ{Ò¼oí§[«ÕMRoËeç×[_m/¦¦k.kôgŽxsSÓ´ý`êzªÜÜKo‰cPC9ÎY‰#§^üý9¹âïÞx£Ë·Ú`±‰‹¤;³–=ÏaôÕAð‚÷kêÁNBéÎælcõö®£Fð†ô2Ò¬]ßÂK$ÓÜ®•”/ÊHàã$ä¸÷ëf¹Oµúâ“”’²øè´µþöjçNü÷üÌ¿ xNïFÒd»¼·h®îT9ŽAµÖ>qÁçÔœtïÒ»\ȶÎîcÞäîó3¶@#ÉIÎ ÔñW.<´’¥–ÑÑ€ÕšA‚ ;†qÓë‚2q
ÒÂó$# Çí‡
!Ë}Õ9ÈÎÑÉã=;ŒÇÎuñ+ÉûÏ¥öíeÙ+$úíÜ娯'+êZH4ƒq¶FV‹gïŒ208ÆÌ)íб>M|÷âÍã¾"iì‹¥£Jd´™OÝç;sÈúr+ÜäˆË)DŒ¥šF°*3Õ”d{zÔwºQ¿·UžÉf†~>I+ŒqÔ`ð3œ“Ü×f]œTÁÔn4“ƒø’Ýßõ_«*5šzGCÊ,þ+ê1ò÷O¶¸cœºb2yÇ;cùÕ£ñh¬›áÑŠr¤ÝäNBk¥—á—†gxšX/쑘hŸ*Tçn =ûã¦2|(ð¿e·ºÖ$
ýìŸ!'åΰyîî+×öœ=Y:²¦ÓÞ×iü’—ü
-BK™£˜›âÆ¡&véðõ-ûÉY¹=Onj¹ø¯¯yf4·±T Pó`çœ7={×mÃ/¢˜ZÚòK…G½¥b„’G AãÜœ*í¯Ã¿ IoæI¦NU8‘RwÈã;·€ Û×ëÒ”1Y
•£E»ÿ Oyto¢<£Áö·šï,䉧ûA¼sû»Nò}¹üE{ÜÖªò1’õÞr0â}ÎØ#>à/8ïéÎ~—áÍ#ñÎlí§³2f'h”?C÷YËdð:qëõÓ·‚ïeÄ©
ÔÈØÜRL+žAÎ3¼g=åšó³Œt3
ÑQ¦ùRÙßE®¼±w_;þhš’Sirÿ ^ˆã¼iੇ|RòO„m°J/“$·l“ ÇÓ¿ÿ [ÑŠÆ“„†Õø>cFÆ6Ø1ƒ– àz7Ldòxäüwá‹ÝAXùO•Úý’é®ähm •NÀ±ÌTÈç
ƒ‘I$pGž:‚ÄbêW¢®œ´|¦nÍ>¶ÖÏ¢§ÎÜ¢ºö¹•%ÄqL^öÛKpNA<ã¡ …î==ª¸óffËF‡yÌcÉ ©ç$ð=ñÏYþÊ’Ú]—¥‚¬‚eDïÎH>Ÿ_ÌTP™a‰ch['çÆÜò7a‡?w°Ïn§âÎ5”’¨¹uÚÛ|´ÓÓc§{O—ü1•ªxsÃZ…ÊÏy¡Ã3¸Ë2Èé» ‘ƒÎ äžÜðA§cáOéúÛ4ý5-fŒï„ù¬ûô.Ç Üsž•Ò¾•wo<¶Ÿ"¬¡º|£
î2sÇ¡éE²ÉFѱrU°dÜ6œ¨ mc†Îxë׺Þ'0²¡Rr„{j¾í·è›µ÷)º·å–‹î2|I®Y¼ºÍË·–ÃÆàã£'óÆxƒOÆÞ&>\lóÌxP Xc¸ì Sþ5§qà/ê>#žÞW¸if$\3 ® ûÄ“ùŽÕê¾ð<Ó‹H¶óÏ" å·( á‘€:ã†8Ï=+ꨬUA×ÃËÚT’ÑÞöù¥¢]{»ms¥F0\ÑÕ—ô}&ÛB´ƒOŽÚ+›xíÄÀ1
,v± žIëíZ0ǧ™3í2®0ทp9öÝÔž)ÓZËoq/Ú“‘L ²ŒmùŽï‘Ó9§[Û#Ä‘\ÞB¬Çs [;à à«g‚2ôòªœÝV§»·¯/[uó½õÛï¾
/šÍ}öüÿ «=x»HŸÂÞ.™ ÌQùŸh´‘#a$‚'¡u<Š›Æ>2>+ƒLSiöwµFó1!eg`£åœ ÷ëÛö}Á¿ÛVÙêv $¬ƒ|,s÷z€ð΃¨x÷ÅD\ÜŒÞmåÔ„ ˆ o| :{ÇÓ¶–òÁn!´0Ål€, ƒ ( ÛŒŒc¶rsšæ,4‹MÛOH!@¢ ÇŽ„`å²9ÝÃw;AÍt0®¤¡…¯ØÄ.Àìí´ƒ‘ßñ5Í,Óëu-ÈÔc¢KÃÓ£òÖ̺U.õL¯0…%2È—"~x
‚[`có±nHàŽyàö™¥keˆìŒÛFç{(Ø©†`Jã#Žwg<“:ÚÉ;M
^\yhûX‡vB·÷zrF?§BÊÔ/s<ÐÈB)Û± ·ÍÔwç5Âã:så§e{mѤï«Òíh—]Wm4âí¿ùþW4bC3¶ª¾Ùr$pw`àädzt!yŠI„hÂîàM)!edŒm'æ>Ç?wzºKìcŒ´¯Ìq6fp$)ãw¡éUl`µ»ARAˆÝÕgr:äŒgƒéé[Ôö±”iYs5Ýï«ÙG—K=þF’æMG«óÿ `ŠKɦuOQ!ÕåŒ/ÎGÞ`@ËqÕzdõâ«Ê/Ö(ƒK´%ŽbMüåÜŸö—>¤óŒŒV‘°„I¢Yž#™¥ùÏÊ@8
œgqöö5ª4vד[¬(q cò¨À!FGaÁõõ¯?§†¥ÏU½í¿WªZ$úyú½Žz×§Éþ?>Ã×È•6°{™™ŽÙ.$`ÎUœ…çè ' ¤r$1Ø(y7 ðV<ž:È ÁÎMw¾Â'Øb§øxb7gãО½óÉÊë²,i„Fȹ£§8ãä½k¹¥¦ê/ç{ïê驪2œ/«ü?¯Ô›ìñÜ$þeýœRIåŒg9Ác’zrrNO bÚi¢
ѺË/$,“ª¯Ýä;Œ× ´<ÛÑn³IvŸb™¥ nm–ÄŸ—nÝÀãŽ3ëÍG,.öó³˜Ù£¹uÊÌrŠ[<±!@Æ:c9ÅZh
ì’M5ÄìÌ-‚¼ëÉùqŽGì9¬á ;¨A-ž—évþÖ–^ON·Ô”ŸEý}ú×PO&e[]ÒG¸˜Ûp ƒÃà/Ë·8ûÀ€1ž@¿ÚB*²¼ñì8@p™8Q“žÆH'8«I-%¸‚
F»“åó6°Uù|¶Ú¸ã ò^Äw¥ŠÖK–1ÜÝK,Žddlí²0PÀü“×ükG…¯U«·¶–´w¶ŽÍ¾©yÞú[Zös•¯Á[™6°
¨¼ÉVæq·,#
ìãï‘×8îry®A››¨,ãc66»Ë´ã'æÉù?t}¢æH--Òá"›|ˆ¬[í 7¶ö#¸9«––‹$,+Ëqœ\Êøc€yê^ݸÄa°«™B-9%«×®‹V´w~vÜTéꢷþ¼ˆ%·¹• ’[xç•÷2gØS?6åÀÚ õ9É#š@÷bT¸º²C*3Bá¤òÎA9 =úU§Ó"2Ãlá0iÝIc‚2Î@%öç94ùô»'»HÄ¥Ô¾@à Tp£šíx:úÊ:5eºßMý×wµ›Ó_+šº3Ýyvÿ "ºÇ<ÂI>Õ1G·Ë«È«É# àÈÇ øp Jv·šæDûE¿›†Ë’NFr2qŸ½ÇAÜšu•´éí#Ħ8£2”Ú2Ã/€[ÎTr;qŠz*ý’Îþ(≠;¡TÆâ›;ºÿ àçœk‘Þ8¾Uª¾íé{^×IZéwÓkXÉûÑZo¯_øo×È¡¬ â–ÞR§2„‚Àœü½ùç® SVa†Âüª¼±D‘ŒísŸàä|ä2 æ[‹z”¯s{wn„ÆmáóCO+†GO8Ïeçåº`¯^¼ðG5f{Xžä,k‰<á y™¥voÆ éÛõëI=œ1‹éíÔÀÑ)R#;AÂncäŽ:tÏ#¶TkB.0Œ-ÖÞZÛgumß}fÎJÉ+#2êÔP£žùÈÅi¢%œ3P*Yƒò‚A쓎2r:ƒÐúñiRUQq‰H9!”={~¼“JŽV¥»×²m.ÛߺiYl¾òk˜gL³·rT•
’…wHÁ6ä`–Î3ùÌ4Øe³†&òL‘•%clyîAÂäà0 žüç$[3uŘpNOÀÉ=† cï{rYK
ååä~FÁ
•a»"Lär1Ó¯2Äõæ<™C•.fÕ»è¥~½-¿g½Â4¡{[ør¨¶·Žõäx¥’l®qpwÇ»8ärF \cޏܯÓ-g‚yciÏÀ¾rÎwèØÈ#o°Á9ã5¢šfÔxÞæfGusÏÌJÿ µ×œ/LtãÅT7²¶w,l
ɳ;”eúà·¨çîŒsÜgTÃS¦^ '~‹®›¯+k÷ZÖd©Æ*Ó[Ü«%Œk0ŽXƒ”$k#Ȩ P2bv‘ƒŸáÇ™ÆÕb)m$É*8óLE‘8'–ÜN Úyàúô+{uº±I'wvš4fÜr íì½=úuú
sFlìV$‘ö†HÑù€$§ õ=½¸«Ž]
:Ž+•¦ïmRþ½l´îÊT#nkiøÿ _ðÆT¶7Ò½ºÒ£Î¸d\ã8=yãŽÜäR{x]ZâÚé#¸r²#»ÎHÆ6õ ç® ÎFkr;sºÄ.&;só±Ç9êH÷ýSšÕtÐU¢-n Ì| vqœ„{gŒt§S.P‹’މ_[;m¥ÞZýRûÂX{+¥úü¼ú•-àÓ7!„G"“´‹žƒnrYXã¸îp éœ!ÓoPÌtÑ (‰Þ¹é€sÓ#GLçÕšÑnJý¡!‘Tä#“ß?îýp}xÇ‚I¥Õn#·¸–y'qó@r[ Êô÷<ÔWÃÓ¢áN¥4Ô’I&ݼ¬¬¼ÞºvéÆ
FQV~_ÒüJÖÚt¥¦Xá3BÄP^%ÈÎW-×c¡ú©¤·Iþèk¥š?–UQåIR[’O 5x\ÉhÆI¶K4«2ùªŠŒ<¼óœçØ`u«‚Í.VHä€ Ëgfx''9ÆI#±®Z8
sISºku¢ßÞ]úk»Jößl¡B.Ü»ÿ MWe
°·Ž%šêɆ¼»Âù³´œ O¿cÐÓÄh©"ÛÜÏ.ÖV’3nüÄmnq[ŒòznšÖ>J¬òˆæ…qýØP Ž:ä7^0yëWšÍ_79äoaÈ °#q0{ää×mœy”R{vÒÞ¶ÚÏe¥“ÚÆÐ¥Ì®—õýjR •íç›Ìb„+JyÜØÙ•Ç]¿Ôd þËOL²”9-Œ—õÃc'æÝלçÚ²ìejP“½
âù°¨†ðqòädЃÉäÖÜj÷PÇp“ÍšŠå«‘î
<iWNsmª»¶vÓz5»ûì:Rs\Ðßôû×uÔÿÙ